Ruby オブジェクト指向 メモ

オブジェクト指向で意識すること インスタンス変数はアクセサメソッドで提供するようにする。 クラスの中で他のクラスをnewするのは出来るだけ避ける。 依存関係の逆転 インスタンス変数はアクセサメソッドで提供するようにする。 class Human def initializ…

JSで意識すること メモ ES6

JSで意識すること 自分用のJS扱うときに意識することメモ 参照のコピーとthis list2 list3 図 JSで意識すること 参照のコピーとthis 見出し1-1 見出し1-2 見出し1-3 非同期Promiseチェーン 見出し2-1 見出し3 見出し3-1 参考リンク 関連リンク

rubyでデザインパターン strategyパターン

strategy(戦略)パターン 戦略を切り替えるパターンです。 処理を他のクラスに委譲することを前提とし、クライアント(この例ではsorterです。)が自由にそのクラスを切り替えることが出来ます。 strategyとtemplate methodパターンの違いはこんな説明がわか…

rubyでデザインパターン builderパターン

砂糖水を作る( ビルダ (Builder) | Ruby デザインパターン | 酒と涙とRubyとRailsと ) こちらの写生です。操作と手順を分離するパターンです。 factoryパターンとの大きな違いは、factoryパターンは作成が1ステップでできる場合に使うのに対し、builderパタ…

rubyでデザインパターン abstract_factoryパターン

ドアを作るには専門のドア職人にお願いしなければなりません。 しかしドア職人も万能ではありません。木製のドアしか作れない職人、鉄製のドアしか作れない職人と専門があります。 この際のオブジェクトをグループ化したいです。つまり、木製のドアは木製の…

rubyでデザインパターン factory_methodパターン

面接官が面接を行います。しかし、一人でマーケターやエンジニアなどすべて職種の面接官を一人で行うことは出来ません。エンジニアの面接はエンジニアにお願いし、マーケターの面接はマーケターにしてもらいましょう。 ここでのfactoryはHiringManagerです。…

rubyでデザインパターン simple_factoryパターン

module Door def getWidth end def getHeight end end class WoodenDoor include Door attr_reader :width, :height def initialize(width, height) @width = width @height = height end def name "木製のドアです。" end end class DoorFactory def self.m…

rubyでデザインパターン commandパターン

class Bulb def turnOn puts "電気がつきました" end def turnOff puts "真っ暗です" end end class Command def execute end def undo end def redo end end class TurnOn < Command def initialize(bulb) @bulb = bulb end def execute @bulb.turnOn end d…

オブジェクト指向

「人の認識に近い形で」というところが一般的に言われる「責務に応じた形で」と同じニュアンスです。

rubyでデザインパターン compositeパターン

あるオブジェクトの集合で構成されたオブジェクトも同一のインターフェースをもつパターンです。 class Employee attr_reader :salary, :name def initialize(name, salary) @name = name @salary = salary end end class Developer < Employee attr_reader …

rubyでデザインパターン adapterパターン

ライオンを狩るハンタークラスがあったのですが 急遽、野犬も狩るように言われてしまいました。 しかし、野犬はライオンとは別のインターフェイスを持っているので このままではうまく使えません。 そこで野犬クラスを包み込んだようなadapterクラスを用意し…

rubyでデザインパターン decoratorパターン

class Coffee #価格 def getCost end #商品説明 def getDescription end end class SimpleCoffee < Coffee def getCost 10 end def getDescription 'Simple coffee' end end class MilkCoffee < Coffee def initialize(coffee) @coffee = coffee end def get…

Rubyでデザインパターン proxyパターン

