Movatterモバイル変換


[0]ホーム

URL:


はてラボはてな匿名ダイアリー
ようこそ ゲスト さんログインユーザー登録

「引数」を含む日記RSS

はてなキーワード:引数とは

次の25件>

2025-06-23

anond:20250623034434

進法や引数の《選択》は主観によるのは仰る通りです。それはそのかたも言っていて、自分10進法は指の本数と同じで都合が良いからと認めています

でも、片手で数を数える時は10進法的に指を曲げて数えるよりも、2進法を使えば折る指の形に重複がなく片手で31まで数えられるよ、と実演して見せて、進法の選択自分の都合(主観)だけど数えてる数字は変わらず客観的でしょ、と説明しても、その方は理解を出来ていないようでした。

そのかたはメートルフィートインチなど単位が変わると計測可能な長さも変わると認識されていたので、単位の変換(置換)が出来ない、つまりありがとうとThankYou(ママと母)が同じであるという例も踏まえて、抽象的な思考が出来ない人なんだと自分判断しました。

自身分数の徐算が出来ないと言っていましたので、恐らく1/2を0.5とか50%とか変換もできないのだろうと自分は予想しました。

自分ゴリゴリ理系ではありませんが、ifとThenの間に無限可能性がある、と書かれるよりもx(y)の方がわかりやすいと思うタイプなので、純粋理系じゃないからこそショックでした。

例えば、万葉仮名がありますよね。あれは漢字意味じゃなく漢字発音と形だけを借用して日本語表現してる文章ですが、【あ=安/阿/亜】など同じ音でも違う漢字である場合があります

今我々が使っている日本語も、名詞形容詞には《お》を使いますが、助詞には《を》を使いますよね。厳密にはOとWoで発音が違いますが、現代人の我々は発音区別せずに、しか役割は違うものとして運用しています

進法やメートルも同じで、無限代替可能だけど約束(定義)があるから前提知識必要で難しくても頑張れば今の人でも読めるもので、夜露死苦なんてのも、その応用で、万葉仮名漢字主観(環境依存)の選択だけど、万葉仮名法則客観的なんだよ、と説明してもわかってもらえませんでした。

ですから文系理系の括りの範疇外で、抽象的な思考が出来ないかなのだ自分絶望してしまいした。

Permalink |記事への反応(1) | 09:34

このエントリーをはてなブックマークに追加ツイートシェア

2025-06-13

我が名はサイボーグdorawii

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

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

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

最初投稿してエントリページに移動した親タブ側のjsコード
// ==UserScript==      // @namePGP署名検出と別タブ自動編集      // @namespacehttp://tampermonkey.net/      // @version      1.0      // @descriptionPGP署名がない投稿自動編集ページへ誘導      // @matchhttps://anond.hatelabo.jp/*      // @grantGM_setValue      // @grantGM_getValue      // @grantGM.openInTab      // ==/UserScript==      (function () {        'use strict';constbody = document.getElementById('entry-page');        if (!body) return;consttitleText = document.title;        if (!titleText.includes('dorawii')) return;constpgpRegex = /BEGIN.*PGP(?: SIGNEDMESSAGE| 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編集ページ処理と自動送信・閉じ      // @namespacehttp://tampermonkey.net/      // @version      1.0      // @description編集ページで署名処理と送信、タブ自動閉じ      // @matchhttps://anond.hatelabo.jp/dorawii_31/edit?id=*      // @grantGM_getValue      // @grantGM_xmlhttpRequest      // @grantGM_setClipboard      // @grantGM_notification      // @connectlocalhost      // ==/UserScript==      (async function () {        'use strict';const shouldRun = awaitGM_getValue('open-tab-for-edit', '0');consttextareaId = 'text-body';consttextarea = document.getElementById(textareaId);        if (!textarea) return;const content =textarea.value;constpgpSignatureRegex = /-----BEGINPGP SIGNEDMESSAGE-----[\s\S]+?-----BEGINPGP SIGNATURE-----[\s\S]+?-----ENDPGP SIGNATURE-----/;        if (pgpSignatureRegex.test(content)) {console.log('[PGPスクリプト]署名が検出されたためそのまま送信します');          return;        }consthttpRequest = (url, data) => {          return newPromise((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 = newURL(window.location.href);        // 2.ベースとなる部分 (例: "https://anond.hatelabo.jp") を取得constorigin = currentUrl.origin;        // 3. 'id'パラメータの値 (例: "20250610184705") を取得constidValue = currentUrl.searchParams.get('id');        // 4.ベース部分とIDを結合して、目的URL文字列を生成        //idValueが取得できた場合のみ実行する        let newUrl = null;        if (idValue) {          newUrl = `${origin}/${idValue}`;        }        // 5. 生成されたURL変数に代入し、コンソールに出力して確認console.log(newUrl);constvalueToSend = newUrl;try {const signatureText = awaithttpRequest('http://localhost:12345/run-batch',valueToSend);console.log('バッチ応答:', signatureText);          if (!signatureText.includes('BEGINPGP SIGNEDMESSAGE')) {            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をキャンセルconstbodyText =textarea?.value || '';            //reCAPTCHAトークンの取得constrecaptchaToken = await newPromise((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 {constresponse = 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で動かすローカルサーバーコード
consthttp =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') {    letbody = '';    req.on('data', chunk => {body += chunk.toString();    });    req.on('end', () => {constparsed = querystring.parse(body);constvalue =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 serverrunningathttp://localhost:12345/');});
@echo offsetlocal 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> nulgoto signloop):postprocesspowershell -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)"endlocalexit /b
AutoHotkey(以前と同じ)
#Persistent#SingleInstance ignoreSetTitleMatchMode, 2WinWaitActive, pinentrySendInputpasswordSleep 100SendInput {Enter}ExitApp

