CSS flexbox【日常 個人サービス製作日誌】
flexboxアイテム テキストが長いとはみ出てしまう
例)
<div class = "flex"> <div class="problem">hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge</div> <div class="normal">hoge </div> </div>
.flex { display: flexbox; width: 100px } .problem { flex-grow: 1; } .normal { flex-grow: 4; }
フレックボックス幅が100pxとして、2つのフレックスアイテムがある場合を想定します。 それぞれのアイテムの長さ比率は1:4の幅で分割しています(flex-growプロパティ使用)。 テキストが長い場合、はみ出て表示されてしまう。(今回のケースだと .problemは20px幅)
ぐぐっていたら解決方法があった。 こちら
linux 容量順ファイルのソート
コマンド
du -ma | sort -rn | head -10
du -m | sort -rn | head -100
1.du
- du ディレクトリ内のファイル容量を表示する
- -m は単位をmバイトにする
- -a ファイルも表示する(aはallの略)
2.sort
- sort 行を並び替える
- -n 先頭の文字(+.-など)を数字とみなしてソート
- -r 逆順にソートする
3.head
- head ファイルの先頭部分を表示する
- -n(数字) ファイルの先頭からn行を表示する
1-3 つなげると
du -ma | sort -rn | head -10 なら
ディレクトリ内のファイル容量を表示| 数字順で行を並び替える | 先頭の10行表示
気になったコマンド
sort -d アルファベット・数字・空白だけを使用してソートする
【ruby】include VS extend
include
定義
moduleで定義されたメソッドを追加
rubyは多重継承は出来ないため、includeで必要な機能を追加 通常、moduleはインスタンスメソッドを使用出来ない。 includeしたクラスのスーパークラスとして継承されるため、 moduleに定義されたインスタンスメソッドが使用出来る。
extend
定義
モジュールで定義されたメソッドをselfの特異メソッドとして追加。
例えば、class内でextendした場合はmodule内で定義したmethodは クラスメソッドとして追加される。
module ModuleTest def module_test puts "test" end end Class IncludeTest include ModuleTest end Class ExtendTest extend ModuleTest end IncludeTest.new.module_test #test ExtendTest.module_test #test
python、ruby文字列変数展開、バッククオート
python文字列変数展開、バッククオート
pythonを使いはじめてます。 簡単ですが、自分のメモ代わりに最近調べた事 を書いておきます。(対比としてrubyのケースも書いておきます)
文字列の変数展開
# ruby hoge = "hoge" puts "hoge#{hoge}" #hogehoge
#python hoge = "hoge{}" #変数で置き換えは{} print(hoge.format("hoge")) #hogehoge
バッククオート
#ruby `touch hoge.txt`
#python import os cmd = "touch hoge.txt" os.system( cmd )
メタプログラミングRuby第五章 特異メソッド
特異メソッド
特異メソッドとは・・・特定のオブジェクトにメソッドを追加することです。
以下にコード例を示します。
hoge = "hoge" def hoge.upcase? hoge.upcase #HOGE end
モンキーバッチと違うことは?
モンキーバッチとはクラスにメソッドを追加及び修正が行えることです。
特異メソッドと同じようなコードを作成するには以下のような コードを記述することになります。
class String def upcase? if self == "monkey" self.upcase else self end end end p "monkey".upcase? #MONKEY p "hoge".upcase? #hoge
しかし、このようなコードを記述すると 現在あるStringクラスに追加するので 間違いがあった際、String全域で間違ったコードが記述される可能性があります。
ダックタイピング
最初のコードに示した特異メソッドの対象となった “hoge” はStringクラスに属していますが オブジェクトとクラスは結びついていないため、 upcase? をいれたとしても元のStringクラスに 属しているメソッドを汚すことはない、
このようにRubyが用いることが出来るメソッドはその「オブジェクト」が決定します。
このような事象を 「ダックタイピング」と言います。
今回のケースで言えば、あるオブジェクトが Stringクラスのインスタンスかは気にする必要はないことです。 実際メソッドを使う際にはそのオブジェクトに紐付いているメソッドだけを着目すれば良いんです。
メタプログラミング ruby ローカル変数スコープ
ローカル変数のスコープ切り替え
ローカル変数を使う時にいつも気になるのがスコープの存在です。
一旦、スコープの切り替えタイミングは クラス定義 モジュール定義 メソッド定義 の3つです。 上記3つのことを「スコープゲート」と呼びます。
v1 = 1 #→v1 class MyClass v2 = 2 #→ v2 p local_variables def my_method v3 = 3 #→ v3 p local_variables end p local_variables #→ v2 end obj = MyClass.new obj.my_method.local_variables
スコープゲートを抜けるには?
クラス定義やメソッドを乗り越えて、ローカル変数を使いたい時があると思います。
クラス定義の場合
class.newを用いてインスタンスを作成して、クラス定義のスコープゲートを回避します。
v1 = 1 MyClass = Class.new do puts "クラス定義の中#{v1}" end
メソッド
メソッドの際は動的メソッドを用います。
v1 = 1 MyClass = Class.new do puts "クラス定義の中#{v1}" define_method :my_method do "クラス定義の中#{v1}" end end
フラットスコープ
スコープゲート(クラス定義・モジュール定義・メソッド)をメソッド呼び出しに変更すると スコープ変更せず、他の変数が見えることが出来ます。
これを スコープのフラット化 または フラットスコープ と呼びます。