-
単純だけど数の多いif分岐をFactory Methodパターンでテストコードまですっきり
はじめに どうも、bigenです。 以前デザインパターンを勉強して、勉強しっぱなしだったんですが、最近その知識が業務に生きたのでここでご紹介します。 使ったのはFactoryMethodパターンで、数が多いIF分岐をすっきりリファクタリングできました。 前提条件:PHP7, Laravel5, phpunit リファクタリングしたいコード 今回リファクタリングしたい機能は、弊社メディアのITトレンド内で用いられる短縮URL機能です。 https://it-trend.jp/i/xxxx のような形式(xxxx部分は数字)でURLを生成し、アクセスすると予め登録されたページへリダイレクトするというものです。 リダイレクト先のページの種類によって必要なパラメータやセッション情報が変わるため、リダ…
-
社内で行われた第一回アルゴリズム大会で優勝しました!
どうも、Anti-Pattern初代テックリードのbigenです。 先日、社内で第一回アルゴリズム大会が開催されました。 社内エンジニアを対象に、参加者全員で同じ問題を解き、もっとも短い時間で解答を出力するコードを書いた人が優勝です。 なんとこの大会で僕が優勝しまして、初代テックリードの称号を頂きました。 数カ月後に第二回をするそうなので、次回も今から楽しみです。 今日はその大会で出題された問題について解説してみようと思います。 問題 各都道府県の人口が下記配列で与えられ、議席数の合計が289の時、アダムズ方式で各都道府県ごとの議席数を割り振る時、計算に用いる「各都道府県の人口を割る、ある整数」を求めよ。(制限時間30分くらい) // 各都道府県の人口 $pref = [5381733,…
-
[和訳] ホラクラシー憲法 v.4.1〜第1章
どうも、bigenです。 最近マネジメントの勉強をいろいろしていまして、イマドキっぽいホラクラシーという組織体系について勉強しています。 ちなみに今はこちらの本を読んでいます。 — HOLACRACY 役職をなくし生産性を上げるまったく新しい組織マネジメント(ブライアン・J・ロバートソン 著) その中で、再三ホラクラシー憲法というワードが出てきてます。 非常に重要そうなのですが、書籍内では出てこなかったのでWebを探した所、原文はこちらで読めることがわかりました。 Holacracy (HolacracyOne社) ただし日本語がない! 色々探してみたんですが、きちんと日本語訳されたものが見当たらなかったので、 せっかくなので和訳してみます。 これがな…
-
ニュートン法で学ぶプログラミングと数学の関連
はじめに どうも、bigenです。 最近ガイアックスさんが主催されているクローズドの数学勉強会に参加させてもらっていて、 統計学のための数学入門30講 を勉強しています。 輪講形式で進めているのですが、やっぱ大学のとき数学やっててよかったなー、と思いました。 大学時代はあんなに嫌になった数学が、実際にビジネスの世界に出てみると今は楽しくて、 やっぱり何のために勉強するのかが分かっていると良いなぁと思います。 先週の勉強会でニュートン法というアルゴリズムが出てきたのですが、 プログラムを色々書くようになってからみると新しい気持ちで学び直せたので、紹介させてください。 すごいんですよ、ニュートン法。 √2ってどうやって求めますか? 突然ですが、コンピュータで平方根ってどうやって求めますか?…
-
「多重継承」と「クラス分割」と「オブジェクト指向プログラミング」について勉強したメモ
みなさんこんばんは。bigenです。 先月、プログラマになって1年経ちましたが、 恥ずかしながら先日はじめてPHPのTraitという機能を知りまして、 そこから色々勉強したので、とりとめもなくメモしていきます。 目次 Traitってどう使うの? 多重継承のデメリット 水平継承しないほうがよさそうなケースについて オブジェクト指向プログラミング(OOP)的な観点では おわりに 1. Traitってどう使うの? PHPにはTraitという水平継承の機能があるそうです。 機能の詳細や使い所は下記を参照してください。 参考1: PHP: トレイト - Manual 参考2: PHP5.4 から導入された trait 機能の使いドコロ - Hack Your Design! ぱっと読んだら実に便利そ…
-
Iteratorパターンで学ぶ抽象化
どうも、bigenです。 最近、GoFのデザインパターンについて勉強してまして、 その中でパーツ化の難しさと抽象化の考え方について感銘を受けたので、 学んだことを残しておこうかなと思います。 本記事ではIteratorパターンを例にとって、 単純なfor文で書いたケースと、Iteratorパターンで書いたケースで、 どのような場合にIteratorパターンのメリットがあるかを考察します。 その後で、何故そのようなメリットを享受できるのかまで考察し、 抽象化・共通化・一般化の思考って大事だね、っていう話にもっていきます。 なお、コードは全てPHPで書いています。業務でよく使うので。 また、Iteratorパターンの概要の説明は各種サイトや本を参照してください。 今回は実践的にIterator…
-
CAP定理とCloud Spannerについて
はじめに どうも、bigenです。 以前弊社のKTNさんがCloud Spannerについてとりあげ、 「水平スケーリング可能なRDB!?なにそれすごい!!」という記事を書いていました。 (詳しくはこちら→ お試し Cloud Spanner) その最後に、Googleさんがブログで 「Google SpannerはCPシステムだけどCAと思ってくれて構わないよ」 という謎な見解を発表していたことが書かれていました。 新人エンジニアな僕はそもそもCAP定理というものも知らなかったので本当に謎でしかなかったのですが、 せっかくなので調べてみました。 せっかくついでに僕の理解を図解と共にメモしておきます。 なお、調べるにあたって下記のサイトがめちゃくちゃ参考になりました。 12年後のCAP定…