Slimを使ってみた

Slimを使ってみた。シンプル過ぎてまだ慣れていない。

こんな感じにしたところulの中にliが表示されず、スタイルが適用されない。
画面には表示されているものの、HTMLソースには出力されない。

# index.html.slim using rails
ul
- @items.each do |i|
    li #{i.price}円 

qiita.com
qiita.com


Slimではインデントが重要なので入れ子にするためにはインデントを忘れずに。
慣れればすごく楽そうです。

ul
  - @items.each do |i|
     li #{i.price}円 

karma startのエラー

karma startでエラーが出てテストを開始できなかった

$ karma start
/Users/juzow/Development/backbone/node_modules/di/lib/injector.js:9
      throw error('No provider for "' + name + '"!');
      ^

Error: No provider for "framework:qunit"! (Resolving: framework:qunit)
    at error (/Users/juzow/Development/backbone/node_modules/di/lib/injector.js:22:12)
    at Object.get (/Users/juzow/Development/backbone/node_modules/di/lib/injector.js:9:13)
    at Injector.get (/Users/juzow/Development/backbone/node_modules/di/lib/injector.js:54:19)
    at /Users/juzow/Development/backbone/node_modules/karma/lib/server.js:138:20
    at Array.forEach (native)
    at Server._start (/Users/juzow/Development/backbone/node_modules/karma/lib/server.js:137:21)
    at Injector.invoke (/Users/juzow/Development/backbone/node_modules/di/lib/injector.js:75:15)
    at Server.start (/Users/juzow/Development/backbone/node_modules/karma/lib/server.js:102:18)
    at Object.exports.run (/Users/juzow/Development/backbone/node_modules/karma/lib/cli.js:243:26)
    at requireCliAndRun (/usr/local/lib/node_modules/karma-cli/bin/karma:44:16)
    at /usr/local/lib/node_modules/karma-cli/bin/karma:54:12
    at /usr/local/lib/node_modules/karma-cli/node_modules/resolve/lib/async.js:45:21
    at ondir (/usr/local/lib/node_modules/karma-cli/node_modules/resolve/lib/async.js:196:27)
    at /usr/local/lib/node_modules/karma-cli/node_modules/resolve/lib/async.js:163:39
    at onex (/usr/local/lib/node_modules/karma-cli/node_modules/resolve/lib/async.js:104:32)
    at /usr/local/lib/node_modules/karma-cli/node_modules/resolve/lib/async.js:24:24

githubにあった下記コマンドで解決

npm uninstall karma -g
npm install karma 

# Optional
npm uninstall karma-cli
npm install karma-cli -g

Cannot start karma - no provider for jasmine · Issue #706 · karma-runner/karma · GitHub

初めてWebサービスを作ってみた

Amazonで買う前に最寄り図書館の蔵書と中古価格をチェックするWebサービス
http://www.mitsurintoshokan.com

最近、諸々の事情で使える予算が厳しくなってきました。
昔のように少し気になった本を次から次へと買うことができません。
ただそうは言っても、たまには本ぐらい買いたい。

そうなると毎回次のような流れで本を購入することになります。

  1. 気になる本を見つける
  2. Amazonでレビューと説明文をチェック
  3. 最寄りの図書館のホームページに行って、蔵書を確認して予約
  4. ない場合は中古価格をチェック。安ければ買う。
  5. 中古にない場合、新品で購入

何度かやるとAmazon図書館のサイトを行ったり来たりするのが面倒に...

ふと調べてみるとカーリルのAPI図書館やそこの蔵書を検索できる。
カーリル | 日本最大の図書館蔵書検索サイト

AmazonAPIで商品を検索できる。

じゃあ作れるかも?ということでPythonの学習を兼ねて作ってみました。
制作期間2週間くらいです。仕事終わりにちょこちょこと。

作ってみてからすでにChromeプラグインiPhoneアプリで同じものがあることを知りました。これらのツールに比べると使い勝手は格段に劣りますが、とりあえずブラウザで動くのでよしとします。
www.libron.net
chrome.google.com

RoRでHelperを使ってみた

時間を入力してもらうのに分数を5分おきにする必要があったのでHelperを作った。
Viewにごてごて書くと、ソースがごちゃごちゃするのでHelperに書こうねということか?
http://api.rubyonrails.org/classes/ActionController/Helpers.html
http://qiita.com/ppworks/items/b6bb04e9235fd75ec341

vi app/helpers/events_helper.rb

moduels EventsHelper
     def min_custom_options
          options = []
          (5..55).each do |m|
               if m % 5 == 0
                    options.push [m, m]
               end
          end
          options
     end
end

vi app/views/events/myview.html.erb

<%= select_tag :min, options_for_select(min_custom_options) %>

