「クリップボード」を含む日記 RSS

はてなキーワード: クリップボードとは

2025-06-13

我が名はサイボーグdorawii

パーマリンク署名対象にするより堅牢自動化を作れた。

一度投稿したうえで別タブを開いてプログラム的(fetch)に送信してその別タブが閉じられる仕組み。

改めてスクリプト配布しちゃる

最初投稿してエントリページに移動した親タブ側のjsコード
// ==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 });

      })();
親タブから開かれる編集ページの子タブのjsコード
 // ==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);
        }

      })();
node.jsで動かすローカルサーバーコード
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
AutoHotkey(以前と同じ)
#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-----

2025-06-11

anond:20250611114540

ちなみに今回自動化として構想する処理の流れ(差分点)

エントリページでタイトルがdorawiiでpgp署名が無くeditボタンがあったら、現在URLを保管してそれをクリック

・そのクリックによるURLへのアクセスにおいては別タブを開かせるようにするが、現在のタブは変えないようにする

・保管してあるURLnode.jsサーバー経由でバッチファイルに渡して署名してクリップボードコピー

フォームへの貼り付けが終わったら送信ボタンクリックし、レスポンスが正常に返ったと確認された段階(つまりページ表示の完了を待たない)で、別タブを自動終了

署名自動化に集中したいので省く。dorawiiより

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

https://anond.hatelabo.jp/20250611115815 
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEk0DAAKCRBwMdsubs4+
SMeUAP0Sbc2rovwbBLIW1EsKVCkZgaMMBQh7XNHretkmy/X+MgD/VZaho2zYzj5T
BcoTBYw5DL/IbfBlrq8oRZoAJckc8wY=
=U8nF
-----END PGP SIGNATURE-----

2025-06-09

dorawii

ようやく(ほぼ)すべてが自動化された。

あとはローカルサーバーの起動をスタートアップに設定する(方法AIに聞いて指示に従う)だけの消化試合

ここにほとんどAI頼りのコードを公開しておく。

事前にインストールしておくもの

autohotkey

nodejs

ユーザースクリプトを実行できる拡張機能

パスとかの注意

署名要求してくるパスワードを自動入力するahkファイルドキュメントAutoHotkey配下に置いた。

バッチファイル(make.sign.bat)はデスクトップに置いた。

以下コード

autopass.ahk
#Persistent
#SingleInstance ignore
SetTitleMatchMode, 2
WinWaitActive, pinentry
SendInput お前のパスワード
Sleep 100
SendInput {Enter}
ExitApp
run-bacth-server.js
// 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/');
});
makesign.bat
@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
tempermonkeyとかに登録するユーザースクリプト
// ==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-----

2025-06-08

dorawii

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-----

2025-05-25

コピペ支援ソフトコピー機能は充実しててもペースト機能が充実してるソフトがない気がする

スマホでmae2chっていう5chの専ブラアプリを使ったんだけど、これコピペ機能が充実しててペーストするときクリップボードから複数コピーを選んで「選んだ順番にペーストする」という一気にペーストする機能があるんだよ

複数ソースを張り付けたいときに便利になる

PCでも使いたくてコピペ支援フリーソフトを探したけど、コピーを便利にする機能を謳ってるものばかりでペースト機能を便利にしたものはなかった

ペースト機能を豊かにするのって求める人は少ないのか?

2025-03-10

地域回覧板100均ファイルと袋を買ってきて作ったら

なんで金かけたのってババァに言われた

そう言うことをすると他の人もそれをやらなきゃ行けなくなってお金がかかるでしょ!だそうで。


かに今までは封筒再利用してガムテで補強したもの書類が入り、どこぞの紙袋に入れて、手描きの用紙で回覧順を書いたようなもので回っていたが、その工作を俺にしろと言うことらしかった。

めんどくさ。心底めんどくさ。

100均

440円で解決できることをなんでそんなことをしなければならないのか。時間もったいない


言っている事の意味がわかったら、もうこりゃ流した方がいいなと

