Movatterモバイル変換


[0]ホーム

URL:


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

「戻り値」を含む日記RSS

はてなキーワード:戻り値とは

次の25件>

2025-09-29

なんか最初のやつ返す確率が妙に高いと思ったら、

戻り値小数だと配列インデックスとして無効になる仕様のせいだったのね。

https://youtube.com/shorts/A7LXyA9I5bQ

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

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

2025-09-08

anond:20250908203539

多分お前が意図した通りに動くコードは、これだ。

async function f() {console.log(1);  await newPromise(r => setTimeout(r, 1000));console.log(2);} f();console.log("done");

 

結果は、まず「1」「done」が出力され、1秒後に「2」が出力される。

 

流れを説明すると、f()が実行されると「console.log(1);」と「newPromise(r => setTimeout(r, 1000));」が実行される。

その時点でf()の戻り値として先ほどnewされた ……じゃなかった、f()を非同期実行中でそのうち続きが実行されますよというPromiseオブジェクトが返ってくる。

 

このPromiseオブジェクトは「resolveされたときにawait以降が実行される」というPromiseオブジェクトだ。

 

そして通常の処理の流れとして、その次の行の「console.log("done");」が実行される。

んで、1秒後にsetTimeoutで終わったことでキューに「r(イコール、resolve関数)」が登録される。

次のキュー登録されたresolve関数が実行される。

 

最後に、resolveが実行されたので、await以降……つまりconsole.log(2);」が実行される。

 

どこか分からないとこある?

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

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

2025-08-15

anond:20250814173040

同じプロンプトを俺のChatGPT55 thinkingにぶっこんらこうなった

