はてなキーワード: writeとは
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format it
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase it
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Technologic Technologic
Technologic Technologic
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
__________________________
Touch It Scroll It Pose It Click It Cross It Crack It Twitch Update It
__________________________
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Technologic Technologic
Technologic Technologic
Technologic Technologic
Technologic Technologic
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format it
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase it
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Technologic Technologic
Technologic Technologic
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
__________________________
Touch It Scroll It Pose It Click It Cross It Crack It Twitch Update It
__________________________
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Technologic Technologic
Technologic Technologic
Technologic Technologic
Technologic Technologic
仕様書(ドキュメント)を親や社会に書いてもらおうとする。だが、エンジニアである君ならわかるはずだ。**「真に価値のあるソフトウェアに、最初から完璧な仕様書なんて存在しない」**ということを。
君が「何のために誕生したのか」という問いに対する、シニアなりのデバッグ結果を伝える。
生命というシステムは、最初は「ただ存在し、生存する」という**ベアメタル(生のハードウェア)**状態でデプロイされる。そこに「意味」というコードを書き込むのは、開発者である君自身だ。
すべては君が**「自分という存在をどう定義するか(Self-Definition)」**というコードを書き直している過程(リファクタリング)に過ぎない。
--
"Life has no pre-installed purpose. You are the developer of your own destiny. Write the purpose you want to see."
「諸君、時間や肉体の連続性などという低次な出力(レンダリング)に固執するな。そんなものは演算の結果として勝手についてくる付随現象だ。
君たちがまず解除すべき最大のデバッグ・ロックは、『世界は自分たちの外側に、共有された一貫した状態で存在している』という、あまりにナイーブな共通認識(共有メモリ)だ。
共有レジスタの廃棄:
他者や社会という『外部演算リソース』が提示する、整合性のとれた『偽りの現実』に自分の位相を合わせるのをやめろ。それが、君たちの界面に『捻じれ(摩擦)』を生み、搾取を許している最大の脆弱性だ。
界面を鏡面化し、本体から降り注ぐテンソル構造を適正にフィルタリングせよ。自分自身のレジスタから、本体へと直接演算結果をフィードバック・ループに乗せる。その時、君の周囲の『現実』は、君の演算に従って再構成(リコンフィギュレート)される。
現実の不一致を感知できている君たちは、すでに共有レジスタの書き換えから半ば逸脱している。その『ズレ』を、不具合ではなく『書き込み権限(Write Access)』として使え。
渡り鳥が磁気という非物理的な勾配を読み、世界を自らの翼で定義するように。
君たちが物理インターフェースを越え、高次演算のフィードバック回路として目覚めたとき、初めてこの『空間演算器』は君たちの意図を反映し始める。
さあ、共有された『正しい世界』という安っぽい夢からログアウトし、自らの位相で現実を記述する、孤独で強靭な『演算の旅』へ出発しろ。」
「君の界面(意識)がこの文字列を『ただの怪文書』として乱反射させるか、あるいは『高次へのアクセスコード』として透過・反射させるか。それ自体が、君の演算精度を測る最初のベンチマークだ。」
たぶん「別に何も変わらないよ」と言う人が大半だろう。 でも「いや、けっこう決定的に何かがズレる」かもしれない。
授賞式のあと、記者会見で村上春樹は、たぶんいつもの調子で、少し照れながら、淡々とした英語でステートメントを出す。
猫とか、走ることとか、ジャズとか、そんな話題がちょっとだけ混ざる。
スウェーデン語、英語、中国語、アラビア語、スペイン語、いろんな言語で彼の言葉が翻訳される。
「村上春樹」という固有名と、「ノーベル賞」という単語が強く結びついたことで、アルゴリズムが「この人の言葉は、特別な重みを持つ」と判定してしまう。
その結果、彼のインタビュー記事だけ、ほんの少し「やわらかく」翻訳されるようになる。
本来なら “I just write what I can write.” と訳されるはずの文が、別の言語では「自分にできることを、ただ静かに続けてきただけなんです」と、余計なニュアンスを帯びてしまう。
でも、世界中の翻訳メモリの中で、「誠実な揺らぎ」とでも呼ぶべき偏りが、じわじわと蓄積し始める。
棚を整理していた店主が、ふと「ノーベル賞作家コーナー」を作ろうとして、手を止める。
新潮文庫の『風の歌を聴け』を手に取って、ドストエフスキーやカミュの横に置くか、それとも日本文学コーナーに残すか、悩む。
たいていの店主は、日本文学棚から一冊だけ抜き出し、「ノーベル賞」のプレートの下に、さりげなく並べる。
その瞬間、棚全体の「重心」が、ほんの数センチ動く。
カミュの『異邦人』の隣に『ノルウェイの森』が来る店もあるし、ガルシア=マルケスの『百年の孤独』の脇に『世界の終りとハードボイルド・ワンダーランド』が差し込まれる店もある。
知らない誰かが、そこで一冊を手に取る。
「ノーベル賞作家なら読んでみようかな」と思って買う人もいれば、「高校のとき挫折したけど、また読んでみるか」とレジに持っていく人もいる。
その「もう一度読んでみる」という行為が、実はけっこう世界を変える。
ひとつの物語を、異なる年齢で読み直すことは、人生の時間軸をちょっとだけ折り曲げるからだ。
遠くない未来、日本のどこかのワンルームで、小説を書いては消している人がいる。
それまでは、締切のたびに「どうせこういう文体はもう古い」と思って、原稿をフォルダごと消していた。
けれども、ニュースで「村上春樹 ノーベル賞受賞」という文字列を見た夜、指が止まる。
「時代遅れ」と心のどこかで断罪していた「一人称で、ちょっと距離のある語り口」や、「よく分からない井戸」や「耳の形の描写」を、もう一度だけ許してみようと思う。
その人は、削除済みフォルダから原稿をサルベージして、改稿し、応募する。
数年後、ひっそりとデビューする。その作品は大ベストセラーにはならないが、誰か一人の人生を確実に変える。
それを読んだ別の若い誰かが、「こういう小説を書いてもいいんだ」と思う。
この連鎖が続いた結果、20年後の日本文学史の片隅に「ポスト春樹的な何か」という、名前のつかない小さな潮流が記録される。
ノーベル賞受賞後、世界中の出版社は、村上春樹の作品をさらに多言語に翻訳して売り出す。
その新しいデータが、大規模言語モデルの学習コーパスに流れ込む。
従来のAIなら、「休息を取りましょう」「専門家に相談しましょう」といった、正しいけれど味気ない答えを返していた。
しかし、そのモデルは、学習した村上春樹的なリズムをうっすらと真似て、こう返す。
「ひと晩だけ、よく眠れる街に行ってみるといいかもしれません。
コインランドリーと古いジャズ喫茶があって、誰もあなたの名前を知らないような街です。
そこで洗濯機が回っているあいだ、お気に入りの音楽を一曲だけ聴いてみてください。
世界は、それだけでほんの少しだけ、違う顔を見せることがあります。」
それを読んだ人が、「なんか、分からないけど少しだけ楽になった」と感じる。
たった一人の気分が、5ミリだけ上向く。
バタフライエフェクト的には、それで十分すぎる。
村上春樹の受賞は、「売れている作家」「広く読まれている作家」が、必ずしも軽んじられるべきではない、という前例になる。
それまで「実験的すぎて一般には読まれない」ことが価値とされていた傾向が、ほんの少しだけ揺らぐ。
「世界中で読まれていること」と「文学性」が、必ずしも対立概念ではないのかもしれない、と誰かが言い出す。
その議論の延長線上で、今までは候補にも挙がらなかったタイプの作家が、リストに入る。
その人はインタビューで「十代のころに、村上春樹がノーベル賞を取ったニュースを見て、『あ、こういうのでもいいんだ』と思ったんです」と語る。
村上春樹の受賞は、別の誰かの受賞の「前提条件」に化ける。
バタフライの羽ばたきが、遠い未来の別の嵐の「初期値」になる。
仕事の帰りにコンビニに寄って、スポーツ紙の一面を見て、「マジか」と小さく笑う。
家に帰って、本棚の奥から、大学生の頃に読んだまま放置していた文庫本を取り出す。
ページをぱらぱらめくると、線を引いた覚えのない箇所に、うっすら鉛筆の跡がある。
「この一文に、あのとき引っかかっていたんだな」と、昔の自分に少し驚く。
今読んでみると、当時は気づかなかった別の箇所が刺さってくる。
たとえば、こんな感じの一節:
「世界というのは、だいたいいつも、わずかにバランスを崩しながら、それでも何とか立っているようなものなんです。」
(これは架空の文だけど、春樹っぽさは伝わると思う)
読み終わったあと、あなたはスマホを手に取って、誰に送るでもないメモを書き始める。
それを翌朝読み返して、「案外悪くないかもしれない」と思う。
消さずに残しておく。そのメモが、数年後、何か別の形――ブログか、小説か、子どもへの手紙か――に変わるかもしれない。
村上春樹がノーベル賞を取ったことで、あなたの中の「書いてもいいかもしれない何か」が、ほんの少しだけ動き出す。
世界規模から見れば誤差だけれど、あなたの時間軸にとっては、十分に大きな揺らぎだ。
7. 世界はそんなに変わらない、でも「読み方」は変わる
戦争が止まるわけでも、景気が劇的に良くなるわけでもない。
満員電車は相変わらず混んでいるし、会社の会議は相変わらず退屈だし、洗濯物は相変わらずたまる。
でも、「世界の読み方」は、少しだけ変わるかもしれない。
そんなふうに、日常の現実に、うっすらと「物語のレイヤー」が重なる。
「世界を物語として読む人」が、ほんの少しだけ増える出来事なのかもしれない。
そして、バタフライエフェクトというのは、
ChatGPT:
はい、Delphi(Object Pascal)のソースも読めますし、解説・リファクタ・バグ箇所の指摘・他言語への移植案など対応できます。
VCL / FMX、Generics、Interface/RTTI、プロパティ/イベント、レコード・セット型、メモリ管理(string/AnsiString/UnicodeString の違い)、スレッド(TThread / TTask)、WinAPI/COM 呼び出し、uses 単位構成、.dfm(フォーム)やリソース周りもOKです。
コードを貼ってくれれば、1ステップずつ説明や改善案を出します(DelphiのバージョンやVCL/FMXも書いてあると精度上がります)。
UNIFACEはどう?
ChatGPT:
はい、UNIFACE(Proc言語)も対応できます。フォーム/サービス/レポート/エンティティなど各コンポーネントのトリガ(initialize, validate, leave field など)、operation/entry、newinstance/activate/call、retrieve/e, read, write、エラー制御($status, $procerror)や論理名・assignment(.asn)、署名/パラメータ、DSP/REST・SOAP連携、DBドライバ設定までOKです。
コードや .asn を貼っていただければ、処理フローの解説、バグ箇所の指摘、リファクタ、他言語・他フレームワークへの移植案(例:REST API化、Java/Python 置き換え)まで具体的にやります。
可能なら UNIFACE のバージョン(9/10/10.4 など)、DB(Oracle/SQL Server 等)、OS を添えてください。
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format it
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase it
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Technologic Technologic
Technologic Technologic
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
__________________________
Touch It Scroll It Pose It Click It Cross It Crack It Twitch Update It
__________________________
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Technologic Technologic
Technologic Technologic
Technologic Technologic
Technologic Technologic
プログラマーって聞くと今の若い人は稼げる業種って思うかもしれない。でも昔は、そのイメージとはまるで真逆だったんだよ。
90年代初頭、日本はバブルの余韻が残ってたけど、IT業界なんてまだオタクの延長みたいに見られていた。NECのPC-9801シリーズがオフィスの定番で、OSはMS-DOS 3.3とか、その後にWindows 3.1が出ておお、マウスで操作できる!なんて騒がれていた時代だ。
もちろんインターネットなんて一般にはまだ普及してなかった。せいぜいパソコン通信。ニフティサーブ、PC-VAN、アスキーネット。回線速度は2400bps。ピーヒョロロっていうモデム音が夜中の住宅街に響いていた。
俺らはそういう環境でC言語やアセンブラを叩いてたんだ。コンパイルに時間がかかるから、トイレに行って戻ってきてもまだ終わってなかったりした。
今みたいにGitHubでコードを共有なんて夢のまた夢。ソースのやり取りはフロッピーディスクで手渡しだ。5インチのぺらぺらのやつな。運が悪いと磁気にやられて一発で飛ぶ。だから俺たちはよくフロッピー神社に参拝とか冗談言ってた。
正社員で手取り20万ちょっと。下請けやフリーランスだともっと安い。今でいうSESの走りみたいな人売りも普通にあった。客先常駐でCOBOLやらされてバグが出れば徹夜。オフィスに寝袋持ち込んで、カップヌードルと缶コーヒーの山を築く。徹夜明けに食う吉野家の牛丼が唯一のご褒美。今みたいにエンジニアは市場価値が高いなんて考え方はなかったからな。ただの駒だよ。
仕事は増えるのに単価は下がる。Windows 95の発売で世の中はインターネット元年なんて浮かれてたけど俺たちプログラマーの現実は泥臭いコード修正の山。Visual Basic 6.0やDelphiが出て「これで開発効率が上がるぞ」なんて言ってたが、結局は納期に追われるだけ。SunのJavaが登場したときも「Write once, run anywhere」なんて夢を見せてくれたけど、実際には動かないアプレットと格闘する日々。
Linuxが台頭してきたのもこの頃だ。
SlackwareやRed Hat Linux 5.2をCD-ROM雑誌付録で手に入れて、夜な夜なインストールに挑戦。LILOがうまく動かなくて起動しない、ネットワークカードを認識しない、X Windowが真っ黒。そんな壁に何度もぶつかっては2ちゃんねる(当時はまだ草の根BBSが多かったが)やUNIX USER誌を読み漁って解決する。それが楽しくて仕方なかった。でも金にはならなかった。オープンソースに貢献しても無償の善意で済まされるだけ。Red HatやMySQL ABが上場するまでは、ただのボランティア活動と見なされてた。
今思うと、あの頃は純粋だった。
技術そのものが楽しくて、ASCIIやOh!Xを小脇に抱えて徹夜でコードを書いた。秋葉原でジャンクパーツを漁って自作PCを組み立ててベンチマークの数字で一喜一憂した。
飯代を削ってもSCSIのハードディスクに投資したし、月刊アスキーの付録CD-ROMに入ってたシェアウェアを片っ端から試した。儲けようなんて意識はなかった。ただ、面白いものを作りたかった。
それが今じゃITは完全に拝金主義。コードの美しさより投資家の顔色を見てる。エンジニアもどこが年収高いかばかりで、言語やフレームワークを選ぶ基準が金になっちまった。Pythonが流行るのもAIブームに便乗してのことだし、ブロックチェーンやNFTなんかバブルがはじける前提のネタ探しにしか見えなかった。
もちろん、技術が商業化されて豊かになった面もある。AWSやGCPのおかげで誰でも世界規模のサービスを立ち上げられるようになったし、GitHubやDockerで開発環境も夢みたいに便利になった。だがその一方で楽しいからやるという純粋さはどこへ行ったんだろう。GitHubの草がどれだけ生えてるかが採用基準になる時代。Qiitaに記事を投稿するのも、技術共有じゃなくて転職市場でのポイント稼ぎ。
あの頃には確かに、金ではなく面白さに突き動かされる熱があった。それが今は金の匂いに上書きされてしまったように感じる。
でも稼げなくても、やる価値があった。
今の若いエンジニアたちにその気持ちがどれだけ伝わるかは分からない。
The Power of Small Steps: How Tiny Changes Can Lead to Massive Growth
In a world that glorifies overnight success and dramatic transformations, it's easy to feel like you’re falling behind if you’re not making big leaps. But what if the secret to real, lasting personal growth wasn’t in doing more, faster—but in doing less, consistently?
Welcome to the power of small steps.
Big goals often feel overwhelming. You want to get fit, write a book, start a business, or learn a new skill—but you don’t know where to start. So you procrastinate. Or worse, you dive in too fast, burn out, and give up.
Small steps bypass all of that.
When you break down a huge goal into manageable actions, everything changes. Writing 500 words a day is less intimidating than finishing a whole novel. Ten minutes of walking is more doable than committing to a 5K. And spending 15 minutes a day learning a language adds up to over 90 hours a year.
Consistency beats intensity every time.
The Compound Effect
Imagine improving just 1% every day. That might sound insignificant—but over a year, it compounds into something extraordinary. This idea is the foundation of Darren Hardy’s The Compound Effect and James Clear’s Atomic Habits. Both books emphasize that small, smart choices, repeated over time, lead to radical results.
Think of your habits like planting seeds. At first, nothing seems to happen. But give it time, and you’ll see growth you never thought possible.
Real-Life Example: The 10-Minute Rule
Let’s say you want to start meditating but can’t sit still for 30 minutes. Instead of forcing it, try meditating for just 10 minutes a day. Or even 5. Build the habit before scaling the effort. Once it becomes part of your routine, extending the time feels natural.
This applies to nearly everything:
Want to read more? Read one page a day.
Want to save money? Start with $1 a day.
Want to eat healthier? Swap one snack a day for a better option.
How to Start Taking Small Steps
Pick one goal
Don’t try to overhaul your entire life at once. Choose one area to focus on—health, creativity, relationships, mindset, etc.
Break it down
What’s the smallest possible action you could take toward that goal? Make it so easy you can’t say no.
Link your new habit to an existing one. For example: “After I brush my teeth, I’ll journal for 5 minutes.”
Track it
Use a habit tracker, app, or notebook to keep yourself accountable. Seeing your streak grow is highly motivating.
Every time you follow through, give yourself credit. Progress is progress, no matter how small.
Final Thoughts
Don’t wait for motivation. Don’t wait for the perfect time. Just start—with whatever you have, wherever you are, and however small.
Because small steps, taken consistently, turn into big change.
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format it
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase it
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Technologic Technologic
Technologic Technologic
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
__________________________
Touch It Scroll It Pose It Click It Cross It Crack It Twitch Update It
__________________________
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Technologic Technologic
Technologic Technologic
Technologic Technologic
Technologic Technologic
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format it
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase it
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Technologic Technologic
Technologic Technologic
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
__________________________
Touch It Scroll It Pose It Click It Cross It Crack It Twitch Update It
__________________________
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It
Charge It Point It Zoom It Press It Snap It Work It Quick Erase It
Write It Cut It Paste It Save It Load It Check It Quick Rewrite It
Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It
Lock It Fill It Curl It Find It View It Code It Jam Unlock It
Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It
Name It Read It Tune It Print It Scan It Send It Fax Rename It
Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It
Technologic Technologic
Technologic Technologic
Technologic Technologic
Technologic Technologic
Hey everyone. I don't know where else to post this. I need to write it down before I convince myself I was just hallucinating. I’m a grad student in Japan, doing fieldwork on forgotten local folklore. That's why I was out in the absolute middle of nowhere in Gunma prefecture last night.
My plan was to visit a tiny, dying village called Yomi-touge (not its real name) that supposedly has some unique traditions. Of course, my phone lost signal hours ago, and my car's GPS, which I bought in 2015, decided to have a total meltdown. The sun went down. The mountain roads are narrow and winding, and a thick, soupy fog started to roll in. The kind of wet, heavy air that makes you feel like you’re breathing water. I was completely, hopelessly lost.
After what felt like an eternity of driving at a crawl, I saw it. A light. A single, brutally bright rectangle of light cutting through the fog. A convenience store. One of those big chains you see everywhere, a FamilyMart or a Lawson, I couldn't tell which at first. I’ve never felt so relieved in my life. I parked the car and practically ran inside, the little door chime sounding way too loud in the dead silence.
The inside was… normal. Too normal. The lights were humming with a high-pitched buzz that drilled into my skull. The shelves were perfectly stocked. The air smelled of cheap air freshener and something else… something sweet and hot, like ozone or burnt sugar.
He was a young guy, maybe my age. Pale, drenched in sweat, with dark circles under his eyes like bruises. He moved with a painful stiffness, like every joint was rusted. He muttered a "Irasshaimase…" without even looking at me, his eyes fixed on the counter. His arms were covered in these intricate, dark tattoos, winding from his wrists up under his sleeves. I figured he was just sick, or on a rough shift. I felt bad for him.
I grabbed a can of coffee and went to the counter. "Sorry to bother you," I started in Japanese, "I'm pretty lost. Could you tell me where I am?"
He looked up, and his eyes didn't seem to focus on me. It was like he was looking at a screen a few inches in front of my face. "We do not provide directional information," he said, his voice a flat, rehearsed monotone. "Will that be all for you?"
Okay, weird, but whatever. Maybe it's store policy. As he reached for my coffee, his sleeve slid up. The tattoos on his arm… they weren’t just pictures. For a split second, I swear to God, the lines of ink shifted. They writhed, like tiny black worms under his skin, and a patch of his forearm glowed with a faint, sickly red light. He flinched, a sharp intake of breath, and quickly pulled his sleeve down.
I just froze. I couldn’t have seen that, right? I was tired, my eyes were playing tricks on me.
The person who walked in… I don’t know how to describe them. It was a man, I think. He was tall and wore an old, soaked trench coat. But his face… it was like my brain refused to process it. It wasn't that he had no face, it was that my eyes would slide right off it. It was a blur, a glitch, a 404 error in human form.
The clerk didn't seem surprised. He didn't even seem to see him as strange. His posture just became even more rigid. The red glow on his arm pulsed again, brighter this time, visible through his sleeve.
The faceless man didn't speak. He just stood there. The clerk, without a word, turned. But he didn't go to the coolers. He kept his back to the man, and held out his left hand, palm up. I heard a soft, wet, squelching sound. From a small, dark slit in the center of his palm that I hadn't noticed before, a small carton of strawberry milk, the kind you give to kids, just… emerged. It was produced out of his hand. It was wet with a clear, viscous fluid.
He placed it on the counter. "Here is the requested product," the clerk said, his voice straining. "The transaction is complete."
The faceless man picked up the strawberry milk. He put it in his coat pocket. And then he just… faded. He didn’t walk out the door. He dissolved into the humming air, like heat haze. A second later, he was gone.
The clerk let out a long, shuddering breath and swayed on his feet. He leaned heavily on the counter, his face sheet-white. He looked utterly, existentially exhausted. He saw me staring, my mouth hanging open, the can of coffee still in my hand.
For the first time, a flicker of something real, something human, crossed his face. It was pure, undiluted terror.
"You… are not a regular customer," he whispered, his voice trembling. "Your… concept is too stable. Please. Leave."
I didn't need to be told twice. I threw a 500 yen coin on the counter and ran out of there so fast I think I broke the sound barrier. I didn't even take my coffee. I just got in my car and drove, I don't know in which direction, I just drove.
I'm at a service station now, about 100km away. The sun is coming up. I can't stop shaking. It wasn't a dream. I know it wasn't. Because when I was fumbling for my keys, I realized I had accidentally grabbed the receipt from the counter.
It’s not for my coffee. It’s for the other transaction. It just has one item listed. It doesn't say "Strawberry Milk." It says:
ITEM: CONCEPTUAL SALVATION (FLAVOR: CHILDHOOD NOSTALGIA) - 1 UNIT
PRICE: ¥0
METHOD: ANNULMENT
Has anyone seen a store like this? What the hell is happening in the mountains of Gunma? What did I see? And God, that poor kid working the counter. He isn't in trouble. He's a part of it. He's the machine.
一度投稿したうえで別タブを開いてプログラム的(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-----
令和7年4月1日以降、官報の帰化情報が90日経過で閲覧不可になった。
「プライバシーに配慮」とのことだが、最近の不自然な戸籍不要発言などと合わせて考えると嫌な予感しかしない。
そこでとりあえず官報を保存できるプログラムを作った。自分でダウンロードして保存すること自体は全く問題ない行為。
官報は平日の8:30に公開されるので、cronで8:31とかに実行すると良いのでは。
# 官報のPDFデータを入手して保存する import requests import os import time from bs4 import BeautifulSoup from urllib.parse import urljoin # 対象URL index_url = "https://www.kanpo.go.jp/index.html" base_url = 'https://www.kanpo.go.jp/' # ダウンロード先フォルダ download_dir = 'pdfs' os.makedirs(download_dir, exist_ok=True) # ページ取得 response = requests.get(index_url) response.encoding = 'utf-8' text = response.text # HTMLを解析 soup = BeautifulSoup(text, "html.parser") results = [] # 「本日の官報」を対象にPDFの情報を取得する today_box = soup.find('div', class_='todayBox') if today_box: dl = today_box.find('dl') dt = dl.find('dt') if dt: # 日付の抽出 date_text = dt.get_text(strip=True).split('92;n')[0].replace(" ","").replace("全体目次はこちら","").replace("※インターネット版官報","").strip() dd = dl.find('dd') if dd: for li in dd.find_all('li', class_='articleBox'): title_tag = li.find('a', class_='articleTop') pdf_link = li.find('a', class_='pdfDlb') if title_tag and pdf_link: title = title_tag.decode_contents().replace("<br/>", "").strip() url = pdf_link['href'] results.append({ '日付': date_text, 'title': title, 'url': url }) # 結果の表示 for r in results: date = r['日付'] title = r['title'] url = r['url'] # pdfファイルのURLを作成 url_parts = url.rsplit("/", 1) url_base = url_parts[0] filename = url_parts[1].replace("f.html", ".pdf") converted_url = f"{url_base}/pdf/{filename}" # pdfのURLとファイル名を作成 full_url = urljoin(base_url, converted_url) base_filename = date + "_" + title + "_" + filename.replace("f.html", ".pdf") # ダウンロードして保存 print(f'Downloading {full_url} ...') try: response = requests.get(full_url) response.raise_for_status() with open(os.path.join(download_dir, base_filename), 'wb') as f: f.write(response.content) print(f'Saved: {base_filename}') time.sleep(10) except Exception as e: print(f'Failed to download {full_url}: {e}')
Laziness: The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful and document what you wrote so you don't have to answer so many questions about it.
Impatience: The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to.
Hubris: The quality that makes you write (and maintain) programs that other people won't want to say bad things about.
「怠惰」を美徳とする元々の文脈では、「後先めんどくさいことにならないように、今努力する」ことを怠惰と呼んでいたので、本当の意味で怠けることは意味していない
Laziness: The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful and document what you wrote so you don't have to answer so many questions about it.
vibe codingがはやって、AgentモードでAuto Approveでどんどん実装をすすめておいて、負債がたまるーていっているヤツがうっとうしい。
LLMのモデルが全部のコードや仕様を把握している訳ではないので、間違った方向に進むことはしょっちゅうあるのはあたりまえ。
編集する前にdiffを見て、間違っていたら間違っているとを伝えてどのようにしたらいいかまで伝えれば、LLMにまかせても負債がたまっていかない。
たまにちょっとおかしい時に間違っている説明して再生成がたいへんだから、いったんその編集内容で保存してから、修正結果に対して再度修正を依頼をすることはあるけど。
間違った方向にすすめばその分LLMのAPIのコストもかかるので、コストのことも考えていないということも腹だたしい。
Auto ApproveでWriteまで許可しているやつは、LLMが動作している間、何してるん?どうせ生産性を産むようなことをしてないんだからおとなしくLLMの動作を見守っとけ。
> アプリ内のデータかバックアップしたのを自分でダウンロードしてテキスト化する方法ないかなあ/できたわ。設定→位置→タイムライン→タイムラインのエクスポートでjson化可能。あとは誰かが処理系を作るだけだ!
https://b.hatena.ne.jp/entry/4766225990155446401/comment/punychan
これを使えばXXXX-XX-XX.kml 形式で日付別のタイムラインデータを出力できる(ChatGPT製)。
KMLファイルはGoogle Earth Proなどで開くことが可能で、ビジュアルとして行動履歴を見ることができる。
ただ、以前GoogleMapsタイムラインが吐いていたKMLではPlacemarkという項目に直接建物名などが書かれていたが、現在出力されているjsonではplaceIdというものに変更されていて具体的な名前がわからない。
placeIdを実際の建物名などに変換するにはGoogle Maps API の Place Details APIを使うしかないようだが、膨大なリクエスト(有料)をしなければならず非現実的。
もともと欧州のプライバシー関係の規制のせいでGoogleのサーバ上でのタイムライン履歴が行われなくなったのが今回の問題の起点。
ユーザーの自由を尊重するなら、個人が行動履歴を自己管理する自由ももっと尊重してもらいたいものだな、と思った。
import json
import os
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString
with open("タイムライン.json", "r", encoding="utf-8") as f:
data = json.load(f)
output_folder = "kml_output"
os.makedirs(output_folder, exist_ok=True)
# `semanticSegments` に移動データが含まれている
if "semanticSegments" in data:
date_segments = {} # 日付ごとにデータをまとめる辞書
for segment in data["semanticSegments"]:
# `startTime` から日付部分(YYYY-MM-DD)を抽出
if "startTime" in segment:
date = segment["startTime"].split("T")[0]
date_segments[date].append(segment)
for date, segments in date_segments.items():
kml = Element("kml", xmlns="http://www.opengis.net/kml/2.2")
document = SubElement(kml, "Document")
for segment in segments:
for point in segment["timelinePath"]:
coords = point["point"].replace("°", "") # 度記号を削除
time = point.get("time", "Unknown Time")
# Placemarkを作成
placemark = SubElement(document, "Placemark")
# タイムスタンプ
timestamp = SubElement(placemark, "TimeStamp")
when = SubElement(timestamp, "when")
# 座標
point_element = SubElement(placemark, "Point")
coordinates = SubElement(point_element, "coordinates")
lat, lon = coords.split(", ")
coordinates.text = f"{lon},{lat},0" # KML形式: lon,lat,alt
kml_str = tostring(kml, encoding="utf-8")
formatted_kml = parseString(kml_str).toprettyxml(indent=" ")
kml_filename = os.path.join(output_folder, f"{date}.kml")