あっはい、なるほど。なるほどー!

と言って全力で流して「じゃあおねがいしますー!しつれいしますー」で置いてきたけど

暇な老人の金銭感覚マジでめんどくさ。

俺を巻き込むな。

2025-02-14

cat sample.txt | xsel -ib

みたいにクリップボードコピーできることを知った

2024-12-16

anond:20241216104150

操作ミスクリップボードに入っていたXの二次元微えろイラスト

さら操作ミスして会社Slackに貼り付けてしまたことならある

投稿ボタンまでは押さなかったのでぎりぎりセーフ

クリップボード個人情報をうっかり投稿しそうで怖い

ブログコメント欄とか、削除は簡単じゃないか

個人情報クリップボードに置いたままうっかりペーストボタンを押してうっかり勢いでEnter押してしまいそうで怖い

2024-11-28

anond:20241128050518

windows公式よりcliborのほうが使い勝手がいいな

こっちはこっちで絵文字顔文字を一覧から探して貼り付ける機能デバイスクリップボード共有とかあるから一長一短ではあるけど

anond:20241127195624

Win+Vでクリップボード履歴表示からの貼り付けできること

ある時からちょろめシークレットモードでは機能しなくなって悲しい気持ちになってる

2024-09-22

AIインフルエンサーたちはChatGPTが世に出る前は何を投稿していたのか?(2/2)

AIインフルエンサーたちはChatGPTが世に出る前は何を投稿していたのか?(1/1)の続き

吉見拓哉|Takuya Yoshimi

このTwitterアカウントは、主にYouTubeSEO競馬アニメなどの話題について呟いており、自身活動や興味関心について発信しています

YouTubeプレミアムが500円増額。しかし、、、不可逆!!!

shimayuz@AIクリエイター

このアカウントは、日々の米国株暗号通貨市場動向、特にテクノロジー関連株やビットコイン価格変動についてツイートしています

ゼロコロナ政策再び。 $AAPL生産に影響が懸念され大きく下落。更に経済混乱が想定され、株価はSP500全業種で

一方で年末商戦売上堅調な滑り出しで $AMZN

暗号資産レンディングBlockFiが経営破綻暗号通貨も軒並み下落。

チャート上、なんとか踏み止まるか? 」

元木大介ᯅシステム生成AI Babel/Zoltraak & 生成AI塾

このアカウントは、AI特にプロマネAIや量子AIに関する話題や、仕事効率化、プログラミング、そして最新の技術トレンドについて呟いています

"プロマネAI実証実験を開始しました!量子AI×NotionによるプロマネAI実証実験を開始 https://prtimes.jp/main/html/rd/p/000000003.000082094.htmlvia @PRTIMES_JP"

sangmin.eth | Dify Ambassador

このアカウントは、主にOpenAIの最新言語モデルtext-davinci-003」の進化と、そのモデルを用いた英語学習ツールサービスについて呟いています特に英語学習におけるAI活用とその重要性を強調しています

"朝起きたら世界がまた変わっていた(笑)。@OpenAI が最新モデルtext-davinci-003」を発表。主な特徴は、①より明確で、説得力のある文章が書ける②より複雑な指示にも対応③より長い形式コンテンツが生成可 1月に"InstructGPT"が出た時も感動したけどそれを遥かに上回る進化、です。"

深津 貴之 / THE GUILD

このアカウントは、主にAI特に画像生成AIに関する話題を呟いています特にStable Diffusionのバージョンアップや使い方について多くのツイートをしています

結果

ここにリストアップした人たち以外もみましたが、分類すると3種類のアカウントがいて

1. ChatGPTブーム後にアカウントを始めた人

2. NFTなどの儲かりそうな技術を追いかけていた人

3. 日常ツイートをしていたが目覚めてしまった人

共通する特徴としては会社代表の人が多いです。

またIDを変更してログがヒットしない人は含まれていません(IDから特定できるけどそこまでやらなかった)

ツイートを取得するJS