class Door def open puts 'open door!' end def close puts 'close door!' end end class SecurityDoor def initialize(door) @door = door end def open(password) if password == 'open goma!' @door.open else puts 'password fail' end end def close(p…

Rubyによるオブジェクト指向 8章 コードサンプル

attr_reader :size, :parts def initialize(args={}) @size = args[:size] @parts = args[:parts] end def spares parts.spares end end class Part attr_reader :name, :description, :needs_spares def initialize(args) @name = args[:name] @description…

rails route 自分用メモ

namespace :api do scope module: 'weather' do get 'weather' end end URLが/api/weatherでapi/weather_controllerのweatherアクションにルーティングしたい場合はこうやってかく namespaceがURLもcontrollerも追加、scope moduleはURLだけ scopeはcontroll…

SQL 自分用まとめ

DESTINCT SELECT DISTINCT 入金額 FROM 家計簿 みたいにDISTINCTは列名を指定して使う SELECT DISTINCT 入金額, 費目 FROM 家計簿 みたいに2つ列を指定するとこの2つが同じだったら取り除かれるようになる。 selectされた列にDESTINCTされるイメージをもつ…

git 他の人のブランチで作業したい場合。

gitで開発中にバックエンドの実装をAさんがしてフロントはBさんにお願いするとなった場合にAさんのブランチから新たなブランチを切ってBさんが作業するか Aさんのブランチでそのまま作業するかはチームの方針によると思いますが、 今回は後者のパターン。 前…

自分用メモ Rubyで気をつけること

requireとrequire_relativeの違いはファイルパスの起点となる場所の違い。 requireはrubyを実行しているディレクトリが起点になる。relativeはファイルの置かれている場所が起点になる。 for文使わない点が独特。配列なんかに対して繰り返せって感じのメソッ…

ABC138 解けなかったやつ

C問題が解けない・・・ 頂点を最後の配合とする二分木で考える必要があった。 頂点から伸びる2つの葉は、最大の価値を持った具材、それまでの配合で最大となった価値をもつ具材という葉になる。 枝の個数分1/2されていくので、価値の小さい具材から配合して…

ABC137の解けなかったやつC問

アナグラムかどうかの判定問題 文字列の中のアルファベットごとの出現回数を調べる 文字列を辞書順にソートして同じ文字列になればそれはアナグラムである この2つの方法があり、ひらめくことが出来たが 組の数を数えるところでTLEしてしまった。 この場合…

Django form 画像がアップロードされない。

<form action="" enctype="multipart/form-data" method="post"> だいたい、templateのenctype="multipart/form-data"を書き忘れてる。 これで解決しない場合は、 <form action="" method="post" enctype="multipart/form-data"> のようにmethodがenctypeより先にきてる。 僕はこっちの方で詰まってました。 フロントエンド知らないとこういう場所でドン詰まりしてしまうなぁ・・・</form></form>

割り込みがうまくいかない。

キーボード割り込みのみを有効にした状態で、キーを押すと以下の画像のように 一瞬画面がおかしくなり、正常な関数が呼ばれない。 本来、呼ばれるはずの関数ではCLI命令(CPUレベルで割り込みを禁止する命令)が呼ばれるため、それ以降、割り込み自体が起こ…

自作OSでの謎(メモリマップ取得)

0xe820機能でメモリマップを取得するとbiosがメモリの予約領域やフリー領域を教えてくれるが、そのメモリマップは連続ではない。(一部は連続してたりする) 例えば、取得するマップの1要素目のベースアドレスが、0x0で長さが0x100 だとしよう。 2要素目のベ…

OSError: [Errno 40] Message too long

OSError: [Errno 40] Message too long ↑このエラー、逆に短すぎることが原因で出ることもあります。 自分用メモ

you are trying to add a non-nullable field が出た時。

you are trying to add a non-nullable field はdjangoですでに作成しているDBのテーブルのスキーマを変更しようとすると出るはずです。 class User(models.Model): user_firstname = models.CharField(max_length=40) 上記のテーブルを作成します。 その後…

virtualboxとDocker for windowsを共存させてしまってvirtualboxのインスタンスが起動しなくなった場合。

はい、やらかしました。 もともとvirtualboxが入っているpcにdocker入れてしまってvirtualbox起動しなくなりました。 これの解決策書きます。 まず、仮想化支援機能をBIOS画面から無効にしてから再起動。そのあともう一度BIOSから有効にします。 次にwindows…

django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied

djangoでこのエラーが出た時は自分でカスタムユーザーを再定義した場合に起こることが多いようです。 自分もよく分かっていないのですが、先にadminのデータベース設定が適用されてしまうことが原因なのかな? とりあえず解決策だけ書いておきます。 プロジ…

docker-composeをインストールする際のエラー unexpected token 'newline' 予期しないトークン

環境 ubuntu14.04 curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s-uname -m` -o /usr/local/bin/docker-compose ↑のコマンドを実行したと思いますが、下のようにして実行し直すと治ります。 curl -L https:/…

raspberry pi3 でのPiserverを用いたネットワークブートが出来ない時。

raspberry pi3 ではPiserverを用いて手軽にラズパイをマイクロSD無しで起動出来るようになりましたが、少し困ることがあるので書いておきます。 クライアントであるラズパイをPiserverに登録し、よし!後はラズパイの電源を入れるだけという状態からラズパイ…

PermissionError: [Errno 1] Operation not permittedが出た場合。

PermissionError: [Errno 1] Operation not permittedが出た時の対処法です。 当たり前のことすぎて日本語のサイトなかったので書いておきます。 実行する時に sudo をつけてください。以上です・・・。