はてなキーワード: echoとは
𩸽(ほっけ)のUnicode符号位置はU+29E3D。これをUTF-16で表すとする。
U+10000以上の符号位置の文字をUTF-16で表す場合、サロゲートペアによって表現される。
まず、Unicode符号位置を表す「U+n」のnに対して、0x10000を減算する。
𩸽はU+29E3Dだから、0x10000を減算すると、nは0x19E3Dとなる。
(なお、Unicode符号位置が0x10000未満である場合は、それは16ビットであり(なぜなら0x10000未満であるとは、最大でも0xFFFFだから)、2バイトで表現される。これはBMPの範疇であり、サロゲートペア表現(BMP外の文字表現)の出番はない。)
(また、0x10000以下の符号位置のうち、Unicode符号位置U+D800~U+DFFFはサロゲートペア用に確保された符号位置領域であり、この領域内の一符号位置に対応する文字は無い。)
$ echo "obase=2; ibase=16; 19E3D" | bc 11001111000111101 ↓(不足した桁をゼロで埋める) 00011001111000111101
となる。
この20けた(0001100111 1000111101)のうち、
①上位10桁(0001100111)に対して0xD800(1101100000000000)を足す。これを上位サロゲートと呼ぶ。
1101100000000000 0001100111 ↓ 1101100001100111
②下位10桁(1000111101)に対して0xDC00(1101110000000000)を足す。これを下位サロゲートと呼ぶ。
1101110000000000 1000111101 ↓ 1101111000111101
③上位サロゲートと下位サロゲートの組み合わせ(1101100001100111 1101111000111101)が、UTF-16サロゲートペア表現そのものである。
$ echo "obase=16; ibase=2; 11011000011001111101111000111101" | bc D867DE3D
$ unicode 𩸽 UTF-16BE: d867de3d (※"BE"とはbig-endianの略であり、「この16進表現は左から上位バイトとして読みますよ」という意味)
Unicodeにおいて、本来、文字は16bit、つまり65535文字で十分表現できるはずだった。
しかし中国の古代漢字などの文字も収録しようとすると、とても16bit程度では表現できないことが分かった。
そこで、UTF-16という符号化方式においては、サロゲートペアという工夫を使うことで、10万以上の文字を扱えるように仕様を整えた。
正確にいうと、2byte(16bit)では65536文字が表現できる。
ところで、0xD800~0xDFFF(2048の符号位置)はサロゲートペア用に確保されているため、特定の文字の符号位置としては利用できない。
その一方、サロゲートペアによって20bit分(1048576文字分)の符号位置を確保できたため、UTF-16では、
$ echo $((65536-2048+1048576)) 1112064
ミシガン大学の研究者らによる最新の研究によって、Reddit をはじめとするソーシャルメディアにおけるコンテンツモデレーションに政治的偏向が存在する可能性が明らかになりました。
特に、モデレーターの偏見によってエコーチェンバー(同質的な意見に囲まれる現象)が形成され、公的な議論がゆがめられるリスクが指摘されています。
ミシガン大学のチーム(リーダー:Justin Huang 氏)は、複数のサブレディットでの 6 億以上にのぼるコメントを分析しました。
その結果、モデレーターの政治的嗜好が、ユーザーのコメント削除に影響を与えている実態が確認されました。
とくに、モデレーターと政治的に対立する意見のコメントは、削除される可能性が統計的に有意に高いことが判明しました。
また、政治的傾向を 0(強硬な共和党支持)〜100(強硬な民主党支持)のスコアで測定したところ、一般ユーザーの平均スコアは 58、モデレーターは 62 であり、全体的に左寄りの偏向が示されています。
エコーチェンバーの形成は、民主主義の規範に対し深刻な懸念をもたらします。多様な意見が排除され、特定の見解ばかりが強調されることで、以下のような問題が指摘されています:
研究チームは、この問題を是正するために以下のアプローチを推奨しています:
1. 明確なガイドラインの整備: コンテンツ削除の「正当な理由」と「不当な理由」を明確に定めることで、モデレーターの恣意的判断を抑制し、公平性を担保する。
2. 削除の透明性向上: ユーザーが自身のコメントが削除された際に通知を受けられる仕組みや、削除件数などの統計情報を公開することで、信頼性とアカウンタビリティを高める。
3. 監視とオーバーサイト機能の導入: モデレーターの判断傾向をモニタリングし、偏向的な削除を検知できる仕組みを整備することで、公正な言論空間を促進する。
Reddit や他のユーザー主導型プラットフォームにおいては、モデレーションの偏向が意図せずに言論空間を歪め、エコーチェンバーを生み出すリスクがあります。
しかし、明確なガイドライン、透明性の確保、監視メカニズムの導入によって、公平かつ多様な議論を支える可能性が示されました。
Amazonの新しい音声アシスタント「Alexa+」、優先的に招待されるための条件とは
Amazonの新しい音声アシスタント「Alexa+」への招待が始まっていることを、海外メディアが報じている。
Alexa+は、Amazonの音声アシスタント「Alexa」のアップデート版で、生成AIを活用しているとされる。Amazonプライム会員には無料で、それ以外には月額19.99ドルで提供されることが2月に発表されたが、その後はほとんど音沙汰がなく、また、実際に使っているユーザーの声もほとんど見られないと「ロイター」が先日報じたばかり。今回、「The Verge」の取材に対してAmazonの広報担当者が語ったところによると、実際には招待された何十万人ものユーザーがAlexa+を利用中であるとのこと。同社はEcho Showデバイスを所有するユーザーを優先的にサポートすると発表していることから、いち早くこのAlexa+に招待されたい場合は、Echo Showデバイスを利用できるようにしておくのが効果大とみてよさそうだ。
https://profile.hatena.ne.jp/dorawii_bukuma/
はてなのサイト側で読み込まれているはずのrksトークンを生成する関数を直接叩く方法がどうしても分からず結局request処理を自分で書く方法ではなく自動でUI側の保存ボタンをクリックするという無難な方向に落ち着いた。
最初から後者の方法をとっていればもっと全然早く作れたのにというは所詮言い訳か。
とにかくスクリプトを公開しておく。
@echo off
cd /d "C:\Users\user\Documents\jsscript"
:: Nodeサーバーを別ウィンドウで起動
start /min "" node run-batch-server.js
:: Pythonサーバーを別ウィンドウで起動(hatenaserver配下)
start cmd /k "" python hatenaserver\server.py
{
"username": "",
"password": ""
}from flask import Flask, request, jsonify
import json
import os
from hatena_client import HatenaClient
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
config_path = os.path.join(os.path.dirname(__file__), 'config.json')
with open(config_path, encoding='utf-8') as f:
config = json.load(f)
@app.route('/bookmark', methods=['POST'])
def handle_bookmark():
data = request.json
url = data.get("url")
if not url:
return jsonify({"error": "Missing URL"}), 400
client = HatenaClient(config["username"], config["password"])
client.start_browser()
if not client.login():
client.quit()
return jsonify({"error": "Login failed"}), 403
success = client.add_bookmark(url)
client.quit()
return jsonify({"status": "ok" if success else "fail"})
if __name__ == "__main__":
app.run(port=12347)
// ==UserScript==
// @name 自動セルクマ送信
// @namespace tampermonkey.net/
// @version 2025-08-07
// @description try to take over the world!
// @author You
// @match anond.hatelabo.jp/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
const url = location.href;
if (!/^https:\/\/anond\.hatelabo\.jp\/\d+$/.test(url)) return;
const editLink = document.querySelector('a.edit');
if (!editLink) {
// 既に編集ページなので処理をスキップ
console.log('編集リンクが存在するため、スクリプトを終了します。');
return;
}
fetch('localhost:12347/bookmark', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ url: url })
}).then(r => console.log("通知成功")).catch(e => console.error("通知失敗", e));
})();
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250821192753# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaKb0qwAKCRBwMdsubs4+ SHfiAQDcXmTHBaZ5Zzr1KI/OxZ0xl69oevOdy1FXJYwYvsmo5AD/ZPtZiO1JgTDj m+27iymlkdzIXOIGWfC82UTr1mJ7EwU= =YoV+ -----END PGP SIGNATURE-----
@echo off setlocal set TEMPFILE=%TEMP%\gpgmessage.asc ( echo -----BEGIN PGP SIGNED MESSAGE----- echo Hash: SHA512 echo. echo https://anond.hatelabo.jp/20250703153633# echo -----BEGIN PGP SIGNATURE----- echo. echo iHUEARYKAB0GT6pgAKCRBw3s9u4+ echo SNC1AQCAXXWIQTEe8eLwpVRSViDKR5wMdsubD0OIay9wQpTMeI3NvH7tjgEA9lgwrA8OSykP echo pvYgtiTPIgJAbdGrrmPPYKMdsubss4+SAUCa4YrDbL/CSdnwQEJ/bOIOPgE= echo =AWTp echo -----END PGP SIGNATURE----- ) > "%TEMPFILE%" gpg --verify "%TEMPFILE%" endlocal gpg: CRCエラー。04838A - 0164E9 gpg: packet(2) too short gpg: 署名が見つかりません gpg: 署名を検証できませんでした。署名ファイル (.sigや.asc)がコマンド行の最初でなければ ならないことを念頭においてください。
はい偽物
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250703181948# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaGZLQgAKCRBwMdsubs4+ SHquAQDGBsh153Z4upz8exyB3E0SnX5OOG+Wm1bCTdymuiGYbwEAyO7LOCYC42K7 1dlBoZ4ZsNyZj4SO5Erg4WnqVK+drAE= =eCvB -----END PGP SIGNATURE-----
@echo off setlocal set TEMPFILE=%TEMP%\gpgmessage.asc ( echo -----BEGIN PGP SIGNED MESSAGE----- echo Hash: SHA512 echo. echo https://anond.hatelabo.jp/20250628143524# echo -----BEGIN PGP SIGNATURE----- echo. echo iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaF9+nAAKCRBwMdsubs4+ echo SBUuAQDDWgtyvSQb7Rh40m24rYf2Q9M3PITPsX8cI18hoCodhwEAlcFyrg0iwt4N echo 4VEKGp/kCscTYhxt2omecTQzaGl/LAc= echo =IS8V echo -----END PGP SIGNATURE----- ) > "%TEMPFILE%" gpg --verify "%TEMPFILE%" endlocal gpg: 06/28/25 14:33:16 ���� (�W����)に施された署名 gpg: EDDSA鍵C47BC78BC29551495883291E7031DB2E6ECE3E48を使用 gpg: "dorawii <dorawii200@gmail.com>"からの*不正な*署名 [究極]
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250628144429# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaF+BaQAKCRBwMdsubs4+ SIvZAQCoSZtUix6tusFn7IPp/6BaPyNAwaAa432iHc2w/hkLKwEA5FABZckLVBds cIDPcfB79cyOJ7pg+hH89lJMtbKOKw8= =gqV1 -----END PGP SIGNATURE-----
蛍光灯の白い光が、山田(ヤマダ)の顔にこびりついた疲労を容赦なく照らし出していた。彼の手に握られているのは、「たんぱく質が摂れる!グリルチキン弁当(塩麹仕立て)」。たんぱく質。その言葉だけが、生命維持活動の免罪符のように鈍く響く。レジの無人端末がBlink Payの緑のアイコンを点滅させた。一瞬の網膜認証。ピッ、という電子音と共に、彼の口座から598円が永久に消滅した。
イートインコーナーの、油でベタつくカウンターに弁当を置く。隣では、同じような顔をした男がカップ麺の汁をすする音が、まるで深海魚の呼吸音のように聞こえた。山田は震える指でスマートフォン――黒い鏡(ブラックミラー)――のロックを解除する。
そこはECHO。
混沌(カオス)の濁流。指でスワイプするたび、視界に飛び込んでくるのは意味を剥ぎ取られた言葉の残骸だ。
>>【悲報】人気VTuber、配信中の「おにぎりの食べ方」で国際問題に発展か!?
>><激震>Veritas社、次世代AI「アトラスMk-Ⅱ」の倫理憲章を”非公開”で改定の動き
>>【速報】政府、”コモン・ノイズ税”導入を検討。SNS利用1日1時間超で課税へ
>>リーク情報:ペイウォールの向こう側で「情報貴族」たちが我々を”養殖豚”と呼称している件
ああ、クソ。まただ。脳みそが沸騰する。
おにぎりの食べ方? 知るか、そんなもん。非公開で改定? だからなんだ。コモン・ノイズ税? ふざけるな、これ以上何を奪う気だ。養殖豚……だと?
山田の指が、思考よりも速く動き出す。それはもはや思考の出力ではない。神経系の痙攣であり、魂の嘔吐だ。彼は、3番目の記事タイトルを引用し、震える親指で虚空に言葉を叩きつける。
「いいか、お前ら!これは支配層による言論弾圧の第一歩だ!俺たちの言論の自由を奪う気だ!VTuberのおにぎりなんぞに現を抜かしてる場合じゃねえんだよ!目を覚ませ!この”養殖豚”どもがァッ!!!」
送信。
エンターキーを叩き潰す。やった。言ってやった。真実を、この淀んだノイズの海に叩きつけてやった。数秒もしないうちに、黒い鏡に通知が灯る。❤️(いいね)が3つ。🔄(リポスト)が1つ。脳内に、安っぽい合成麻薬のような快感がじわりと広がる。そうだ、オレは間違ってない。仲間がいる。
山田は、返信欄に湧き上がった罵詈雑言に、さらに言葉を重ねようとする。
「は? 養殖豚はお前だろ」「ソースは? あ、金なくて読めないかw」「またお前の妄想かよ、病院行け」
うるさい。うるさい。うるさい! お前らこそ、Veritasの犬め!
彼はグリルチキン弁当の蓋を剥ぎ取った。塩麹の匂いと、プラスチックの匂いが混じり合う。チキンの表面には、焼き目を模しただけの、ただの茶色いインクが印刷されている。彼はその偽物の焼き目を睨みつけながら、一口頬張った。パサパサの肉が、砂のように口の中で崩れていく。
その時、視界の端に、向かいの席に座った男の黒い鏡が映った。
男は、山田がたった今「養殖豚!」と罵倒した相手の一人だった。男もまた、同じ顔で、同じように冷めた弁当を口に運びながら、山田の投稿に「病院行け、クズが」と打ち込んでいた。
二人の視線は、決して交わらない。
互いを認識することもなく、ただ、それぞれの黒い鏡の中に映る「敵」の幻影と、永遠に殴り合いを続けるのだ。蛍光灯の白い光の下で、二匹の養殖豚が、静かに餌を食んでいた。
……なんだ、この茶番は。
↓起きてみたら署名消してて草。
https://anond.hatelabo.jp/20250627020109#
もし署名あったらこんな感じで検証したうえで偽者と断罪できたのに。
@echo off setlocal set TEMPFILE=%TEMP%\gpgmessage.asc ( echo -----BEGIN PGP SIGNED MESSAGE----- echo Hash: SHA512 echo. echo https://anond.hatelabo.jp/20250619161207 echo -----BEGIN PGP SIGNATURE----- echo. echo iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaFO4RgAKCRBwMdsubs4+ echo SNilAP9Cf9so4SWzD5wz0FehUCk7D2pwNXQti3/wtW6WI9KcSwEA24kjl/LZ0HQR echo hlfpY+2Q4arL/PO+eRJLjcWEEpTUnQg= echo =59FW echo -----END PGP SIGNATURE----- ) > "%TEMPFILE%" gpg --verify "%TEMPFILE%" endlocal
んでもって、お前は余命宣告通りに死んだだけだよ。哀れだねえって言おうと思ってたのに。
https://anond.hatelabo.jp/20250627020109#
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250627124045# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaF4TRwAKCRBwMdsubs4+ SOCDAQDBL0SoFeFj4mboawI0Sw+skOIXsLNG//45cycuXkwjLAEA5guPxypVdmsf r96q5hRrf/HwwPllXRj5+Jfw09boKAg= =eNjW -----END PGP SIGNATURE-----
一度投稿したうえで別タブを開いてプログラム的(fetch)に送信してその別タブが閉じられる仕組み。
// ==UserScript==
// @name PGP未署名検出と別タブ自動編集
// @namespace http://tampermonkey.net/
// @version 1.0
// @description PGP署名がない投稿を自動編集ページへ誘導
// @match https://anond.hatelabo.jp/*
// @grant GM_setValue
// @grant GM_getValue
// @grant GM.openInTab
// ==/UserScript==
(function () {
'use strict';
const body = document.getElementById('entry-page');
if (!body) return;
const titleText = document.title;
if (!titleText.includes('dorawii')) return;
const pgpRegex = /BEGIN.*PGP(?: SIGNED MESSAGE| SIGNATURE)?/;
const preElements = document.querySelectorAll('div.body pre');
let hasPgpSignature = false;
for (const pre of preElements) {
if (pgpRegex.test(pre.textContent)) {
hasPgpSignature = true;
break;
}
}
if (hasPgpSignature) return;
const editLink = document.querySelector('a.edit');
const childTab = GM.openInTab(editLink.href, { active: false, insert: true, setParent: true });
})();
// ==UserScript==
// @name 編集ページ処理と自動送信・閉じ
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 編集ページで署名処理と送信、タブ自動閉じ
// @match https://anond.hatelabo.jp/dorawii_31/edit?id=*
// @grant GM_getValue
// @grant GM_xmlhttpRequest
// @grant GM_setClipboard
// @grant GM_notification
// @connect localhost
// ==/UserScript==
(async function () {
'use strict';
const shouldRun = await GM_getValue('open-tab-for-edit', '0');
const textareaId = 'text-body';
const textarea = document.getElementById(textareaId);
if (!textarea) return;
const content = textarea.value;
const pgpSignatureRegex = /-----BEGIN PGP SIGNED MESSAGE-----[\s\S]+?-----BEGIN PGP SIGNATURE-----[\s\S]+?-----END PGP SIGNATURE-----/;
if (pgpSignatureRegex.test(content)) {
console.log('[PGPスクリプト] 署名が検出されたためそのまま送信します');
return;
}
const httpRequest = (url, data) => {
return new Promise((resolve, reject) => {
GM_xmlhttpRequest({
method: 'POST',
url: url,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: `value=${encodeURIComponent(data)}`,
onload: function (response) {
resolve(response.responseText);
},
onerror: function (error) {
reject(error);
}
});
});
};
// textarea の値を取得
// 1. 現在のページのURLからURLオブジェクトを作成
const currentUrl = new URL(window.location.href);
// 2. ベースとなる部分 (例: "https://anond.hatelabo.jp") を取得
const origin = currentUrl.origin;
// 3. 'id' パラメータの値 (例: "20250610184705") を取得
const idValue = currentUrl.searchParams.get('id');
// 4. ベース部分とIDを結合して、目的のURL文字列を生成
// idValueが取得できた場合のみ実行する
let newUrl = null;
if (idValue) {
newUrl = `${origin}/${idValue}`;
}
// 5. 生成されたURLを変数に代入し、コンソールに出力して確認
console.log(newUrl);
const valueToSend = newUrl;
try {
const signatureText = await httpRequest('http://localhost:12345/run-batch', valueToSend);
console.log('バッチ応答:', signatureText);
if (!signatureText.includes('BEGIN PGP SIGNED MESSAGE')) {
alert('PGP署名がクリップボードに見つかりませんでした。');
return;
}
const newText = content.replace(/\s*$/, '') + '\n' + signatureText + '\n';
textarea.value = newText;
console.log('[PGPスクリプト] 署名を貼り付けました。送信を再開します。');
const form = document.forms.edit;
const newForm = form.cloneNode(true);
form.replaceWith(newForm);
newForm.addEventListener('submit', async (e) => {
e.preventDefault(); // HTML標準のsubmitをキャンセル
const bodyText = textarea?.value || '';
// reCAPTCHA トークンの取得
const recaptchaToken = await new Promise((resolve) => {
grecaptcha.enterprise.ready(() => {
grecaptcha.enterprise.execute('hoge', { action: 'EDIT' })
.then(resolve);
});
});
// POSTするデータの構築
const formData = new FormData(newForm);
formData.set('body', bodyText);
formData.set('recaptcha_token', recaptchaToken);
formData.set('edit', '1');
try {
const response = await fetch(newForm.action, {
method: 'POST',
body: formData,
credentials: 'same-origin'
});
if (response.ok) {
console.log('送信成功');
window.close();
} else {
console.error('送信失敗', response.status);
}
} catch (err) {
console.error('送信中にエラーが発生', err);
}
});
// プログラム的に送信トリガー
newForm.dispatchEvent(new Event('submit', { bubbles: true }));
} catch (e) {
console.error('バッチ呼び出し失敗:', e);
}
})();
const http = require('http'); const { exec } = require('child_process'); const querystring = require('querystring'); const server = http.createServer((req, res) => { if (req.method === 'GET' && req.url === '/ping') { res.writeHead(200); res.end('pong'); } else if (req.method === 'POST' && req.url === '/run-batch') { let body = ''; req.on('data', chunk => { body += chunk.toString(); }); req.on('end', () => { const parsed = querystring.parse(body); const value = parsed.value || 'default'; // 値を引数としてバッチに渡す exec(`C:\\Users\\hoge\\Desktop\\makesign.bat "${value}"`, { encoding: 'utf8' }, (err, stdout, stderr) => { if (err) { res.writeHead(500); res.end('Error executing batch: ' + stderr); } else { res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); res.end(stdout.trim()); } }); }); } else { res.writeHead(404); res.end('Not found'); } }); server.listen(12345, () => { console.log('Batch server running at http://localhost:12345/'); });
@echo off setlocal enabledelayedexpansion :: 署名するファイル名 set "infile=%~1" set outfile=%TEMP%\pgp_output.asc :: 以前の出力があれば削除 if exist "%outfile%" del "%outfile%" :signloop :: AutoHotkeyでパスフレーズ入力(gpgがパスワード要求するダイアログが出た場合に備える) start "" /b "C:\Users\hoge\Documents\AutoHotkey\autopass.ahk" :: PGPクリア署名を作成 echo %infile% | gpg --yes --clearsign --output "%outfile%" :: 署名が成功していればループを抜ける if exist "%outfile%" ( goto postprocess ) else ( timeout /t 1 > nul goto signloop ) :postprocess powershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body = Get-Content '%outfile%' -Raw; Write-Output ($header + \"`r`n\" + $body + $footer)" powershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body = Get-Content 'signed.asc' -Raw; Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)" endlocal exit /b
#Persistent #SingleInstance ignore SetTitleMatchMode, 2 WinWaitActive, pinentry SendInput password Sleep 100 SendInput {Enter} ExitApp
動けばいいという考えで作っているので余分なコードも含んでいるかもしれない。
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250613185036 -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEv1FQAKCRBwMdsubs4+ SHHkAQDUOLgBcdji2T6MJ7h/vlMdFfGlWAzNdXijjE1gIuEPywEAiMNMZqhrMmtl c7UqRuggNJ/UTa5xTIcKp622+7jJQQg= =Lgkl -----END PGP SIGNATURE-----
はい、**ブロックチェーンを使ったタイムスタンプ**は、「元データそのものを共有せずに、その存在と時刻を証明する手段」として非常に有効です。特に、ハッシュ値をブロックチェーンに記録することで、元データを後から提示するだけで、それがある時刻に存在したこと・改竄されていないことを**誰でも検証可能にする**、という形になります。
あなたの希望(元の文章が掲示板などで変形されても検証可能、あるいは元文不要)に近づけるには、**ハッシュをブロックチェーンに書き込んで、後からそのハッシュに一致する元データを見せる**という形式になります。
---
### 基本の流れ:
2. そのハッシュをブロックチェーンに記録(トランザクションのメモ欄など)
3. 後から誰でもハッシュとトランザクションを照合して、時刻と整合性を検証可能
---
## ✅ 推奨ツール:OpenTimestamps(OTS)
[OpenTimestamps](https://opentimestamps.org/) は、ビットコインのブロックチェーンを用いた無料のタイムスタンプサービスです。
---
## ✅ Windows 11 での手順(OpenTimestamps CLI)
Pythonがまだ入っていない場合は、https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/) からインストーラーを取得し、`Add to PATH` にチェックを入れてインストールしてください。
コマンドプロンプトまたはPowerShellで以下を実行:
```bash
pip install opentimestamps-client
```
たとえば `message.txt` というファイルを用意します(中身は何でもOK)。
```bash
```
これにより、`message.txt.ots` というタイムスタンプファイルが作成されます。
これは「Bitcoinにこのデータのハッシュを記録する要求がされたこと」を表します。
```bash
```
署名がBitcoinブロックチェーンに記録されていれば、次のように表示されます:
```
Success! Bitcoin attests data existed as of 2025-06-08 12:34:56 UTC
```
---
```bash
echo -n "あなたの文" | openssl dgst -sha256
```
このハッシュに一致するファイルを後から提示すれば、それが当時存在していたことを証明できます。
---
## ✅ まとめ
| 特徴 | 内容 |
| ------------- | -------------------- |
| 元文の提示は不要 | ✅(ハッシュが一致すればOK) |
| 改行や掲示板変形の影響なし | ✅(ハッシュが変わらなければOK) |
| 無料かつ自律的 | ✅(Bitcoinブロックチェーン使用) |
| Windows対応 | ✅(Python + CLI) |
---
もしあなたの目的が「一定時刻に自分がその文を作成したことの証明」であるなら、この方法は非常に相性が良いです。
---
必要であれば、GUIツールやウェブインターフェースを使った方法(例:[OpenTimestamps Calendar](https://calendar.opentimestamps.org/))も紹介できます。希望があればお知らせください。
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 20250610095304512 -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEgAgAAKCRBwMdsubs4+ SII/AP9HFG5+U8BfEXzKxSoyEuxm6X/vJjK7Ee7Kwpi/rwQZJgEAorUjMTh9okHu 3WbPvgsSfDyzhpUuwCVsKessR4FSpQE= =VNrS -----END PGP SIGNATURE-----
ようやく(ほぼ)すべてが自動化された。
あとはローカルサーバーの起動をスタートアップに設定する(方法をAIに聞いて指示に従う)だけの消化試合。
署名時要求してくるパスワードを自動入力するahkファイルはドキュメントのAutoHotkey配下に置いた。
バッチファイル(make.sign.bat)はデスクトップに置いた。
#Persistent #SingleInstance ignore SetTitleMatchMode, 2 WinWaitActive, pinentry SendInput お前のパスワード Sleep 100 SendInput {Enter} ExitApp
// run-batch-server.js const http = require('http'); const { exec } = require('child_process'); const server = http.createServer((req, res) => { if (req.url === '/ping') { res.writeHead(200); res.end('pong'); } else if (req.url === '/run-batch') { exec('C:\\Users\\you\\Desktop\\makesign.bat', (err) => { res.writeHead(200); res.end(err ? 'Error' : 'OK'); }) ; } else { res.writeHead(404); res.end('Not found'); } }); server.listen(12345, () => { console.log('Batch server running at http://localhost:12345/'); });
@echo off setlocal enabledelayedexpansion :: ミリ秒単位のUTC時刻を取得 for /f %%a in ('powershell -nologo -command "[int64]::Parse((Get-Date).ToUniversalTime().ToString('yyyyMMddHHmmssfff'))"') do set timestamp=%%a :: 署名するファイル名 set infile=%TEMP%\pgp_input.txt set outfile=%TEMP%\pgp_output.asc :: 以前の出力があれば削除 if exist "%outfile%" del "%outfile%" :: タイムスタンプを原文として保存 echo %timestamp% > "%infile%" :signloop :: AutoHotkeyでパスフレーズ入力(gpgがパスワード要求するダイアログが出た場合に備える) start "" /b "C:\Users\infini\Documents\AutoHotkey\autopass.ahk" :: PGPクリア署名を作成 gpg --yes --clearsign --output "%outfile%" "%infile%" :: 署名が成功していればループを抜ける if exist "%outfile%" ( echo [INFO] 署名成功 goto postprocess ) else ( echo [WARN] 署名失敗、再試行します… timeout /t 1 > nul goto signloop ) :postprocess :: PowerShellで余計な改行なしに |< をつけてクリップボードにコピー powershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body = Get-Content '%outfile%' -Raw; Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)" echo Done. signed.asc created and clipboard updated (no extra blank line). endlocal exit /b
// ==UserScript== // @name PGP署名自動付加スクリプト(GM_xmlhttpRequest版) // @namespace http://tampermonkey.net/ // @version 1.0 // @description 投稿前にPGP署名を付けてから送信(fetch未使用) // @match https://anond.hatelabo.jp/dorawii_31/edit* // @grant GM_xmlhttpRequest // @grant GM_setClipboard // @grant GM_notification // / @connect localhost // ==/UserScript== (function () { 'use strict'; const submitId = 'submit-button'; const textareaId = 'text-body'; const localServer = 'http://localhost:12345/run-batch'; const pgpSignatureRegex = /-----BEGIN PGP SIGNED MESSAGE-----[\s\S]+?-----BEGIN PGP SIGNATURE-----[\s\S]+?-----END PGP SIGNATURE-----/; const httpRequest = (url) => { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: 'GET', url: url, onload: function (response) { resolve(response.responseText); }, onerror: function (error) { reject(error); } }); }); }; const interceptClick = () => { const btn = document.getElementById(submitId); if (!btn || btn.dataset.pgpIntercepted === 'true') return; btn.dataset.pgpIntercepted = 'true'; btn.addEventListener('click', async function (e) { const textarea = document.getElementById(textareaId); if (!textarea) return; const content = textarea.value; if (pgpSignatureRegex.test(content)) { console.log('[PGPスクリプト] 署名が検出されたためそのまま送信します'); return; } e.preventDefault(); e.stopImmediatePropagation(); console.log('[PGPスクリプト] 署名が見つからないため処理を停止し、署名を取得します'); try { await httpRequest(localServer); // バッチ実行 const signatureText = await navigator.clipboard.readText(); if (!signatureText.includes('BEGIN PGP SIGNED MESSAGE')) { alert('PGP署名がクリップボードに見つかりませんでした。'); return; } const newText = content.replace(/\s*$/, '') + '\n' + signatureText + '\n'; textarea.value = newText; console.log('[PGPスクリプト] 署名を貼り付けました。送信を再開します。'); btn.click(); // イベント再発火 } catch (err) { alert('PGP署名の取得または貼り付けに失敗しました。\n' + err); } }, true); }; window.addEventListener('load', () => { setTimeout(interceptClick, 1000); }); })();
プロミスメソッドとか全然まだ理解してなくてそのなかに関数代入したその関数にオブジェクトのプロパティにresponseを?いやまあそのあたりのコードが示すデータの流れが全然理解できないような人間でもここまでできちゃった。
AIすごいなと思うよ。そして思うのは今後重要になってくるのは文法とか自体に詳しいことじゃなくて、そのプログラムの処理内容を指示できるシステムエンジニア的な言語化能力のほうじゃないかなと思った。
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 20250609111559680 -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEbCbwAKCRBwMdsubs4+ SLueAPwOv7PBk4voAe5qlcCEvs/PJhmKc5QAb/1R43JMQFuDZgD/UTPEKsL/PhK9 jFGv2HDXK1dVjLNwvosgX9uYJh5xxwY= =qiOE -----END PGP SIGNATURE-----
ChatGPTにバッチファイルを作ってもらったのでこれからは署名が捗るぞ。これだけ手軽化できたらレスバに入っても署名つけるのも億劫にならずできそうだ。
なにせ文章を書き折ったらあとはバッチダブルクリックしてCtr+Vするだけだ。
名乗る人が増えることを期待して作らせたものを公開しておく。
@echo off setlocal :: ミリ秒単位のUTC時刻を取得 for /f %%A in ('powershell -nologo -command "[int64]::Parse((Get-Date).ToUniversalTime().ToString('yyyyMMddHHmmssfff'))"') do set timestamp=%%A :: PGPクリア署名を作成 echo %timestamp% | gpg --yes --clearsign > signed.asc :: PowerShellで余計な改行なしに |< をつけてクリップボードにコピー powershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body = Get-Content 'signed.asc' -Raw; Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)" echo Done. signed.asc created and clipboard updated (no extra blank line).
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 20250608045542542 -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEUXzgAKCRBwMdsubs4+ SCvuAQDjRjPVCO1F9DgmAKoqKYG7qB9r4e7y2Ky+/umT/OhnygEA8h2NL8zIczSp hcOk/MaDWJJ2Y7WDA3d6gxFakW8TKAw= =HE4/ -----END PGP SIGNATURE-----
新作アニメをポンとお出しするのは無理だけど
バンダイナムコ(!)が少し前に発売したロボゲーをやってみたら?
ま、この動画レビューを見た上でやろうと思えるなら、の話だけど
「フロントエンド不要論」は、最近の開発現場やサーバーレス、クラウド技術の進化に関わっている人たちの間でリアルに実感されている問題です。
• React, Vue, Angular などのフレームワークがどんどん複雑化
• フロントエンドとバックエンドの分離が、**「本当に効率的か?」**という疑問が生じている
• 「最終的にHTMLを描画するだけなら、サーバーでやればよくない?」
• フロントエンドから直接APIを叩く構成では、「APIを守る」ことが難しい
• XSS, CSRF, CORSといった脆弱性に対処し続けるコストが無駄
🚩 3. サーバーレス・クラウド技術が進化し、APIの負担を減らす方向に
• AWS Lambda, API Gateway, Cognitoなどのサーバーレス技術が進化
• フロントエンドがAPIを叩くより、サーバー側で直接処理する方が効率的
• 以前はReactを使用 → ReactをやめてHTMLベースに戻した
• React, Vue, Angularを全廃
• JavaScriptなしで動的なページを実現
3. Laravel(Livewire)
4. Shopify(GraphQLでデータを直接取得)
• フロントエンドを完全分離する構成から、「バックエンドがHTMLを返せばいい」 というシンプルな構成へ移行
• APIの負担を減らすことで、開発効率とセキュリティを向上
✅ サーバーレス時代の最適解:「フロントエンド不要アーキテクチャ」
「フロントエンドを捨てて、サーバーがすべての処理を担う」方向に移行するのが最適解になりつつある。
📌 最適なアーキテクチャ
ブラウザ → サーバー(PHP, Node.js, Go) → API Gateway(Cognito認証)
📌 具体的な実装例(PHP + Cognito + API Gateway)
require 'vendor/autoload.php';
use Aws\CognitoIdentityProvider\CognitoIdentityProviderClient;
use Aws\Exception\AwsException;
$client = new CognitoIdentityProviderClient([
'credentials' => [
'key' => getenv('AWS_ACCESS_KEY_ID'),
'secret' => getenv('AWS_SECRET_ACCESS_KEY'),
],
]);
$email = $_POST['email'];
$password = $_POST['password'];
try {
$result = $client->initiateAuth([
'AuthFlow' => 'USER_PASSWORD_AUTH',
'ClientId' => 'XXXXXXXXXX',
'USERNAME' => $email,
],
]);
setcookie("accessToken", $result['AuthenticationResult']['AccessToken'], [
'samesite' => 'Strict'
]);
header("Location: dashboard.php");
}
?>
🚀 **「フロントエンドはもう不要」**という流れは、最新のクラウド/サーバーレス開発に携わる人たちが実感していること。
☑ セキュリティが大幅に向上する
The Hatena Anonymous Diary, while undeniably a distinctive fixture within the tapestry of Japanese internet culture, has garnered substantial criticism for its content and the implications of its operational framework. This discourse aims to elucidate the reasons underpinning its characterization as "problematic."
At the crux of the Hatena Anonymous Diary's appeal lies its hallmark feature: anonymity. This veil of secrecy ostensibly facilitates unrestrained discourse, allowing individuals to articulate their thoughts without fear of retribution. However, this very anonymity engenders a paradoxical effect; it cultivates an environment ripe for irresponsible commentary and vitriolic defamation. The absence of accountability diminishes the sense of responsibility that typically accompanies public expression, resulting in a proliferation of emotionally charged diatribes and baseless assertions. Such dynamics render the establishment of constructive dialogue increasingly elusive, thereby stifling meaningful engagement.
Moreover, the content disseminated through the Hatena Anonymous Diary frequently exhibits a disconcerting superficiality. Many entries lack substantive depth, failing to provide rigorous analysis or innovative perspectives. Instead, they often succumb to the allure of trending topics or sensationalism, prioritizing ephemeral relevance over intellectual rigor. This trend not only undermines the potential for serious discourse but also contributes to a culture where shallow engagement with complex issues prevails. In an era marked by information saturation, this deficiency in content quality is particularly egregious, as it detracts from the cultivation of critical thinking and informed debate.
Additionally, the cultural ramifications of this platform warrant scrutiny. By amplifying certain dominant narratives or viewpoints, there exists a palpable risk of eroding diversity within public discourse. The emergence of "groupthink" within specific communities can lead to the marginalization of dissenting voices, creating an echo chamber that stifles pluralism. In such an insular environment, diverse perspectives are systematically excluded, resulting in a homogenized narrative that fails to reflect the complexities of societal discourse. This phenomenon not only undermines individual expression but also poses significant risks to the overall health of democratic dialogue.
In conclusion, while the Hatena Anonymous Diary ostensibly champions free expression through its anonymous framework, it simultaneously fosters a milieu characterized by irresponsibility and superficiality. The cultural influence wielded by this platform raises critical concerns regarding its impact on diversity and social responsibility. Thus, characterizing it as "problematic" is not merely an exaggeration; it is an imperative recognition of its shortcomings. Moving forward, it is essential to scrutinize how this platform might evolve and address these inherent flaws in order to foster a more enriching and responsible discourse.
こないだのブラックフライデーでAmazonのEcho popを買い、机の右横の棚の上に置いてBGMを流している
が、音源がこの一つのスピーカーしかしかないので、音楽を流していると「音が右から聞こえてくる」状態になってどうもしっくりこない
なるべく両耳に均等に音を聞かせたいんだが、なにかいい方法はないだろうか
机の正面向こうにでも置けばいいんだろうが、家具の配置的に無理
現状ではなるべく高く、なるべく自分から離れたところに置いたほうがいいかと思い、机の右隣にある棚の一番上に置いているが、まだまだ左右のバランスが悪い
完全に左右均等にとはいかないまでも、少しでもマシになる工夫とかあったら教えて欲しい
こんにちは。私自身過去に虐待を受けており、ただ受けただけじゃ元が取れない(?)ため、創作に活かしていただきたくこんなことありましたよ!というのをお話できたらなと思い筆をとっています。不謹慎って思われないかなとか、人の経験だしネタにしづらいなとかシコりづらいなと思われるかもしれませんが、マジでガンガンネタにして元を取りたいので好きにしていただけますとハッピーです。自分の経験ベースで、児童相談所とのやり取りがあった時に聞いたことも交えていきますね。
受けたものとしては経済的虐待(ネグレクト)、教育・文化的虐待、精神・肉体的虐待、性的虐待などが挙げられます。
順番に思い出しながら書いていきます。
基本的なスペックとしては母は軽度のASDと知的のしょうがいがあり、父はわかりませんがヤニ力スパチ力ス酒力ス浮気とフルコンボでした。お手本のような力スです。力スの見本市。3歳頃に母方の祖父母宅に転がり込んで居候をはじめましたが、父はいつのまにか逃げました。
ネグレクトについてはよくある形ですが、まず父親が今生きてるのか死んでるのかわかりません。父親も幼少期、兄と弟と共に公園に連れて来られ、おもちゃを渡されて「ここで待っていてね」と両親に言われたがそのまま両親は戻って来なかったため児童養護施設で育ったと聞きました。血ですね~
父は気付けばいなくなっていました。
食事も食べられる時と食べられない時とあり、食卓につくとありとあらゆる動作や食べ方、箸の持ち方、口の動かし方、全てを罵倒され罵られます。ろくに食べられたもんじゃないし、味もわかりません。母は料理が上手じゃないくせにオーガニック派(笑)だったため、添加物着色料など使う食材は徹底的に避けており、貧乏なのに国産無添加無農薬にこだわり、結果的に食べられるご飯の量は少なかったです。
食卓でまともに食事が出来なくてもお腹は空きます。育ち盛りの子供なら当然。そのため、夜中にこっそり起き出してキッチンで食べられるものを探しました。三角コーナーの生ゴミからまだ食べられる野菜の皮や芯を探して食べていたら、祖母に気付かれていたようで、バレた日から「ゴキブリ」と呼ばれるようになりました。草 誰がやねん
教育・文化的虐待については、親の望む進学先ではないためお金を出してもらえなかった、などがありました。福祉に繋がることも出来ず、進学などが制限されるというのもよくあるケースのようです。弟も進学先を制限されて学費を支払ってもらえず、私が支払っています(よくあることらしく、親戚やきょうだいが払うケースは多いそうです)
精神的虐待というと幅は広いですが、たとえば父と母の結婚は母方の祖母が元々反対していたらしく、家にいる間はずっと祖母が父の悪口を言っていました。母に対して「育てられないならなんで産んだんや」と金切り声で叫んだりなどしており、それを私たちきょうだいは黙って聞かされていました。生まれてくることを望まれていなかったのだという感覚が形成されたのはこれがデカいのかな?と思います。自己肯定感ダダ下がりポイント。母も母で言い返すことをしなかったのが余計に悪かったのかも。もしかしたら母にちゃんとそれを否定して欲しかったのかもしれないですね。今となってはどうにもならないことですが。
また、兄も父によく似た男でした。気に入らないことがあれば殴る蹴る、罵倒する、無能と罵り物を投げる、壁を殴る。など。実家の壁には多分未だに穴があります。兄は父親のことを憎しみ、嫌っていましたが、大きくなればなるほど兄の態度は父に似ていきました。それを指摘すれば烈火のごとく怒り狂い、怒鳴り、それがまた、酔って暴れる父親に酷く似ていました。
これ創作ならシコポイントだと思うのですが、実家にいたころ私は背もたれのない椅子を使っていました。そのため、兄が後ろを通る度に後ろから蹴られ、頭を殴られ、怒鳴られるため、未だに年上の男性が後ろに立つとちょっと怖いです!多分厳密には自分より体格のいい人が、だと思います。どれだけ信頼していても、あっ!蹴られる!と思ってビクッとします。身体が強ばるような感覚で、全身に力が入るような一瞬の緊張があり、もう家を出て10年近く経ちますがいまだに抜けない癖となっています。
あと、メンタルがぶち壊れて鬱をやった時、寝込む私に兄が硬式テニスのテニスボールや、ボール入れを頭に投げてきたことがあったため、未だに🎾これとかこれの容器を見るとオッ……となります。私の中で武器や凶器に分類されるのかも。痛かったから。物はよく投げられましたね。お皿とかも投げてた気がします。
兄が暴れるのに怯えた祖母が金切り声をあげて泣き、母は抵抗せず殴られて、唯一力で抵抗できる祖父が必死に止めて、という生活が続きました。兄も軽い鬱だったようです。
母もただ大人しいかと言われるとそういうわけではなく、多分ですが発達障害やASDの兆候があったように思います。同じ日本語を話しているはずなのに、全く話が通じず、言っていることの意味が全くわからないというようなことがありました(例を挙げるならば、私が家にいるのが限界になり児童相談所と相談して一時保護を受けるか他のなんらかの施設に行くか……という話になった時、今まで服も全部お下がりなぐらい私にお金かけなかったくせに「古い一軒家を買い取ってそこに住めばいい」「父の自営業の事務所代わりにも出来るし」と言い出したりとか。父は配送業で全然勤め人だし、その頃にはもうろくに連絡も取れてなかったし、何より私は父から強姦されてたので一緒に住むなんてとんでもねえよという感じでした。それが嫌だと言ったら「実家から私たち家族が引っ越してあなたが1人で住めばいい」とか言ったり。実家は祖父母の家であり、そんな権限は家庭内地位が最下位の母にあるわけないし、もちろん同意を得られるはずもないのに)。
母の言い出すことはいつだって意味がわからなくて、きっとこれまで母が受けてきた抑圧や苦しみ、刷り込まれてきた固定観念で雁字搦めになった価値観を私にも押し付けているようでした。いわゆるヒスお母さんに近いです。二段ベッドの上の段で寝ていた私が、メンタルぶっ壊して学校に行けなくなった時、大声で騒ぎながら私を二段ベッドの上から引きずり落とそうとしたり。足つかまれて引っ張られてたので、誰かに足首を掴まれたり、足を触られるのも今ちょっと怖いです。後ろに男性が立つ時ほどではないですが。
そして我が家は貧乏で、母が乗っていた自転車も近所の人のをお下がりでいただいていました。古い自転車はブレーキがきしんで、坂道にある私の家に母が帰ってくる時はいつもキィキィと甲高い音が鳴っていました。あの自転車の音がなると、ああ母が帰ってくる、またきちがいが私の暮らしに入り込んでくる、祖母が母を怒鳴り罵倒しヒスり金切り声を上げる、と絶望したものです。
未だに自転車のブレーキのキィキィいう音を聞くと、こんなところに母がいるわけないのに、その時の嫌な気持ちを思い出します。母が帰ってくる。きちがいが帰ってくる。私をメチャクチャにする。
ここまではよくある(あっちゃいけないですが)家庭内での機能不全についてお話しました。かなり主観的視点で書いたので、お気分が悪くなったようでしたら少し休憩されたり、読むのを中断してくださいね。
メチャクチャ興奮していただく分には、不謹慎だ!とか思わないので、好きにネタにしてください!(私の方からネタとして差し出していますしね)
いちばんはじめに感じた違和感は、幼い頃からさせられていた習慣でした。物心ついたころ(4歳とかぐらい?)から、父親に「父ちゃん愛してるって言え」と言われ、キスを強要されていた記憶があります。頬にとかではなく、普通に口で。舌を入れられたこともあって、それがとても嫌でしたが、キスをした後口を拭えばメチャクチャに怒られました。でも物心ついたときからずっとそうだったので、それが変なことだということは中学生ぐらいまで気付きませんでした。類似したことはたくさんあり、身体は自分だけのもの、他の人は家族であろうとプライベートゾーンに触ってはいけない、ということを知らずに育っていました。
肩とかお腹とか、たぶん他の人からしたらおかしいんじゃないか?ってぐらいたくさん触られていたように感じます。
決定的にこれはおかしいぞと感じたのは、小学校3年生ごろのことでした。私はそれぐらいの年齢にしては発育がよく、胸が大きくなっていたころだったのですが、お下がりばかりの服しか着られない貧乏家庭で当然ブラジャーなど買ってもらえるはずもなく、薄い服で胸を気にしながら過ごしていました。
ある日久々に父親と会った時(なんで会ったかは覚えてないな……)、不意に胸を触られて、「胸大きくなってきたな。もう女になったんか」と言われました。
キッショ。
小3やぞ。女になったんかて。キモ。草。
そっからはもう、なんというか、転がるように良くない方向へ進んでいきました。車の中で、連れ出されたよく知らない建物の中で、父の知り合いらしい誰かの家の中で、身体を触られる地獄が始まりました。脱がしやすい服を着せられて、父のヤニ臭い白い車に詰め込まれ、どこかへ連れて行かれて。知らない場所まで連れていかれるから、帰り道がわからないから、逃げ出せなくて。父親の吸っていたECHOの臭いが胸に張り付いて。私のからだははじめから私のものではなくて、いつの間にかそれをされている間はぼんやりしているようになりました。現実逃避というか、精神が身体から乖離しているような。
ずっとなにか、火を見ている気持ちでいたような気がします。自分でもよくわからないのですが、ゆらゆら揺れている炎の記憶がやたらとあります。もちろん暖炉とか火がある環境でレイプされてたわけじゃないのに。なにか他のこと考えてないとやってらんなかったんでしょうね。
非常にはっきり覚えているのは、強姦されたときにいた和室の中で、破瓜の(あるいは膣の引き裂けた怪我の)血で汚れた畳のしみを、「お前が舐めて綺麗にしろ」と下卑た笑いを浮かべた男から言われたことです。
あれが父親だったのか、父が呼んだ他の誰かなのか、もうわかりません。「いぐさに染み込んだ血は舐めたって綺麗になりません」と言った私の頬を叩いて畳に押し付けたことだけ覚えています。朧気な記憶の中で、タンクトップの男が私を押さえ込んで、組み敷いて、汚い床の上で。身体はどこもかしこも裂けるほど痛くて、軋む音がして、換気扇の音がうるさくて、ヤニ臭くて、吐き気がして、息をしてるのかしてないのかわからなくて。ぐるぐるぐにゃぐにゃ天井が回っていて、汚い天井が揺れて、その記憶だけがはっきり残っています。
あとは気付いたらビニール袋を頭に被せられて、窒息しかけた記憶もあります。これも誰がやったのかわかりません。ビニール袋を被せられて、突き飛ばされて、倒れ込んだ私の腹に誰かが飛び乗るような感覚がありました。踏みつけられたのかな。わからないけど。
お腹の中でなにかがぐじゅりとおかしくなるような感覚がして、ビニール袋の中で声にならない悲鳴をあげて、意識が途切れて。その時内臓が破裂したみたいで、免疫が人より著しく低かったりだとか、そういう後遺症?みたいなものがあります。
母にその後病院に連れて行かれた気がしますが、医者に「転んでぶつけた」と言い訳している記憶があります。無理あるだろと思ってました。
酔っ払った父が私を突き飛ばして、顔から倒れ込んだ私の上に馬乗りになって首を絞める景色。畳しか見えなくて、もがいても逃げ出せるわけなくて、足掻いているうちに首に手を回されて。骨が軋んで、気管が狭まって、だんだん瞳孔が開いていくのか涙でか視界がぼやけていきます。焦点があわない視界で必死に瞬きをして。こひゅこひゅと喉からすきま風のように息が漏れて、喉が圧迫されて、必死でもがいていたら父がゲラゲラ笑って私の上から降りる。気まぐれに降りただけで、父の気が向かなかったら今私はここにいなかっただろうなと思います。
首を絞められることは何度かありましたので、それでも今も生きているということは、殺してしまったらいけないという意識はあったのでしょうか。
或いは力や体格で絶対に敵わない弱いいきものが、自分の力加減ひとつで必死にもがいてあがいて生き延びようとする様を見て楽しんでいたのかもしれません。私を組み敷く父が下卑た笑いを上げていたのを見るに、その可能性が高いかもしれないですね。
首を絞められるにしても、前から絞められるのと、後ろから絞められるのでは苦しさが違います。
正面から絞められる方が苦しいです。後ろから絞められる(人差し指~小指までが喉に触れる)状態だと、力の当たる面積が分散するからか、締め付けられている感覚はより大きいですが苦しさはマシでした。正面から首を絞められると、親指がぐっと気管を押さえつけてきます。ピンポイントで親指の一点に力が集中するため、苦しみが強いです。息ができない感覚が続いて、視界がぼんやりしてきたところで、ぱっと手が離されると、一気に外気が喉になだれ込みます。喉にはずっと何かが詰まっているような感覚がして、その後は1日ずっと咳が出ます。
首を絞められた状態だと身体中に力が入りませんので、そのまま激しく体を揺さぶられたり、犯されたりすることもありました。
首を絞められた記憶がいまだに無意識でこわいのか、首周りを圧迫されることがめちゃくちゃ怖いです。
ネックレスも物によっては無理なレベル。チョーカーとか全然つけられないし、ハイネックとかタートルネックとかもぴたっとしていると不意に圧迫感とあの時の恐怖を感じて過呼吸になりかけたりします。当然、人に首を触られるのも怖いです。首周りってやっぱ急所なのでだいたいの人間はそうだとは思うんですが、マフラーとかも辛くて巻けません。不意にパニック発作が出たりする可能性があり、リスキーなので。
性的虐待とは書きましたが、今思うと普通に暴行も多いですね。というか、虐待という場における性的なものは概ねほぼ暴力だと思います。もちろん快感とかはあるわけなく、痛みや屈辱の面が強すぎる。内臓を掻き回されて痛めつけられる、という感覚が強いです。
下品な話ですが匿名なため書いてしまうと、それが繰り返されたことで何年も経ったけどまんこがゆるい気がします。レズのため他の女の身体に触れた時、自分の身体の異端さを感じる時があります。ガバマンすぎる。でもそりゃそうだよな。裂けて拡がったままになっちゃったんかな。わからないけど。
反射的に怯えてしまう、で言えば、足首掴まれた記憶から足首がきゅっとタイトになってる靴下もあんまり得意じゃないかも!こわい!
これはよく聞く話ではありますが、私も性的虐待があって以来、その記憶を塗り替えなきゃ、という意識で性的な行為に依存的になったように思います。付き合っていない女とセフレになったり、パパ活したりとか。「自分はもう汚いんだから」という記憶のせいで、自分を大事にできない。自分を守れない。
長々と書いてしまいましたが、今のところこんな感じでしょうか。文章をお読みになってこのエピソードもっと深く知りたいなとか、ここ掘り下げてほしいなとか、この面ではどうだった?とかあれば、また書こうと思います。よければお声がけください。
A9000とかいうやつ
「マルチスピーカーの時代は終わった!」「ウーファーいらず!」「圧倒的な低音!」
みたいな感じの大絶賛だったので、まぁ話半分ぐらいだとは思いつつも「とにかく低音が凄い!」って言ってる人が多かったんよ
そんでウキウキでセッティングして音鳴らしてみたんだけど、低音カッスカスでびっくりした
AmazonのEcho dotの方が良い音してるから流石に何か設定間違えてるだろうと思ってテレビ出力とかいろいろ見直したけど
そもそもそんなに設定できるとこが無い(eARCで出力、スマホで音場設定)からどうしようもない
各スピーカーからテストサウンド流せるからやってみたら全部ちゃんと鳴ってるけど
テストサウンドの時点で大して低音響いてないから音源のせいじゃなさそう
流石にこれは故障か?って思っていろいろ口コミ調べたら同じこと言ってる人は何人か居て
「音量は60以上にしてください。最低でも50」
みたいに書いてて終わってた
25で普通の音量ぐらい、30で爆音レベルなんだけど50とか60なんて難聴やろアホかと
ていうか低音量で低音域が鳴ってない理由にはならんのだが?なんなんこれ
3Dサウンド感はそこそこあるけどスピーカー置いた場合とは全然違うし
まぁそっちは期待してなかったからいいとしても、やっぱ低音が全然鳴ってないからマジでゴミ
FF14のレイドレースはFFlogsで進捗管理をしている(はず)。
それはつまり参加チームのうち少なくとも1名はツールを使っているということ。
今回のechoのように運営がチームと同じ空間にいて進捗が全部見れるなら運営が目視で入力してるかもしれないし、
もしくはルクレのようにサポートメンバーがいるなら運営に逐一進捗を報告しているかもしれないが、あまり現実的ではなさそうか。
Twitchでレイドレースの配信を視聴し、フォローしています。
https://kultur.jp/ffxiv-yoship-on-w1str/
と発言している。
これは運営がFFlogsを使ったレースを黙認、または容認しているように捉えられないか。危うい発言のように感じる。
攻略を頑張っている姿は本当に応援したくなる。それは絶のレースであっても、先日配信された有名ストリーマー達の企画でも同じ。