コマンドで複数のファイルに対していっぺんに置換をかけたい

$ sed -i '' s/(置換前の文字)/(置換後の文字)/g (置換するファイルパス)

`-i` のオプションではsed変換後に吐き出されるファイル名につく文字列が指定できる。
`-i ''` だと変換後も同じファイル名になるので、上書きになります!

HOKKAIDO アイデアソン&ハッカソン2014 に参加した

本番の2日間の話をさらっと

テーマ

「1タップ(1クリック)で価値を生み出すもの」
話をきいてみると、1タップというより1アクションだった。
たとえば「ツイートする」とか。1タップだと私はそんなに価値生めなくて一発屋みたいなことして終わりだなと思っていたので、少し気持ちが楽になった感じがした。

1日目

流れ

11時オープニングで午後にデモタイムが2回ある。デモの間は1時間半か2時間くらい。
チームごとにアイデア出しからはじめて、開発をしてデモに入る。
何かを聞き逃したのか去年の先入観のせいか、1日目はアイデア出しだけするのかと思っていたのだけれど、実際に作り始めて作ったものでデモするのね…ってことにデモの50分前くらいに気づいた。

イデア出しと作り始めたもの

私はひとりチームなのでひとりアイデア出しをしていた。
なんとなく、困っていることを解消するアプリをつくろうと思って、日々の困っていることを書き出していった。自分が必要とするアプリなら帰っても触ってみたりするかなと思ったのだ。(このへんの課題から出すというアイデアの出し方は、アジャイルリーンスタートアップの研修の影響を受けている気がする)

色々困っていることを出してみて、最終的に私が選んだ課題は「唐突にひとを傷つけたくなる」というものだった。これ多いのだ。一人でいるときはひとりごとで発散しているんだけれど、publicな方向に向くと危ないんだよなぁと常々おもっているので、それを解消するアプリをつくることにした。

どういう形にしようと考えていた時に「悪意をすてきな言葉に変換して世界に放出する」っていう素敵なアイデアをもらったのだけれど、この時点で気持ちが後ろ向きだったので、悪意の壺という「悪意を吐き出してキャラクターを凹ませるアプリ」をつくることにした。

1stデモ

画面遷移して悪意の雰囲気を感じる画像が貼ってあるだけのウェブページをつくる。2画面。
時間も無かったし、アイデアを見せるには多分これで良いだろうと思った。掴みはオッケー!

デモ間の作業

掴みはオッケーだったんだけど私の気持ちがオッケーじゃなかった。デモをした後で悪意を吐きためるというコンセプトに興味を失ってしまった。ネガティブなパワーは持続に向かない。
他のものをつくろうか悩んだけど、デモまであと1時間時点で作りたいものがなかったのでこのまま行くことにした。どうしてもコードを書く気は起きなかったので、最初に作ったキャラクターを段階的に進化させてストーリーをつくろうと思ってずっと絵を描いていた。うまく逃げたって誰かに言われたけど、その時できることをやっていただけなの!

2ndデモ

正直にデモ後の心境の変化と、コード書く気がおきなかったということをお話して、できた絵をざっと流した。絵は色調暗いけどちょっと明るくなる感じになったので、それを生かす何かができたら良いなぁ…… というのを話して、デモと1日目が終わったのだった。

幕間

1日目の終わりにピザ食べた

アンチョビのおいしかった

2週間

1日目と2日目の間は2週間あった。

  • 生活リズムがすごく後ろにずれていてからだがしんどかった。同じCDを聴き続けて頭から離れなくて寝る時も脳内で流れ続けていて興奮して眠れない みたいな状態が続いていた。
  • 何も作れないんじゃないかという絶望みたいな不安が消えない
1日目から1週間後くらいのツイート



バックレるなんて表現10年ぶりくらいに使いました(年甲斐なし)

前日のツイート



ご心配をおかけしました…

背中を押してもらって少し不安が解消して、寝る直前にCDの曲が流れている脳内で考えていたら作るものを思いついた。音なら興味が持てるなって思った。
ふたつ思い浮かんで、ふたつのうち、楽しさまでの距離が近そうな方を選んだ。

2日目(2週間後)

会場に行っただけで褒められた
(ご心配をおかけしました…)

流れ

11時から。朝イチでチームごとに発表する。前回やったことと、2週間のうちにやったことがあればアップデートを。2日目も午後にデモタイムが2回ある。デモの間は2時間くらい。1日目とおなじ。

最初の発表