javascript:(function() {

const text = Array.from(document.querySelectorAll('[data-testid="tweetText"]')).map(s => s.textContent.trim()).join('\n');

const textarea = document.createElement('textarea');

textarea.value = text;

document.body.appendChild(textarea);

textarea.select();

try {

document.execCommand('copy');

console.log('結果がクリップボードコピーされました!');

} catch (err) {

console.error('クリップボードへのコピーに失敗しました:', err);

}

document.body.removeChild(textarea);

})();

2024-09-14

copilot君、とてもじゃないがpilotを任せられない

Windowsの画面右下になんかアイコンのできたcopilot君、話が同じところでぐるぐる回ることにかけては有名生成AIの中でも特に一流と私の中でもっぱらの話題なんだが、つい先日は本当にマジで典型をやってくれて笑ってしまった。

markdownメールアドレス書く時のお作法とかある?みたいに聞いたのよ。素で書いてみたらVSCodeがなんか波線ひいて警告だしてきたからさ。

そしたらcopilot君のウインドウ内でわーっと文字単位で出力が始まってな、markdownの書式を書き出してくれて、書式が閉じた瞬間URL記法なので危険判断したのか表示に解釈が入って書式ごと撤去された。ブロックが分けられてコピーボタンまで表示されたが、それをクリックしてもクリップボードに入るのは例になる仮のメールアドレスだけ。

からcopilotに文句言ってやったのよ。「お前それちゃんと表示されてねえんだけど」ってな。

「わかりました!コードブロックで表示しますね!」とか嬉々として再出力始めたんだけどな。

やっぱり記法の書式が閉じた瞬間無事元の木阿弥ですわ。

だめだこりゃ…って思わず打ち込んだね。

そしたら伝わらなかったようですね!とか言いながら元気にもう一度失敗してくれたよ。もうなんか可愛いわ。

だいぶ前なんかバッチファイルの中身の書き方を聞こうとして、copilot君、cmd.exeでこれこれこういうことしたいんだけどさあ、って書き込んだらなんかどっかに突き刺さってしまったらしくずっとなんか表示がぐるぐる待機中のまま帰ってこなくなった。

いやー生成AI面白い

2024-09-04

anond:20240904180459

ようつべ、はツベルクリン友の会サイト愛称かな、とか一瞬思うけど大体文脈でわかる。

「こぴろっと」はクリップボードユーティリティ?って悩むからわかりづらい。

2024-07-13

anond:20240713013746

拙者毎日三連休ゆえ普段とかわらんでござるな

しいていうとゼンゼロを進めつつ音声作品フォルダの整理を終わらせたいところでござる

wavflacにしつつ声優名とリリース日をタグに埋め込んでいく所存でござる

クリップボードに読み込んだ「2024年01月01日」を自動で「2024-01-01」に置き換える常駐型ツールは用意したでござる

CT Converterっていう2011年からある古いフリーソフトでござるが……

なんというか2024年の今もっとスマートなやり方がありそうな気はするでござるな

2024-07-10

スマホクリップボードアプリがある時から使えなくなってた

登録したもの編集しようとして落ちる

削除しようとしても落ちる

PCバックアップソフト使ってアプリデータバックアップして、アプリを再インストールした

まっさら状態で正常に動く

が、データを復旧させると以前と同様に落ちるようになった

バックアップデータのうち、履歴データページ分は削除し、それ以外のナンバリングページを残して復旧させたら正常に動作するようになった

アプリ管理できる許容量を超えた履歴データがあり、それが問題だったということだろうか

最初コピペツールだったけど、使ううちに文章の下書きやテンプレ管理など、雑多な長文も書いては残すような使い方になってた

まあ想定外の使い方と履歴だったということなんだろう

2024-04-27

vim信者は難しい変態キーバインドを使いこなすことに酔っているだけ

現代テキストエディタがCtrlを押しながら矢印、Shiftによる選択Home,Endなどを組み合わせたとき操作に対して、viが本当にエディタを乗り換えるほどの優位性を持っているのか疑問