動けばいいという考えで作っているので余分なコードも含んでいるかもしれない。

-----BEGINPGP SIGNEDMESSAGE-----Hash: SHA512https://anond.hatelabo.jp/20250613185036 -----BEGINPGP SIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEv1FQAKCRBwMdsubs4+SHHkAQDUOLgBcdji2T6MJ7h/vlMdFfGlWAzNdXijjE1gIuEPywEAiMNMZqhrMmtlc7UqRuggNJ/UTa5xTIcKp622+7jJQQg==Lgkl-----ENDPGP SIGNATURE-----

Permalink |記事への反応(1) | 18:50

このエントリーをはてなブックマークに追加ツイートシェア

2025-05-30

C++便利そうな機能

プログラミング言語のC++に暫く離れていたが便利そうな機能が出来ていたんですね。

自分が調べても色々理解しきれていないのでここの紹介で間違いがあったらすみません

std::variant(C++17以上)

異なるクラスを代入して保持するものであり、例えばunionのような機能を実現できるらしい。

クラスが大きくなると使わない変数も出てくるかもしれない。

例えばゲーム武器と鎧が同じクラス場合

武器として使う場合攻撃変数必要でも守備変数必要なく、

鎧として使う場合守備変数必要でも攻撃変数必要ない場合らしい。

このような使わない変数隠蔽バグを作ってしまうことを回避できるらしい

std::optional(C++17以上)

任意の値と無効値を保持できるらしい。

例えば、boolで実装する場合は、関数戻り値をboolで成功か失敗かを返し、欲しい値を関数引数ポインタに返す・・というプログラミングになると思う。

std::optionalでは戻り値として欲しい値と失敗かどうかを一緒に返せるらしい。

std::unique_ptr(C++11以上)

メモリの動的確保だが自分deleteしなくて良いのでメモリ解放忘れを防いでくれる。

スマートポインタは前からあったが現在の推奨はstd::unique_ptr

(C++20以上と記載していましたがC++11とのご指摘を受けたため修正しました。すみませんでした。)

enum class(C++11以上)

列挙クラス

列挙型だが従来の列挙型と異なり変数名が外部と衝突しない

nodiscard(C++17以上)

nodiscard属性が付いている関数戻り値の受け取りが必須となる。

他、auto(型推論)、for each

ちなみにstd::optional<std::string> obj;のように<>内に書かれているのは昔からあったテンプレート機能のようです。

Permalink |記事への反応(1) | 09:03

このエントリーをはてなブックマークに追加ツイートシェア

2025-05-25

anond:20250525015130

自分で数理知識活用して新規モデル作る人も、単に既存ライブラリ引数入れて回すだけの人も、会社によってはどっちもデータサイエンティストになるからなぁ

ちなみにワイは後者w

Permalink |記事への反応(0) | 01:55

このエントリーをはてなブックマークに追加ツイートシェア

2025-04-25

三大初見読み違えるIT用語

SAPサップ

引数(いんすう)

あとひとつは?

Permalink |記事への反応(1) | 14:29

このエントリーをはてなブックマークに追加ツイートシェア

2025-03-06

anond:20250306222507

ワイ:

このGitHubレポジトリを読んで

この関数引数Aの代わりにファイルパスB(引数Aを作るのに十分な情報を含んでいる)を与えるから、そのファイルから関数内でこの引数Aを作るようにして

ChatGPT:

はいできました

A=parse_file(B)

あほ

Permalink |記事への反応(1) | 22:51

このエントリーをはてなブックマークに追加ツイートシェア

