はてなキーワード: textとは
音楽生成サービス、MubertのAPIを利用したMubert-Text-to-Musicを使ってみたが、かなり色んなパターンの音楽を生成することが可能だった。
現時点では、お絵描きAIと違って細かい指定による調整はできない。入力した言葉を音楽ジャンルのタグに置き換え、その音楽ジャンルを構成するサウンド(事前に登録されているサウンドファイル?)を組み合わせて曲が生成されているようだ。
あと一歩進み、部品であるサウンド自体の生成が違和感なく行われるようになれば、細かい指定による調整が可能になるだろう。
特にデジタルなサウンドによって構成される音楽、歌声やアコースティックな楽器音を含まない音楽は、自動生成の一歩手前の状態に来ているらしい。
AUTOMATIC1111のgithubのやり取り、リクエスト元のforkの説明なども見たがわからん。
取り敢えず出来てることは、「laion_7plus」入れて、「Aesthetic weight」「Aesthetic steps」を振ると、出力は変わる。
bilibiliの記事を参考にすると、「Aesthetic weight」を0.2以上より上げていくと、プロンプトとは異なる絵が出てくるということで、やってみたら変わった。
https://www.bilibili.com/read/cv19102552?from=articleDetail
「Aesthetic steps」は効いてるのかよくわからん。
コマンドプロンプトのログを見てると、画像生成前に実行しているらしく、「Aesthetic steps」×4回処理が追加入るので、1枚あたりの生成時間が長くなる。
画像生成時よりit/sが大きいので、最大の50にしてもすぐではあるのだが、効いてるかわからん。
より謎なのは、
で、「Aesthetic text for imgs」になんのテキストを入れるのかさっぱりだ。
.ptファイルを自分で作ることも出来るらしく、ソースとなる画像のフォルダを指定して、Createボタンを押すと一瞬で作成される。
数秒で終わるらしく、これまでのhypernetwork、TIだと数十分~はかかってたので、すぐ終わるのがわからん。
Batch sizeも振ってみたが、どうなっているかわからない。
「laion_7plus」だと大きく変わるので、差が何処で生まれてるのかがわからない。
みんなよくついていけてるな・・・。
※中国国内でも、リーク版は駄目だとか、NovelAI自体がdanbooruで学習しているから絵師の仕事を奪うので反対という意見は出ている
NovelAIの良いプロンプトを集めたドキュメント「元素法典」が日本でも話題になった。
NovelAIを使ったことがない人にはわからないだろうが、NovelAIのリーク版のプロンプトとなっている。
真面目にNovelAI本家を使っている人が、「元素法典」をコピペしても上手く動かず、有志が作ったリーク版からNovelAI本家へのプロンプト変換サイトで変換しなければならない。
個人的には、タグはdanbooruタグを並べていて特に変わったものではないし、手当たり次第に強調しているように見えて好きになれないし、
Prompt Editing/Mixingを使った事例がないことなどから、あまり好きではないが、Twitterなどの反応を見る限り、需要はある。
でだ、本家NovelAIにはできず、リーク版で出来ることがある。
例えば下は、AUTOMATIC1111の機能を使っており、リーク版でしか動作しない。
試す人は18禁画像が出るので注意だ。乳首が透けている絵が出る。
[lewd:assertive:0.3] small sweat [nude::0.8] [nipple::0.95] 1girl with disheveled messy atmosphere cherry bloom hair sitting in white [((((translucent)))):((transparent)):0.9] [hoodie:trench coat :0.4] liquid crystal [((transparent)) sailor dress::0.7] indoor inside [vehicle], [downpour raining:0.5] [nightclub:cyberpunk:0.3] city, public crowd
Negative prompt: ugly, fat, obese, chubby, (((deformed))), [blurry], bad anatomy, disfigured, poorly drawn face, mutation, mutated, (extra_limb), (ugly), (poorly drawn hands fingers), messy drawing, morbid, mutilated, tranny, trans, trannsexual, [out of frame], (bad proportions), (poorly drawn body), (poorly drawn legs), worst quality, low quality, normal quality, text, censored, gown, latex, pencil
引用元:https://gist.github.com/crosstyan/f912612f4c26e298feec4a2924c41d99
簡単に説明すると、途中まで乳首で描画し、途中で止めるので、衣装が透けているという描画になる。
「::0.8」というのが、全ステップの8割まで描画して、そこで描画を止めるという意味だ。
[nude::0.8] [nipple::0.95] で8割までヌードを描画し、9割5分まで乳首を描画し、残りで衣装を描画することで、衣装の透け感を出す。
衣装が透けているというのは、danbooruにもあるが、上記を考案した人はよほど乳首を描画したかったのだろう。
他に [nightclub:cyberpunk:0.3]いうのも、AUTOMATIC1111の機能だ。
最初にナイトクラブで3割、残りをサイバーパンクで描画という意味になる。
なにより、リーク版はタダで、本家は有料でしかも英語ってことで、バズるのが中国より日本の方が早かったが、リーク版が出てからは一瞬だった。
マンパワーが違う。
NovelAIサイトのUIを丸々パクったサイトが出来、「元素法典」が生まれている。
日本の話題になっているTwitterも中国語にすぐ翻訳され、ノウハウ取り込まれているのが現状だ。
日本人はもうSNSで投げっぱなしという感じだが、中国の場合、記事やドキュメントを書いてまとめること、
せっかく課金したのにユーザが増えまくっているのか滅茶苦茶重くなっていて最悪。
だから流出したモデルを使ってローカルでNAIの環境を構築する。
ネットには情報もだいぶ転がってるけど陳腐化した情報があまりに多いため増田にまとめることにした。
もしかしたらこの記事もすでに陳腐化しているかもしれないが…単純に間違ってたらトラバで教えてほしい。
もちろん自己責任。この記事を見て導入した結果何かあっても増田は何も保証しない。
英語がわかる人はこっちを見た方が早いと思う。今は導入RTAができるくらい導入は楽になっている。
https://rentry.org/nai-speedrun
VRAMが2GB以上あるNVIDIA製のグラフィックボードがあればローカル環境を構築できる。
GPUの世代はGTX700シリーズ以降。なので一昔前のミドル級ボードでも動作するらしい。
IntelのオンボードGPUでも実行する方法があるらしい(stable_diffusion.openvino)が今回は割愛する。自分で探してね。
その他の推奨環境は以下の通り。
対応OS:Windows7以上(と言うがM1Macでも動作する方法があるとかなんとか)
メインメモリ:16GB以上(VRAMもたくさん必要だが起動時にメインメモリも大量に食う。WebUI起動時にタスクマネージャを見ているとよくわかる)
スマホしか持ってないような人やこういうのがよくわからない人はNovelAIを使った方が良いと思う。
今は重いけど、きっとそのうちみんな飽きてサーバも軽くなるかもしれないし。
(追記)NovelAIがリソースを確保してサーバが軽くなったからリスクを背負ってまで導入しなくても良いかも
(追記)Pythonは当然3系。最新の奴を入れれば問題無い。
導入方法はいちいち書かないけど、「python --version」や「git -v」で
正常にバージョン情報が出る(パスがきちんと通っている)ことはちゃんと確認しよう。
Stable Diffusion web UIはStable Diffusionやそれをベースとした画像生成AIを利用するためのフロントエンド。
その中でも特に開発が活発でデファクトスタンダードとなっているのがAUTOMATIC1111版だ。
導入したい適当なディレクトリに対してPowerShellなどで
「git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git」
なお、AUTOMATIC1111版は数時間単位でコミットが行われるから
定期的に「git pull origin master」で更新しよう。
クライアントはqBitTorrentが一番楽だと思う。
ここにはさすがにmagnetリンクは書かないから各自ググって欲しい。
結構誤解されがちなことだが流出データ50GBを全部ダウンロードする必要は無い。
必要なファイルはanimefull-final-prunedディレクトリの中身とanimevae.ptだから5GBちょっとくらいなんじゃないかな。
もし余裕があるならmoduleディレクトリの中身もダウンロードすればいいけど、ぶっちゃけ必要無いんじゃないか?
まずはanimefull-final-prunedの中身のファイルをリネーム。
「model.ckpt」を「animefinal-full-pruned.ckpt」のようなわかりやすい名前にして、
「animevae.pt」を例えば「animefinal-full-pruned.vae.pt」のような拡張子以外は同じファイル名にする。
WebUI起動フォルダ配下の\models\Stable-diffusionにリネームしたファイルを移動させれば配置はOK。
ちなみにmoduleディレクトリの中身は\models\hypernetworksに移動させて使う。
それらのファイルを設定で適用させると画風が結構変わるがNovelAI再現とは関係無いみたいだ。
(追記)moduleディレクトリの中身の.ptファイルはhypernetworksという技術によって画風などを学習したものらしい。
すでに複数のイラストレーターの画風を学習したptファイルが作成されており議論を呼んでいる。
自分のグラボのVRAMが4GB未満の場合は「set COMMANDLINE_ARGS=」の後に
4GB未満の場合は「--medvram」、2GB未満の場合は「--lowvram」とパラメータを追加しておこう。
自分の持ってるグラボのVRAMがわからないときはGPU-Zなどで調べよう。
またGTX1600系固有のバグ(単色の画像が出力される)があるらしいので
その場合は「--no-half-vae」もしくは「--no-half」や「--precision full」とパラメータを追加。
ちなみにパラメータに「--xformers」を追加してxformersを導入・使用すると
消費VRAMが減って画像生成処理時間も短縮されるので是非導入しよう。
画像からdanbooruのタグをAIで調査するdeepdanbooruを利用する場合は「--deepdanbooru」を追加。
のようになる。
ターミナルやPowerShellなどでwebui-user.batを起動しwebUIの初期導入と起動を行う。
過去には手動でCUDA等を導入する必要があったが、現在はこの初期導入でだいたいの導入が行われる。
ずいぶん楽にはなったがその分初期導入の時間は結構長い。10分~20分くらいかかるかもしれない。
途中で導入処理がエラーで止まってしまった場合は管理者権限で実行するなどして対応して欲しい。
起動ができたらSettingで以下の設定を変更してNovelAIに近づける。
Stop At last layers of CLIP modelを2に、
Eta noise seed deltaを31337にする。
これで設定は完了!
設定を合わせて完全にNovelAIと同じ内容になったのかを確認するテストがある。
出力結果から海外じゃHallo Asuka Testなんて呼ばれている。
これは初期SEEDをはじめとする設定内容が完全に一致していれば同じ出力結果を得られる仕組みを利用している。
プロンプトの内容:masterpiece, best quality, masterpiece, asuka langley sitting cross legged on a chair
ネガティブプロンプトの内容:lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name
https://i.imgur.com/Bfl5qJB.jpg
なお、このテストはAUTOMATIC1111のバージョンやxformersの適用状態によっては微妙に違う画像が出力されることがあるらしい。
xformersを適用させている増田の環境だと確かに二つ並べると間違い探しレベルの違いがあった。
「Booru tag autocompletion for A1111」を導入すればNovelAIのように自動でdanbooruのタグを保管してくれる。
画像生成AIモデルはStable DiffusionがOSSのため派生が結構多い。
自前で追加学習もできるため自前で学習した追加AIモデルを4chanのような掲示板などで共有する人もいるらしい。
しかしそのようなモデルの中にウィルスのような悪意のある動作を行うものもあるらしい。
FBIがペドフィリアを一網打尽にするためにIPアドレスなどの個人情報を抜き出す動作を行うロリ特化AIモデルを掲示板で配布していて
しかもそれには本物の児童ポルノが教師データとして使われている…などという都市伝説的な話が今界隈を賑わせている。
まず5%近くいる中卒が完全に抜けてるグラフだし、中退で最終学歴高卒で就職した人間もそこからは見えへんで
ソースは提示されてるから不審に思ったら自分でグラフ書き直してなー
http://www.garbagenews.net/archives/2371027.html#:~:text=%E5%B9%B4%E9%BD%A2%E9%9A%8E%E5%B1%A4%E5%88%A5%E3%81%AE%E6%9C%80%E7%B5%82%E5%AD%A6%E6%AD%B4%E5%AE%9F%E6%83%85(%E6%9C%80%E6%96%B0),-2022%2F06%2F16&text=%E7%B7%8F%E5%8B%99%E7%9C%81%E7%B5%B1%E8%A8%88%E5%B1%80%E3%81%8C,%E3%81%8C%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82
日本人女性の写真を生成するプロンプトについて私なりに試行錯誤した結果を示します。
画像は4つ以下に貼り付けました。
約2週間経過しているため、既に何らかの結論を得られているかもしれませんが、どなたかの参考にでもなれば幸いです。
actressを付けると安定すると書かれていましたが、正にその通りだと思います。
actressだけでなく、2つの言葉を重ねると表情や顔の作りが安定するように思います。
例として
actress×Japanese idol
AKB48 × a famous Japanese girl in Instagram
などです。
今回のpromptで、日本人を示す言葉はこの部分くらいだったのですがそれなりに日本人ぽくなっていると思います。(ちなみにAKB48とnogizaka46で素人目に大きな差は出ませんでした。)
また結果(1)と(2)に含まれているAya Kodaのように適当に女性の名前を入れると結果が安定する傾向も見られました。
(私は適当に、北条政子、幸田文など、歴史上の女性名を使ってみましたが特にその名前の方々の特徴が取り入れられている訳ではなさそうです)
結果(3)は特定の名前を使わない代わりに、女性らしさが出るかと思ってmuscular arm, cleavage of breasts, detailedなどを入れています。
CFG scaleは5~22で振ってみましたが、数値を大きくしすぎると光を強く当てたようなギラついた雰囲気になるようです。
(なお、自然光を当てた写真にするため、「on the beach」としましたので室内の設定だと異なると思います)
STEPは100にしてもそれほど良い結果にならなかったため40~70にしています。
使用しているツールは、下記のstable-diffusion-webui(by Automatic1111)です。
https://github.com/AUTOMATIC1111/stable-diffusion-webui
なお本稿では以降stable-diffusion-webuiと記載します。
「Restore faces」と「Highres,fix」はONにした状態とし、Samplerは「Euler a」を基本としています。
stable-diffusion-webui(Automatic1111)の機能については下記をご参照ください。
https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features
「Highres,fix」がその一助になると思いますのでもしお使いで無ければお試しください。
◆prompt:
Photo of a young female wearing a T-shirt and jeans, Aya Koda, (((beauty bright eyes))), cute face, Angel face, short hair, small nose, on the beach, ((perfect face)), detailed, photorealistic, cute slight smile, Medium Shot, actress, Japanese idol,
◆Negative prompt:
ugly, fat, obese, chubby, (((deformed))), [blurry], bad anatomy, disfigured, poorly drawn face, mutation, mutated, (extra_limb), (ugly), (poorly drawn hands), messy drawing, penis, nose, eyes, lips, eyelashes, text, red_eyes, (((nipples))),(skinny), (((underbite))), long jaw, long hair,
Steps: 70, Sampler: Euler a, CFG scale: 6.5, Seed: 18523803, Face restoration: GFPGAN, Size: 576x768, Denoising strength: 0.4
◆prompt:
Photo of a young female wearing a T-shirt and jeans, Aya Koda, (((beauty bright eyes))), cute face, Angel face, short hair, small nose, on the beach, ((perfect face)), detailed, photorealistic, cute slight smile, Medium Shot, actress, Japanese idol,
◆Negative prompt:
ugly, fat, obese, chubby, (((deformed))), [blurry], bad anatomy, disfigured, poorly drawn face, mutation, mutated, (extra_limb), (ugly), (poorly drawn hands), messy drawing, penis, nose, eyes, lips, eyelashes, text, red_eyes, (((nipples))),(skinny), (((underbite))), long jaw, long hair,
Steps: 50, Sampler: Euler a, CFG scale: 16, Seed: 1585211664, Face restoration: GFPGAN, Size: 576x768, Denoising strength: 0.4
◆prompt:
portrait of an attractive talent wearing a T-shirt and jeans, (((beauty bright eyes))), cute face with elegant hairstyle, face to the left, on the beach, ((perfect face)), muscular arm, cleavage of breasts, detailed, intricate, photorealistic, a famous Japanese girl in Instagram, cute slight smile, Medium Shot, akb48, Japanese idol,
◆Negative prompt:
ugly, fat, obese, chubby, (((deformed))), [blurry], bad anatomy, disfigured, poorly drawn face, mutation, mutated, (extra_limb), (ugly), (poorly drawn hands), messy drawing, penis, nose, eyes, lips, eyelashes, text, red_eyes, (((nipples))),(skinny)
Steps: 55, Sampler: Euler a, CFG scale: 9, Seed: 3339383866, Face restoration: GFPGAN, Size: 576x768, Denoising strength: 0.25
※これはsamplerとCFG Scale についての比較用です。
◆prompt:
Photo of a young female wearing a T-shirt and jeans, (((beauty bright eyes))), cute face, Angel face, short hair, small nose, on the beach, ((perfect face)), detailed, photorealistic, cute slight smile, Medium Shot, actress, Japanese idol,
◆Negative prompt:
ugly, fat, obese, chubby, (((deformed))), [blurry], bad anatomy, disfigured, poorly drawn face, mutation, mutated, (extra_limb), (ugly), (poorly drawn hands), messy drawing, penis, nose, eyes, lips, eyelashes, text, red_eyes, (((nipples))),(skinny), (((underbite))),
Steps: 70, Sampler: Euler a, CFG scale: 5.0, Seed: 1729711779, Face restoration: GFPGAN, Size: 512x768
Negative promptは以下くらいに省略しても問題は無さそうです。
ugly, fat, obese, chubby, (((deformed))), bad anatomy, disfigured, poorly drawn face, mutation, mutated
ただしpromptもNegative promptは、あまりシンプルにし過ぎるとハズレ率が高くなるかもしれません。
またseedを固定してCFG Scaleを変えた方が効果が出るケースも多いような気がしています。
結果(3)の「talent」の部分は、適当に職業名に変えても成立しました。
もう少し早く投稿したかったのですが、色々やっているうちにあっという間に時間が経ってしまいました。
また、日本人(というかモンゴロイド)に多い頬骨が張っていない丸顔を作るのは結構難しいと感じました。
以上
Danbooruの素性に注目が集まっているが、ここでは議論しない。
promptを英語で書く必要があり、闇雲に入力しても意図した画像が出てこない。
promptチェッカーのような、正しいpromptが書けているのかどうかをコンパイラで確認できず、自身で画像を見て反映されているか判断する必要がある。
promptに記載した内容が1枚の画像に全て反映されているわけではなく、複数枚の画像を出力してみて、promptがなんとなく反映されているかな、といったものになる。
Danbooruのタグが使えるということが正しいように広まっているが、半分正解で半分間違っている。
「bow」というタグがあるが弓を表しているわけではなく、女の子キャラクターの髪の毛が弓なりの形状をしていることを示すのに、Danbooruではタグ付けされている(ように見える)。
「hair_bow」というタグもあり、こちらも髪留めリボンのことを示す。「Waifu Diffusion」に書いて出てくるのはこちらになる。一般的に使われるのもこちらだろう。
面倒なのがここからなのだが、「Waifu Diffusion」は修飾子がどこにかかっているのか曖昧な判断をする。
弓を描きたいわけではないので、何かしら髪にまつわる単語が「bow」の近くにあることになるが、「Waifu Diffusion」はリボンを描く。
どうも「Waifu Diffusion」は英文法を知っているわけではなさそうだ。
また「hair_bow」をつけたキャラクターの代表的なのが東方の霊夢なのか、霊夢要素がそこかしこに現れる。
もう一つ例を出そう。
Danbooruのタグに「small_breasts」という胸の小さいタグがあるが、「Waifu Diffusion」は胸の大きな描写をする。
「xxxx, small_breasts, xxxx」といったようなpromptを書くと、胸の小さいキャラを描きたいのだなと判断すると思うが、
「Waifu Diffusion」は胸という単語があるから胸を描画した、となる。
どうもアンダースコアでつながっている単語を1単語とは認識してない。
「breasts」という単語が入っている限り、巨乳が描かれ、さらに胸をさらけ出した描画がなされるので重々注意されたし。
小さい胸のキャラクターを描きたい場合は「breasts」という単語をpromptに入れてはいけない。
上記のこともあり、Danbooruタグはあまり効かない。!!!やカッコ( ) で括った単語は強調されるらしいが、あまり意味がない。
またDanbooruのタグの詳細を見てみるとわかるが、1kを超えるような数の多いタグは曖昧なものが多くなり、詳細な分類がなされたものは数が少なくて効かない。
「floating_hair」というイラストでよくある髪束をウネウネさせるタグがあるが、「Waifu Diffusion」は認識せず、キャラクターは空を飛ぶ。
「short_hair_with_long_locks」という、ショートだが頬の横の髪が長いというタグがあるが、まず認識されない。
では日本人女性が現実でしている髪型に対応する英語があるかというと、Googleで検索して出てくるような和製英語を入力しても描画されない。
アイドル系だとツインテールがメジャーだと思うが、英語圏の人は「twintail hair は pigtail hair」だというが、pigtail hairは日本人の感覚からすると編み込みが多くリボンが沢山付き、どうも違うとなる。
他に、現状「Waifu Diffusion」では指を描くのがかなり苦手だ。
promptを工夫すれば出来るのかもしれないが、色々試した結果、顔との両立が出来ない。
先の事例と同様に、手を隠すといったpromptは指定しようとしても、promptに指や手といった単語が入っているだけで問答無用で画面に出てくる。
「Stable Diffusion」では本当に効くかどうかはさておき、検索できるサイトがいくつか出てきている。
しかし「Waifu Diffusion」で、アニメを描きたい場合の参考はない。
「Waifu Diffusion」を作った人達のDiscordにtext-to-imageがあり、画像とpromptが載っているが、多くがクオリティの低いものであり、高速で流れるチャット欄から見つけるのは困難だ。
Danbooruデータベースで学習しているということで、実際にダウンロードして中を見てみたが、
玉石混交というか、説明がしにくいが、少なくとも自分の描きたいものとは違っていた。
テイストが揃ってないので、同じ単語が示す物でも画像ごとに違い、そりゃアーティスト名で絞りたくなるよなってのは気持ちはわかる。
(「Waifu Diffusion」でDanbooruのアーティスト名を入れても、狙ったテイストにはならないが。絵が多いアーティスト名でもならない。)
また「Waifu Diffusion」はキャラクターの顔については崩れないので凄いと言われるが、
実際に使うと、「full body」といった全身を描きたいと思っても顔のアップばかりが出力され、全身が描けたと思っても顔が崩れて描写されない。
アニメのような演出をしようと思った場合、エフェクトをどう指定するか、という問題にぶち当たる。
アニメならではの光の演出があるわけだが、どう指定するのかわからない。
最近のイラストで多い、逆光で顔の前面は薄い影で、なぜか鼻の高い所にはハイライトが入っているが、前髪の影は額に落ちているという、
どこから光が入っているんだ?というのも指定できるのだろうか?
まだ3Dでやっているような顔前面セル塗りの方が指定しやすかろう。
「Waifu Diffusion」には70ワードという制限があり、細かく指定していくと軽く超えていく。
超えた分は無視され、絵を文字で表現するとなるのは難しいのを実感する。
img2imgによって、ポーズの指定、髪の毛をどこで括るかといった指定はしやすくなるが、それでもpromptが必要となる。
Danbooruタグが反映されない問題が解決されたとしても、タグの細分化はされているようでいて、実際使うとなると足りてない。
使いこなせる人はいるのだろうか?
増田の個別の記事ページで、記事の囲みの下にある「記事への反応」の横のanond:1234567890ってところをクリックすると、input type="text" になってコピペしやすい!!
この前ホットエントリで美大生の7割が女性なのに教員はほとんど男性だって記事が上がってたのでググってみると
だそうですよ?バイアス抜きでninic(ニニック)に反対しているイラストレーターの7割程度は女性と予想できる。
他にもtwitterのフェミニズム系啓発マンガや女性向け同人作家のお気持ち表明やら、
ハテブにいたら素朴なフェミニズムを実践している創作系の女性はたくさん観測できるので割合はもっと高いかも。
つまり↓はフェミニストかつイラストレーターが騒いでいる可能性高くない?
anond.hatelabo.jp##div.section:has-text(イラストレーター)
anond.hatelabo.jp##div.section:has-text(投資)
anond.hatelabo.jp##div.section:has-text(AI)
anond.hatelabo.jp##div.section:has-text(diffusion)
anond.hatelabo.jp##div.section:has-text(mimic)
anond.hatelabo.jp##li:has-text(イラストレーター)
anond.hatelabo.jp##div.section:has-text(投資)
anond.hatelabo.jp##li:has-text(AI)
とりあえずこのくらい追加しとけばいいかな
[はてブ]uBlock Originで特定のエントリーを隠す方法のメモ anond:20180523215832
に対する補足。
はてなのトップページ(https://www.hatena.ne.jp/)ははてブの各種リストページとHTMLの構造が異なっていて、これに対応するには別途トップページ用の行を追加する必要がある。
増田のエントリーをブロックしたい場合はuBlock Originの設定に次のような行を追加する。anond.hatelabo.jpの部分を別ドメインに変えると別ドメインのページをブロックできる。
hatena.ne.jp##.EntryList_entryListItem__1vXtf:has(a[href*="anond.hatelabo.jp"])
タイトルに「転職」を含むエントリーをブロックしたい場合は次のような行を追加する。
iOS版のはてブアプリにこの手のブロック機能が付いたみたいだからWebページに対してもそろそろはてなが公式に対応してくれるかもな。
自動で安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋)
/**************************************
以下のCSV_DIR, FILE_PATHS, SETTINGSを書き換えてね。 <h3>o- *************************************/</h3>
//CSVファイルが置かれてるディレクトリのパス。投稿前にエラー出たら大体ここの設定ミス。 例:"C:\\Users\\sakuraimasahiro\\Documents\\iMacros\\Macros\\rentou\\";
'C:\\Users\\USER\\Desktop\\iMacros\\Macros\\rentou\\';
//ファイルのパス。CSVは絶対パスで、拡張子も必要。iimは相対パスでよく、拡張子不要。
const FILE_PATHS = {
textCsv: CSV_DIR + 'textNoAnker.csv',
//レス用投稿文が書かれたCSV。通常とレス用で分けないなら同じファイルを使えばいい。
replyTextCsv: CSV_DIR + 'textReply.csv',
};
baseWaitTime: 5,
//baseWaitTime+0~waitTimeRange(ランダム)だけ待つ
waitTimeRange: 5,
//連投しすぎだと忠告された場合に処理を一時停止させる時間(秒)
waitTimeForAvoidingPunishment: 60 * 30,
//メール
mail: 'sage',
//名前設定
name: '',
//以下、偽装ワッチョイ設定。浪人でワッチョイを非表示にしてるときだけtrueにしてね。
//妙なニックネーム(ワッチョイ、アウアウウーなど)をランダムで決めて付加するかどうか。true=付加する。false=付加しない。
//妙なニックネームの後に付く8桁の文字列をランダムで決めて付加するかどうか。
},
//アンカー無し投稿をするならtrue。しないならfalse。noAnkerPostかreplyPostのどちらかはtrueにすること(両方trueでもOK)。
//アンカー付き投稿(返信)をするならtrue。しないならfalse。もしnoAnkerPostとreplyPostの両方がtrueの場合、投稿は返信が優先され、返信対象が見つからなくなったらアンカー無し投稿をする。
//最初に取得するアンカー無し投稿文CSVファイルの行番号。もし返信用と同じCSVファイルを使うなら-1と入力。
noAnkerPostTextCsvStartRow: 1,
//最初に取得する返信用投稿文CSVファイルの行番号。もしアンカー無しと同じCSVファイルを使うなら-1と入力。
//テキストCSV/返信用テキストCSVの取得行が最終行に達したら最初の行まで戻るかどうか。true=戻る。false=マクロ終了。
//返信する場合、これより小さなレス番には返信しない。返信を投稿すると、この数値は前回の返信先のレス番に更新される。
minAnker: 895,
//返信する場合、名前に以下の文字列を含む投稿にアンカーをつけて返信する(ワッチョイやIPなど名前フィールドにあるものならなんでも可)。配列で複数指定可能。指定無しなら空配列([])。filterNamesとfilterNamesNotIncluded共に無指定ならレス番1から順に返信していく(minAnkerが設定されてればそこから順に)。以下のfilter系は全て併用可能。
//↑とは逆に、名前に以下の文字列を含まない投稿にアンカーをつけて返信する。↑と併用も可能。
//返信する場合、本文に以下の文字列を含む投稿にアンカーをつけて返信する。
filterText: ['自演かな', '自演わらわら', 'スクリプト使うの', '安価ガバ', '>>660', '自演で擁護', '最後' ,'あいうえお', 'かきくけこ', 'さしすせそ', 'なにぬねの', 'はひふへほ', 'まみむめも', 'やいゆえよ', 'やゆよ', 'らりるれろ', 'わいうえを', 'わをん', 'わいうえをん'],
},
//自分のIPアドレスの確認。VPNとかでIPを変更してマクロを動かしてるとき、突然VPNが作動しなくなってIPが元に戻ったときにマクロを止めるためのもの。
//以下の文字列が自分の現在のIPアドレスに含まれている場合、マクロを一時停止する。基本的に自分の本当のIPアドレスを入力。
},
//浪人設定。最後に動作を確認したのは5年くらい前で、今も同じように動作するかは、浪人を持ってないから確認できずわからない。
//浪人にログインしてるかどうかをチェックするかどうか。trueならする。falseならしない。trueにしていてもし浪人にログインしていないことを確認したらログインしにいく。
password: '1234',
},
};
/**************************************
設定箇所終わり。
https://info.5ch.net/index.php/%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%81%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E6%97%A9%E8%A6%8B%E8%A1%A8 <h3>o- *************************************/</h3>
/**************************************
・NULL演算子(??)は使えない。論理積(&&)は使える。
・オブジェクトの分割代入はできない。
・importはできない。 <h3>o- *************************************/</h3>
/**************************************
関数 <h3>o- *************************************/</h3>
/**
* ここから始まる。
*/
checkSettings();
var _TextCsvCursors = new TextCsvCursors(
SETTINGS.postSettings.noAnkerPostTextCsvStartRow > 0
? SETTINGS.postSettings.noAnkerPostTextCsvStartRow - 1
: SETTINGS.postSettings.noAnkerPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
SETTINGS.postSettings.replyPostTextCsvStartRow > 0
? SETTINGS.postSettings.replyPostTextCsvStartRow - 1
: SETTINGS.postSettings.replyPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
);
var _LoopStatuses = new LoopStatuses(0, SETTINGS.postSettings.minAnker);
const _MyPosterName = new MyPosterName({
name: SETTINGS.nameSettings.name,
});
const _ThreadUrl = openPromptThreadUrl();
//ループ
while (true) {
SETTINGS.ipSettings.checkIp && checkCurrentIpNotTheIp();
//スレを開く
openUrl(_ThreadUrl.fullUrlHttps());
//浪人にログインする設定なら、浪人にログインしているかどうかを確認し、していなければログインしにいく。
if (SETTINGS.roninSettings.checkLogin) {
}
}
if (SETTINGS.postSettings.replyPost) {
const targetAnkerNumber = createPostDOMList()
.filterPostnumberHigher(_LoopStatuses.currentMinAnker())
.filterByPostername(SETTINGS.postSettings.filterNames)
.filterByPosternameNotIncluded(
SETTINGS.postSettings.filterNamesNotIncluded,
)
.filterByText(SETTINGS.postSettings.filterText)
if (targetAnkerNumber !== null) {
const r = _TextCsvCursors.takeNextRowTextAsReply(targetAnkerNumber);
messageDisplay(`返信対象有り。アンカー先: ${targetAnkerNumber}`);
return {
...r,
updatedLoopStatuses:
_LoopStatuses.updateMinAnker(targetAnkerNumber),
};
}
}
if (SETTINGS.postSettings.noAnkerPost) {
//返信対象無し、或いは返信しない設定の場合。アンカー無し投稿文を作る。
const r = _TextCsvCursors.takeNextRowTextAsNoAnker();
messageDisplay('返信対象無し。アンカー無し投稿。');
return {
...r,
updatedLoopStatuses: _LoopStatuses,
};
}
return null;
})();
if (p) {
//投稿。
nickname: SETTINGS.nameSettings.nickname,
korokoro: SETTINGS.nameSettings.korokoro,
area: SETTINGS.nameSettings.area,
}),
SETTINGS.mail,
p.text,
);
//_TextCsvCursorsと_LoopStatusesを更新。
_TextCsvCursors = p.updatedTextCsvCursors;
_LoopStatuses = p.updatedLoopStatuses.incrementPostCount();
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
} else {
`返信対象が現われるのを待機中...。`,
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
}
wait(SETTINGS.baseWaitTime + randomRange(0, SETTINGS.waitTimeRange));
}
}
/**
* 投稿処理と投稿結果を見てリトライしたりマクロ終了したり。
* @param {string} serverName サーバー名
* @param {MyPosterName} _MyPosterName
* @param {string} postMail メール
*/
serverName,
postMail,
_MyText,
retryTimes = 0,
) {
const r =
retryTimes === 0
? new ValuesOfPost(serverName, _MyPosterName, postMail, _MyText).post(
postTo5chTread,
)
serverName,
postMail,
_MyText,
).postSubstring(retryTimes, postTo5chTread, postConfirm);
if (r) {
back();
return;
}
wait(7);
const error = createPostErrorMessage().analyze();
messageDisplay(error.message);
if (error.order === 'KILL') {
kill();
} else if (error.order === 'SKIP') {
return;
} else if (error.order === 'TRUNCATE') {
back();
serverName,
postMail,
_MyText,
retryTimes + 1,
);
} else if (error.order === 'WAIT') {
wait(SETTINGS.waitTimeForAvoidingPunishment);
serverName,
postMail,
_MyText,
retryTimes,
);
} else if (error.order === 'LOGIN') {
serverName,
postMail,
_MyText,
retryTimes,
);
}
return;
}
/**
* 現在のIPアドレスに、SETTINGS.ipSettings.avoidTheIpの値が含まれていないことを確認する。含まれていたらマクロを一時停止。
* @returns
*/
function checkCurrentIpNotTheIp() {
openUrl('https://www.cman.jp/network/support/go_access.cgi');
const _IpAdress = createIpAdressFromCMan();
if (_IpAdress.includes(SETTINGS.ipSettings.avoidTheIp)) {
pause('現在のIPに指定した値が含まれていることを確認。');
}
return;
}
/**
* @returns
*/
if (
SETTINGS.postSettings.noAnkerPost === false &&
SETTINGS.postSettings.replyPost === false
) {
return kill('設定エラー。noAnkerPostとreplyPost両方ともfalseになってる。');
}
if (
SETTINGS.postSettings.noAnkerPostTextCsvStartRow < 0 &&
SETTINGS.postSettings.replyPostTextCsvStartRow < 0
) {
return kill(
'設定エラー。noAnkerPostTextCsvStartRowとreplyPostTextCsvStartRow両方とも-1になってる。',
);
}
if (
SETTINGS.postSettings.noAnkerPostTextCsvStartRow === 0 ||
SETTINGS.postSettings.replyPostTextCsvStartRow === 0
) {
return kill(
'設定エラー。noAnkerPostTextCsvStartRow/replyPostTextCsvStartRowの初期値は-1或いは1以上で。',
);
}
}
/**
* 入力フォームを表示して入力されたスレのURLを受け取る。
*/
function openPromptThreadUrl() {
const url = prompt('スレURLを入力');
}
/**
* 開いてるスレのレス全て読み取ってPostListインスタンスを作って返す。
* 重すぎるので使うのやめ。どうやらインスタンスの大量生成が原因な模様。
*/
const posts = window.document.getElementsByClassName('post');
return new PostList(Array.from(posts).map((e) => new Post(e)));
}
/**
* 開いてるスレのレス全て取得してPostDOMListに格納して返す。
* @returns
*/
function createPostDOMList() {
const posts = window.document.getElementsByClassName('post');
for (let index = 0; index < posts.length; index++) {
//HTMLCollectionからElementを1つずつ抽出して配列に。
arrPostDOMList.push(posts.item(index));
}
return new PostDOMList(arrPostDOMList);
}
/**
* 開いてる投稿結果画面に表示されてるエラーを読み取ってPostErrorMessageインスタンスを作って返す。
*/
function createPostErrorMessage() {
window.document
Abstractしか読んでいない疑惑や自身のダブスタな態度など他増田やブコメによる都合の悪い指摘に無視または言い訳を続ける増田に果たして他人の知的誠実さを偉そうにジャッジする資格()を満たすだけの知的誠実さは備わっているか
(結論に「反する」論文を「無視」と語気を強めて言い切っていた増田の論旨は変わってるんだが、それはそれとして)
細かい論点だとか論旨には影響しませんで言い逃れできるなら手嶋の記事だって前後の総説論文やメタアナリシスが否定されない以上は記事全体としての論旨には大して影響しないだろうに、記事全体のキャンセルを試みるのは無理があるって自分でも薄々分かってるよな
自分に都合の良い方向にねじ曲げた誤訳にしても査読の持つ意味合いにしても最初に強い言葉で耳目を集めてから後で軌道修正すればよしっていう怠惰な姿勢からは知的誠実さなんて欠片も感じられないんだけど?
ブコメでもお前の印象操作にオタクヘイターな表現規制派の方々が釣られまくってるんだから相手の印象操作を責めるなら自分も記事全体の論旨は否定できませんと明言して釣られた馬鹿の後始末しとけ
つい適当なこと言っちゃったけど相手だって同じなんだとか全く言い訳にもなってないからな
その相手をお前は「学問への冒涜であり、科学と対極に位置するものです」「論文を読む、ましてやそれを基に文章を書く資格などありません」「知的怠慢であり、知的誠実さの欠如でしょう」と切り捨てたんだからな
他人より先にまず自分をその立派に研ぎ澄ました鎌で断罪してはどうか
(Full-Textを読まずにAbstractだけで済ませる怠惰も刈り取れないナマクラみたいだから研ぎ直すのが先か?)
自分で設定できることを知って快適なブックマークライフを遅れるようになった
b.hatena.ne.jp##.js-keyboard-selectable-item:has-text(弱者男性) b.hatena.ne.jp##.js-keyboard-selectable-item:has-text(ジェンダー) b.hatena.ne.jp##.js-keyboard-selectable-item:has-text(フェミ) b.hatena.ne.jp##.js-keyboard-selectable-item:has-text(note.com/wakari_te) b.hatena.ne.jp##.js-keyboard-selectable-item:has-text(twitter.com/63cities)
はてブについて、情報検索したりクエリを投げたりして調べてまとめてみた。自分用メモとして書いたもので、極少数の人しか興味を持たない内容かと思うが、読んでいただければ幸い。
公式等[1・2(参照したページURLを最後に記載。以下同様)]で詳細を確かめられず素人の憶測で説明した箇所がいくつもあり、簡潔明瞭でも網羅的でもない解説だがご容赦を。
1a. https://b.hatena.ne.jp/hotentry/{1}(引数に"all"を入力した場合、1のエイリアス)
1b. https://b.hatena.ne.jp/ctop/{1}(カテゴリトップ[3]が過去に存在していた場合、1aにリダイレクト)
1c. https://b.hatena.ne.jp/hotentry/{1}/{2}
1d. https://b.hatena.ne.jp/hotentry/{1}/daily(1cにリダイレクト。前々日か前日の分が表示される)
1e. https://b.hatena.ne.jp/hotentry/{1}/{3}(?page={4})(()内のパラメータは省略可。以下同様)
1f. https://b.hatena.ne.jp/hotentry/{1}/{3}(?of={5})
2a. https://b.hatena.ne.jp/hotentry.rss
2b. https://b.hatena.ne.jp/hotentry/{1}.rss("all"を入力した場合、2aのエイリアス)
2c. https://b.hatena.ne.jp/hotentry?mode=rss(2aのエイリアス)
2d. https://feeds.feedburner.com/hatena/b/hotentry(2aのエイリアス)[4]
3. https://b.hatena.ne.jp/entrylist/{1}(/{3}?page={4})(ブクマ登録数の閾値を設定するオプションがあったが、2018年3月に廃止された[5])
4a. https://b.hatena.ne.jp/entrylist.rss
4b. https://b.hatena.ne.jp/entrylist/{1}.rss("all"を入力した場合、4aのエイリアス)
{1} | カテゴリID | 省略するとカテゴリ「総合」のページが表示される |
{2} | エントリ登録日 | "YYYYMMDD"の形式で入力。当該月日の24時から一定時間経過後に利用可能になる。有効な最古の値は20050210 |
{3} | 特集名 | 特集[6]は不定期に改廃されるため、値が有効か注意 |
{4} | ページ番号 | |
{5} | オフセット | 表示結果の先頭が、指定した値だけ後ろにずれる。1ページ分表示可 |
エントリは、8種類あるカテゴリ[7]のどれか1つに自動で区分される。そのアルゴリズムは不定期に更新されているようだ[8]。区分に異議がある場合、ユーザが変更申請することもできる[8・9]。
カテゴリは2013年2月に現在の名称・分類になった[10]。分類が現在と同じ8種類になったのは、2008年11月[11]。
なお、2011年以前のエントリはほぼ全て「暮らし」カテゴリに区分されている[12]。2017年から2019年の間に何らかの障害が起きたためと思われる[13・14・15]。
なお「(ブックマーク)エントリ」という呼称は、一般的用法、はてブに登録されたURLとその付帯情報、エントリページの情報等、多様な意味で使われる。
1a. https://b.hatena.ne.jp/entry/(s/){1}("s/"はセキュアサイトのエントリページURLに付加される[16])
1b. https://b.hatena.ne.jp/entry/{2}(正しく処理された場合、1aにリダイレクト)
1c. https://b.hatena.ne.jp/entry/{3}(1aにリダイレクト)
1d. https://b.hatena.ne.jp/entry?url={2}(1aのエイリアス)
{1} | URL | ブクマされたURL(原則として、パーセントエンコード[19]されたもの)の一部を入力 |
{2} | URL | URL(同上)全体を入力 |
{3} | エントリID | 下記参照 |
はてブに登録されたURLはIDと1対1対応する。IDは、当初は1から始まる連番だったが、2018年12月頃から62bit以上の乱数値になった[20]。
余談だが、かつては番号が桁繰上りするたびにキリ番ゲッターがブクマしに集っていたようだ。理由は不明だが、欠番になったキリ番もある(キリ番と前後のエントリページ参照)。
URLとwebページは1対1対応するとは限らない[21][22]ため、エントリ・ブコメは容易に分散する。
その改善のため2019年2月にはてブの仕様が変更され、一定の規則でエントリが収斂されるようになった[23]。現在エントリページは、複数のエントリと1対多対応していて、対応するどのID・URLを引数にしてもアクセスできる。
参考[1]のエントリページに対応するIDを昇順にし、各IDの確認できる最古のエントリをまとめた。非公開や削除済のブクマがあるせいか、完全な日付昇順ではない。
26 | 2005/2/10 | nabeso | http://b.hatena.ne.jp/help |
252298 | 2005/5/24 | nobody | http://b.hatena.ne.jp/help#tag |
261369 | 2005/5/26 | another | http://b.hatena.ne.jp/help#favorite |
308455 | 2005/6/9 | naoya | http://b.hatena.ne.jp/help?mode=design |
361820 | 2005/6/23 | superartlife | http://b.hatena.ne.jp/help#collection |
368560 | 2005/6/24 | kurimax | http://b.hatena.ne.jp/help?mode=button |
369059 | 2005/6/24 | takeshi-s | http://b.hatena.ne.jp/help?mode=button#jugem |
461306 | 2005/7/18 | kidaglass | http://b.hatena.ne.jp/help?mode=button#livedoor |
540219 | 2005/8/9 | kei-s | http://b.hatena.ne.jp/help?mode=tipjar |
990732 | 2006/1/14 | takef | http://b.hatena.ne.jp/help?mode=tipjar#autodiscovery |
1021385 | 2005/12/27 | tosch0718 | http://b.hatena.ne.jp/help#note_about_title |
1051040 | 2006/1/7 | junky0 | http://b.hatena.ne.jp/help?mode=button#seesaa |
1148729 | 2010/7/8 | b01012109 | http://b.hatena.ne.jp/help/ |
1785475 | 2006/4/20 | eiichiman | http://b.hatena.ne.jp/help?mode=design#module |
2361801 | 2006/7/19 | yamifuu | http://b.hatena.ne.jp/help#keybind |
4670135055805666274 | 2020/1/7 | aoyamayuki | https://b.hatena.ne.jp/help/ |
以下に該当するIDやURLを引数として入力すると、エントリの一部または全ての情報の取得に失敗する
{1} | ユーザID | |
{2} | ブクマ日 | "YYYYMMDD"の形式で、当該ユーザがブクマした日付を入力 |
{3} | エントリID | 当該ユーザがブクマしたURLのIDを入力 |
{4} | エントリID | エントリページに対応するどのIDでも入力可 |
はてブの全エントリから検索可能[29]。ただし単語の区切の判定が完璧でないため、連語や複合語等が関わると上手く動かない場合がある(例えば、「更年」で検索したら「更年期障害で欠勤、認められず」というタイトルがヒットしなかった)。
1a. https://b.hatena.ne.jp/search/{1}?q={2}(&sort={3}&users={4}&safe={5}&date_begin={6}&date_end={7}&page={8}&mode={9})
1b. https://b.hatena.ne.jp/t/{2}(1aにリダイレクト)
{1} | 検索範囲 | "tag""title""text"のいずれかを入力 |
{2} | 検索文字列 | ブクマに付帯するタグ・ページタイトル・ページ本文中のいずれかで、指定した文字列を検索する。複数の文字列を"%20""|""-"で連結すると、AND・OR・NOT検索できる[30]。"site:{URL}"の形式で入力すると、URL絞込検索できる |
{3} | 表示順 | "popular"を指定すると、結果がブックマーク登録数降順で表示。デフォルトは新着順 |
{4} | ブクマ件数 | 指定件数以上のエントリで絞込検索する。デフォルト値は3 |
{5} | セーフサーチの有無 | "off"を指定できる。デフォルトはオン |
{6} | 検索期間の始め | "YYYY-MM-DD"形式で指定した日付以降のエントリで、絞込検索 |
{7} | 検索期間の終り | "YYYY-MM-DD"形式で指定した日付以前のエントリで、絞込検索 |
{8} | ページ番号 | |
{9} | "rss"を指定できる | |
{10} | URL | 指定URLで絞込検索 |
{11} | 表示順 | "count""hot"を指定すると登録数降順、"eid"で新着順で表示。デフォルトは、ブクマ3件以上のエントリのみ新着順 |
1a. https://b.hatena.ne.jp/{1}/(?page={2})
1b. https://b.hatena.ne.jp/{1}/?tag={3}(&tag={3}&page={2})
1c. https://b.hatena.ne.jp/{1}/{3}(/{3})(1bのエイリアス)
1d. https://b.hatena.ne.jp/{1}/{4}
1e. https://b.hatena.ne.jp/{1}/?url={5}(&page={2})
1f. https://b.hatena.ne.jp/{1}/bookmark(1aのエイリアス)
2a. https://b.hatena.ne.jp/{1}/bookmark.rss(?page={2})
2b. https://b.hatena.ne.jp/{1}/bookmark.rss?tag={3}(&tag={3}&page={2})
2c. https://b.hatena.ne.jp/{1}/bookmark.rss?date={4}
2d. https://b.hatena.ne.jp/{1}/bookmark.rss?url={5}(&page={2})
2e. https://b.hatena.ne.jp/{1}/rss(2aにリダイレクト)
3. https://b.hatena.ne.jp/{1}/search.data(?limit={6}&offset={7}) [31]
{1} | ユーザID | |
{2} | ページ番号 | |
{3} | タグ | 指定タグで絞込検索。2件以上指定するとAND検索できる |
{4} | ブクマ日 | "YYYYMMDD"形式で指定した日付で絞込検索 |
{5} | URL | 指定URLで絞込検索。部分一致検索可能だが、URIスキームから入力しないと無効 |
{6} | 最大取得件数 | デフォルト値は全件 |
{7} | オフセット | 表示結果の先頭が、指定した値だけ後ろにずれる |
前節とほぼ同様だが、利用可能なオプションが多い[32・33]。
余談だが、カラースターの価値は緑5円・赤12円・青110円・紫890円程度のようだ[34]。
1 | ヘルプトップ - はてなブックマークヘルプ | https://b.hatena.ne.jp/help/ | 4670135055805666274 |
2 | はてブAPIでwebサービスを作りたい全ての人に向けて書きました | https://syncer.jp/hatebu-api-matome | 264997023 |
3 | カテゴリトップ「テクノロジー」を新設し、グローバルナビゲーションの挙動を変更しました - はてなブックマーク開発ブログ | https://bookmark.hatenastaff.com/entry/2015/11/05/151221 | 4667408542014962466 |
4 | はてブのホットエントリーのRSS一覧 - まんとるぽっと | https://www.mantol.net/entry/20120601/1338517941 | 4699737458651148386 |
5 | 【追記あり】トップページやカテゴリページなどのメディア面をリニューアルしました - はてなブックマーク開発ブログ | https://bookmark.hatenastaff.com/entry/2018/03/22/161110 | 4667408571006016450 |
6 | 編集とユーザー活動とエンジニアリングを融合した「特集機能」を始めます - はてなブックマーク開発ブログ | https://bookmark.hatenastaff.com/entry/2015/08/17/150654 | 4667408546846804962 |
7 | [FAQ]はてなブックマークの「総合」カテゴリーと「一般」カテゴリーの違いはどこにある? | https://anond.hatelabo.jp/20200108201212 | |
8 | 【自由研究】はてなブックマークにおける自動カテゴリ分けの傾向と所感 - AQM | https://aqm.hatenablog.jp/entry/2019/08/06/180100 | 4672608930549728738 |
9 | フィードバックフォームおよびカテゴリ変更依頼フォーム設置のお知らせ - はてなブックマーク開発ブログ | https://bookmark.hatenastaff.com/entry/2018/12/11/163453 | 4667408557584232770 |
10 | 新しいトップページの一覧性を高めました - はてなブックマーク開発ブログ | https://bookmark.hatenastaff.com/entry/2013/02/06/000000 | |
11 | 2008-11-07 - はてなブックマーク開発ブログ | https://bookmark.hatenastaff.com/entry/2008/11/07/000000 | |
12 | はてなブックマーク - 人気エントリー - 総合 - 2011年12月5日 | https://b.hatena.ne.jp/hotentry/all/20111205 | |
13 | はてなブックマーク - 人気エントリー - 2008年11月1日 | https://web.archive.org/web/20170815132626/http://b.hatena.ne.jp/hotentry/20081101 |
1985年にスーツケースに受話器をつけたクソデカい携帯電話から23年後に日本でiPhoneが発売された。
携帯電話が一般的に広まった時期※3から考えると10年程しか活躍しなかった。勿論スマホが発売され今もガラケーを使っているユーザーはいるが。
スマホ自体は1992年に開発、94年に販売※されているが、世界的に普及したのは2007年のiPhoneの存在が大きい。
それから10年以上経った今もスマホ主流こ世界は変わらず、グーグルグラス(まだ法人向けしかない)やVRゴーグルの流行の兆しはないが、まだスーツケースに受話器がついているクソデカ携帯電話みたいなレベルなのだろうか?それともARやVR以外の新しい技術があって、それがクソデカ携帯電話なのだろうか?
いずれにせよ、次の新しい何かができるのをとても楽しみにしている。
※1
https://mobile.nuro.jp/mvnolab/articles/202012_87/
※2
フェミの正体みたりって感じだな
あなたたちの求めて戦った民主の力は我々日本・台湾・欧州・アメリカ・オーストラリア・インドが引き継ぎます
「天安門」元リーダーがNYで惨殺…犯人の女性に中国の“刺客”説が浮上
天安門事件」の学生リーダーのひとりだった弁護士・李進進Photo: 対話中国(Dialogue China Think Tank)
Photo: 対話中国(Dialogue China Think Tank)
1989年の「天安門事件」につながる民主化運動の中で学生リーダーのひとりだった弁護士が白昼のニューヨークで惨殺された。犯人の女は現行犯逮捕されたが、不可解な動機や言動から、北京から刺客としてニューヨークへ放たれたのではないかと疑う者も多い。
22ヵ月間投獄され、亡命
「天安門事件」の学生リーダーのひとりだった弁護士・李進進(リィ・ジンジン、米国名ジム・リー、66)が、3月14日正午前、米ニューヨークのクイーンズ区・フラッシング39番街にあるビル4階の事務所で刺殺された。享年66だった。
当日、李進進の事務所には、3日前に来訪したばかりの中国人女性・張暁寧(ヂャン・シァオニン、25)がケーキを持参し訪れた。11時44分ごろ張は突然、「今日は法律の用件で来たわけではない」と言いつつ李の背後から彼の首を片腕で強くロックし、コートの内ポケットから素早くナイフを取り出して、ためらい無く李の頸動脈を一撃。続けて頸部、胸部、腹部をメッタ刺しにした。
目撃者によると、張は素早くナイフを取り出しためらい無く頸動脈を一撃したことから、相応の訓練を受けたとみられる。
瀕死の李はニューヨーク・プレスビティリアン・クイーンズ病院に搬送されたが、12時8分に出血多量で死亡が確認された。
湖北省武漢市生まれの李進進は1970年、15歳で中国人民解放軍に入隊し、除隊後、文民警察組織の中華人民共和国人民警察に勤務。1979年、湖北財経学院(現・中南財経政法大学)に入学し、のち北京大学の博士課程で学ぶ。
1989年の「天安門事件」期間中はデモで重要な役割を果たした労働者団体・北京工人自治連合会の法律顧問を務めた。同年6月4日に人民解放軍が天安門広場のデモ隊を虐殺したあとは故郷の武漢へ逃げ帰るが、人民を煽動した容疑で逮捕され、22ヵ月間投獄される。
釈放後は起訴を免れ、1993年に渡米。コロンビア大学、ウィスコンシン大学で学び、レストランで下働きしつつ法学博士号を取得。卒業後、ニューヨーク州で弁護士資格を取得した。
犯人の張暁寧は現行犯逮捕された。張は1997年河北省邯鄲市生まれで、北京の大学で学び、2021年8月下旬にF-1学生ビザで米国に入国。渡米直後の2021年9月14日、国連通常総会の開会日当日に張は、国連本部の外でプラカードを持ち、北京市内の精神病院に強制入院させられたことを非難し、彼女をレイプした北京市公安局の警官を厳罰に処すよう訴えるデモンストレーションを繰り返した。
国連本部の外で通常総会当日にプラカードを持ちデモンストレーションをする張
国連本部の外で通常総会当日にプラカードを持ちデモンストレーションをする張
その後、李の存在を知った張は、李が法的な手助けをしてくれるものと期待し、3月11日、李の事務所を訪れた。
李の親友弁護士・朱偉は「後の祭りだが、李進進はあの女に関わるべきではなかった。11日に事務所に来た女は泣きながら、数日前に米国移民帰化局(BCIS)の移民面接に落ち、貧しく無一文同然で、中国で警官にレイプをされたと訴え、庇護を求めた。李は心優しい男。彼女を無償で助けるつもりでいた。あとで女は李に、自分から受信したメールを全部削除しろと要求したが、彼は削除しなかったようだ」と悔しがった。
李進進弁護士事務所向かいの保険会社職員は11日の凶行について、「たまたま開いていたドアから事務所内を見たところ、女性が興奮して、物凄い形相で李弁護士に詰め寄っていた。李弁護士はとても物腰の柔らかな紳士で、事務所の女性職員が慌てて、興奮している女性を彼から引き離した」
「李弁護士が静かに『オフィスで騒がないで。必要なら一緒に警察へ行ってあげましょう』と話すと、女性はその3倍を言い返していた。暴力的な態度で大騒ぎするのを見かねた職員が警察に通報したため、警官が2人来た。李弁護士が警官に、大丈夫だから彼女を逮捕しないでと言うと、女性はそのまま逃げるように事務所を立ち去った」
天安門事件が起きた1989年当時、中国人民解放軍の女性記者だった江林 Photo: The New York Times天安門事件から30年目の初証言──元「人民解放軍・女性記者」が見た“地獄”
カメラの前で逆上
張暁寧は殺人罪で起訴され、3月14日19時37分、警察官によってニューヨーク市警察第109分署から勾留先に移送された。その際、「なぜ殺したのか?」「悔いてはいないのか?」などメディアから中国語で問われた張は激昂しながら、叫んだ。
「後悔なんかしてねーーわッ!」
「後悔しているとしたらお前らの裏切りだ! 中国人なのに反共産主義者を叫びやがって!」
「おまえらは無数の学生を傷つけてきたのに、まだ学生を傷つけるのか!」
【#中国】
米国に住む中国出身の女性、张晓宁 が、天安門学生運動の指導者であった李进进氏(66歳)をナイフで殺害。女性は「おまえらは中国人でありながら、中国共産党に背いている!」と叫んでいる。
米国に住んでいてもこれか。共産党の洗脳、恐ろしすぎる…????
— NEKO????⬛????????????????⬛????????????????⬛ (@usapepe) March 16, 2022
在米華人メディアへの敵視発言から、張暁寧が中国共産党の熱烈な支持者ということが明らかになった。そして留学生である自身は、思うような庇護が与えられない被害者というスタンスだ。
だが、計画的に成人男性を刺殺するような根性の据わった女が、自身をレイプしたという中国警官ではなく、たった一度しか会ったことのない弁護士を刺し殺すというのは説得力に欠ける。
張は学生ビザで渡米したが、これまで一度も通学した形跡が無い。そもそも新型コロナウイルスが蔓延している時期に、中国当局は一般人民の出国許可は出さない。
張は李進進の前に、在米民主団体の中国民主人権連盟に、中国のニューヨーク総領事館から警告があり、圧力を受けていると語り、庇護を求めたという。
殺人罪と銃刀法違反で起訴された張暁寧は3月18日、クイーンズ区刑事裁判所に初出廷する予定だったが、精神不安定を理由に出廷を拒否した。地元紙によると、最高25年の実刑判決か終身刑が科される可能性があるという。
李進進はこれまで、中国政府に迫害されて来た多くの中国人を助けて来た。経済的に困窮している移民からはいかなる代金も受け取らなかったという。筆者にはこの李自身の同胞への献身が命取りの引き金になったような気がする。
北京・中央美術学院の学生によって天安門広場に建てられた「民主の女神」像(1989年6月1日撮影)天安門事件を風化させたい中国共産党─追悼日直前に香港の記念館が休館した背景とは
李進進は、「天網行動」「猟狐行動」(海外逃亡中の知能犯や経済犯の逮捕と不正取得された資産を没収する中国政府の特別捜査キャンペーン)のターゲットになったり、指名手配されたりした人民に米国での法的保護を提供してきた。
特権を利用して実際に不正蓄財や収賄した党員、公務員、汚職事件容疑者などの国外逃亡者が逮捕されるのはともかく、「天網行動」「猟狐行動」は、中国政府の意に沿わない経営者、弁護士、学者、研究者、作家、ジャーナリスト、NGO(非政府組織)関係者、アーティストなどの罪をでっちあげて中国に強制送還する口実にも使われているからだ。李もたびたび「『天網~』『猟狐~』は反腐敗運動ではなく、反体制弾圧の手段」と批判してきた。
李進進は、2008年に中国当局に香港で逮捕され、金融詐欺罪で起訴された「天安門事件」の学生リーダーのひとり、周永潤(ヂョウ・ヨンルン、55)の弁護を担当した。
また、中国政府が政敵を逮捕するために、 国際刑事警察機構(インターポール)が加盟国の申請に応じて発行する国際手配書「レッド・ノーティス」を濫用することに反対していた。
中国で逮捕状が出ている被疑者などについて人物を特定し、海外で発見し次第、中国へ強制送還するよう要請できるものだからだ。
「李進進が“天安門”の元リーダーだから殺された」という憶測は的外れだろう。今年は「天安門事件」から33年。当時、民主化へのうねりを作った学生運動リーダーたちは既に政治的影響力を持たず、中国共産党の脅威ではない。
今になって李進進が「消された」とすれば、「33年前のリーダー」だったからではなく、習近平政権が本気で取り組んでいるキャンペーン「天網行動」「猟狐行動」を邪魔する存在とされたからにほかならないからだろう。
在米弁護士仲間は、李が弁護活動中に得た中国共産党の特務(諜報・謀略・秘密機関)の活動資料を米連邦捜査局(FBI)に提出するのを阻止するために殺したと疑っている。
李進進が惨殺された2日後の3月16日、米司法省は、中国の情報機関、国家安全部の指示を受けて米国在住反体制派中国人に監視や嫌がらせを行っていたスパイ容疑で王書軍、劉藩、林啓明、孫強、マシュー・ツブリスの5人を逮捕し、起訴したと発表した。
暗殺犯の張暁寧は、北京で特務の訓練を受けた捨て駒の刺客だろう。渡米後の反中パフォーマンスやテレビカメラの前の支離滅裂な絶叫は、精神に異常があることを印象づけるための演技と思われる。
李進進の葬儀は事務所近くのチュンフック葬儀場で27日午後に挙行される。関係者は既に、FBIに対し、李殺害事件の捜査を要請した。FBIの捜査によって、李進進が「消された」真相は明らかになるのだろうか。(Text By Jun Tanaka)