refinery overrideでzshのエラーが出る件

こちらのサイトrefinery-cmsをつかっているのですが、
突然refinery override で下記のようなエラーがでました。

zsh: no matches found: controller=refinery/hogehoge/*

調べてみるとzshが引っかかっている様子。

zshの設定を.zshrcに下記の記述を加えて変更すればエラーがでなくなりました。

#~/.zshrc
setopt nonomatch

で読み込んでから
source ~/.zshrc

実行

rrefinery:override controller=refinery/hogehoge/*

 

Ruby on Rails bundle install 失敗。原因はmavericsのインストールとXcodeのアップデート

Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.

ちょっとRailsの新しいプロジェクト(テストプロジェクト)を
作ろうと思ってbundle installを実行したら上記のようなエラーがでました。

原因はXcodeのアップデート後にアプリケーション上で「I agree」を実行しなかったこと。

XcodeをGUIで起動してI agreeしたらエラーがでなくなりました。

情報はこちら

http://blog.tomhennigan.co.uk/post/62238548037/agreeing-to-the-xcode-license-from-the-command-line

I love green!

念願の自社開発ソフトウェア

かねてより念願だった自社開発のソフトウェアを今年の7月にリリースしました。

ウェイバー人事考課システムです。

人事評価のためのシステムなのですが
「人事評価」になじみの無い方の為に少しだけ説明します。

■人事評価(人事考課)とは?

厳密に言うと評価と考課は違います。
が、ここでは同じ物として説明します。

人事評価は企業が人材にある目的を持って評価することです。
ある目的とは企業により様々なのですが、一般に2つのことを主に目的とします。

1:次期の待遇を決める
2:人材の育成

うちではやってないなーと思っていても、
これは必ず行われているものです。

それが人事評価制度となると制度化されていない企業がたくさんあります。

企業が大きくなる為には制度化する必要性があり、
つねにチューニングを行いながら運用していく必要があります。

■なぜこのシステムを作ったか

ウェイバーは中小企業向けの人事考課システムなのですが、

根本的には自分のスキルを使って、
なんでもいいから社会に役立つ物を作りたいというのがありました。

もちろんそれで利益も出して企業としてもう1つステップを上がりたいという事もあります。

よくなぜ人事なんですか?聞かれます。

正直言うとよくわかりません。
人事畑にいたわけではないですし。

たぶん人が好きだったからでしょうと解釈しています。
中小企業で働く人たちが大企業で働く人たちよりも得られていないものの1つに
人事評価制度がありました。

また中小企業の社長さんたちにお金の面でも機能の面でも
つかいやすいシステムを提供したいという思想があります。

「ちょっと安すぎるんじゃない?」と言われます。

確かにBtoBのこの分野では常識はずれです。
でもそもそも中身のシステムも人事の常識から外れています。

いまだにプライシングを誤ったかなと迷うときもあります。
それはあくまでリリースしたてでまだ運用が不安定だからであり、
コンセプトから逸れてはいないのです。

ですからもうちょっと頑張ってみます。

PostgreSQLがOSXで動かなくなった件

Ruby on Rails環境をOSXのローカル上に構築していたのですが、
OSをアップデートしたらPostgreSQLが動かなくなりました。。

直接OSのアップデートが原因なのかは不明。

で、下記の記事を参考にpostmaster.pidを削除して
再起動したら動きました。

http://stackoverflow.com/questions/13755965/after-osx-10-8-upgrade-postgres-can-not-connect-to-the-server

このトピックを書いた人は動いてないようですが、
私のマックには効果ありでした。

OSXはapp版を使うのがいいんですかねー?

子育ては仕事と両立したほうが楽しい!

私は男です。

男がこのような事をいうのはもしかしたら日本初かもしれません。

イクメンである人たちが自らイクメンということほとんどありません。

なぜなら彼らはすでにジェンダーに垣根を持っておらず、
男も女も平等に仕事と育児をする権利をもっていると考えているからです。

したがってイクメンがあるならイクウーメンがあるはずですが、
イクウーメンとイクメンは両方あると何の意味も無いからです。

さて横浜パパ会を初めて一年がすぎようとしています。
実際に会を開いたのは今年の1月ですが、
去年の今ぐらいから話は組み立てていて
サイト構築やら根回しやらをしておりました。

当時の私は自身の仕事で悩み、大変な時期でした。

自分の仕事だけをやっていると心のバランスが悪いなと感じたことも
会を始めたきっかけの1つになりました。

当然時間はとられます。
今も仕事に影響が全くでないということは言えないかもしれません。

それでもパパであるのに仕事しかしてないのは、
仕事にとってもマイナスだと感じます。

なぜなら育児は人としての広い視野、新しい考え方、強い精神を養ってくれるからです。
マイナスなのは体力と時間だけで、それを差し引いても得難い経験を与えてくれます。

一方、育児と家事しかしていない人もなにかしらの仕事をしたらよいと思います。

本気で仕事をするのであれば、
サポートをしてくれる場所はたくさんあります。

パートをやったり、家で何かを作ったり学んだり、
ちょっとであってもぜひ何かを始めてください。

韓国の朴大統領の発言について

http://www.huffingtonpost.jp/2013/09/30/japan-south-korea-summit_n_4020541.html

こちらの記事とそのコメントに心が痛みました。

「歴史や領土問題で後ろ向きの発言をする(日本の)指導部のせいで、信頼が形成できない」

こう言う朴大統領の発言におかしいところは何もありません。

誰のことを言っているのかは明白ですし、
このような対象が日本のトップのいる事自体が国民として恥ずかしい。

もちろん政治的な駆け引きなどに利用されている側面や、
いきすぎがあることもあるかもしれませんが、
この問題に関しては国と国の問題よりも以前に、というか根本的に
人と人の心が存在します。

これに対するコメントが

「これが一国の首脳が発する言葉かと、呆れるばかり。
知性も品性も感じられません。」
「女子高校生が先生に言いつけているイメージですね。」
「韓国は、なんでも”日本のせい”にするのではなく、すべては過去の韓国の行動の延長線上の結果だと捕らえて下さい。」

です。非常に残念です。

韓国がどうあるべきかと言う前に、
過去に同国の人が他国の人間を傷つけたことを認識し、
傷ついた人々を少なくとも想い敬う態度をとっていただけることを望みます。

私がメインマシンをWindowsからMacBook Airに変えたわけ。

逆になぜこれまでMacでなくWindowsを使い続けたのかを申し上げると、以下のようになります。

  • 割高だった。
  • Adobe関連ソフトのライセンスがWindowsだった。
  • 画像や動画を扱う仕事もかなりあったのでハイスペックなマシンが必要だった。

コレが現在ではどのように変わったのかというと、

  • MacBook Airのようなそれほど高価でない製品も多く出てきた。
  • Adobeもクラウドでの製品提供に乗り出した。
  • 仕事が主に開発になったので、それほどハイスペックでなくてもよくなった。

また、外回りが多くなったので、電池の持ちや軽さも重要になってきたわけです。

コレまでの私はメーカー品でないマシンをカスタムして注文し、
それを2年くらい使い倒しては次のマシンを購入するような流れでした。

外回りのときは

  • 持ち出し用のACアダプタ
  • 予備バッテリー
  • モバイル通信端末
  • エネループ
  • マウスやケーブル類
  • 書類
  • そしてノートPC

総重量10kgを超える荷物を持ち、
時に打ち合わせ、時に電源のあるカフェを探しながら一日中歩き回り、
お客さんには「筋トレです」とその重装備っぷりで苦笑いをいただきながら、
帰ってくるとさすがに歳だなー体にくるなーと思うようになったわけです。

クラウドやGitをつかってどのマシンでもデータを共有できるようになったというのも理由のひとつです。

パソコンを使う人たちの中で、
私のようなヘビーユーザーは少数派でしょうけれども、
そのヘビーユーザーでさえ、MacBook Airのような製品選択する時代になった。
感慨深いです。

また、このたび自社開発のソフトウェアのデバッグ用に
アンドロイド搭載のタブレットやSurface、中古のガラケーなんかも同時に購入し、
事務所はいよいよオタク色を増してきました。。。

jQuery 1.9.1:checkboxのcheck/uncheckはpropで

これまでjQueryを用いたcheckboxのcheck/uncheckは下記のようにしていました。

checkbox.attr(‘checked’, ‘checked’)

checkbox.removeAttr(‘checked’)

しかし、どういうわけかコレが効かなくなる場合がありました。

同様にハマッているひとがいまして、こちらの記事で無事に解決させていただきました。
http://stackoverflow.com/questions/14769408/jquery-checkbox-check-uncheck

checkbox.prop(‘checked’, true)

checkbox.prop(‘checked’, false)

確かにこちらの方がしっくり来ます。ちなみにcheckboxがcheckであるかどうかは

checkbox.attr(‘checked’) == ‘checked’ でなく

checkbox.is(‘:checked’) とするのが良いようです。

jQuery1.6あたりでそれまでattrがattrとpropに分かれたようです。
その辺の情報は下記のリンクまで。

http://myjquery.blog.fc2.com/blog-entry-14.html#modified-10

Rails3.2 プロフィール画像をアップロードしてDBに格納。サムネイルも。

Rails 画像 アップロード
で検索するとプラグインがいろいろとでてきます。

とりあえずCarrierWaveをつかってみました。が、結局使うのをやめました。

CarrierWaveは優れたプラグインでした。
実装は非常に簡単でした。
しかし「SQLアンチパターン」という本を読み、
画像をファイルでなくDBにバイナリとして保存することを決意。

CarrierWaveでも実装できなくもなさそうでしたが、
恩恵があまり受けられないということで、
使用をやめ、独自に実装することにしました。

ただversionという感じで、いくつかのサイズを選べるという機能は気に入っていたので、
なるべく画像を使用している部分は変更のないような実装を目指しました。

Personクラスに16px, 32px, 64px, 200pxのアバター画像を保存します。

まず、マイグレーションでカラムを追加。

avatar_data16
avatar_data32
avatar_data64
avatar_data200
avatar_content_type:string

つぎに、routesを設定。
/config/routes.rb

match ‘avatar/:version’, :via => :get, :action => ‘avatar’, :as => ‘avatar’,  :on => :member

次にcontrollerを設定。(RMagickを使っています)

#作成
def set_avatar
if params[:person][:avatar_file].present?
file = params[:person][:avatar_file]
params[:person].delete(:avatar_file)
end
if file.present?
img = Magick::Image.from_blob(file.read).shift
img_16 = img.resize_to_fill(16, 16)
img_32 = img.resize_to_fill(32, 32)
img_64 = img.resize_to_fill(64, 64)
img_200 = img.resize_to_fill(200, 200)
params[:person][:avatar_data16] = img_16.to_blob
params[:person][:avatar_data32] = img_32.to_blob
params[:person][:avatar_data64] = img_64.to_blob
params[:person][:avatar_data200] = img_200.to_blob
params[:person][:avatar_content_type] = file.content_type
end
end

#取得する
def avatar
@person = Person.find(params[:id])
version = params[:version]
avatar = case version
when ‘icon’ then @person.avatar_data16
when ‘mini’ then @person.avatar_data32
when ‘thumb’ then @person.avatar_data64
when ‘normal’ then @person.avatar_data200
end
send_data(avatar, :type => @person.avatar_content_type)
end

次はviewです。
アップロード側は

<tr class=”avatar”>
<th class=”label”><%= f.label :avatar_file, ‘顔写真’%></th>
<td class=”data”><span class=”image”><%= image_tag @person.avatar_path(:mini) %></span><span class=”select_button”><%= f.file_field :avatar_file %></span></td>
</tr>

モデルにavatar_pathというメソッドを追加

include ActionDispatch::Routing::UrlFor
include Rails.application.routes.url_helpers
def avatar_path(version = :normal)
if avatar_data16.blank?
path = Person.default_avatar(version)
else
path = avatar_person_path(self, version)
end
end

def self.default_avatar(version = :normal)
case version
when :normal then ‘/assets/weiver-ui/avatar_default.png’
when :thumb then ‘/assets/weiver-ui/avatar_default.png’
when :mini then ‘/assets/weiver-ui/avatar_default_mini.png’
when :icon then ‘/assets/weiver-ui/avatar_default_icon.png’
else ”
end
end