http://guides.rubyonrails.org/form_helpers.html#the-select-and-option-tags

ActiveModelを継承していないModelでValidationを実施する

ActiveModelを継承していないModelでValidationを実施する必要があったのでメモ
http://qiita.com/shunhikita/items/772b81a1cc066e67930e

vi app/models/mymodel.rb

class Mymodel
     include ActiveModel::Validations
     validates_with MymodelValidator
end

vi app/models/mymodel_validator.rb

class MymodelValidator < ActiveModel::Validator

     def validate(record)
          unless record.prop.present? and is_prop_less_than_100?(record.prop)
               record.errors[:prop] << 'Error message'
          end
     end

     def is_prop_less_than_100?(p)
          prop < 100
     end
end

validationを呼び出すときはcontroller内で@model.valid?を実施
falseならエラーメッセージがerrorsにはいる。

RoRでなにか作ってみる - その1

とにかくRuby on Railsでなにか作ろう。


最近困ったことでWebサービスになるようなもの。。
ときどき観たい番組を見逃すから、これをなんとかしたい。

こんな流れでいけるのではないか。

  1. 毎日Web上のテレビ番組表を確認
  2. 明日の番組表に特定のキーワードに引っかかる番組を探す
  3. 時間、チャンネル、番組の詳細、URLを抜き出す
  4. Twitterのアカウントに向けてそれをつぶやく

通称「Tvitter(テレビッター)」

すでにこんなサービスはあるような気がするけどそんなの関係ねぇ
So-netのテレビ番組表とか使えばできそうな気がする。

とりあえず環境を準備する。
OSはMac OS X Yosemite 10.10.5
rvmで2.1.7を入れて、gemset作ってrails 4.2を入れる。

RSpecでテストを書いてみたいのでrspec-railsも入れる。
Guardというやつを設定すると自動でテストがくるくると回るらしい。

テストにもいろいろあってUnit, functional, acceptance, integrationとなんだかたくさんありすぎてわからない。

別に仕事でやるわけではないので、自分が自信のない部分と使う人が触る部分だけをテスト書けばいいだろう。となるとcapybaraとwebkitだかpoltergeistだかを使えばブラウザを使ってユーザーが操作しているテストを書けるらしい。どうせテストを見るのは自分だけなのでcucumberのテストほど読みやすくする必要もない。

juzow/tvitter · GitHub

とりあえずgithubに環境をアップ

このへんを見るとnokogiriがデファクトスタンダードということ
番組表の文字コードUTF-8だし、これで行ってみよう。

"Soft Skills"を読んでる

なんだか世界中で話題?のSoft Skillsが手に入ったので読んでいる。

ソフトウェア開発者としてどのようにスキルを磨いていくのか、どうやって自分自身をマーケティングしていけば良いのか、新しい技術をどのようにして学んでいけば良いのか。。さらには金持ち父さんのごとく、どうやって不動産投資で一発当てて若くしてリタイヤするか。みたいなことまでが平易な英語で書いてある。

その中に「ごちゃごちゃいってねーでブログ書け」というお話があったので、休眠中のはてなブログを再開した。

要は、ブログを書くときに技術者としてパーフェクトである必要はないと。「まだ自分は技術力がないから」とか「間違ったことを書いたら恥ずかしい」とか、色々と言い訳はあるのだけども、とにかく現時点の自分に書ける内容を書いてみろと。どんなに技術が低くても、必ず誰かその記事を参考にする人がいるはずだと。そうやって自分が出来る範囲でコミュニティに貢献するんだと。そんなことが書いてあった。。気がする。

アウトプットすることに関して述べたところで印象に残ったのは次の一言(適当な訳)「誰かが失敗したことなんて、みんないちいち覚えていない。君は失敗した誰かを見て激しくブーイングしたり、わざわざ電話やメールでそいつの失敗についてごちゃごちゃ文句を言って、いかに彼がクズかってことを伝えたか?当然、そんなことしたこともないだろ。だったら何をびびってるんだ」

ブログを書かない理由の一つに時間がとれないってものもあるけど、技術的に未熟だからなかなかアウトプットする気になれないというのもある。続くかわからないけどとにかくアウトプットしてみたい。いままではgithubにコードをあげることもほとんどしてないけど、隠すほどの技術もないし、これからはどんどんやっていこう。

ということでまたRails/Rubyを使って早朝・週末プログラマ生活を再開する。

このたびRubyを選んだのは池澤あやかさんのファンだからではない。

とにかく、いままでやるぞやるぞと言いつつ1つも作ったことがないWebサービスとやらをとりあえず1つ作る。そんでもってその過程とコードをブログとgithubですべてさらけ出して裸になろう。全裸だ。

Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. You are already naked. There is no reason not to follow your heart. - Steve Jobs.