C# で学ぶデザインパターン ~ Bridge パターン ~
TL; DR; Bridge パターンとは Bridge パターンのクラス図 サンプルコード まとめ
List と ArrayList の違い List は ArrayList のジェネリック版です。 ArrayList はその要素として object 型を受け付けます。 ちなみに ArrayList のコンストラクタは以下のようになっています。 public ArrayList() { _items = Array.Empty<object>(); } https://source.dot.net/#System.Private.CoreLib/ArrayList.cs,39 ですので ArrayList 型の変数にはその要素として文字列であったり数値であったりユーザ定義のオブジェクトも A…
Visitor パターンの特徴は「データ構造とアルゴリズムを分離できる」事です。これによりオブジェクトの独立性を高める事ができます。
Desing Patternについてネットで調べているといつも同じサンプルコードに出会います。 Observer Patternもカウンターのプログラムしか出てこなかったので作ってみました。 Observer Patternとは オブジェクトとオブジェクトの間に一対多の関係を定義し、オブジェクトの状態の変化をそれに依存する全てのオブジェクトに通知するパターンです。 この時、通知を行うオブジェクトをSubject、通知を受け取るオブジェクトをObserverと言います。 Subject、Observerをそれぞれ、観察対象となるオブジェクト、観察を行うオブジェクトとも言ったりします。 Subje…
振る舞いを正確に表した関数名にする オブジェクトには責務を満たすために振る舞いを持ちます。 ここでは「Car」オブジェクトを考えていきましょう。 「Car」オブジェクトは運転中に停まったり、エンジンを切ったりなどの振る舞いを持つ事が予想されます。 ではこの振る舞いを持たせたクラスを実装してみます。 class Car { public void Stop() {} } stopには停まるという責務があります。これでも伝わるかもしれませんが、stopという英単語だと意味が広すぎるきがします。 例えば、brakeという英単語があります。こちらの方が意味が限定されより伝わりやすい関数名になります。 …
ShopifyのPolarisによる Data Table Componentとスタイル編集法
はじめに この記事はShpoifyの公式サイトにより提供されているNodeやReactでShopify アプリを構築するを完遂した方を対象としています。 まだ手をつけたことがない方は、まずそちらから目を通していただければと思います。 開発はNext×TypeScriptで行います。 TypeScriptのセットアップはこちらを参照してください。 UIコンポーネントとは ReactやVue、Angularといったフロントエンドライブラリ(フレームワーク)が流行する以前は、開発者がなるべく早くそれなりのUIを実現するためにCSSフレームワーク(Bootstrapなど)が広く使われてきました。 昨今…
LaravelでPrimary Keyをidから変更したい
HTMLCollectionとNodeListの違いについて
HTMLCollectionとNodeListの違いについて
HTMLColecction型のオブジェクトで配列のメソッド(forEach, mapなど)を使いたい
HTMLColecction型のオブジェクトで配列のメソッド(forEach, mapなど)を使いたい
javascriptのArray.fromで配列に変換できるオブジェクトについて紹介します。
Ruby によるテンプレートメソッド (Template Method) パターン
Template Methods パターンとは Template MethodパターンはGoFのデザインパターンの一種です。 このパターンでは、スーパクラスでテンプレートとなるメソッドの定義を行い、そのメソッドの中に抽象メソッドを実装します。 テンプレートメソッドの中では、抽象メソッドを使うことで処理の骨組みを作ります。 テンプレートが定義されているクラスを継承したサブクラスで、抽象メソッドを実装し、テンプレートの具体的な処理を決めていきます。 このようにすることで、似通った部分を共通化し、サブクラスに対して、スーパクラスで実装されている抽象メソッドを実装する、という責任を与えることができます…
サーバサイドでJSを動かすための実行環境。 JSの解析にV8を搭載しており、そこそこ高速。 シングルスレッドで動作し、ノンブロッキングなI/Oを実現できるため、スケーラビリティが高い。 コールバック関数は待ち行列に入れられ、実行可能になったタイミングで実行キューに入れられる。 そのため、実行キューの中に処理負荷の高い関数が入っていれば、そこで処理は止まってしまう。
実行計画とは、 オプティマイザは構文解析の結果、文法上誤りのないSQLを受け取ると、実際にそのデータをどうやってテーブルに取りに行くかを考えます。 テーブルに取りに行く方法は複数ある場合がほとんどであり、その中から最もコストが低い経路を選択します。 このように複数の経路をコスト付けし、最適な経路を選択するオプティマイザをCBO(コスト・ベース・オプティマイザ)と呼びます。 その他にも、HINT句を与えて明示的に経路を指定する方法もあります。 CBOが経路にコストをつけるときに使用するのが統計情報です。 統計情報を参照する事でテーブルの状態を確認しています。 例えば、あるテーブルのレコードを検索…
「達人に学ぶDB設計」の第3章の課題です。 達人に学ぶDB設計 徹底指南書作者:ミック発売日: 2013/08/07メディア: Kindle版 与えられたテーブルには以下の従属関係があります。 {支社コード} → {支社名} {支社コード、支店コード} → {支店名} {商品コード} → {商品名、商品分類コード、分類名} {商品分類コード} → {分類名} 試写支店商品テーブル 支社コード 支店コード 商品コード 001 01 001 001 01 002 001 01 003 001 02 002 001 02 003 001 02 004 001 02 005 001 02 006 00…
「達人に学ぶDB設計 徹底指南書」を読んだのでそのまとめです。 達人に学ぶDB設計 徹底指南書作者:ミック発売日: 2013/08/07メディア: Kindle版 関数従属性 関数従属性とは、ある入力Xに対して出力Yが一意に決まる事です。 数学でいうy=f(x)のようなやつです。 この時、YはXに従属すると言います。 {Y} → {X} これは例えば、学籍番号があり、それに対応する学生の2つに関数従属が成り立つのであれば {学籍番号} → {学生} のように表す事ができます。 テーブルを設計する場合、関数従属性を用いて主キーを設定します。 上記の学生情報を表現するテーブルがあった場合、学生の名…
シン・ニホンの要約です。 シン・ニホン AI×データ時代における日本の再生と人材育成 (NewsPicksパブリッシング)作者:安宅和人発売日: 2020/02/18メディア: Kindle版 本書の目的は、これからの世界を賢く生きていくために必要な事を考える材料を学ぶことです。 今の世界の状況と日本の状況をデータを用いてわかりやすく説明し、 自分が今後どうなっていきたいのか、そのためには何をすべきなのかを考える素晴らしい材料になります。 AIの革命はすでに起きている DeepMind社が開発したAlphaGoなどのAIのように、コンピュータは人間の能力を超え始めている。 翻訳や自動運転など、…
オブジェクト指向設計実践ガイド第8章の学習メモです。 オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方作者:Sandi Metz発売日: 2016/09/02メディア: Kindle版 コンポジション 全体を単なる部品の組み合わせで構成すること。個別の部品を組み合わせて複雑な全体を表現する。フレームワークなどが該当する。 オブジェクト指向で設計をすれば、個別の部品をオブジェクトで表現し、オブジェクトを組み合わせていくことでアプリケーションを構築していくことが可能になる。 より大きいオブジェクトとそれを構成するオブジェクトの関係は「has-a」にな…
オブジェクト指向設計実践ガイド第7章の学習メモです。 オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方作者:Sandi Metz発売日: 2016/09/02メディア: Kindle版 継承はオブジェクト指向プログラミング において良いプログラムを書くための一手段でしかありません。 直面している問題を解決するためには他の選択肢も当然考えられます。 その上で得られる利益と相対的なコストを考慮して選択しなければなりません。 オブジェクト間で共通している振る舞いを「ロール」と言います。 継承は具象なものを抽象化したもの。モジュールはオブジェクト間に跨っ…
Dockerを扱っていると使用していないコンテナや、タグづけされていないイメージで煩雑になることがあります。 全部まとめて消すにはどうすればいいか調べていると、一括で削除してくれるコマンドがありました。 docs.docker.com このコマンドでは image container volume network それぞれを一括で削除してくれます。 イメージの一括削除 コンテナの一括削除 ボリュームの一括削除 ネットワークの一括削除 前リソースの削除 イメージの一括削除 イメージの一括削除は以下のコマンドでできます。 docker image prune このコマンドではdanglingなイメ…
Docker開発環境でAngularがファイルの変更を検知してくれない
Angualrに限らずReactなどもコードを変更すれば検知してリロードしてくれます。 DockerでAngularアプリケーションを開発している時に変更を検知してくれずちょっと困ったのでその解決策をメモしておきます。 結論から書くと、serve時にオプションを追加するだけです。 ng serve --poll 2000 このオプションはファイル変更検知の間隔をm秒単位で設定できます。 github.com 上記はwindowsで動くVMマシンで、webpackはホストマシン環境からの変更を検出できないとあります。 私はmacOSでDockerを動かしているのですが、これと似たような問題が発生…
RecoilはFacebiikが公開したState管理用のライブラリです。 チューとリアリルが用意されていたので早速試してみました。 まずはプロジェクトの開始です。 npm create-react-app recoil-tutrial yarn add recoil ./src/ ├── App.css ├── App.js ├── App.test.js ├── ChatacterCounter.js ├── index.css ├── index.js ├── logo.svg ├── serviceWorker.js └── setupTests.js ルートを設定します。 App.j…
form_withはデフォルトでajax通信を行う。
Railsのproductionモードで静的ファイルが反映されない時
Railsアプリケーションサーバを起動する時に rails s コマンドを使うが、このコマンドで起動されるのはdevelopment serverです。 production serverを起動するには rails s -e production オプションを設定する必要があります。 しかし、production serverではcssが反映されなかったり、jsが動作しなかったりします。 これは一般的にアプリケーションを公開する場合は、cssなどの静的ファイルはNginxなどのWEBサーバが返却するのが一般的で、アプリケーションサーバの役割ではないためです。 しかし、開発の場において簡易的に公…
Railsのコントローラやアクションごとにレイアウトを変更する方法。
RailsでMySQL8.0を使う時の注意事項。Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
Dockerを使ってNginxサーバによるDjangoアプリケーションとAngularによる開発環境を構築したので手順をメモしておきます。 ディレクトリの構造です。。 . ├── content │ ├── angular │ └── django │ └── uwsgi.ini ├── docker │ ├── api-server │ │ └── Dockerfile │ ├── django │ │ ├── Dockerfile │ │ └── requirements.txt │ ├── node │ │ └── Dockerfile │ └── server │ ├── Docker…
Dockerを使ったAngularアプリケーションの開発環境の構築方法メモする。 本記事で開発したものは、https://github.com/tashinoki/angular-docker-sampleから取得できる。 実施内容 Angularの開発用サーバの立ち上げ Angularアプリケーションのビルド Nginxを使ってWEBサーバを構築 Nginxサーバによるビルドファイルの配布 なお、本記事ではAPI用のアプリケーションサーバは構築しない。 Dockerの使用法の理解やAngularの開発環境構築のチュートリアルとしての役割を目的としている。 ├── content ├── do…
「技術力向上」だけに固執するエンジニアのダメさを読んで良いエンジニアについて考えてみた。
コールバックとかクロージャを作成するためのProcオブジェクト
Rubyで定数を扱う時は、予期せぬ場所での変更に注意を払う必要がある
「ブログリーダー」を活用して、knstknyさんをフォローしませんか?
指定した記事をブログ村の中で非表示にしたり、削除したりできます。非表示の場合は、再度表示に戻せます。
画像が取得されていないときは、ブログ側にOGP(メタタグ)の設置が必要になる場合があります。