viに有利な例題でない限りはそんなに差は無いのでは?

 

あとなぜvimはいまだにヤンクというクリップボード下位互換ヤンクという概念操作せねばならないのか?

このせいで「ビジュアルモード」という選択範囲クリップボード操作と同等の操作と、vi本来操作が入り混じった一貫性に欠けたテキスト編集を強いられる

fugaをコピーしてhogeに上書き張り付けするという自然操作の流れが「vi流」のキー操作で行えないのは明確な問題だと思える

 

vi開発当初にクリップボードという概念存在しなかった事は分かる。しかしそれがいまだに改善されていないのはなぜか?

テキスト操作を便利にするためにユーザにはvi流の変態操作押し付けるのに

テキスト操作を便利するためにエディタ側はクリップボードを使った操作体系を取り入れないのは単に昔からの慣習を至上とする悪習なのではないか

2024-04-26

Win+V のショートカット知らなかった

なんだよ

クリップボード履歴とか便利じゃんかよ

なぁ?

2024-04-15

Xproの仕様変更のせいで

マウスマクロに「新しいタブを開いてクリップボード中身を貼り付けてEnter」を設定せざるを得なくなった

今までは個別ポストページが開くリンクだったのに、Xproが再度開くリンクに書き換えられてしまっているのだ

イーロン許せねえよ

2024-04-14

お前ら知ってるか?WindowsキーとVキーを同時押ししたら過去コピーした内容をクリップボードから選択してペースト出来るって。

知ってた?

2024-04-09

支払いが停止されました。

三菱UFJニコスカードをご利用のお客さま

利用いただきありがとうございます

このたび、ご本人様のご利用かどうかを確認させていただきたいお取引がありましたので、誠に勝手ながら、カードのご利用を一部制限させていただき、ご連絡させていただきました。

つきましては、以下へアクセスの上、カードのご利用確認にご協力をお願い致します。

お客様にはご迷惑、ご心配をお掛けし、誠に申し訳ございません。

何卒ご理解いただきたくお願い申しあげます

ご回答をいただけない場合カードのご利用制限継続されることもございますので、予めご了承下さい

ご了承も何も、ワイそもそもその手のカードは作れないんだがwwwwww?

まあ、詐欺メールやね

「▼ご利用確認こちら」ってカードの種類別URL一覧が載せてあるけど、そのURLドメインwww2.cr.mufg.jp

本物の方はwww.cr.mufg.jpである

うわっ、怖っ!

でも、せっかくの機会なのでそのURLVirus Totalにでもかけてみようと思い、右クリックからリンクコピーしたらクリップボードに全く違うURL・・・・・・

うわっ、怖っ!(二回目)

それはそれとしてクリップボード上のURLVirus Totalにかけてみたところ、CRDF、CyRadar、Qutteraの3つだけがこれを悪意あるサイトという判定をした

普段使いアンチウィルスソフトの開発元のやつがクリーン判定を出してて地味にショックだわ

2024-02-25

Macユーザー増田リアルに使ってないアプリ

あーでもないこーでもない…macだとこんなに便利とかWindowsだと標準装備だぞとかバカなのかなと思いながら。


■Alfred

Spotlightで十分では? appの起動もファイル検索電卓()もできるじゃん。

一回入れてみたけどよくわからんかった。細々したコマンド入力するのもダルいマウス操作で良い。

トラックパットでもちもち仕事してる人向け?マウス縛りしてるひとにはいいのかも。

キーボードに集中していて、マウスに持ち替えるたび意識が阻害されるタイプ職種のひとには合ってると思う。



■BetterTouchTool

からない。いらない。

やっぱノート民が主語拡張してmacで〜〜〜とか言ってるだけな気がする。

トラックパット上で3本指4本指で肩をすぼませてちまちま操作するならマウス使ってダイナミックに操作しようぜ。そっちの方がストレスフリーよ。


■Karabiner-Elements