2025-02-22

ユニットテストも無しにリファクタリングをしているが、今のところ問題は起きていない

てか、リファクタリングアイデア自体AIに任せてる

「設定データクラスフィールド定義すれば関数引数シンプルになります」とか言ってくる

Permalink |記事への反応(0) | 14:43

このエントリーをはてなブックマークに追加ツイートシェア

2025-02-14

Perplexityにリファクタリングさせたら大量の引数存在した関数シンプルクラスでまとめられた

Permalink |記事への反応(0) | 12:49

このエントリーをはてなブックマークに追加ツイートシェア

2024-11-20

こういうのってどうすれば汎用化できるか?

引数として最適化母数をとれば、母数をとってくることはできる

モデル関数の形を引数にするわけにいかない

選択肢にするか?

異なる関数を組み合わせている場合はどうするか?

Permalink |記事への反応(0) | 06:34

このエントリーをはてなブックマークに追加ツイートシェア

2024-09-19

リファクタリングして、理解不能バグが起こって、そのたった一つの修正に30時間以上かけた

FUCK

途中で他のとこのバグ修正もかなりできたのが救いではあるが・・・

わかりやすくするために無駄にrefするのやめようと思って引数からrefキーワード外していたのが原因だった

Permalink |記事への反応(1) | 17:47

このエントリーをはてなブックマークに追加ツイートシェア

2024-09-04

anond:20240904093219

ああ、いいじゃん

これならいいよ

引数が多いのがシンプルになったってレベルじゃなくて回帰で綺麗にできてる

Permalink |記事への反応(0) | 09:40

このエントリーをはてなブックマークに追加ツイートシェア

2024-09-02

anond:20240902122304

お前の職場(嘲笑)

最初は2つだったんだが、要件が増えていく時に徐々に増えていってめんどくさくて引数に新しいのを追加するだけ

Permalink |記事への反応(0) | 12:25

このエントリーをはてなブックマークに追加ツイートシェア

anond:20240902121938

任意の数なのにたくさーん引数でいいでしょを**にしたから偉いでしょって

お前のコード本当に任意の数ハンドルできてるか?

あげてみなさい、特別にタダで見てあげるから

Permalink |記事への反応(0) | 12:22

このエントリーをはてなブックマークに追加ツイートシェア

anond:20240902121529

まさか任意の数なのにたくさん引数作ればええやろ!でたくさんabcとかやってたの?

仕事でやってる方ではないよね?

Permalink |記事への反応(0) | 12:18

このエントリーをはてなブックマークに追加ツイートシェア

anond:20240902121529

そもそも任意なら元の引数なんで固定なんだよ

言い訳がすぎる

Permalink |記事への反応(0) | 12:17

このエントリーをはてなブックマークに追加ツイートシェア

anond:20240902120531

大体お前さー

引数が多い時点で設計ミスとか

多いなら構造体にするとか

料理でいうなら米を洗剤で洗うなレベルのことを優しく言われてるのに(俺ではない)

逆ギレして差別用語罵倒とかさあ

もう2度と書くなよここに

Permalink |記事への反応(0) | 12:12

このエントリーをはてなブックマークに追加ツイートシェア

anond:20240902113934

一見シンプルに見えるのが可読性高いわけじゃないんだよ

全部まとめちゃってそもそも中身をみないと何が来てるのかわからないのは、全くの素人シグネチャだけみたら簡潔に見えるかもしれないけど

実際には可読性かなり下がってる

他の人が指摘してるように

引数無茶苦茶ふえてるのがそもそも問題だし

クラスにするというのもそのとおり

もう一つ付け加えると引数名前見て何だか全くわからない

Permalink |記事への反応(0) | 11:43

このエントリーをはてなブックマークに追加ツイートシェア

anond:20240902113308

その引数群を特定関数しかさないのなら辞書化する意味いかな。

複数箇所で使うなら構造体(pyhtonならdataclass?)かクラス使うかな?

引数多すぎ問題についてはケースバイケースだと思う。

再利用しない処理なら変に分割せずに一つの関数にまとめるのもアリだし。

Permalink |記事への反応(0) | 11:38

このエントリーをはてなブックマークに追加ツイートシェア

anond:20240902113308

そもそもそんだけ引数必要な時点で設計ミスってる感

Permalink |記事への反応(0) | 11:34

このエントリーをはてなブックマークに追加ツイートシェア

2024-08-24

javascriptの連番配列生成どれが好き?

そこまでシビアな速度は求められてなくわかりやすさで比べた場合

Array.from({ length: 5 }, (_, i) => i);

Array.from({ length: 5 }).map((_, i) => i);

