技術とか戦略とか

SIerで証券レガシーシステムを8年いじってからSESに転職した業務系エンジニアによる技術ブログ。

情報処理技術者試験対策:DNSキャッシュポイズニング・カミンスキー型攻撃

この記事では、「DNSキャッシュポイズニング」と呼ばれる攻撃手法と、その発展型である「カミンスキー型攻撃」について説明します。これは情報処理技術者試験では頻出のキーワードであり、特に情報処理安全確保支援士試験を受験する際には内容を抑える必要が…

PlantUMLの紹介

PlantUMLは、テキストからUMLの図を生成することができるツールです。UMLをPlantUMLで書くことで、Gitでの管理が容易になり、差分比較もできるようになる、というメリットがあります。 下記のページにアクセスするだけで、すぐに使うことができます。図の書…

「見積もり概論」パワポ公開

社内教育向けに見積もりの概論を説明するパワポを作成したため、公開します。https://1drv.ms/p/s!AivF3bzWXOzukWVXk5hscKYqkLkM

Vue.js:「算出プロパティ(computed) vs 監視プロパティ(watch)」を実際に書いてみた

Vue.jsの公式ドキュメントにて、算出プロパティ(computed) と 監視プロパティ(watch) の違いについて触れられています(https://jp.vuejs.org/v2/guide/computed.html)。しかし、例となるコードはユーザー入力を受け付けないごく簡単な例であるため、comput…

サブシステムとは

1つのシステムでは、様々な業務を実現しています。そして、場合によっては、業務毎でシステム内で別々のシステムに分かれていることがあり、この分かれているシステムのことを「サブシステム」と呼びます。 この記事では、サブシステムが生まれる理由や、サ…

試験工程管理の概論

SI業界では、開発に関する知識や経験が不十分なメンバーを試験工程の管理者として任命することが少なくありません。本来であれば、応用情報処理技術者試験(最低でも基本情報処理技術者試験)に相当する知識、及びその知識を実務で使った経験を備えた者を管…

保守作業をスピードアップする方法のまとめ

システム保守の作業では、通常のシステム開発の他に、システム・データの調査依頼や、データの抽出・補正の作業依頼等、様々な作業が行われます。これらの作業は不定期に、時に大量に依頼されるため、作業のスピードアップが重要になります。 この記事では、…

COBOLのマッチング処理をC#で実装する

C#

COBOLで使われているテクニックは過去のもののように思われがちですが、現在でもちょっとしたツールを作る時に役立ちます。WindowsOS環境の場合は、ちょっとしたツールはC#で作るのが便利なので、今回はC#でCOBOLのマッチング処理を実装してみました。 今回…

ソースコードの重複の排除を関数で学ぶ

「ソースコードから重複を排除して保守性を高める」という考え方は、実務で良いコードを書く上で重要な考え方です。この考え方が身に付かない内はオブジェクト指向の理解も不十分になるのですが、いきなりオブジェクト指向から入るとこの考え方の重要性がわ…

オブジェクト指向を利用する本当の理由

オブジェクト指向を利用する理由として、プログラミングの入門書には「オブジェクト指向を用いると、現実世界をプログラミングでそのまま表現できる」という意のことが書いてあることが多いです。その例として、・犬に「ワン」と鳴かせ、猫に「ニャーン」と…

EmEditorとサクラエディタの性能比較(巨大ファイルを開く)

EmEditorは、サクラエディタとほぼ同時期(2000年頃)に生まれたWindows用のテキストエディタです。サクラエディタと比較すると、巨大ファイルを開く時の速さに定評があります。 実際にどれほどの差があるのかを計測しましたので、計測結果を公開します。先…

二重サブミットのテストにはクリック連打ツールを用いる

Webシステムでは、同一のサブミット(リクエスト)が二重送信されることによる障害が起こり得ます。二重サブミットが発生する原因としては、以下の3つが挙げられます。①サブミットボタンを連打する②ブラウザの戻るボタンで遷移元の画面に戻り、再度サブミッ…

実装では極力要件通りに条件指定をするべきである

表題の通りですが、実装では極力要件通りに条件指定をするべきです。従属的に求まる条件で代用できるとしても、その条件は原則として指定するべきではありません。 具体的に何が言いたいのか、なぜそう言えるのか、ということについて、以下で具体例を挙げて…

SpringFramework:cronによるスケジューリング

cronと言えば、Linuxに用意されているスケジュール用のプロセスを思い浮かべる方が多いと思います。(Linuxのcronについては、Wikipedia(https://en.wikipedia.org/wiki/Cron)等を参照してください) しかし、cronはSpring Frameworkにも用意されています…

ひと昔前のソース管理の問題点

GitやGit系ホスティングサービスが広まった現在のシステムでは、以下のようなソース管理が一般的です。 しかし、それが広まる前のひと昔前のレガシーシステムでは、以下のようなソース管理が一般的でした。 この記事では、ひと昔前のソース管理の問題点を挙…

Excel:文字コードのBOMについて

「UTF-8」や「UTF-16」等の一部の文字コードには、「BOM」と呼ばれるフラグのようなものを付ける場合があります。BOMはファイルの先頭につけられるバイナリのデータであり、UTF-8の場合は16進数で「EF BB BF」、UTF-16の場合は16進数で「FE FF」となります。…

設計書のメンテナンスのあるべき姿

設計書は、システム概要を指し示すために必要なドキュメントです。設計書があれば、実装を知らない立場の人(例えば要件定義担当や上位の設計者)との意思疎通がスムーズになりますし、開発者を新たに向かい入れる時にも実装の内容をスムーズに理解してもら…

高度な技術が最適解とは限らない

AIや難しいアルゴリズムに憧れる人は少なくないと思いますが、そのような高度は技術が常に最適解であるとは限りません。高度ではない技術には、以下のようなメリットがあります。・人間が結果を予想しやすい・保守が容易である 一言で言うと、「扱いやすい」…

文字コードの入門

この記事では、文字コードに関する初歩的な内容について簡単に書きます。 1.文字コードという概念とコード体系コンピューターで取り扱う文字には、それぞれコードが割り振られています。コードは1~4バイトの情報として取り扱われ、1バイトの文字は1バイト…

「新たな導線の追加」という現行踏襲案件

要件が「現行踏襲」である案件の代表的なリスクとして、「現行の仕様を調査してその仕様に合わせる工数が過小評価されやすい」というリスクがあります。そして、要件が「新たな導線を追加する」である案件は、一見現行踏襲でないように見えて、実際は現行踏…

例外ケースは処理の始めに除外する

プログラムで何かしらの処理を記述する場合、本当に実装したい処理(本処理)に入る前に、例外ケースを除外するテクニックがあります。このように記述することで、本処理では例外ケースを考えずに済むため処理内容を考えやすくなりますし、例外ケースの場合…

処理時間はデータ量に比例するとは限らない

処理時間(計算量)はデータ量に比例するとは限りません。例えば、データ量が10倍になったからと言って、処理時間も10倍になるとは限りません。 処理時間が何倍になるかは、アルゴリズムにより決まります。アルゴリズム次第では、データ量が10倍になった時に…

JavaScript:String型かNumber型かわからない変数をNumber型に置き換えるコード

JavaScriptは動的型付けを採用した言語であるため、実行するまで変数の型が分からない状態になります。この特徴により、数値計算を行う時を以下のような問題を引き起こすことがあります。 ・加算を行うつもりが文字列結合になってしまう (例えば、100 + "10…

Springセキュリティ:ログインユーザー名をセッションから取得する方法

Springセキュリティによるログインが成功すると、UserDetailsクラスのオブジェクトを含むorg.springframework.security.core.context.SecurityContextHolderがセッションに保持されます。UserDetailsクラスのオブジェクトには、ログインしたユーザー名の情報…

C#:バイナリファイルのデータを置換するツール

C#

文字列置換はサクラエディタを使用すると楽ですが、サクラエディタを使用した場合は大量データの処理ができないという問題があります。 そこで、C#をプログラムにより置換を行うというのが有効になります。プログラムでのファイルのストリーム読み込みであれ…

Vue.js:プルダウンの選択値を動的に変更する

画面の各項目で設定された値に応じて、プルダウンの選択値(初期値)を動的に変更したい場合があります。 Vue.jsの場合、これは、値の状態を監視するウォッチャー(watch)と双方向データバインディング(v-model)を併用することで実現できます。画面の各項…

Excelファイルを設定変更無しで読み取り専用で開く方法

エクスプローラー上でファイルを右クリックし、「新規作成」を選ぶことで、表題のことを実現できます。 ファイルを誤更新したくない、しかしファイル設定を変えるのは面倒、という時に使えるテクニックです。

JavaScript:二次元配列(多次元配列)になる場合の長さの判定

JavaScriptで多次元配列を作るためにはpushを使用します。また、配列の長さを調べるにはArray.lengthを使用します。 ここで、pushの方法により、Array.lengthの使い方が異なってくるので、注意が必要です。(使い方を間違えると、undefinedが出力されます) …

JavaScript:async・awaitの例外処理

async・awaitで例外処理を行う場合、メソッドチェーンで受け取る方法と、try-catchで受け取る方法があります。これらの方法について、紹介していこうと思います。 サンプルコードはNode.jsで実行しています。 ---- awaitで呼び出される関数では、Promiseオブ…

コーディング規約の重要性と無い場合の対処

ソースコードを書く上で、好みの書き方は個人によってある程度分かれてくると思います。例えば、if文で定数を右辺に書くか左辺に書くかは、人によって好みが分かれます。 ・右辺に書く例 if (value == 9) { ・左辺に書く例 if (9 == value) { 左辺に書く方法…