イキってUSキーを買ったバカタレが英語/かなキーの割り当てのためだけに導入するアプリってイメージ

あのあの、最初からJISキーにすればいいですよね。え、JISキーは美しくない? シンプルじゃない?

見た目のためにわざわざ外部アプリを入れてごちゃごちゃ設定する方が美しくないしシンプルじゃないと思います

ハード面で余計な選択をしてその解決のために余計なソフトを入れるってかなり美意識を疑う。クソみたいなマッチポンプ

JISキーシール貼った方がよっぽどシンプル()だぞ

■Yoink

一瞬便利そうに思ったけどイマイチ使う用途が思い浮かばない。

ちっちゃい画面で仕事してるひと向け?

でっかい画面で仕事をしよう!



じゃあお前はなに使ってんだよバーーーカ!


JeditΩ

JeditJeditXから使っている。検索置換が便利。

■Clipy

クリップボード履歴くらいはOS標準にしてもよいのでは……。

まあそれとは別によく使う文章登録できるので仕事上良く使う注釈などは登録している。


■JumpDesktop

出先でiPadから自宅のMac操作できるので便利。ノート買っとけという話ではある。

クソデカファイルDLしても実際にDLしているのは自宅のマシンなのでモバイル通信残量を使用しないというのはノートと比べた際の利点か。些細ではあるが。

■SPAi

神。イラレ上でスクリプトショートカットで実行できる。クソ便利。戻れない。



■ParallelsDesktop

スケベなゲームします。

いちおうそれだけではなく、客からWMVで欲しいと言われた際にエンコードのためだけに使用します。

MacAdobe製品だとWMVエンコできないんですよね。たまげたね。



iPad


iA Writer

エディタ買い切りなのがいい。iCloudに保存してMaciPadとの反復作業可能


■Lok Board

入れてみただけ。まるでデスクトップのようにiPad操作できるが、あらかじめ定められたアプリしか使用できないので自分用途には合わなかった。

ファーストインプレッションのワクワク感は異常。

2024-02-23

個人的マジでよく使ってるショートカット操作

Ctrl+C、Ctrl+V:皆さんご存じコピペ

Ctrl+X:切り取り。単純に削除として使うことも多々ある

Ctrl+A:全ての項目を選択状態にする

Ctrl+Z:元に戻す

Ctrl+Y:やり直し

Win+L:画面をロック職場で離席するとき

Win+Shift+S:指定範囲スクショする

Win+V:クリップボードを開く。過去コピーや切り取りしたデータが出てくる

Win+X:Windowsのクイックリンクの表示

Win+D:デスクトップの表示。そのままもう一回同じ操作したら元に戻る

Ctrl+Win+T:指定ウィンドウを常に最前面に表示する。Microsoft PowerToysかいう奴の機能の一つで色々便利らしいけど使いこなせてない


ブラウザのタブをホイールクリック :タブを閉じる。↓と合わせて死ぬほど使うのになんか知らない人が多い

ブラウザリンクホイールクリックリンクを新しいタブで開く。ブックマークフォルダに行えばその中のリンクをまとめて開ける

上記以外のブラウザ上の操作基本的マウスジェスチャーに割り振ってるので割愛

2024-01-10

自分メモ

MacDigital Color Meterのカラーコードを小文字エディタに貼り付ける方法

Automatorアクション作成してショートカット登録する。

アクション登録するシェルスクリプトはこれだけ。

pbpaste | tr 'A-Z' 'a-z' | pbcopy

Digital Color Meterは便利な反面カラーコード大文字で、コーディングルールと違うのが困り物だったんだよなあ。そりゃクリップボードテキスト文字変換して戻すだけでいけるに決まってるのに、何を困っていたのか。

あらかた組んだ後にエディタで一括変換してたけど、その一手間がクッソうざくてどうにかならんかと長年悩んでいたのでスッキリ

人によってはいちいちショートカットで呼び出す方がウザいかもしれんが、自分はこれで良し。

ログイン ユーザー登録
ようこそ ゲスト さん