2週間の間に悪意が浄化されたのでこの前のは忘れて、今日は円周率のメロディを生成するものを作りたいと思います。という話をした。
"自由…" と言ってもらったので嬉しい。掴みはオッケー!(ちがう)

円周率のメロディ?

0-9に音を当てはめてメロディにするというもの。低いシから高いレまで。
10代の頃、MIDIでひたすら打ち込んでいて、最近もやったんだけど結構大変なので自動生成したくなった。
(ちなみにコレ→ https://github.com/imaz/ennui-web/blob/master/music/pi.mp3)

数値を入れたら音が出るやつをつくる。
コンパクトだけど1日でやるにはギリギリのボリュームではないかと思ってつくることにした。
なにより音を出すことに興味がある。楽しい。
音を出せるライブラリを知っていてとっかかりがあったのも大きかった。
知っているけれど触ったことがなくて使ってみたかった。おお、ハッカソンにピッタリ!
(ちなみにコレ→ https://github.com/mohayonao/timbre.js)

1stデモ

デモまでにやったこと

Getting Started やその周辺のコードを動かしてみて、ライブラリを触ってみる。
それから「数値を音に置き換える」という目的に必要な以下の機能から調べていった。

  • これを呼べば再生開始できる というもの
  • 音階もしくはHzを指定して音を出す方法

また、デモ用にブラウザにサンプルを組み込むあたりも行った。
最初のデモの目標

  • ブラウザ操作から音を再生/停止できる
デモで流したもの

「ウェブブラウザでボタンを押すとサンプルコードが動いて音が流れる」というところまで。
ボタンで再生はできたものの、停止がどうにもうまくいかないという状態だった。
しまださんからコメントいただいて、停止はとりあえず置いといて、数値を変換できる方法で進めましょうか と方針が決まってデモが終了した。

2ndデモ(最終デモ)

デモまでにやったこと
  • 数値を入力すると対応する音が流れる
    • ここいちばんロジック書いた気がする! 基礎練みたいで楽しかった。
  • 停止できる
    • ブラウザ操作からの停止方法がわからなかったけれど、最後まで再生したら止める というのはできた。

ここまでが最初目指していたところ。50分ほど余したので他にやりたいことを考えた
1. 転調できる
2. 音をもっとパキッとさせる

2はなんとなくすぐできそうだけど楽しみも少なそうなので、先に時間がかかりそうな1に手をつけることにした。

それぞれの音のHzを調べて、調ごとに音を登録しておけば良い! と思ってデータベース化しようと整形をしていて、30分くらい経ってからものすごく時間がかかりそうな雰囲気を感じてあきらめた。

それから2を10分くらいで調べて適用して、日本語ライブラリをみつけてショックをうけたところで2ndデモになった。

デモで流したもの

最終デモということで、最初つくろうと思っていたもの、どこまでできたか、どういうふうに進めたかを話して、今の状態をデモした。

  • 最終的に当初の目標だった「数値を入れるとメロディが流れる」というのはできた
  • 50分余った時にやったことと判断した時間とか
  • git log をざっと(見せようと思ったけど自分が把握してなかった)
  • メモっておいた円周率をコピペして音を流した

ふりかえり

ひとりで参加するメリット・デメリット

メリット
  • 方向転換がいくらでもできる
  • 誘って断られることがない
デメリット
  • 周りがチーム開発をしていると孤独感めちゃ強
  • 気持ちが落ちたら落ちっぱなし
  • 付箋でも盛り上がれない
  • しっかり興味が持てるものを考えて作りはじめないと止まる
    • チーム開発をするとそれ自体がモチベーションになるので止まることがない
  • 知ってる範囲でしか作れない
    • 1人なのでハマったらオワタ状態
    • チームならだれか1人でも進んでいれば進捗大丈夫です

イデア出ししてわかったこと

困っていることを出すより好きなもの出したほうがいいかも

課題駆動はけっこう難しいなぁと思った。出した課題の上っ面だけみてシステムで解決しようとするとねじまがった形になって生まれてくる。そうすると途中で課題を解決しないことに気づいて興味なくなっちゃう。はっ それみたことある! (1日目)
難しいのもあるし、そもそもシステムで課題を解決することに興味無いかも。
なので、楽しさや興味で作り始めるのが良さそうだなぁと思いました。そのほうが短時間で小さく価値を生み出しやすそう。

デモの良さ

2日目1stデモの前に、必要な機能を探すのと、デモ用にブラウザで動かせる状態にするというのを短時間でいっぺんに行った。
「外側から叩いて使える」という部分はひとりで開発してると最後にまわしがちなのだけれど、ざっくり作った方が見通しがたって良いなぁと思った。
そういえば去年のアイデアソン&ハッカソンでも、デプロイするところから始めたなぁ。あれと一緒だった。去年の私の方が賢いのでは……

あとは、ハマる時間がそこで切れて方針が定められるのが良かった。
区切りをいれるのは一人だと難しいけど、中間地点があるのは良いなあ。

デモの苦手

デモ前に「ピリピリしてきましたね」「あと何分です」っていうの、みんなそれに盛り上がったり集中したりしていたけれど、あの時間がすごく嫌だった。わたしはああいう雰囲気や、時間のプレッシャーを感じる状態が本当に苦手みたい。デモの準備は大体数分前にできていたのだけれど、「あと何分」っていう言葉を聞くだけで心がどす黒くなって血の気が引く感じがした。ビョーキかょ。はー!ハッカソンだめかもー!(思い出しナーバス)

もっとこうしたかった

開発のすすめ方

2日目2ndデモ直前50分、「転調ができる」という機能をいれようとしたところ。
これはアプローチが間違ったなと思っていて、まずは「イ短調に変換できる」とかで良かった。
全部の転調をサポートするにはデータを入れるのに時間がかかりすぎるし、そこまでやるならHzとかで計算して出した方が楽そうだ…でも1hでできる量ではぜんぜんなかったのであった…(--;)
スバラシイコードじゃなくても最小で効果が出るところを目標にするのは、ハッカソンの最初だけじゃなくて、何かをはじめる時に都度考えないといけないですね。気づいたらやり過ぎなことが多い。

デモのやり方

しだらさんが最後に「僕達のチームはxx時くらいには機能開発をやめて、あとはデモのやりかたを考えていました」って言っていたのを聞いて、それやればよかったなーと思った。先に言ってょ!! (←何度も聞いて毎回忘れている…)

最終デモで円周率をコピペして音を流した時、しまださんが「できたんですね…全然わかんないですけど(笑)」って言っていて、そういえばこれが円周率を変換してできたメロディなのかどうかって他の人に伝わらないよなって気付いたのでした。
もっと簡単な数字とか、きらきら星のメロディとかを、その場で打ち込んで流してみる っていうのをやればよかったなぁ。
そしたらきっとデモをもっと楽しめたな。

ハッカソンの時、作ることや作り続けられることを重要視しがちなのだけど、リリースする瞬間ってもしかしたら一番大事なのかなぁと思った。ハッカソンだけじゃなく、多分、普段からないがしろにしていそう。もしくはそういう機会をもっていない。いや、両方だ! うっ…

よかった

  • はじめて、ハッカソンで書いたコードを家でさわりたい気持ちになっている
  • 1年前とちがってRailsでひっかかることがなかった
    • 仕事のおかげ
  • こころのおもむくまま方向転換できた
  • わいわいしてるとこでひとりでやるもんじゃない って気づけてよかった
    • 離れてソファでコード書いて癒えた
  • 自分のモチベーションのことちょっとわかった
    • 何よりも強いのは好みにあったプロダクトで、心が安定するのは良いチーム

ハッカソンのこと

ハッカソンは、やっぱり苦手です。特にコレ

何も作れないんじゃないかという絶望みたいな不安が消えない

はじまる前もずっと不安で、案の定1日目はうまく乗らず。
ものつくるの好きだけどつくりたいものがない、ほしいものない、みたいな気持ちで、ハッカソンというか、ものつくる人としての問題というか、問題とは思ってないんだけど、やりづらいところみたいなやつ。
ハッカソンに出て毎回抱える悩みな気がする。
この不安を解決しようとしてないからかな…

あとやっぱり時間に追い立てられるというのが、苦手だ。
苦手というかつらい。どす黒い気持ちになってしまう。

どっちもチームになればまた違うのかもしれないけど
チームつくろうとして断られるのももうつらい…
ハッカソンつらい……?

つらい?

これ以上書くと落ちていきそうだからもう終わろう!
ナーバスナーバスゥ!

おわりに

つらい感じで〆てしまったけれど、良いとこあった。1年前と比較して所々成長もあった(はず)。
(……1年前との違いがあんまり自覚できていないからそんなに変わっていないかもしれない…)

あとよかったのはほんのいちぶに出会ったこと。すごくすてき
ほんのいちぶ - 気になるフレーズから新しい本と出会う

あとはあとは……あとはやっぱり、もの作ってる時は楽しい。
つくりたいものとか、使いたい技術とかないんだけど、ものづくりするのを楽しいと思えてよかった。

にわか感( °_°)

存在しないデータのページにアクセスした場合は 404 NotFound に飛ばしたい

find_by_* メソッドには例外を投げるメソッドがある

こういう action があったとする

# config/routes.rb
resources :users
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find_by_name(params[:name])
  end
end
この部分!
@user = User.find_by_name(params[:name])
# => nil
@user = User.find_by_name!(params[:name])
# ActiveRecord::RecordNotFound: ActiveRecord::RecordNotFound

Rails は action で ActiveRecord::RecordNotFound が発生すると 404 と紐付けてくれるので、下のケースでは 404 ページに飛ばすことができる。
リソース必須なページはこれを使うと良い!

Rails の Helper メソッドを rails console から試したい時

$ rails console
[1] pry(main)> ActionController::Base.helpers.number_to_currency(300)

number_to_currency が定義されているのは ActionView::Helpers::NumberHelper だけど、module だから include しているところを指定してやらなきゃいけない。

久しぶりに仕事ではないコードを書いた

horesa.se に使われている horesase-boys の本文データを更新するための horesase-body というものをつくって1年間放置していたのだけれど、久しぶりに horesase-boys を更新したくなって立ち上げて、動かなくなっていたので修正をした。

Kaminari を使った

まず、画像を1000枚以上いっぺんに取得していたのだけれど、サーバに負荷かけそうだなぁと前々から不安だったので、 Kaminari を使うように変更した。
Kaminari は仕事のコードで使用していて、こういうコードを書けば良いというのがわかっていたのですごく簡単に変更できた。
以前は、触れたことがない(少ない)新しいものだったので、使うのに抵抗があっていれてなかったけど、今ではその抵抗感が信じられないくらいだ。本当に簡単。
こういう風に「食わず嫌い」的に使ってないけど使えば超簡単 みたいなものは結構多そうだなぁ。

そうそう、仕事のおかげでこういう気持ちになることが多くて、最近やっと RailsCasts を少しずつやってみるようになった。仕事で関わっているチームはどんどん良いチームになっていく感じがあって、すごく良い刺激を沢山うけるので、仕事のために使えそうなコードを覚えるのが楽しいと思える。そういう状態で Rails の勉強ができてとても幸せだ。

Rails4 にした

それからバージョンが古いのが気になったので Rails4 にアップデートしてみた。
はじめての Rails アップデート。

bundle update した

Gemfile 変更したあとに bundle install しかしたことなくって、その前に bundle update しないと関連Gemのバージョンを合わせられないっていうのにたどり着くのも時間かかった。bundle update がやってくれること初めてわかったかもしれない。

strong_parameter の対応をした

rails server したら attr_accessible で落ちていたので、該当行を消したら動いた。アッサリ!
3.2 -> 4.0 はそんなに update が大変じゃないらしいし、horesase-body は小さいから直すとこも少ない!
params[:horesases] を each して直でパラメータを設定して save してて、strong_parameter 使ってなくても保存できて大丈夫かな…と思った。each して一個ずつ取り出して save してるとこはどういう書き方が適切なんだろうなぁ。(そもそももっと簡単な書き方ありそう)

DEPLECATION WARNING がいっぱい

rake build したら DEPLECATION WARNING が3つくらい出た。
機能的には動いてたので、rails server の時にも出ていた config.whiny_nils だけ対応して終わった。

気になる

Rails4.0 を rails new した時に生成されるものと、Rails3.2 から 4.0 にアップデートした状態のものでは、config 配下の設定値や Gemfile の中身が全然違う気がする。update の時はここは直さなきゃいけない っていうのを掴むには、やっぱり 4.0 での変更点をチェックしなきゃいけないのかなあ。rails new で生成されるファイル見比べるのは骨だしな……

EPISODE #400 What's New in Rails 4 のASCII CAST の日本語(旗から飛べる) 見て確認しよ。


…と思ったらなんかまさにこれっていうのあったー!!
EPISODE #415 Upgrading to Rails 4

  • 研修の時に聞いた「Rails は scaffold をしてみると書き方の違いがわかる」っていうのはなるほどだった。前にも聞いたことある気がする。

今日はこれで終わり

警告残したままで終わったけど、「こうやって一個ずつ解消していくんだなぁ」っていうのを少し実感できてよかった。

イミテーションワールド #prfm

http://www.adventar.org/calendars/126 の7日目です!
断腸の思いで決めました。どちらを書くかほんとうに悩んだ!!

こうして好きになっていった

PerfumeにハマってYouTubeで動画漁りをしてしばらくした頃、聴いたことがない曲の動画がたくさん入っているリストを見つけました。Perfume初期のライブ映像っぽくて、ヤスタカサウンドと完成された無機質な声が好きだった私は 生歌ってあんまり興味ないなー と思いながら聴いていました。そこで私は大好きなこの曲に出会ったのです!!
その名も カウンターアトラクション!!

カウンターアトラクション!?

どこか暗い曲が好きなんですよ! 明るい短調、イントロでの転調、衝撃の暗い歌詞、寂れたメリーゴーランド感! 私のど真ん中ソングでした。

意味

http://en.wiktionary.org/wiki/counterattraction

counterattraction (plural counterattractions)
Something that vies for the attention of a person or thing in competition with something else; a rival for preference.

ションションメドレー

最初は実はイミテーションワールドって気にならない曲だったのです。Aメロがかけ出しアイドルソングっぽい印象をうけて、そういうのがあまり好きではなかったから。でもリストを何周かするうちに気付いたわけです。カウンターアトラクションの前にイミテーションワールドがないとしっくりこないと! これはどういうことなの!?

カウンターアトラクションはイントロで転調しているのですが、これってもしかしてイミテーションワールドとのつなぎなの? もしかしたら偶然そうなっただけかもしれないし、メドレー用にアレンジしたのかもしれない。どちらにせよこのなめらかさは素晴らしいものだと思いました!
それからイミテーションワールドとカウンターアトラクションをセットで聴くようになって、イミテーションワールドも私の中で遊園地に通ずる世界観を確立していって、Aメロへの苦手意識が薄れていって、サビに入るときにウオーーってなるようになったわけです!

イミテーションワールド!

よく聴くようになってから歌詞も調べました。これも暗い感じするじゃーん! 好物じゃーん! 素敵じゃーん!
サビに入った直後の「あー イミテーションワールド」の部分は少し物悲しい感じのメロディになっていて、ここがグッときます。いや、それよりもサビに入る直前!「ファ ♭シ ♭レ」 ってあれがヤバいです! これがもうグッと来るヤバい!!

メロディのこと

私は転調を含んでいたり♮が入ったりして短調か長調か微妙な曲が好きで、イミテーションワールドもそのうちの一つです!
イミテーションワールドは変ロ長調から入ってサビで変ニ長調に転調します。そのきっかけとなるのが先ほど出たサビ直前の「ファ ♭シ ♭レ」です。変ロ長調だと「ファ ♭シ レ」なのですが、最後の音の「♭レ」をきいたところで体が転調を感じるわけですよ!!これがヤバい!!!
好きになりはじめて聴いていた時は転調があるのはわかったけどなんでココでグッと来るのかがわからなかったのですよね、これに気付いたときにウオーーーってなりました!! イミテーションワールド大好き!!

余談

Perfumeメドレー入りのDVD

記事書くために動画を見てて恋しくなって「やっぱり思い切って3万出してDVD買うか…!!」と思ったら Fan Service bitter Normal Edition [Blu-ray] (2013) が発売されているのを知ったよおおおうれしいよおおおお!!
2007年に出ていたDVDが高騰したものがAmazonにあったのだけど新品あるなら新品がほしくて、3万円とかで悩んでいたのでありました。中古でも1万5千円とかするしな…
YouTubeで良いっちゃ良いんだけど、YouTubeのはいつ無くなっても不思議じゃない不安感があって、ほんとにほしいものはハードで手元においておけるのが幸せと感じるのでした。

Perfume動画漁りをはじめたキッカケ

とある場所で使っていたハンドルネームがマカロニだったのがキッカケでYouTubeのマカロニを見つけてよく見るようになった。
アルバム GAME を持っているので、マカロニ聴いたことあったはずなんだけど全然覚えてなかった。
チョコレイト・ディスコが好きじゃなくてこのアルバムあまりきかなかったからかなぁ。
あと、本来ドツボといえる曲以外は映像から好きになることが多くて、マカロニも多分そうだったんだろうなー。CDで聴いただけだと退屈していたように思う。聴いて映像が思い浮かぶようになって自分の中に世界観ができてはじめて好きになるもの、あります。

追記

この頃のかしゆかの元気でかわいい雰囲気が神がかっているとか衣装がシンプルでかわいいとか今あんまりきけない地声の歌がきけて良いとかいっぱいあるけど転調で盛り上がりすぎて書き忘れていました!くやしいです!