技術とか戦略とか

証券レガシーシステムを8年いじってから転職した普通の文系SEによるブログ。技術のみではなく趣味の戦略考察についても。

javaでのCompositeパターン

Compositeパターンは、入れ物のクラスと中身のクラスを1つの抽象クラスでまとめ、同一視できるようにするパターンです。このパターンを取り入れることで、クラスを使う側から見て入れ物のクラスなのか中身のクラスなのかを意識する必要がなくなります。 フ…

javaでのBridgeパターン

Bridgeパターンは、機能のクラス階層と実装のクラス階層を橋渡しするパターンです。機能のクラス階層と実装のクラス階層を分けることで、実装毎に機能を書かなくて良くなりますし、その逆に機能毎に実装を書かなくて良くなります。結果として、重複した記述…

javaでのBuilderパターン

Builderパターンは、処理内容を定義するBuilderクラスと、処理順番を定義するDirectorクラスの2つに分けることで、柔軟に処理を変更できるようにするパターンです。Builderクラスの定義により処理内容が変わっても都度処理内容を記述する必要が無くなり、Di…

java:オブジェクトの中身をコピーする方法(cloneメソッド実装)

参照型変数(主に、自分で作成したクラスのオブジェクト)をコピーする場合、単純に「=」で代入するだけでは不十分な場合があります。参照型変数の中身は参照先(オブジェクトのメモリ領域を示すポインタ)です。「=」で代入するだけでは、参照先だけがコピ…

unix/linux:いつものログイン後画面と違う/いつもは使えるコマンドが使えない場合の対処→ホームディレクトリをls -la で確認する

サーバ管理者から提供されたLinuxの環境で開発している時に、もしかしたら ・ログインした後の左側の表示(プロンプト)が違う (いつもは [hoge]$ なのに bash4.1$ になってしまった、等) ・いつもは使えている(環境独自の)コマンドが使えなくなった と…

人的ミスを考慮した手順の作成

システムを運用する上で、手作業での運用作業は避けられないものです。例を挙げると、プログラムの不具合の対応でデータを補正する、自動的にデプロイできない特殊なプログラムをデプロイする、といった運用作業が発生します。 手作業での運用作業では、コマ…

ターン制・COMと1対1で対戦するブラウザゲームのサンプル

Javascriptのゲームエンジンである「enchant.js」で簡単なブラウザゲームをサンプルで作ってみましたので、ソースコードを公開します。ターン制で、COMと1対1で対戦するタイプのゲームのサンプルです。新しいゲームを作る時の雛形にする等の形でお役に立て…

java:Enumによりコード値に意味を持たせ可読性を向上させる

javaのEnum(列挙型)を使用するメリットとしては、一般的に「使用可能な定数を明確化できる」「定数を複数のクラスで使い回せる」といったメリットが挙げられます。実際に使用していて、コード値に意味を持たせられるというメリットもありそうだったので、…

プライバシーマーク取得企業で働く上での心がけ(一般社員向け)(2019年度版)

私が勤める会社でもプライバシーマークを取得しており、2019年度版の一般社員向けの研修があったので、内容を簡単にまとめます。研修テキストはネットに上げられませんし上げてもあまり意味はないので、一般論的なことを簡単にまとめるだけにします。詳細な…

javaでのAbstract Factoryパターン

Abstract FactoryパターンはFactory Methodパターンを発展させたもので、生成するオブジェクトの組み合わせを間違えないために、1つのFactoryクラスに複数のオブジェクトの生成処理を実装するようにしたものです。 今回は、RPGのキャラクター作成を模したサ…

エクスプローラ上でフォルダを任意の順番で並べる(レジストリ変更無し・フリーソフト未使用)

エクスプローラ上でフォルダを任意の順番で並べたい場合、多くの場合は「00_…」「01_…」のような形で番号を割り振り、名前で並び替えると思います。しかし、フォルダに番号を振らずに作業を進め、既に数多くのリンクが貼られてしまったような状況では、番号…

チェックリストの形骸化とその対策

バグの埋め込みを防ぐために、現場毎でチェックリストが設けられていることが多いです。そのチェックリストには過去のバグの経験則が書かれていることも多く、ある意味宝物のようなものです。 しかし、実際の開発では、そのチェックリストが形骸化することも…

人員追加は必ずしも悪とは限らない

IT業界では、「人員追加」という計画変更の方法はとにかく評判が悪いです。Webで検索すると、「炎上プロジェクトで人員を追加したらますます燃え上がった」という話をあちこちで目にしますし、炎上プロジェクトへの対応案としてはまるでアンチパターンかのよ…

net use によるネットワークドライブ割り当てで「このコマンドの構文は~」と言われる→ダブルクォーテーションで囲っていないのが原因かも

同じエラーで手が止まっている方向けに記事を起こします。 #> net use :z \\hoge\fuga(important)\piyo のようにしてZドライブにネットワーク割り当てを行おうと思った所、「このコマンドの構文は次のとおりです:」という要は「使い方間違ってるよ!」という…

javaでのFactory Methodパターン

