follow us in feedly

2012年12月

Rubyのinjectで配列の各要素の合計を計算する

Rubyのinjectで配列の各要素の合計を計算する方法のメモ。

Rubyで配列の合計を計算したいとなったんだけど、
ふと、いつもと違うやり方はないかな、ちょっとでも簡単に書きたいなと思って、
Rubyなら何か方法があるんじゃないのと調べてみました。

そしたら、ありました。
Enumerable#injectで配列の合計がちょっとだけスッキリ書けます。

injectで配列の値の合計を計算する

配列の合計を計算する場合は、たいていこんな感じになります。
下記は1から10までの値を合計しています。

sum = 0
(1..10).each { |i| sum += i }
p sum # 55

上記をinjectを使って書くとこうなります。
injectに渡す引数は、sumの初期値になります。つまり、sum = 0です。
引数を省略したときは、先頭の要素をsumに代入して、2番目の要素からループが開始します。
また、injectは返り値としてsumの値を返します。

(1..10).inject(0) { |sum, i| sum + i } # 55

# 引数を省略
# sum = 1として、sum + 2からループ開始
(1..10).inject { |sum, i| sum + i } # 55

ということで、injectで配列の合計の計算がちょっとだけスッキリ書けました。

injectは、引数に渡すオブジェクトの種類によって使い道がいろいろあるようですが
そのあたりはもうちょっと勉強して使ってみないとよくわかんないな。

Rubyのハッシュ作成時にデフォルト値を指定する方法が便利

Rubyでハッシュの値にハッシュや配列を持たせたい場合の便利な方法をメモ。
ハッシュの値としてハッシュを入れる場合は毎回初期化してあげないとエラーになりますが、
ハッシュの作成時にキーに対応する値が未定義の場合のデフォルト値を指定すると上手くできます。

ブロックを使ってハッシュにデフォルト値を指定する

下記のようにh[‘foo’][‘bar’]に値を代入しようとしてもエラーになります。
h[‘foo’]はnilなので、[]=メソッドがないと怒られます。

h = Hash.new
h['foo']['bar'] = 100 # NoMethodError: undefined method `[]=' for nil:NilClass

今まではエラーにならないように毎回初期化してたんだけど。

h = Hash.new
h['foo'] = Hash.new
hash['foo']['bar'] = 100
p hash # {"foo"=>{"bar"=>100}}

下記の1行目のようにすると、h[‘foo’]が未定義の場合に自動でデフォルト値を代入してくれる。
この場合は、{}(ハッシュ)が代入される。

h = Hash.new { |hash, key| hash[key] = Hash.new }
hash['foo']['bar'] = 100
p h # {"foo"=>{"bar"=>100}}

# 値があればデフォルト値は代入されない
h['hoge'] = 200
p h # {"foo"=>{"bar"=>100}, "hoge"=>200}

なかなか便利でいい感じです。
ソースコードがちょっとすっきりしました。

WordPressがbrタグやpタグを自動挿入・削除するのを解除する

WordPressにはbrタグやpタグを自動挿入してくれる機能があります。
さらに、余分なbrタグやpタグを削除してくれる機能もあります。
この機能によってbrタグを重ねて大きめに行間をあけようとしても削除してしまいます。

WordPressの自動整形機能は、remove_filterをfunction.phpに追記すれば解除できます。
ただ、解除するとこれまでに投稿した記事にタグが自動挿入されないのでレイアウトが崩れる。

そういうわけで、今回はPS Disable Auto Formattingプラグインを使ってみました。
PS Disable Auto Formattingプラグインには過去記事の一括整形処理機能があるからです。

PS Disable Auto Formattingの設定

インストールは、管理画面から自動インストールするか下記サイトからダウンロードして
wp-content/pluginに置きます。
WordPress › PS Disable Auto Formatting « WordPress Plugins

「記事内容の自動整形」の停止にチェックして保存すれば完了ですが、
これだけだとremove_filterで停止したときと同じで過去記事のレイアウトは崩れます。

ps_disable_auto_formatting1

過去記事の一括整形処理をする

PS Disable Auto Formattingは過去記事の一括整形処理ができます。
過去記事の下書きにbrタグやpタグを追記することでレイアウト崩れを防ぎます。
「一括整形処理を許可」にチェックして一括整形処理ボタンをクリックすればOKです。

一括整形処理とCodeColorerによって問題が発生

いい感じに整形されたなあと確認していたら、おかしなことになってる箇所を発見。
このブログでは、CodeColorerプラグインを使ってソースコードをハイライト表示しています。
そのためcodeタグで囲っているソースコード部分に自動挿入されたbrタグやpタグが
CodeColorerによって記事にそのまま表示されるという事態に。

# こういうのが…
<?php
  echo 'hello!';
?>

# こうなった
<?php<br />
  echo 'hello!';<br />
?><br />

バックアップから復元しようか迷ったけど、WordPressの自動整形解除はしておきたかったので
ソースコード部分のbrタグやpタグを1記事ずつ削除して巡りました。
多少のトラブルはあったけどWordPressの自動整形機能を解除できました。

duコマンドを使ってMacのハードディスク容量の内訳を調べる

Macのハードディスク容量の内訳を調べる方法です。
使用量がいつのまにか大きくなっていたので調べてみました。
アプリか何かを探していたらduコマンドで確認ができるということなので使ってみました。
オプションを指定すれば表示もわかるし、これで十分という感じでした。

duコマンドでハードディスクの内訳を確認する

ターミナルを起動して、下記のコマンドを実行します。

「-h」オプションは、K(キロ)やM(メガ)などわかりやすい表示にしてくれます。
使用量はわかりやすくなりますが、きれいにソートされなくなります。

「-d」オプションは、指定した深さまでのディレクトリやファイルを表示します。

「-x」オプションは、指定したディレクトリなどがあるファイルシステムとは別のファイルシステム上の集計を含めません。

$ sudo du -h -x -d 1 / | sort -nr
Password:
944M  /.Spotlight-V100
124M  /opt
 88G  /
 55G  /Users
 23M  /Developer
 13M  /.DocumentRevisions-V100
 13G  /Applications

あとは使用量が大きいものを同じように調べていきます。
僕の場合は、Usersディレクトリですね。
結果として音楽や写真が積み上がったことで使用量が大きくなっていたみたいです。