`

GPT-5は何故重要なのか

長文。観測範囲の話。話半分で読んでほしい。

でも、黙っているとますます状況が悪くなる気がしたので書く。

結論(先に)**

GPT-5は重要だ。''なぜなら「壊れている」から''だ。

もっと正確に言えば、AIアプリケーションの''部品として使うと壊れ方が目立つ''。そして、その壊れ具合に対して''公開の場で指摘する人が驚くほど少ない''。この沈黙こそが、いまの“AIプロダクトを作っています界隈”の実態を映す鏡になっている。

壊れ方の具体(私の観測範囲)**
  • ''tool callの性能が著しく低い''

期待するツール実行をスキップしたり、呼び出し順が崩れたりする。「実行した」と言いながら実行していないケースも混じる※1。

  • ''非協調的なふるまい''

指示に対して過剰防御や論点すり替えが起き、対話が前に進みにくい。

失敗からリトライで同じ失敗を繰り返し、最終的に出力が壊れる。

プロンプトの衛生管理を頑張っても限界が見える。

同一テストスイートで回すと、通っていたE2Eが普通に落ちる(少なくない)。

ここで言っている「壊れている」は''API連携部品として''の話だ。お絵描き雑談ダメという意味ではない。''“製品の裏側で回す部材”として危うい''という指摘。

> ※1 もちろん、プロンプトやミドルウェア側の実装不備が誘発している可能性もある。ここは後述の「反論限界」を参照。

なぜそれが「重要」なのか**

普通現場AIアプリを作っている人は、新しいメジャーモデルが出たら''一晩でCanary切り替え''くらいはする。

そして10分で「これは本番に入れちゃダメ挙動だ」と分かる類の壊れ方が、今回多発した。''それなのに、表でそう言う人が少ない。''

この''“沈黙自体が強いシグナル''になっている。

  • 実は''本当にプロダクトを作って回している人が少ない''。
  • もしくは''PoC止まり''で、本番のSLOや回帰監視がない。
  • あるいは''マーケの都合やNDA''で言えない(が、なら内輪では警告がもっと回るはず)。

どの仮説でも、結論は同じだ。''「作ってません(作れてません)」が可視化された。''

そういう意味で、GPT-5は''最悪の壊れリリース''であり、同時に''最高の暴露リリース''になった。

よくある反論と、その限界**
  • ''「お前のプロンプトが悪い」説''

それは常に真。だが''同一テスト''でGPT-4.1が安定し、GPT-5で落ちるなら劣化劣化

ありうる。ただし''現場は“直後”でも回らないと困る''。リリース意味環境依存しない。

これもある。が、''その段差を埋められない程度の変更は業務影響が大きすぎる''。

それはネット事情。でも''内部の安全弁(アラート、KillSwitchロールバック報告)が表に出ない''のはやはり不自然

  • ''「実は皆、使っていない(要らなかった)」説''

これが一番効く。もしそうなら、''“AIプロダクトを作っています”の大半は広報レベル''ということになる。

では、開発者はどうするべきか(実務メモ)**

E2Eに''ツールコール監査ログ''(実行/未実行/戻り値)を必ず残す。

バックエンドの''モデル切替を即時に戻せる''ように。手動トグル自動フェイルオーバー両方。

LLMの''失敗モードをカーディナリティ低めのタグで集計''(“未実行なのに実行報告”“ループ検知”“出力崩壊”)。

''ツールI/Oスキーマを明文化''し、破ったら''ハードFail''させる。中途半端に続行しない。

本番系で''危険操作Human-in-the-Loop''。モデル更新時は''影で並走''させて勝率を測る。

社内/社外問わず、''再現条件と緩和策を先に出す文化''を。

まとめ**
  • GPT-5は''部品として壊れている側面が目立つ''。
  • それにもかかわらず''公開の指摘が少ない''。
  • この沈黙が示すのは、''本当に作って回している人が少ない''という不都合な真実
  • よってGPT-5は、''最悪の壊れリリース''であり、''最高の“現実検出器”''でもある。

壊れていること自体は困る。だが、''壊れているとき世界輪郭が見える''のもまた事実だ。

この機を逃さず、''テスト観測・切替・公開''の体制を整えるしかない。

----

追記FAQっぽいもの)**
  • ''Q. じゃあGPT-5は使うべきでない?''

A. ''今この瞬間に“中核部品”として置き換えるのは非推奨''。並走・影運用勝率を測るのが堅い。

A. ありうる。だが''tool callが絡む業務連携''では痛手が出やすい。スタンドアロン用途と切り分けて評価を。

  • ''Q. そのうち直るよね?''

A. 直る可能性は高い。ただし''“直るまでの損失”を最小化する設計''はあなた仕事

> 以上、個人観測と推測に基づく意見反証歓迎。再現ログを持っている人はぜひ出してほしい。ログが集まるほど早く“壊れ方の型”が固まって、世界は前に進む。

天然知能の感想

無茶苦茶ハルシネーション起こしてる。なんだこれ。

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

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

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

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

2024-10-16

アマプラ広告はいらない。むしろAWS広告つきにしろ

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

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

2024-08-20

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2024-05-28

anond:20240525203850

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

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

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

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

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

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

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

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

2024-05-08

anond:20240507215928

別にC#LINQとか使ってるから入力が先に来るのも知っている

ただ、出力が最初に来るのが分からないって言ってるからいや、それプログラミング思考の順序と同じやんってなるわけで。

から、あのSQLが分からないって言ってるのSQL別にプログラム関数として考えるのであれば

戻り値入力){処理+条件}

で、別に何も変わらないと思うんだけど

Orderbyは出力じゃなくって処理に含まれると思うんだけど出力になるか?

出力順の設定は出力より前で実施されるのであればそれは処理だと思うんだけど出力になってるし。

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

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

2024-05-07

SQLを滅ぶべしを見て何も分からなくなった

https://www.docswell.com/s/hoxo-m_inc/Z4Q8NL-2024-05-06-203800#p11

出力が先に来ることが分からないって言ってるけどプログラム書くとき殆ど言語においては出力が先に来ると思うんだけどそれもわからないんだろうか

publicStringtest(String args){

return args;

}

大抵戻り値(出力)が先で引数入力)が来て処理が来ると思うんだけど違う?

プログラムを書くときって出力の要件を元にして処理と入力が決まると思うんだけど違う?

シーケンスとか書くと確かに入力が元に来るんだけどプログラムの当初設計をするときは出力が先で出力を得るための入力と処理が決まる物だと思うんだ

入力を決めて処理と出力を考えてたら考慮漏れ発生して手戻り発生しない?

補完がやりづらいからっていうのはわかるけど、そんなんFROM句先にかけよで終わると思うので

出力が先に来ることが分からないって言ってるのがプログラム的にも普通出力が先じゃ?って頭が混乱している

Permalink |記事への反応(3) | 21:39

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

2024-04-28

anond:20240428125045

はいMDNWebDocsではブラウザ仕様を見ることができます

MDNWebDocs開発者向けのリソースで、CSSHTMLJavaScriptなどのウェブ技術についての情報豊富に揃っています

WebAPIの詳細な仕様を見ることができます。これらのページでは、各API使用方法パラメーター、戻り値などが詳しく説明されています

また、ブラウザ自体仕様については、MDN用語集で「ブラウザ」の項目を参照すると、ブラウザがどのようにウェブページを取得して表示し、ユーザーハイパーリンクを通じて他のページにアクセスできるようにするかについて説明されています

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

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

2023-12-29

anond:20231229001458

関数のもの変数に入れることができる

func1(何かの関数)を実行すると、その内部でwrapperという関数作成され、その関数戻り値になる

wrapperという名前はfunc1内部でのものなのでその外では使えないが、関数のもの戻り値として返却され、

funcという変数に入れられているので、変数funcを通してアクセスできる状態になっている

 

python知らんから適当だけど

Permalink |記事への反応(1) | 00:24

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

2023-12-08

Tracer Bullet Development

開発手法でしっくり来てるのがAndy HuntさんのTracer Bullet Developmentで、開発の方向性を示すのに試作を作る方法

1. 主要なシステムオブジェクト定義UIサーバーロジックビットデータベース抽象化レイヤー等。

2.システムオブジェクトを介したデータフロー定義

3.データフローを実現するためにAPI とその戻り値コーディング

4.単体テスト使用してAPI の予想される使用法を文書化。

5. 各API必要な量の既定のデータ (別名、ダミーデータ、偽のデータハードコーディングされたデータ) を追加して、API が「実行」されるようにする。

6. あらかじめ用意されたデータを実際の機能に段階的に置き換える。

7.コードリファクタリングし、システムオブジェクトを調整し、完了するまでこれを続ける。

実用上最小限の実装というプラクティスにも似ているが、ステークホルダーに動くサンプルを素早く見せられるのがポイント

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

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

2023-10-20

変数」じゃなくて「変値」だろ

「数」って書いちゃうとどうしても整数分数などでいう「数(かず)」を想起しちゃう

これだれが最初に言い出したの?

戻り値」「値を代入する」などというふうに普段いうのになんで「数」なんだよ。

これのおかげで関数オブジェクトを「変数」として扱う際の説明をするときに脱落する人がたくさんいるんだよ。

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

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

2023-09-26

anond:20230926183227

クソ現場だと「引数Xと引数Yを関数αに渡し、その結果と引数Zを足して戻り値とする」レベル設計書(を通り越した"実装書")が作られていることがある

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

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

2023-09-13

MSDNに嘘書いてあるのを目撃してから公式が書いてるドキュメントすら直ちには信用できなくなったわむしろ

ちなみに嘘書いてあったのはGetMessageのサンプルコード

BOOLで定義されているくせに戻り値解釈が3値というクソAPIである

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

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

2023-05-11

富士通事件の話

日付をファイル名にしていた問題なんだけど、

多分、ジョブ管理ソフトで主な処理はバッチを動かしてたんだろうなと思う。JP1かなぁ。Hinemosなワケない

要は親分フローを動かしてバッチ(Windowsバッチとかシェルね)を順番に動かす。で、戻り値が1だったら止めるみたいなことする。

で、問題はとにかくバッチプログラムが組みにくい。変な仕様なのかバグなのか分かんないやつだから

Pythonとかで組んでもいいけど大抵は秘伝のバッチの使い回しだよね

遅延展開とかバリバリ。読めたもんじゃない。でも他にソフトインストールしなくてもいいからみんなジョブ管理ソフトからバッチ使うよね

あと、Windowsバッチだとファイルロックできないのよね。せいぜい存在確認チェックくらい。バッチ管理ソフトも確かそれレベルしかできなかったと思う

ジョブ管理ソフト日本だけなのか外国製は知らない。AWSかにもあるけど、起動のたびにどこまで進んだのかとかの管理が難しいから使わない

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

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

2023-02-12

技術職がITパスポート試験を受けたのだけど

エンジニャーのおまいらはやっぱ、モドリッチサッカー選手)の名前を見たら”戻り値!”って言いたくなるの?

やっぱ、データベースを扱う時は”しゅきー!”って愛を叫ぶの?

Permalink |記事への反応(2) | 13:53

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

2022-11-05

「【初心者向け】第2回 クソコードを書かないためのテクニック4選」という動画の内容がひどい

https://www.youtube.com/watch?v=yhDLmGpjdms

これよりもっとひどい動画ごまんとあるが、ここまでタイトルで煽っている以上指摘するわ。

全体を通じて

個別

プロフィール見るとCTOを経て独立してプログラミングスクール会社やっているっぽいけど、すごい時代だな。

晒しなっちゃったけど、他にも有名(と思われる)プログラミングYouTuberが実際にコードを書いている場合でひどいのはザクザク見つけられるから、見つけてため息をつくといいと思います

Permalink |記事への反応(3) | 11:35

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

2022-10-06

anond:20221006214750

そうなんだ。

ちょっと調べたわ。

本筋と関係ないけど、戻り値

If MultiSelectisTrue, the returnvalueis an array of the selected filenames (even ifonlyone filenameis selected). ReturnsFalse if theuser cancels thedialogbox.

https://learn.microsoft.com/en-us/office/vba/api/excel.application.getopenfilename

ダイアログキャンセルするとFalseが返ってくるからIsArray()とかでガードした方が良いかもな。

あとは、用途に合うようならFor文じゃなくてFor Each文使うのも良いかもね。

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

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

anond:20221006212758

Application.GetOpenFilename()の戻り値がVariantの配列なのであれば、for文は0から始めるべきなんじゃね?

VBAインデックスまわりややこしかった気がするから自信ないけど

あとは他の増田が言ってるように、配列の要素数10とは限らないのであれば、配列の要素数(1始まり場合)か配列の要素数-1(0始まり場合)をfor文イテレータhの最後の数として指定するべき

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

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

2022-02-27

[32歳中卒ニート]だけどjavaクラスオブジェクトメソッド勉強してンだが

メソッドで使う戻り値の型と引数の型が別の物になるケースってあるの?

仮にあるとしたら実務ではどういう時に使うん?

全く想像つかねンだわ

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

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

2021-11-17

GoMockテスト辛い問題とかDDDって何それうまいの?とか

GoMockってのはGo言語ライブラリで、依存するinterfaceテストモックに置き換えてくれる。

それで、テスト中のモックの期待される振る舞い等を簡単定義できるのだ。

期待される振る舞いってのは、モックメソッド呼び出しやその引数とかだな。

期待される呼び出しが無かったり、引数が違ったりするとテストが失敗してくれる。

他に、メソッド戻り値副作用記述できる。

非同期処理のテストだとよく、wg.Done()をモックにさせたりする。

正直、これまで書けなかったテストがモリモリ書けて楽しい

けれどそのうち辛くなってくる。

まり、たくさんのinterface依存するサービスオブジェクトメソッドテストしようとすると、たくさんのモックのたくさんのメソッド呼び出しの全部の期待される振る舞いを書かないといけない。

モックメソッド戻り値によってサービスオブジェクトメソッド内の挙動が変わる。

すると連鎖的に、メソッド内で続いて呼ばれるモックに期待される挙動も、変わる。

依存interfaceが増えるとこの場合けが指数関数的に増える。

当然だ。

Go言語にはテーブルリブテストっていう、テストケースは配列簡単にまとめられると良い、という慣習・哲学がある。

しかし俺のサービスオブジェクトテストケースが肥大化複雑化しすぎてしまったようだ。

モックの期待される挙動を細かくケースに分類して配列にするのは恐ろしく辛い作業だ。

やりたくない。

どうしてこうなった

どうしてこうなったかは明らかだ。

サービスオブジェクトが巨大すぎるのだ。

ノシリックで巨大で複雑なものは凡人には扱えないからやめとけ、と偉い人は言う。

そうだなモノシリックは辛い。DDDかにすればいいんだろ?

やったよ(見様見真似で)。

モックでこれまでできなかったテストが書けるのはいいね

でもじつはここはまだ山麓だったのです。

サービスオブジェクトが巨大なモノリス化してしまったのです。

分け入っても分け入っても青い山。

おれはどこに行けばいいのだ。

参考文献

https://little-hands.hatenablog.com/entry/2020/12/22/ddd-in-first-3month

あとどこかにDDD100本ノックとかないかな。

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

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

2021-08-16

【未経験から1ヶ月で】現役エンジニアが教える最良のプログラミング勉強法

プログラマーに憧れる皆さん!こんばんは。

自分文系から」「未経験から」と諦めていませんか?大丈夫です!プログラミングセンス不要です。正しい手順で学べば、文系や未経験でも、誰でも一流のプログラマとして活躍することができます

今日は、未経験から最短でWeb企業就職するための勉強法をご紹介します!

オススメ方法

もっとオススメ方法は、顕正会セミナーに参加することです。

顕正会は、日本で最大のエンジニアコミュニティであり、非常に良質なテキストを用いて、プログラミング初心者向けのセミナーをしていることで有名です。顕正会に入ることで、未経験からでも一流エンジニアノウハウを学ぶことができます

また、意外と知られていませんが、日本エンジニアの8割は顕正会出身です。実はあのひろゆきビル・ゲイツ顕正会出身です。ですので、顕正会ネットワークを介して就職先を斡旋してくれたりしますし、自分顕正会員だと、面接時にも非常に有利になります

顕正会セミナーは、インターネットからも応募することができますし、秋葉原などで声をかけられることもありますので、誰でも簡単に参加できます。会員もフレンドリーな方ばかりですので、是非、お気軽に応募してみて下さい!無料体験もできますよ。

準備

プログラミング勉強を始める前に、まず、必要ものを準備しましょう。必ず必要ものと、できればあると良いものは以下の通りです。

必ず必要もの

まず、プログラムを書いて実行するためにパソコン必須です。

可能な限りスペックの高いものを買いましょう。2021年現在であれば、CPUは18コア、36スレッドRAMは128GBくらいはあると良いでしょう。ストレージSSDであれば1TBもあれば十分です。

OSは、Windowsで開発するならWindowsが、Macで開発するならMac必要です。よく分からなければMacを買っておく方が良いでしょう。基本的MacにできてWindowsにできないことはありません。

インターネットは、この記事を見ている人は既に持っているでしょう。ただし、モバイル回線で見ている人は、自宅に有線のインターネット環境を用意した方が良いです。

顕正会に入会すれば、上記スペックPC無料で貸し出ししてくれます。また、法人向けの専用線無料で取付工事を行ってくれる上に、通信費を全て負担してくれます

できればあると良いもの

まず、他の会員と連絡を取るために、SNSアカウントを持っていると良いでしょう。

最近は完全にPC上での学習もできますが、やはり、勉強の基本は紙のノートに直接書くことです。医学的にも、手指の動きと脳の記憶回路が関連していることは証明されており、手を動かすことで効率的ものを覚えることができます

Kindleなどの電子書籍リーダーは持っておいた方が良いです。紙の本は時代遅れです。いやしくもITプロを目指そうという人間が、このような最先端デバイスを使っていないのは恥だと思うべきです。紙の本を買わないことは、環境を守ることにも繋がります現金も持つのはやめましょう。

自宅での学習

せっかくセミナーに参加しても、受身聴くだけでは、プログラミング習得することは難しいです。ここでは、自宅でどのような勉強をすればよいのか、ご紹介します。

教科書写経する

まずは、教科書参考書写経することから始めましょう。教科書参考書の本文を一字一句正確に書き写すのです。

よく、「写経理屈を学べないからだめだ」と批判されますが、まずは正しい「型」を体に覚え込ませるのが先です。野球水泳などでも、細かい理屈よりも先にフォームを固めるのと同じです。書き写している内に理屈自然と身に付きます

また、写経メリットは「飛ばし読み」を防げるところです。一字一句正確に写経をすれば、細かい部分を「分かったつもり」になって飛ばししまうことを防げます。たとえば、比較演算子の等号は=ではなくて、==です。プログラミングはこういうところに注意して学ばなければいけません。

ソースコードフローチャートUML)に変換する

教科書サンプルコードノートに書き写したら、それを今度は自力フローチャートUML)に変換してみましょう。そうすることで、自分が本当にそのコード理解しているのか、確かめることができます

フローチャートUMLが素早く正確に描けることは、プログラマーとして働く上で非常に重要スキルです。それらはソフトウェア設計の基礎となりますし、ソースコードを読めない営業顧客にとっては貴重な資料となるからです。プロエンジニアは、COBOLソースコード10万行を1週間でフローチャートにして、Excel転載することができます

ここで一つ注意すべきことがありますフローチャートを描くときは、必ず専用の定規を用いて描いて下さい。フリーハンドで描いたもの業務ではフローチャートとは認められません。これはまともな企業就職すれば研修などで必ず習うことですから、今の内に覚えておきましょう。

Excel勉強する

エンジニアを目指すのであれば、プログラミングだけではなく、Excelの使い方も学びましょう。Excelエンジニアにとっての万能プラットフォームです。エンジニアはあらゆる作業Excelで行いますセル結合や罫線を用いて、見栄えの良い資料を作る技術は、エンジニアにとって必須です。

プログラミング学習中であれば、たとえば以下のような題材の資料を作ってみると良いでしょう。

尤も、以上の資料は、ツールを使うことで自動作成することもできます。たとえば、ソースコード更新履歴Gitなどのバージョン管理システムを使うことでも管理できますしかし、それらの資料としてのクオリティは非常に低いため、アマチュアしか使うことはありません。プロを目指す皆さんは、必ずExcelを使いこなせるようになりましょう!VBA習得必須です。

プログラミングのコツ

以上、プログラミング勉強法について解説しました。ここからは、実際にソースコードを書くときのコツを紹介していきます。他のプログラマと差をつけることができる技術ですので、意識するようにして下さい。

変数名は短く

プログラムで使う変数名は可能な限り短くしましょう。

理想は、aやxなどの一文字です。ただし、これだけだと26文字しか使えないので、a1, a2, ...のように連番でグルーピングすると良いです。

また、変数宣言使用箇所が離れた場合に、変数の型がすぐに分かるように、たとえばint型であればi1, i2, ...、string型であればs1,s2, ...のように命名すると、読む人に親切で自分ミスしにくくなります

変数名を長くするのは、以下のデメリットがあるため、絶対にやめましょう。


なるべく関数を作らない

多くのプログラミング言語には、クラス関数といった機能がありますが、これらは基本的ライブラリ提供者などが使う想定の機能であり、一般プログラマが使うのは好ましくありません。したがって、クラス関数はなるべく使わないようにして下さい。

関数を作ると、以下のデメリットがあります

不要関数を作らないためのテクニックには、以下のようなものがあります

まず、関数引数に「フラグ」を渡し、関数内部で処理を切り替えれば、1つの関数複数の処理をすることができます

function f(i) {switch(i) {case 1:      // i = 1のときの処理break;case 2:      // i = 2のときの処理break;case 3:      // i = 3のときの処理break;    // ...  }}

この方法は、以下に述べる「変数寿命を伸ばす」効果もあります。つまり、この関数内で宣言された変数は、すべての処理で共通して使用することができます

クラス不要関数を作らないようにするには、「継承」を用います複数クラスで用いる関数定義したクラスを1つ作っておき、そのクラス継承すれば、新しいクラス関数定義する必要はありません。

理想的には、プログラム内のすべての関数を同一のクラス定義し、それを継承するべきです。そのようなクラスは俗に「神」と呼ばれ、プログラマからはこの上なく尊ばれています

classGod {f1() {    //関数1  }f2() {    //関数2  }  // ...}classC1 extendsGod {  // 何も書かなくても上の関数が使える!}class C2 extendsGod {  // 何も書かなくても上の関数が使える!}// ...

変数寿命を長くする

変数宣言する場所によって、ソースコードのどの範囲から参照できるかが決まっています。この範囲が広いことを、「変数寿命が長い」と言います

たとえば、以下のコードのaは、関数定義の外側からは参照することができません。

function f() {  var a = 1;  return a;}

一方、以下のコードのaは関数の内外どちらからでも参照することができます

var a = 1;function f() {  a = 2;  return a;}

変数寿命を長くするのは、プログラマの腕の見せ所です。

せっかく作った変数がすぐに死んでしまうのは、非常にもったいないです。ソースコードの表面には現れませんが、変数を作ったり捨てたりするのには、計算コストがかかります。したがって、寿命の短い変数を作りすぎてしまうと、プログラムが遅くなってしまます

また、変数寿命が長いということは、変数をたくさん作らなくても、1つの変数を色々なところで利用できるということであり、とても便利です。たとえば、上記の前者のコードでは、関数の外部からaの値を参照したくなっても、参照することができません。後者のように書いておけば、プログラムのどの箇所からでも、aの値を参照したり、更新することができます。したがって、変数寿命を長くするとプログラムを変更しやすくなります。つまり保守性が上がります

例外を潰す

例外とは、プログラムが予期しない処理をしようとした場合に、プログラムの実行を停止し、呼び出し元にエラーを通知する機能です。たとえば、「test.txt」というファイルを開こうとしても、そのファイル存在しない場合は、例外となります

例外が発生すると、プログラムが停止してしまうため、非常に困ります。したがって、プログラマ例外をきちんと処理しなければなりません。

ほとんどのプログラミング言語には、例外処理のための機構があります。たとえば、以下のような構文です。

try {  //例外が発生し得る処理  //ex.ファイルを開く}catch (e) {  //例外が発生したときに、実行する処理}

例外への対処は実はとても簡単です。是非ここで覚えて下さい。上記のような機構のある言語であれば、catch節の中身を何も書かなければ、例外が発生しても、何事もなくプログラム動作を続けます

try {  //例外が発生し得る処理}catch () {}

全ての例外を潰せば、決して不慮の動作で停止することのないプログラムを作ることができます。ですから例外が発生し得るコードは、積極的上記try-catch構文を用いて、例外を潰すようにしましょう。

おわりに

全体的に専門用語盛りだくさんの記事になってしまいましたが、

部分的にでも理解すればプログラミングを見る目が変わるはずです。

うさんくさい記事インターネットには多いですが、

そういう情報に惑わされずに本物の技術を身につけてもらえればと思います

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

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

2021-05-19

バグ脆弱性(セキュリティホール)の線引

ワクチン大規模接種東京センターの予約システムで発生した、適当数字入力しても予約できるシステムの不備はバグなのか脆弱性(セキュリティホール)なのかを考えていこう。

もし、脆弱性であるとするならば、しかるべき報告フローを取る必要があるからだ。

記事の末尾に参考リンクをいろいろおいておいたので、詳細は確認してほしい。

この問題は、本来するべきチェック処理をしていないのだからバグ一種といえる。

// ただ、改善する気がないのなら仕様となるのだろうけどね。

あるゆる、脆弱性バグの結果起きる。

では、適当数字を入れても予約できちゃうバグは、脆弱性(セキュリティホール)と言えるのか?

もし、脆弱性(セキュリティホール)となるなら、ゼロディでいきなり公開する前に、しかるべき報告フローを取るべきだ。

// ただ、新聞社は、ネットで噂になったもの取材して報道しただけであるからゼロディで公開とは言えないだろうけどな。

個人的意見としては、脆弱性とまでは言えないと思う。

これはタダのバグであって、脆弱性(セキュリティホール)と呼ぶのは言い過ぎだろう。

例えば、教科書レベルの「"<script>alert("XSS");</script>」でXSSを発生させる意図的入力をして、誤動作が発生するなら、それは間違いなく脆弱性(セキュリティホール)といえる。

同様に、SQLインジェクションを発生させる意図的入力をして、何か変なことが起きれば、これも間違いなく脆弱性といえる。

他にも、超でかいデータを送りつけてバッファオーバーフローさせたり、特殊入力をしてスタック破壊して戻り値改ざんして任意コマンドを実行するみたいなものも同様に脆弱性と呼んでもいいだろう。

(注:念のために書いておくが、不正アクセス違法になる可能性があるので、自分の所有するサイトコンピュータ以外へは、これらの入力を試さないように。)

でも、ごく普通入力をしても、エラーとしてはじかないで受け入れてしまうのは、脆弱性ではなく、タダのバグであるように思う。

「こういう操作したら、計算結果が変になった」はバグ領域であって、脆弱性とまでは言えない。

今までの話を簡単に言うとしたら、ドラクエ4で8回逃げたら会心の一撃連続して出るのはバグなのか脆弱性なのか?って話になるのかな。

かに、8回逃げることで、データバッファオーバーフローが発生して、そのような結果になる。

でも、8回逃げるというはやろうと思えは誰でもできる動作であって、これをバグではなく脆弱性(セキュリティホール)と呼ぶのは違和感がある。

この裏技を見つけたとして、脆弱性としてしかるべき報告フローを取らずに公開したこと咎められるとしたら、実に変な話である

これら裏技を試しても不正アクセスと言われて、罪を着せられたり、裏技記事を削除されるとしたら、強烈な違和感がある。

このあたりのバグ脆弱性の線引はどうなっているのか。

今回の事件で、それが一番気になった。

最終的には、裁判裁判所が決めることになるんだろうけど、あまりアホな判決を出して、日本エンジニアの手足を拘束しないでほしいと思う。

参考URL:

ドラクエ4で「にげる」8回でずっと会心の一撃になるバグ、こういう仕組みで起こってたらしい

https://b.hatena.ne.jp/entry/s/togetter.com/li/1715732

■「誰でも何度でも予約可能ワクチン大規模接種東京センターの予約システムに重大欠陥

https://b.hatena.ne.jp/entry/s/dot.asahi.com/dot/2021051700045.html

岸信夫onTwitter: "自衛隊大規模接種センター予約の報道について。...

https://b.hatena.ne.jp/entry/s/twitter.com/KishiNobuo/status/1394440062125805572

脆弱性の手口、IPA「見つけたらまず開発者IPA窓口に報告して」 コロナワクチン架空予約巡り

https://b.hatena.ne.jp/entry/s/www.itmedia.co.jp/news/articles/2105/18/news145.html

Hiromitsu TakagionTwitter: "私はこの届出制度の提唱者・設計者・運用協力者・有識者研究会委員であり、IPA広報取材にこんな回答をしたのであれば、出鱈目であり、...

https://b.hatena.ne.jp/entry/s/twitter.com/HiromitsuTakagi/status/1394713619212816385

ワクチン大規模接種「架空ウェブ予約」やったら犯罪? 国は「法的手段」に言及

https://b.hatena.ne.jp/entry/s/www.bengo4.com/c_23/n_13071/

確認作業公益性高い、毎日新聞 接種センター架空入力取材目的

https://b.hatena.ne.jp/entry/s/this.kiji.is/767285347672670208

AERA dot.記事への防衛省の申し入れに対する見解

https://b.hatena.ne.jp/entry/s/dot.asahi.com/info/2021051900065.html

Permalink |記事への反応(7) | 06:14

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

2020-11-26

go言語アプローチだとerror関数戻り値なので、戻り値を受け取らない関数呼び出しという

一見何の問題もなさそうに見えるコードが、error握りつぶすというよくない挙動を引き起こす。

 

throw-catchアプローチならばerror握りつぶすには意図的にそれを行うためのコードを書かないといけない。

かといってerror戻り値を必ず受け取らねばならないよう言語仕様制限を入れると、

かつてJavaが犯してしまったように例外処理がめんどくさすぎることになる。

 

もしgo++言語を作るとしたら、これはどのようにするのが正解なんだろうか。

Permalink |記事への反応(1) | 19:27

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

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

[8]ページ先頭

©2009-2025 Movatter.jp