Array.from(Array(5)).map((_, i) => i);

Array.from(Array(5), (_, i) => i);

Array(5).fill().map((_,i) => i);

[...Array(5)].map((_, i) => i);

  1. Array.from
  2. Array(n).fill
  3. [...Array(n)]

MDNArray.from({ length: 5 }, (_, i) => i); 派だった

そもそもArray(5)の要素が空だからmapできないのが直感に反する

Permalink |記事への反応(0) | 16:09

このエントリーをはてなブックマークに追加ツイートシェア

2024-08-20

ソースコードコメントはいらない

昔の慣習に倣ってコメントを丁寧に書く人がいまだに居るけれど

99%の場面でコメント必要無い

以前のコードコメントアウトしているようなソースは論外として

例えばメソッド関数の頭にそれが何をする関数なのかを書いている人が多いけれど

メソッド名や引数名、戻り値の型をキッチリ付けておけば分からないことなんて無い

それ以上の複雑な処理をするなら機能分解するべきだし名前を付けにくい処理の場合そもそも設計おかし

昔は便利なIDEが無かったので変数関数名前に長い名前を付けると実装が大変で

仕方なくx1だとかval2だとかを使って実装してたのでコメントに書いておくようなこともあったけれど

Copilotを使える時代コメントを書く必要なんて皆無だし

仮に意味が分からないコードがあってもCopilotに聞けばいいのでやっぱりコメント必要ない

コメントがあった方が良い場合は「この実装はこのアルゴリズムに基づいて実装している」とURLリンクを貼ったり

「この規則があるのでこういう実装をしている」とRFCを貼ったりするとかはあるけれど

それもほとんど変数名だとかで解決できるし、あっても1行で終わるレベル

そういう実装全体の設計に関するような話はReadmeに書けば良いのでソースコード内のコメントとしては必要無い

「それでも無いよりはいいでしょ?」みたいに言う人いるが逆に問題になることも多い

コメントバイアスされてソースコード確認が疎かになったり

コメント内容と実装が違う場合にどっちが正解なのかが分からなくなったり

ソースコード修正に対してコメント修正されていなくて後々で揉めたりする

当然ながらコメント部分にはLintが効かないので(ChatGPT使えば作れそうな気もするが)

チェック内容も増えるし良いことがほとんどない

ヤバいJTCとかは「各行にコメントを書いて下さい」とか言ってきて正気の沙汰じゃ無い

まぁそういう案件が来たらChatGPTに丸投げするとは思うけれど下手すると「Copilot禁止」とかも言い出しそうだな

書いたところで誰も読まないのにアホすぎる

Permalink |記事への反応(3) | 15:17

このエントリーをはてなブックマークに追加ツイートシェア

2024-06-27

プロ機械学習もやってないやつのコード

プロ機械学習系のクソコード・クソジャークっぷりが取り立たされてるけど、クソコード・クソジャークっぷりは何も競プロer機械学習er専売特許ではない。

自分経験したやつを以下に列挙する。

組み込みerC言語)のクソコード・クソジャークっぷり

フロントエンドerのクソコード・クソジャークっぷり

インフラerのクソコード・クソジャークっぷり

VBAerのクソコード・クソジャークっぷり

Permalink |記事への反応(2) | 03:18

このエントリーをはてなブックマークに追加ツイートシェア

2024-06-15

anond:20240615130959

引数っていんすうで変換できない

Permalink |記事への反応(1) | 13:10

このエントリーをはてなブックマークに追加ツイートシェア

anond:20240614231352

引数が少ないんだな

Permalink |記事への反応(1) | 13:09

このエントリーをはてなブックマークに追加ツイートシェア

2024-05-28

anond:20240525203850

新卒COBOLerは大変だよな。なんせ一般的IT技術が全く身につかない。

順編成ファイルをJCLで一括ロードからSQLも分からないし、戻り値引数ブロック変数何ぞそれのレベル環境特殊からサーバ構築も当然できない。

スキルがないから他の案件に行けない経験詰めないでキャリア選択肢が狭まっていく。

ただ、品質管理だったり複雑なデータ連携整合性を考える論理思考だったりは一生役に立つ唯一の宝だな。

ワイも20年前は元増田と同じ境遇で悩んでたわ。その選択絶対に正解だと思うよ。

何はともあれ若者よおめでとう!新天地無限可能性を広げてくれ。

Permalink |記事への反応(1) | 15:21

このエントリーをはてなブックマークに追加ツイートシェア

次の25件>
ログインユーザー登録
ようこそ ゲスト さん
Copyright (C) 2001-2025 hatena. All Rights Reserved.

[8]ページ先頭

©2009-2025 Movatter.jp