はてなキーワード: Consoleとは
utf8の文字コードで構成されたバイナリーファイルがある。このファイルの改行の数を数えよ。改行はCRのみとする。このファイルにはCR が必ず含まれており、CRで分割すればマルチスレッドで処理できる。
size_t count_cr_in_file(const std::string& path) {
std::ifstream fs(path, std::ios::binary);
size_t size = fs.tellg();
fs.seekg(0);
const size_t thread_count = std::thread::hardware_concurrency();
const size_t chunk_size = size / thread_count;
std::vector<std::future<size_t>> futures;
for (size_t t = 0; t < thread_count; t++) {
size_t start = t * chunk_size;
size_t end = (t == thread_count - 1 ? size : (t + 1) * chunk_size);
futures.push_back(std::async(std::launch::async, [start, end, &path]() {
std::ifstream fs(path, std::ios::binary);
fs.seekg(start);
size_t count = 0;
for (size_t i = start; i < end; i++) {
char c;
if (c == '\r') count++;
}
return count;
}));
}
size_t total = 0;
for (auto& f : futures) total += f.get();
return total;
}
import mmap
mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
return mm.count(b'\r')
c#で書けと指示したところ、
using System;
using System.IO;
using System.IO.MemoryMappedFiles;
{
public static long CountCRInFile(string path)
{
using var mmf = MemoryMappedFile.CreateFromFile(path, FileMode.Open, null);
using var accessor = mmf.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read);
long fileSize = accessor.Capacity;
int processorCount = Environment.ProcessorCount;
long chunkSize = fileSize / processorCount;
long total = 0;
object lockObj = new object();
Parallel.For(0, processorCount, i =>
{
long start = i * chunkSize;
long end = (i == processorCount - 1) ? fileSize : (i + 1) * chunkSize;
long localCount = 0;
byte b;
for (long pos = start; pos < end; pos++)
{
if (b == 0x0D) // CR
localCount++;
}
lock (lockObj)
{
total += localCount;
}
});
return total;
}
static void Main(string[] args)
{
long count = CountCRInFile(path);
Console.WriteLine($"CR count = {count}");
}
}
というコードが出てきた。
実際はcrlf,lfもあり得るんだが、そこは考慮しなくてもよく、そう考えるとaiはすごいとしか言いようがない。
以下ChatGPT
自分のホームページ(自前ドメイン+自前HTML)を一度でも作って運用すると、SNS中心の“受け手”視点から、仕様・検索・配信・所有・継続の“作り手”視点に脳が切り替わる。結果、情報リテラシーは跳ね上がり、ネットのニュースや流行の見え方が根本から変わる——しかも想像以上に。
Before(作る前): Web=SNSのタイムライン。良し悪しは「バズってるか」「見やすいか」
After(作った後): Web=プロトコル+ブラウザ+HTML/CSS/JS+CDN+検索エンジン。
ページは**文書(Document)**であり、配置(IA)、意味づけ(セマンティクス)、配信(HTTP/HTTPS/HTTP/2/3)、キャッシュ戦略が気になりだす。
→ 同じ記事でも「タイトルの付け方」「hタグ構造」「画像最適化」「OGP」「サイトマップ」がまず目に入るようになる。
プラットフォーム依存の脆さを体感:規約変更やシャドウバンで露出が消える。
自サイトの資産化:ドメインに紐づくURLはリンクされ、検索に積み上がり、10年後も生きる。
POSSE(Publish (on your) Own Site, Syndicate Elsewhere):まず自分のサイトに出してから外部へ配信する習慣が身につく。
3. “好き/嫌い”から“なぜ速い・なぜ遅い”へ
Core Web Vitals(LCP/FID/CLS)や画像の遅延読み込み、フォント最適化の重要性が腹落ちする。
広告・計測タグの重さに過敏になる。読者体験を壊さないためのパフォーマンス予算という概念が生まれる。
キーワード選定は“流入ゲーム”ではなく読者の課題→コンテンツ設計に帰着。
内部リンク・パンくず・スキーマ(構造化データ)・サイトマップの意味が実務として理解できる。
“書けば伸びる”ではなく“検索意図を満たす設計が伸びる”に目が覚める。
alt、見出し階層、コントラスト比、キーボード操作、焦点管理など、見えない品質が最重要になる。
デザインは飾りではなく“読み・理解・操作”のためのユーティリティだと分かる。
たまたま当たる1記事より、更新の継続・アーカイブ性・RSSのほうが効くと実感。
コメント欄・メールフォーム・X連携よりも、ニュースレターやRSS購読者の質に価値を見出す。
ドメイン、DNS、証明書、バックアップ、法務(特商法・プライバシーポリシー)に“運用者の責任”が生まれる。
その重みが情報の信頼性を引き上げる(=他人のサイトの苦労も見えるようになる)。
トレンドは“輸入”ではなく選別になる。自分の歴史に合うものだけを採用して積層していける。
A. 最小HTML(雛形)
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>あなたの名前 | ホーム</title>
<meta name="description" content="自分のホームページ。制作物・日記・メモを置いていきます。">
<link rel="alternate" type="application/rss+xml" title="RSS" href="/feed.xml">
<meta property="og:title" content="あなたの名前 | ホーム">
<meta property="og:description" content="自分のホームページ。制作物・日記・メモ。">
<meta property="og:type" content="website">
<nav>Home / About / Posts</nav>
<footer>© 2025 あなたの名前</footer>
GitHub Pages(Jekyll標準。Rubyベース、Node不要)
Cloudflare Pages(静的ファイルを置くだけで高速CDN)
レンタルサーバー(静的HTML+SFTP/rsyncで十分)
C. ドメインの基本
DNSはA/AAAA/CAA/TXT最低限、HTTPS必須(Let’s Encryptで無料化)。
D. “最低限の品質チェック”5点
ログを読む:Search Consoleと簡易アクセスログで“本文よりメタ情報”を磨く。
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-----
ただちょっと読んでいて気になる点があったので聞いてみたい。
自分は日本の所謂「ハクスラ」の用法しかよく知らなかった(あとついでにRogueもやったことない)素人なので全然的外れかもしれないが・・・・。
The term "hack and slash" was originally used to describe a play style in tabletop role-playing games, carrying over from there to MUDs, massively multiplayer online role-playing games, and role-playing video games. In arcade and console style action video games, the term has an entirely different usage, specifically referring to action games with a focus on real-time combat with hand-to-hand weapons as opposed to guns or fists. The two types of hack-and-slash games are largely unrelated, though action role-playing games may combine elements of both.
ここでは「RPGにおけるhack and slash」と「アクションゲームにおけるhack and slash」という2つのhack and slashがあり、
「the term has an entirely different usage,」 「The two types of hack-and-slash games are largely unrelated,」とあるように歴史的にも定義的にもそれらは別のもの(しかし両方を兼ねるものもある)と読める。
で、気になったのはこの「RPGにおけるhack and slash」と「アクションゲームにおけるhack and slash」が増田の言う「日本語の「ハクスラ」 」と「英語の「hack and slash」 」に重なっている様に見えた事だ。
で、もしそうだとすると増田の「英語の/日本語の」という2分法は正確ではなく、本来は「アクションの/RPGの」とすべきだった可能性があるようにも思えてくる。(何故なら「RPGの」も英語版の用法で説明されているので)
更に増田は「 『Dungeons and Dragons』のような当然英語の用法で参照すべき作品」と記事への批判と根拠としていた『Dungeons and Dragons』は「アクションの/RPGの」では「RPGの」に属すると思われるため、
(もし増田が「アクションの」を本来のhack and slashだと考えている場合)「 『Dungeons and Dragons』のような当然RPGの用法で参照すべき作品」というように、むしろ逆になってしまうようにも思える。
「アクションの/RPGの」の2分法が正解だった場合、「RPGの」の方のhack and slashには近接武器を用いて戦うだけでなく、その報酬(アイテムやゲーム内通貨や経験値など?)にも着目することは特に不自然ではないように見える(が、前述の通り素人なのでよく分からない)
のだけど、一方で「 『Rogue』自体が該当しない条項が「ベルリン解釈」に存在するわけない」については「たしかにそうかも」と思ったので、
ベルリン解釈の部分については増田の方が正しい可能性が高いんじゃないか?と思ってる。
という訳でいろいろ細かい事は書いたものの、最終的な結論としては増田側が正しい可能性がありそう、と思ってる。
ただ増田が他者に厳密性を求める以上、自身も(例え総論や結論が正しくても)細かい点を突っ込まれる事は許容せざるを得ないのでは?と思い(まぁ、というよりは自分の疑問の解決のために)書いてみた。
(ちなみにRogueをやった事が無いので分からないんだけど、敵を倒した際の報酬って無いの?一応ネットで攻略情報を軽く調べた結果、アイテムドロップも経験値もなさそう?とは思ったけど・・・だとすると敵と戦う意味はあまり無い(可能なら回避が正義?)ゲームなのかな?)
一度投稿したうえで別タブを開いてプログラム的(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-----
「スターフィールド」とは、ベセスダ・ソフトワークスが開発したオープンワールドなSFアクションロールプレイングゲーム。
ちなみにベセスダ・ソフトワークスは現在マイクロソフトの傘下にあるため、当然ながらXboxとPCでしか販売されていない。
まずは背景として、
…という背景から、
ということが最近あったため、もはやスターフィールドがPS5にも登場するのは時間の問題と噂されている。
確かこのソフトは「Xbox Console Exclusive(ゲーム機に関してはXbox独占)」と宣伝されていたはずたが、もしPS5版が出るとなったらこれも崩れることになる。
身体を壊して先日ちょっと入院していたのだが、病院内ではWiFiが提供されていたので、消灯時間外の日常生活アクセスはそれのお世話になっていた。消灯時間は夜9時から朝6時までだ。
事前に「入院生活にそぐわないサイトには接続できません」という告知が為されていたので、覚悟の上で使ったのだが、Webアプリ開発者としての業務に必要なサイトとかも禁止されていたので、ここにメモしておく。
通信が禁止されていると思われるサイトに接続すると、ブラウザ側ではタイムアウトのエラーとして表示される。もちろん、それなりに待たされる。ブラウザの開発ツールの様子を見るに、おそらく TCP handshake に失敗していそう。
正常に接続できるサイトの様子を見た範囲では、HTTPS接続の証明書改ざんは行われていないようだったことから、HTTPSの暗号を解読してどうのこうの、という処理をしていない可能性が非常に高い。つまり、通信制限は接続先ドメインまたはIPアドレスによる判断で実施している可能性が高い。
また、中間的なサイトも存在する。通常2秒以内で表示できるようなサイトの表示に10秒(体感)かかるところがある。稀にタイムアウトする。
謎なのは、通信が禁止されていそうなサイトでも「待たされた挙句、つながることが非常に稀にある」ということと、curl等ではすんなりと接続できることである。
DNS設定と一緒にproxy設定が落ちてきているのであればこの挙動も理解できるのだが、手元のOSのネットワーク設定にはproxy情報が何も出てこない。ちょっとよくわからない。
もしもDNSに対するAレコード(AAAAも?)問い合わせに対してニセモノを返すという仕組みで通信制限しているのだとしたら、「非常に稀につながる」挙動にはならないはずなので、透過型proxyによって頑張っているのではないかと想像するところである。
なお、消灯時間中は全てのリクエストがタイムアウトになる。消灯時間開始直前に HTTP Request を送出して、応答が来る頃には消灯時間に入っている場合にはどういう挙動をするのか、というテストをやる暇は無かった。スマソ
業務で使う全部のサイトを検証できた訳じゃなくてゴメンね。結局のところ仕事は携帯回線でやっちゃったから。
| ドメイン | サイトの概要 | 接続の様子 |
|---|---|---|
| hatelabo.jp | はてなの実験的サービス置き場 | すんなり |
| anond.hatelabo.jp | 増田 | 禁止 |
| ??????.hatenablog.jp | はてなブログのドメインの一つ、そして増田の中の人のブログ | 遅い |
| console.aws.amazon.com | AWSの管理コンソール | 禁止 |
| www.amazon.co.jp | ショッピング | めちゃくちゃ遅いけどつながる |
| www.amazon.com | ショッピング | めちゃくちゃ遅いけどつながる |
| ja.wikipedia.org | 百科事典 | 禁止 |
| www.php.net | プログラミング言語PHP | 禁止 |
| www.typescriptlang.org | プログラミング言語TypeScript | すんなり |
| stackoverflow.com | プログラミング質問サイト(英語) | すんなり |
| qiita.com | プログラミング質問サイト(日本語) | 禁止 |
| packagist.org | PHPのパッケージ管理 | 遅い(通常通り?w) |
| www.npmjs.com | JSのパッケージ管理 | すんなり |
なお、自分のドメインのサブドメインに禁止ドメインを入れたようなもの、例えば anond.hatelabo.jp.example.com のようなドメインに対する接続可否は検証していない(面倒だったw)
サーバ目線で見える client IP をwhois等で調べると、某F社さんだった。AWS管理コンソールへの接続を禁止するあたり「あっ…!」と思ったり…w
AIインフルエンサーたちはChatGPTが世に出る前は何を投稿していたのか?(1/1)の続き
このTwitterアカウントは、主にYouTube、SEO、競馬、アニメなどの話題について呟いており、自身の活動や興味関心について発信しています。
このアカウントは、日々の米国株や暗号通貨の市場動向、特にテクノロジー関連株やビットコインの価格変動についてツイートしています。
「ゼロコロナ政策再び。 $AAPL の生産に影響が懸念され大きく下落。更に経済混乱が想定され、株価はSP500全業種で
一方で年末商戦売上堅調な滑り出しで $AMZN
暗号資産レンディングBlockFiが経営破綻、暗号通貨も軒並み下落。
チャート上、なんとか踏み止まるか? 」
このアカウントは、AI、特にプロマネAIや量子AIに関する話題や、仕事効率化、プログラミング、そして最新の技術トレンドについて呟いています。
"プロマネAIの実証実験を開始しました!量子AI×NotionによるプロマネAIの実証実験を開始 https://prtimes.jp/main/html/rd/p/000000003.000082094.html… via @PRTIMES_JP"
このアカウントは、主にOpenAIの最新言語モデル「text-davinci-003」の進化と、そのモデルを用いた英語学習ツールやサービスについて呟いています。特に、英語学習におけるAI活用とその重要性を強調しています。
"朝起きたら世界がまた変わっていた(笑)。@OpenAI が最新モデル「text-davinci-003」を発表。主な特徴は、①より明確で、説得力のある文章が書ける②より複雑な指示にも対応③より長い形式のコンテンツが生成可 1月に"InstructGPT"が出た時も感動したけどそれを遥かに上回る進化、です。"
このアカウントは、主にAI、特に画像生成AIに関する話題を呟いています。特にStable Diffusionのバージョンアップや使い方について多くのツイートをしています。
ここにリストアップした人たち以外もみましたが、分類すると3種類のアカウントがいて
またIDを変更してログがヒットしない人は含まれていません(IDから特定できるけどそこまでやらなかった)
javascript:(function() {
const text = Array.from(document.querySelectorAll('[data-testid="tweetText"]')).map(s => s.textContent.trim()).join('\n');
const textarea = document.createElement('textarea');
document.body.appendChild(textarea);
try {
document.execCommand('copy');
console.log('結果がクリップボードにコピーされました!');
} catch (err) {
console.error('クリップボードへのコピーに失敗しました:', err);
}
document.body.removeChild(textarea);
})();
const axios = require('axios'); // HTTPリクエストを行うためのモジュール
const fs = require('fs'); // ファイル操作モジュール
const xml2js = require('xml2js'); // XMLをJSONに変換するためのモジュール
const chardet = require('chardet'); // 文字エンコーディングを検出するためのモジュール
const iconv = require('iconv-lite'); // 文字エンコーディングを変換するためのモジュール
const rssUrl = 'https://www.mlit.go.jp/important.rdf'; // 例としてRSSフィードのURLを指定
async function fetchAndSaveRSS() {
try {
// RSSを取得
const response = await axios.get(rssUrl, { responseType: 'arraybuffer' });
const rssData = response.data;
const detectedEncoding = chardet.detect(rssData);
console.log('検出された文字エンコーディング:', detectedEncoding);
// UTF-8に変換
const utf8Data = iconv.decode(rssData, detectedEncoding);
xml2js.parseString(utf8Data, (err, result) => {
if (err) {
console.error('XML解析エラー:', err);
return;
}
const jsonData = JSON.stringify(result, null, 2);
fs.writeFileSync('rss_feed.json', jsonData, 'utf8');
console.log('RSSフィードがファイルに保存されました。');
});
console.error('エラーが発生しました:', error);
}
}
// 実行
fetchAndSaveRSS();
なるほど確かにその通りですね。
ブックマーク先に寄生する形でしか意見を述べられない卑しい存在であるにもかかわらず、増田ことはてな匿名ダイアリーの方々に上から目線で一方的に批判をして申し訳ございませんでした。
その方法として、古来中国から伝わる三跪九叩頭の礼を致します。
冗長な記述を避けるために、VB.NETで表記させていただきます。
Imports System
Public Class SanGuiKiuKouTou
Sub Main()
For i As Integer = 1 To 3
Console.WriteLine("跪")
For j As Integer = 1 To 3
Console.WriteLine("起")
Console.WriteLine("起立")
End Sub
End Class
御清聴の程有難く存じます。
<title>Document</title> の下に <script src="./script.js"></script> という行を追加する <body> と </body> の間にテスト文言を <h1>てすと</h1> とでも書いておく bodyの中に書いたテスト文言が左上に表示されているはず console.log("Hello, World!"); とタイプし、上書き保存する
Hello, World!
と出力されていれば成功。
これで JavaScript を実行する最小限の環境は整った。
好きなようにプログラムを書いてコンソールに出力したり画面に書き出したりしてみて。
「指示の通りにならない!」という時はどこでつまずいてるか書いて。対応策を助言できるかもしれない。
ここ1年で初めてはてなブックマーク日毎の総合人気エントリ入りしたドメインからのホットエントリ、ブクマ数順トップ30
| ブクマ数 | タイトル | ドメイン |
|---|---|---|
| 2287 | 自己肯定感の話 ① | sutekibungei.com |
| 1344 | 伝わる文章 | 基本要素 | SmartHR Design System | smarthr.design |
| 1089 | 2022年カタールW杯、日本対ドイツのレビュー - pal-9999のサッカーレポート | pal-9999.hatenablog.com |
| 1020 | Elon Musk は Twitter で何をしようとしているのか - The Decisive Strike | blog.nagayama.dev |
| 915 | 今日 Twitter 日本法人を解雇された皆さんへ #OneTeam - The Decisive Strike | blog.nagayama.dev |
| 775 | LAN配線マンションの回線を直した話 | skmz.one |
| 636 | 現在の森保ジャパンの攻撃とその問題点について - pal-9999のサッカーレポート | pal-9999.hatenablog.com |
| 620 | webエンジニアの「業務委託単価表」が公開 - Digital Shift Times(デジタル シフト タイムズ) その変革に勇気と希望を | digital-shift.jp |
| 595 | なぜ美人を美人と褒めてはいけないのか? オヤジさんのためのジェンダー問題シン常識 | ライフスタイル | LEON レオン オフィシャルWebサイト | www.leon.jp |
| 546 | ヤマト運輸株式会社 | GitHub | github.co.jp |
| 509 | 最近のフロントエンドフレームワークに対する認識とお気持ちの整理 - console.lealog(); | lealog.hateblo.jp |
| 476 | 東北の男性と結婚した外国人女性たちの経験。「不可視化」の理由と託された言葉の数々。#移住女性の声を聴く|ニッポン複雑紀行 | www.refugee.or.jp |
| 473 | 【勉強法】『一生頭がよくなり続ける すごい脳の使い方』加藤俊徳 : マインドマップ的読書感想文 | smoothfoxxx.livedoor.biz |
| 471 | 語り手が異常な小説が読みたい - 千年先の我が庭を見よ | kiloannum-garden.hatenablog.com |
| 451 | 【2022年 最新版】厳選QOLが爆上がりした買ってよかったアイテム紹介(デスク編・iPad編・整理編・エンタメ編・サービス編) | mitsuch.com |
| 444 | 色々試して行き着いた読書方法 | iwashi.co |
| 443 | 【お詫びと自主回収のお知らせ】社長に内緒で玉ねぎを入れすぎた 玉ねぎファンに贈るシャリシャリ玉ドレ200ml | 2022年 | ニュース | 綿半公式ページ | watahan.jp |
| 418 | MF文庫J編集部よりお詫びとお知らせ | ニュース | MF文庫J オフィシャルウェブサイト | mfbunkoj.jp |
| 411 | Twitterはサービス終了するのか? | www.bluechronicle.jp |
| 408 | Twitter での 2年 · eed3si9n | eed3si9n.com |
| 368 | 国立天文台が撮影した2022年11月8日の皆既月食と天王星食|国立天文台(NAOJ) | www.nao.ac.jp |
| 367 | Stable Diffusionを使って「いらすとや風画像生成モデル」を作った話 - ぬいぐるみライフ? | mickey24.hatenablog.com |
| 357 | 最近Reactを始めた人向けのReact Hooks入門 | sbfl.net |
| 355 | たかやん考:ネットラッパーの揺曳する身体と「病み」の美学、そして「エンパワメント」 - ハイパー春菊サラダボウル | namahoge.hatenadiary.com |
| 352 | 赤色の缶の「サクマ式ドロップス」で知られる佐久間製菓(株)が廃業へ、原材料高騰が影響 | www.tsr-net.co.jp |
| 342 | 『マネーフォワード ME』無料会員さまの連携上限数の変更、およびサービスの将来像について|マネーフォワード ホームカンパニー公式note | note.home.moneyforward.com |
| 323 | 【重要な追記あり】世界初のフルダイブVRMMORPG《ソードアート・オンライン》の正式サービスが開始 | dengekionline.com |
| 322 | GA4の計測設計には設計ドキュメントが重要な件 - ブログ - 株式会社JADE | blog.ja.dev |
| 315 | 「ザ・ルンペンブルジョワジー」 - tarafuku10 の作業場 | tarafuku10working.hatenablog.com |
| 306 | iPhoneで「ガスト」検索しようとするも「がす」の『す』でSafariが落ちる!? – kototoka | kototoka.com |
正直動けばいいと思うので、現状でも問題ないと思うけれどちょっとだけ気になった点。
$$使ってる時点で、デベロッパーツール前提なのは分かるけど、 javascriptで動かしたいのか、デベロッパーツールで動かしたいのか、どっちつかずな書き方になっている。
$$('.hatena-star-inner-count').map(a => a.click());
let data = {};
Array.from($$('.entry-comment-contents')).forEach(x => {const userName = x.querySelector('.entry-comment-username a').href.split('/')[3];const comment = x.querySelector('.entry-comment-text').innerText;const stars = Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3]);data[userName] = [comment, stars];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("92;n"));
デペロッパーツールだけで動くだけでいいなら、3行目のArray.fromがなくても動く。多分、forEachをmapに書き換えても動く。個人的にはforEachに統一したいけど、そこは好みレベルの問題だと思う。
$$('.hatena-star-inner-count').map(a => a.click());
let data = {};
$$('.entry-comment-contents').forEach(x => {const userName = x.querySelector('.entry-comment-username a').href.split('/')[3];const comment = x.querySelector('.entry-comment-text').innerText;const stars = Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3]);data[userName] = [comment, stars];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("92;n"));
逆に、javascriptで動かしたいなら1行目と3行目はquerySelectorAllに書き換えれる。
document.querySelectorAll('.hatena-star-inner-count').forEach((a)=>{a.click()});
let data = {};
document.querySelectorAll('.entry-comment-contents').forEach(x => {const userName = x.querySelector('.entry-comment-username a').href.split('/')[3];const comment = x.querySelector('.entry-comment-text').innerText;const stars = Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3]);data[userName] = [comment, stars];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("92;n"));
これも好みの問題だけど、途中のconstの宣言は一回しか使ってないので、宣言せずにそのまんま入れてもいいんじゃないかと思った。
document.querySelectorAll('.hatena-star-inner-count').forEach((a)=>{a.click()});
let data = {};
document.querySelectorAll('.entry-comment-contents').forEach(x => {data[x.querySelector('.entry-comment-username a').href.split('/')[3]] = [x.querySelector('.entry-comment-text').innerText, Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3])];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("&#92;n"));
|<<
ええと…メモが言うには「Console.WriteLine("足した結果は{0}です!", sum); と書いたとき、sumはどうやって文字列になるんだ」だそうです
% poetry cache clear --help USAGE poetry cache clear [--all] <cache> ARGUMENTS <cache> The name of the cache to clear. OPTIONS --all Clear all entries in the cache. GLOBAL OPTIONS -h (--help) Display this help message -q (--quiet) Do not output any message -v (--verbose) Increase the verbosity of messages: "-v" for normal output, "-vv" for more verbose output and "-vvv" for debug -V (--version) Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n (--no-interaction) Do not ask any interactive question
これ見ると
poetry cache clear pypi
で動きそうじゃん?
% poetry cache clear pypi RuntimeError Add the --all option if you want to clear all pypi caches at /usr/local/lib/python3.8/site-packages/poetry/console/commands/cache/clear.py:44 in handle 40│ ) 41│ 42│ if len(parts) == 1: 43│ if not self.option("all"): → 44│ raise RuntimeError( 45│ "Add the --all option if you want to clear all " 46│ "{} caches".format(parts[0]) 47│ ) 48│
ブブー
動きません
正しくはこう
poetry cache clear pypi --all
直感的には--allをついてたら全てのキャッシュを消すべきだと思うが
% poetry cache clear --all Not enough arguments (missing: "cache").
ブブー
動きません
意味不明に思ったのは俺だけではないらしくIssueが出ている
https://github.com/python-poetry/poetry/issues/521
opened this issue on 19 Oct 2018 · 18 comments
2年前ですよ2年前!
Issue700個も溜まってますよ
pipenvもアレだったけどpoetryもアレだな
もう少しマシな奴が欲しい
ウェブマスター オフィスアワー 2019 年 10 月 02 日 メモ(※所々抜け漏れあり)
https://www.youtube.com/watch?v=bBurTQBqhS0
11/25 Webmaster Conference Tokyo:今週か来週の早い段階で情報を公開する予定
最新情報への対応や常に変動するランキングに対応させるためのもの
「何かまずいところがないだろうか?」という視点でサイトに着手するのは不要
客観的にいいのか悪いのかを知るために定期的なユーザーテストの実施とか、
お互いにレビューし合う習慣を付けるとか
品質評価ガイドラインとかE-A-Tとかは個人的には見なくても良いと思うが、
Q.RankBrainにおける更新性や更新の有無による効果はあるのか?
A.オフィスアワーでランキング要素の可能性について言及するのは難しい。言えることはコンテンツの内容を改善してくださいということだけ。もし、更新性が影響すると言ってしまうとみんながそっちに走ってしまうので。
Q.被リンクではページランクとドメインランクのどちらを重要視していますか?
A.ショートアンサーとしてはどちらでもありません。
仮にドメインランクが重要ですと言ったら何が起こるでしょうか?オールドドメインの買い占めが発生してしまうでしょう。
例えばコンテンツの質を見るに、Wikipediaに関連リンクを貼られるとかそのくらいの影響力があるのかなどを見てみると良いでしょう。
筆者注:
【図解】グーグルのリンク評価20の原則【2019年版】(前編#1~#10) | Moz - SEOとインバウンドマーケティングの実践情報 | Web担当者Forum
https://webtan.impress.co.jp/e/2019/09/30/34042
初心者必見!SEO対策の基本を5分で完全解説【2019年最新版】
https://emma.tools/magazine/seo-basics/
↑これら記事とか?
A.Googleのアルゴリズムも完璧ではないので、アップデートで再評価される可能性はある。
メインのクエリでユーザーが自身のサービスが頭に浮かぶような存在になれるかどうか。
Q.robots.txtでブロックしていないURLなのに、カバレッジでrobots.txtでブロックされていますというエラーが出る
A.色々確認中ではありますが、私が調べた範疇では問題ありません。Search Consoleのフィードバックも送ってください。その際、スクリーンショットだけではなく、テキストで問題点も添えてください。
Q.サイト内画像をサムネイルとして表示したい。Googleが推奨する方法がありませんか?
A.特にそのやり方については公開はしておりません。Googleが良いと思った画像だけを採用します。
強いて対策を言えば、画像のヘルプを参考に画像の情報をGoogleに伝えるようにしてください。
A.確認しましたが、Search Consoleに表示されています。
タイムラグがあるかもしれませんがDisallowされていませんか?確認してみてください。
Q.HTTPSのSearch Consoleは追加した方が良い?重複コンテンツになりますか??
A.追加した方が良いです。
重複コンテンツによって、起こるのはどちらかのコンテンツが上位表示される可能性があるということ。
共倒れになるということはありません。
そのクエリで頭に浮かぶくらいの存在になっているかどうかです。
Q.セパレートURLにおいてMFI後のcanonicalURLの設定について
正規化とは同等のページ内容のURLが複数あるからこそ行うもの。
canonicalよりも、リダイレクトでやってみてはどうでしょうか?
Q.検索パフォーマンスのデータの収集開始タイミングはいつから??
A.基本的には登録前のデータも取れるはずですが、違うケースもあればフィードバックで教えて下さい。
Q.Search Consoleのプロパティへの表示について、所有者として確認されてから6日経ってもプロパティに表示されていません
A.何らかの判断で時間がかかったのだと思います。通常は数日ですが、遅れたのは新規サイトであることが要因である可能性があることです。なにか不具合ありましたらSearch Consoleへフィードバックをぜひお願いします。
A.かなり困っているご様子ですので取り上げましたが、当フォーラムでは対象外の話題ですのでウェブ検索フォーラムへ送信願います。
Q.max-image-preview robots meta の値を確認するには?
A.まだ反映されていないのでもうちょっと待てば反映されます。
Q.Search ConsoleのタイムゾーンについてPTからPSTとPDTに切り替わりますか?
A.切り替わります!!
Q.ドメインを変えずにサイト名だけを変えると検索順位はどう変わる?
A.サイト名ほど大きな要素を変えてしまうのは影響すると思います。
どういうサイト名に変えるのかも重要。ユーザーにとってわかりやすくなるとかであれば、長期的には有効になるかもしれません。
Q.max-image-preview でlargeを設定するとDiscoverに表示されやすいと聞きましたがAMP対応しているだけでDiscoverに表示されやすくなりますか?
A.AMPでもmax-image-previewでlargeでもどっちでも対応可能です。
Q.クロールエラーが特定できない件について、1月のオフィスアワーにてホスティング会社に相談してみては?との回答で、のち、6月に検証中とのことでしたがあれからいかがでしょうか?
A.あまり気にされなくても良いです。ただ、間違ったエラーが表示されないようにするためにエンジニアも調整中ではあります。
こういうエラーに気づかれましたらSearch Consoleのフィードバックをぜひお願いします。
次回は10月後半か11月前半の予定です
{
{
Person person = new Person();
person.firstName = "山田";
person.lastName = "太郎";
Console.WriteLine(person.GetFullName()); // "山田 太郎" と表示される
}
}
public class Person
{
// FirstName プロパティ
private string firstName;
public string FirstName
{
get { return firstName; }
}
// LastName プロパティ
private string lastName;
public string LastName
{
get { return lastName; }
}
{
return firstName + " " + lastName;
}
}
午前中にC#について聞いてた人がいて、ついでに聞きたい。
Person person = new Person();
new Person(); としたら、勝手に「Person.cs」の中の「Person」クラスを探してくれるんだろうか。
前の増田が言っていた、Listのやつも知りたい。
paizaとかで入門動画見てれば分かるだろうか。