Factory MethodパターンはTemplate Methodパターンをオブジェクト生成の場面に適用したもので、オブジェクト生成の処理を共通化することができます。 今回は、RPGのキャラクター作成を模したサンプルコードを作成してみました。キャラクターの職業毎にクラス…

javaでのTemplate Methodパターン

Template Methodパターンは、処理(メソッド)の中で共通している箇所を抽象クラスとして抜き出すことで、重複した記述を排除し、更に処理の流れも規定する手法のことを指します。手続き型言語でも共通する箇所を子メソッドとして抜き出すことをしますが、子…

javaでのFacadeパターン

Facadeクラスとは、使い方が複雑になっているクラス群をまとめ、使いやすい形のインターフェースとして外部に提供するクラスのことを指します。デザインパターンでは、このFacadeクラスを利用するパターンをFacadeパターンと呼びます。(ちなみに、Facadeは…

Excelで文字の一括置換を行う方法(テキストエディタ利用)

Excelファイルは複数のxmlファイルを圧縮して構成されています。解凍することでxmlファイルの形式として開けるようになり、通常のテキストエディタで編集することが可能になります。これを利用することで、全てのシートに対して、オブジェクト内の文字も含め…

javaでのスレッド制御(joinとsynchronized)

javaでは、スレッドを立てて処理を並列に行うことができます。しかし、並列に処理を行う際、処理順を制御しなければならないことがあります。 処理順の制御方法として基本的な方法として、joinを使う方法とsynchronizedを使う方法があります。joinを使うこと…

javaでのソケット通信の記事引用

javaでは、C言語と同じようにIPアドレスとポート番号を指定してのサーバ間ソケット通信が可能です。既に解説やサンプルプログラムが充実していたので、当記事では引用のみ行います。 ・解説(図解)ストリーム型通信 http://ecogis.sfc.keio.ac.jp/online/ja…

情報処理技術者試験対策「UML」

UMLは情報処理技術者試験でも実務でも頻出です。実務のことを考えると、特にクラス図とシーケンス図は使えるようになっておく必要があるでしょう。 しかし、シーケンス図はともかく、クラス図はオブジェクト指向を理解していないと理解できないと思います。…

プロポーショナルフォントと等幅フォントの違いと使い分け

コンピュータの文字表示で用いられるフォントは、大きく分けて「プロポーショナルフォント」と「等幅フォント」の2つに分けられます。 ・プロポーショナルフォント 文字毎に幅が異なるフォント。 「MS Pゴシック」が例として挙げられる。 ・等幅フォント…

singletonとstaticの違い

デザインパターンのsingletonパターンを学んだ時に「インスタンスを1個にすれば良いなら、クラス変数やメソッドをstaticにすれば良いのでは?」と思ったので、試しにテストコードを書いてみました。単純なstaticでは利用者側で好きにインスタンスを作成でき…

「不可視です」というエラーが出たらカプセル化された変数・メソッドを使用しようとしていないか疑う

タイトルの通りなのですが。 例えば、「int hoge = new java.util.Random().next(10)」というコードを書いた場合、「next(int)はRandomで不可視です」というエラーが出ます。 Randomクラスのnextメソッドはprotectedで定義されており、外部に提供されていな…

基本情報処理技術者試験のpythonのサンプル問題を解いてみた

2019年10月28日にIPAから基本情報処理技術者試験のpythonのサンプル問題が公表されたので、解いてみました。既に基本情報技術者試験.comから解説も出ています。 【2019年10月28日公開】基本情報技術者試験 Pythonサンプル問題|基本情報技術者試験.com https…

unix/linux:atコマンドの代替コマンド

特定の日時にコマンドが発行されるように登録するatコマンドですが、環境によってはこのコマンドが使用できないことがあります。特定のユーザでしか実行できないように制御することができたり、OSによってはatコマンドで登録できない仕様(バグ?)があった…

unix/linux:コマンドをファイルの代わりにする(プロセス置換)

Linuxのコマンドの中にはファイル名を指定するものがあります。ここで、ファイル名の代わりに、コマンドをファイルに見立てて指定することができます。(プロセス置換と呼びます) 例えば、決められた日時にコマンドが実行されるように登録するatコマンドが…

java:イミュータブルなクラスを作る方法

「イミュータブル」とは「不変」という意味で、オブジェクト指向の世界では「状態(クラス変数)がオブジェクト生成時から変更されないこと」を指します。有名所では、Stringがイミュータブルなクラスとして知られています。 イミュータブルなクラスを自作す…

マニュアル対応にならないようにするために心がけるべきこと

サービス提供者、特に接客業では、「マニュアル対応」が批判されることがあります。「マニュアル対応」が批判される理由としては、以下の二点の理由により顧客の期待通りのサービスを行えない可能性があるからだと思っています。 ・マニュアルはサービス提供…

サクラエディタ:範囲指定と否定範囲指定の併用

以下のように記述することで、範囲指定と否定範囲指定を併用できます。 ([範囲指定]|[^範囲指定]) 例えば、改行コードは明確に指定しないとヒットしないのですが、それを否定範囲指定と併用したい時に使えます。実際に使ってみた結果が以下の通りです。