2016-01-01から1年間の記事一覧

コード型ログ(4) Initialization-on-demand Holder

前回: コード型ログ(3) privateなメソッドのテスト - 超ウィザード級ハッカーのたのしみ 必要なときにインスタンスを作ったら、メモリ効率がよくないかと思って変なことをしてしまう悪い例。 class BadSingleton1 { private static BadSingleton1 instance;…

コード型ログ(3) privateなメソッドのテスト

前回: コード型ログ(2) staticな変数の排他にはsynchronized(*.class) { } を使う - 超ウィザード級ハッカーのたのしみ privateなメソッドは、ユニットテストがしにくい。 対処法は2つで、 テストしないか、 Reflectionで頑張るか、 スコープをpackage pri…

コード型ログ(2) staticな変数の排他にはsynchronized(*.class) { } を使う

他の人が書いていたら読めるけれども、知らなきゃ書けない定型文をあつめたコード型ログを作っている。今回は2回目。 前回: コード型ログ(1) スレッドを止めるにはinterruptを使う - 超ウィザード級ハッカーのたのしみ いい設計とは言えないかもしれないが…

コード型ログ(1) スレッドを止めるにはinterruptを使う

他の人が書いていたら読めるけれども、知らなければ書けない定型的なソースコードの型を集めているので気が向いたら書いていく。ダジャレが好きなので、コード型ログと呼ぶ。今回は1回目。 無限ループを持つスレッドはinterrupt()で止められるようにする。 …

シンプル騎士団を結社する

シンプル騎士団を結社する。 シンプルであることが設計の最大の美徳ある。これを教義とした秘密結社、シンプル騎士団を結成したいと思う。活動の実体もないし、名簿とかもない。シンプルさって大切だよねと思っている人は、ただ心に思うだけで、特に手続きも…

技術者が得意げに解説することこそ解決すべき技術的課題

技術者というのは、製品の仕組みだとか作リ方だとか飼い慣らし方だとかを知っている。それが彼らの自尊心だから、知っていることを得意げに語りたがるし、知らない人を下に見たりする。気持ちはわかるし、誇りを持つことは良いことだ。 ずっとやっていたら詳…

○×ゲームの神の一手を導いてみた

小さい頃にノートの隅や地面で良く遊んだ○×ゲームを計算機で解いてみた。 ○×ゲーム程度であれば、スクリプト言語を用いて、かつ枝刈りとかせずに終端までミニマックス法で全探索しても十分に解ける。ミニマックス法というのは、要するに負けない手を打てば勝…

ソフト開発にも生産技術者が必要

製造業には必ず生産ラインの世話をする役職の人がいる。製造業においては、この役割の人は階級が高くて、会社内ではエリートがする仕事である。昔は社会的にも地位の高い仕事だったのだろう。現在だと聞かないが、かつては製鉄業の現場監督はエリートの仕事…

企業と効率とインターネットの可能性

一般論として世の中の企業というのは非効率で不合理な多くてどうにかならんもんかなと思う。 ムダのために会社が損をしたら、株主なり債権者は金銭的に困る。従業員からしても、自分の金ではないからと、『サラリーマンは気楽な稼業と来たもんだ』とはならな…

ドリル/穴 問題について

マーケティングの格言に ドリルを買いに来た人が欲しいのはドリルではなく穴である。 というのがある。至言だ。この言葉にはいろいろ思うところがある。 言葉だけ聞くと当然のことである。道具なんて所詮道具だ。用途があって道具がある。用途がない道具はな…

プログラミングは「モノづくり」なのか?

ソフトウェアを開発することを「モノづくり」と言う人が少なからずいる。これにすごく違和感があるのは私だけだろうか? 「モノづくり」ってよく分からない言葉だが、日本の製造業をポジティブに表現するために使う。すり合わせだとか高度な熟練技能だとか日…

KdV方程式を解いてみた

KdV方程式を数値的に解いてみた。*1 KdV方程式は、以下の式で表される方程式です。 非線形の偏微分方程式だけれども、手計算で頑張ることができて、よく研究されてきた方程式です。バーガース方程式と同様の非線形項に加えて、3回微分の項がある。この項は…

可読性に関するソフトウェアメトリクスを考えた

新しいソフトウェアメトリクスを思いつきました。 ソフトウェアメトリクスとは、ソフトウェアの特性を推定するための定量値のことです。バグの数とかレビューの時間とか開発の過程で得られる値もありますし、テストの数だとかカバレージといったテストを評価…

頼むから凝ったコードを書かないでくれ

コーディングは自由度が高い。自由度が高いゆえに、同じことをいろいろなやり方でできてしまう。 There should be one-- and preferably only one --obvious way to do it. とZen of Pythonにあるように冴えたやり方はたった1つだ。しかしながら、イマイチ…

トヨタ生産方式とアジャイル開発

トヨタ生産方式には7つのムダというものがあります。それぞれ、以下のようになっています。 作りすぎのムダ 手待ちのムダ 運搬のムダ 加工そのもののムダ 在庫のムダ 動作のムダ 不良を作るムダ トヨタ的な考え方では、製品を加工している作業が唯一付加価…

クラスの凝集度を示すメトリクス:LCOM*

ソフトウェアメトリクスについて調査中です。今日はLCOM*について。 LCOM*とはLack of Cohision in Methods(メソッドの凝集度の欠陥)を示しており、以下の式で定義されます。 1 a ――――― Σ μ( Aj ) - m a j LCOM* = ――――――――――――――――――――――――― 1 - m ここで…

オブジェクト指向で再利用性が高まるは嘘

オブジェクト指向でプログラムを作れば再利用性が高くなるというのは誤りだったと思う。オブジェクト指向プログラミング(OOP)についての本を呼んでいるとOOPは再利用性が高いというようなことが書いてある。すでに結論が出ている話な気もするが、これは必…

FlyweightパターンとMemoizationとメモリリーク

デザインパターンの1つFlyweightパターンは要するにMemoization (メモ化) のことです。Flyweightパターンというと何のことか良くわからないので、Memoizationパターンと読んだ方が適当なように思います。 メモ化とは、関数が返した値を覚えておいて、再度同…

抽象クラスとは

今日は抽象クラスについて考えてみる。 前々回: クラスとは 前回: インターフェイスとは 抽象クラスとは、必ず継承して使わなければならないクラスのことである。ある抽象クラスAに属していて、Aのサブクラスに属していないようなオブジェクトはいない。 …

インターフェイスとは

前回(クラスとは)はclassとは何かを考えてみたので、今日はinterfaceについて考えてみる。 インターフェイスとは、オブジェクトのに付与される性質の1つである。 クラスとは、同じ性質を持ったオブジェクトを分類 (classification) したものです。同じメソ…

クラスとは

classとはなんぞやと考えている。たどり着いたところまでまとめる。 クラスとは、同じ性質を持ったオブジェクトを分類 (classification) したものである。漢字で書くと類です。同じクラスに属しているオブジェクトは同じような性質を持っている。クラスは、…

リスコフの置換原則は呼び出し側にも責任が伴う

以前にオブジェクト指向になっているならば、あるクラスを継承したクラスは継承元のクラスと置き換えても動かなければならないという気付きについて書きました。名前がついていて、それはリスコフの置換原則と呼ばれるらしいです。 fj.hatenablog.jp このリ…

Martinのオブジェクト指向設計メトリクス

コードの品質のスカウターをどうにか作れないかと考えていて、ソフトウェアメトリクスについて調べている。 古い記事ですが、読んだのでメモ書きする。 Robert Martin, OO Design Quality Metrics. An Analysis of Dependencies https://linux.ime.usp.br/~j…

BashでStrategyパターン

デザインパターンはオブジェクト指向言語だけのものではない。シェルスクリプトにもデザインパターンの概念は適用可能です。 Strategyパターンとは、アルゴリズムを動的に付け替えることができるデザインパターンです。 この概念は決してオブジェクト指向だ…

単体テストの数とコードの行数の関係

興味深い記事を見つけた。 Cyclomatic Complexity and Lines of Code: Empirical Evidence of a Stable Linear Relationship http://dx.doi.org/10.4236/jsea.2009.23020 コードの行数(LOC)と循環的複雑度には強い相関があるとのことだ。 循環的複雑度とは、…

ubuntuでブートプロセスを表示

OSの起動プロセスは皮が被せられているけれども、できるだけ裸の方が何がどうなっているのか意識できて良いだろうと思ったので、ブートプロセスを表示するようにする。一方で、ノイズでもあるけれども。 /etc/default/grubを編集して、 GRUB_CMDLINE_LINUX_D…

ClassクラスのClassオブジェクト

具体についてのクラスはインスタンスと同じもの? - 超ウィザード級ハッカーのたのしみ クラスって何なのだろうと疑問に思い始めた。 さて、Javaにはjava.lang.Classクラスという変なクラスがある。Classクラスのオブジェクトはクラスそのものではないみたい…

具体についてのクラスはインスタンスと同じもの?

特定の具体を示しているクラスがあったとして、それはインスタンスと同じものと言えるのか? ぼんやりとした疑問で答えはまだ出ていない。 例えば、DogクラスとPetDogクラスがあったとする。PetDogクラスは、Dogクラスを継承していて、Dogクラスの中でも人に…

オブジェクト間の関係

UMLについて調べています。思考の整理ツールとしての表記法(diagramming)には興味があります。 UMLは書きにくいし、曖昧さも強いし、目的が良くわからない絵が多いので、あまり好きにはなれないです。規格としては不完全なように思うので、独自に改変した…

アーキテクチャは疎↔密を繰り返す

歴史は繰り返しでアナロジーがあるから面白い。ソフトウェアのアーキテクチャの流行りを調べてみると同じようなことを言葉を変えて繰り返している。切り口はいろいろあると思うが、今日はアーキテクチャという切り口から見てみる。 ソフトウェアのアーキテク…