プログラミング的なSomething

プログラミング的なSomething

ITエンジニア(?)目線で生活・自転車・トレーニング話を綴ります

RSS::NotWellFormedErrorの解消

RSSのパース時に発生しました 結論からいうと、RSS::NotWellFormedErrorはURLをパースする際に適切なURIでないと発生するエラーです。 例えば、以下のように単なるURLをパースしようとするとエラーが出ます。 url = "http://somethingpg.hatenablog.com/" rs…

sinatraでRSSリーダー書いてます

小さな成果を意識して 昨日はこんな口幅ったいことを言っていたので、いままでローカルでやってたことをGithubでちゃんとIssue使ってコード書き出しました。 ブログを続けるにあたり考えたこと:小さくても成果を意識すべきではないか github/rssreader 習作…

ブログを続けるにあたり考えたこと:小さくても成果を意識すべきではないか

数日ぶりです。こんばんは。 数日ぶりの更新となります。 更新に間が空いたのは単に休暇だったからですが、その間少し思うところもあったのでブログに残しておきます。 小さくても成果を意識すべきでは ブログを続けて2ヶ月になりますが、勉強中のプログラミ…

Macのタッチパッドと一部キーが正常に動作しなかったのでPRAMリセットをした話

Macのタッチパッドと一部キーが異常な動作 タッチパッドはマルチタッチの操作をほぼ受け付けず(2本指スクロールが超低速)、command + tabでアプリケーションの切り替えをすると、tabを押していないのにカーソルがガァーーーっと右端まで選択されてしまう。…

Rubyでの変数のスコープ確認

Rubyでの変数とスコープをざっとまとめました。 # トップレベルの変数をメソッド foo = 'foo in toplevel' def display_foo puts foo #=> NameError トップレベルのローカル変数は参照できない end puts foo #=> foo in toplevelと表示される # display_foo …

Rubyにおけるメソッドの定義時の注意と動作

最初が大文字のメソッドを作る場合は注意が必要 def Hello puts “hogs” end Hello #=> エラーが帰ってきます レシーバを記述するか、引数なしの場合は括弧をつけないとメソッドが呼び出せません。 Hello() #=>hoge あまり最初の文字を大文字で指定するメリッ…

Rubyはファイルが自動でクローズされるって言われてる理由を振り返ってブロックを有難がろう

自動でクローズされるってよく言われるけど、結局はFileオブジェクトの使い方に依る。 ブロックで開けば自動でクローズされる。 File.open ‘README.md’ do |file| puts file.read end ブロックで開いてない場合、ファイルは自分で閉じる必要があります。 fil…

JALマイレージバンクのパスワード問題だけじゃない!JALのシステムでのイマイチな実体験

たまには時事ネタに乗ってみます 「JALマイレージバンク」に不正ログイン、マイル盗む 数字のみパスワードの強化策は「検討していない」 パスワードは数字六桁強制で、現在は「対策する」と明言していますが、一時は、他の文字列使用を使用しての安全性向上…

sinatraの登竜門といえばRSSリーダー作成なのでRSSについてまとめてみたよ

猫も杓子もRSSリーダー RSSリーダーって「まずはこれ!」みたいな感じなので実際に作ってみます。 まずはRSSの要素を読み込んでみましょう。 RSSライブラリで読み込むよ require 'rss' rss = RSS::Parser.parse('http://somethingpg.hatenablog.com/rss') 超…

sinatraでアプリ書くために基本処理まとめ

sinatraでコード書くために基本的な処理書いた Railsチュートリアルをボツボツ読んでましたが、Ruby自体への理解のなさに嫌気がさし舵を切り直して言語限定の学習に移行、パーフェクトRubyなんかを読み進めてますが肝心のアプリが手付かずなのでいろいろ考え…

__END__と定数DATAに関して

END以下の行は定数DATAへ DATA.each_line do |line| puts line end __END__ いろはにほへと ちりぬるを #=>いろはにほへと #=>ちりぬるを END以下のデータはDATAという定数にFileオブジェクトとして保存されます。 ENDを宣言しない限り、定数DATAは生成され…

Rubyのselfがめっちゃよくわかるサンプルコード

selfのことがめっちゃよくわかるサンプルコード class Ruler attr_accessor :length def set_default_length # length = 30 だとメソッドは呼び出されずローカル変数lengthへの代入扱い self.length = 30 end end ruler = Ruler.new ruler.set_default_lengt…

特異メソッドとその用途Singletonパターン

特異メソッドはこんな感じ message = “Hello” def message.build_greeting(target) “#{self} , #{target}” end message.build_greeting(“world”) #=> Hello,world たとえばmessage2 = “Hello"なんかにしても、 message2.build_greeting(“world”)は呼び出せま…

attr_accessorの使い方

def Duraion def initialize(since,till) @since = since @until = till end attr_accessor :since, :until end attr_accessorはgetter,setterの定義です。 duration = Duration.new(“hoge”,”hogehoge”) とすると、duration.sinceで”hoge”が呼べる。 duratio…

クロージャーとしてのブロックの扱い

ブロックがクロージャーとしての役割を持ちます def create_counter count = 1 return Proc.new do count += 1 p count end end counter = create_counter counter.call #=> 2 counter.call #=> 3 こんな感じになる。 create_counterメソッド自体は終了して…

Rubyにおいて多値を返す場合のお作法

(タイトルのようなことを)気付かず使ってたのでメモ 通常、返り値は最後の値が返されます。 def sum x,y x + y end 上記のようなメソッドであれば、x + yの結果が戻ります。 では、x,yの2値を返すだけのメソッドが欲しい場合があったとした場合、どう書け…

ローカル変数が優先される処理と、selfによる明示的なメソッド呼び出し

レシーバ省略とローカル変数 ちゃんと理解したことを記録するためにもメモ。 こんなコードがあるとします。 class Laputa def hover vibrate end def vibrate p "vibrate" end end l = Laputa.new l.hover #=> "vibrate" l.hoverは当たり前のように"vibrate"…

Rubyでメソッドの存在を調べる方法まとめ

オブジェクトに対してメソッドが存在するか 使うメソッドはObject#respond_to?です。 "string".respond_to?(:chomp) => true こんな感じ。 クラスに対してメソッドの存在を確認する Method#method_defined?を使います。 String.method_defined?(:chop) => tr…

Rubyレシピブック その②(ハッシュ)

読書メモです。 1つのキーに複数の値が対応するハッシュを作る 複数の値は配列で保存されます。 h = Hash.new{ | h, key | h[key] = [] } h["a"] << 1 h["b"] << 2 h["a"] << 2 irb(main):297:0> hash => {"a"=>[1, 2], "b"=>[2]} この方法を用いる場合、ハ…

【読書記録】インフラエンジニアの教科書

インフラエンジニアの教科書読みました インフラエンジニアの教科書作者: 佐野裕出版社/メーカー: シーアンドアール研究所発売日: 2013/10/26メディア: 単行本(ソフトカバー)この商品を含むブログ (7件) を見る 積み本を消化しております。 まえがきにある…

ブログを続けて1ヶ月経ったのでポエム書く

連続更新が大体1ヶ月続きました 1ヶ月続いたら普通の記事を書こうと思っていたので書きます。いつもはコードとか学習記録載っけてるけどたまにはポエム書いてもいいよね。 1ヶ月程度じゃまだまだウンコ 技術ブログは継続すると技術向上に繋がると言いますが…

Rubyレシピブック その①(配列)

読書記録兼コード晒し ショボいけど書かずに覚えないくらいなら俺はコードを晒す! Rubyレシピブック読んでます 構文とかその辺なんてわかってるので、とにかくメソッドを頭に叩き込んで不自由なくコードを書くレベルに達するまでを目標にしています。毎日数…

shalow copyとdeep copyに関して

shalow copyとdeep copy Rubyの変数は参照型であることに起因します。 a = ["title","content"] b = a.dup これでb[0].upcase!なんかした日には変数aも変更されます。参照型だから。 これがdeep copyです。 a = ["title","content"] b = Marshal.load(Marsha…

CodeIQに出題されている問題をやってみた その④(完結)

続き CodeIQに出題されている問題をやってみた その③ これの続き。第4問です。 combination 問題文はmapメソッドを使ってるしなんというかまとめ問題のような雰囲気でした。 combinationは、配列から引数n個を重複を許さない組み合わせを数え上げます。組み…

CodeIQに出題されている問題をやってみた その③

続き CodeIQに出題されている問題をやってみた その② chars 文字列を1字づつ配列に変換します irb(main):001:0> string = "hoge" => "hoge" irb(main):002:0> string.chars => ["h", "o", "g", "e"] each_with_object 問題文、当初魔法のようにしか見えませ…

Webエンジニアのためのデータベース技術[実践]入門

書籍を読了したのでメモ Webエンジニアのための データベース技術[実践]入門 (Software Design plus)作者: 松信嘉範出版社/メーカー: 技術評論社発売日: 2012/03/09メディア: 単行本(ソフトカバー)購入: 20人 クリック: 486回この商品を含むブログを見る W…

ProcとSymbol#to_procに関して調べた

昨日の日記で宿題にしてたto_procメソッドに関して CodeIQに出題されている問題をやってみた その② CodeIQで解答のある問題を使わせていただき、プログラムへの理解を深めております。 そこでto_procの処理につまずきました。 そもそもProcってなんだっけ Pr…

CodeIQに出題されている問題をやってみた その②

再びCodeIQ CodeIQ に出した「メソッド名を当てる空欄補充問題」の解説・解題 第2問chars_in_allに取り組みます。 split splitは言わずと知れた文字列分割のメソッドです。 問題内ではhoge.split(//)と書かれていて少し面食らいましたがhoge.split("")と同義…

CodeIQに出題されている問題をやってみた

CodeIQに出題されている過去問やって血肉にしよう CodeIQの広告を会社で眺めながらそんなことを思っていた。 もともとネットワーク畑なので、Railsのお作法以外にもRubyやら他のプログラムのことしっておかないとアカンでしょってモチベーション。 例題 メソ…

RSpecのbefore句の使い方メモ

イマイチわかってないのでbefore句のメモ before(:all)が実行されるのは最初の一回だけ。 before(:each)は各it句ごと before(:eachも:allもなし)は:eachした場合と同じでit句ごと ついでにafter句 after(:all)が実行されるのは振る舞いレベルで一回だけ。 af…

will_paginateによるページネーションの実装

Gemfileの編集 will_paginateとbootstrap-will_paginateをインストールします。 gem 'will_paginate', '3.0.3' gem 'bootstrap-will_paginate', '0.0.6' 例によってbundle installしておきます。 viewの編集 以下のように記載することで、will_paginateは、@…

FactoryGirlでたくさんのサンプルデータを作成する

FactoryGirlでひとつひとつデータを用意するのは大変 大変ですので一気に作成する場合の作例をメモります。 factory :user do sequence(:name) { |n| "Person #{n}" } sequence(:email) { |n| "person_#{n}@example.com"} ・ ・ ・ sequenceメソッドは引数に…

Webエンジニアのためのデータベース技術 実践入門を読み進めています①

年末により縮小更新ありていに言うとそういうことなのですが、もったいないので読書メモとか残します。動機モデリングとかを真面目に考える機会がなかったけど必要になりそう。まずはデータベースの基礎の基礎のキを学ぼうとの考えです。以下メモマッピング…

アセットパイプラインに関するメモ

アセットについて app/assets:アプリケーション固有のアセット lib/assets:開発チームにより作成されたアセット vender/assets:サードパーティのアセット スタイルシートやJavaScriptは1つのファイルにまとめた方が速度が出ます。 ただ、1つにまとめると…

before_filterを使用した認可の定義

特定の状態でしかアクションを許したくない場合 例えば、ユーザーが自分のアカウントにログイン場合のみに、そのユーザー情報を書き換える操作を許す。等、認可にかかわるbefore_filterメソッドの使い方をまとめます。 早速コード ごくごくシンプルに書けま…

editアクションとupdateアクションの認可に関して

editアクションとupdateアクションと認可の関連性 RESTfulなルーティングを実行している場合、レコード編集ではeditとupdateのアクションが発生します。 ブラウザでは、editの操作をテストできますので、認可の設定が活きているかの判定ができますが、update…

RSpecでのテストの書き方まとめ( & 先日作成したファクトリメソッド試行コードのテスト作成)

テストコード書いてないじゃんって気付いた 昨日作成したファクトリメソッドのテストコード書いてなかったので書きました。 順番逆ですけど大目にみてやってください。 ファクトリメソッドでインスタンス生成をクラス任せにする 早速テストコード RSpecで書…

ファクトリメソッドでインスタンス生成をクラス任せにする

連日のRails学習から一旦離れてファクトリメソッドの実装をしてみた ファクトリメソッドはインスタンス生成をクラスに任せます。ゆえに工場(ファクトリ)メソッドと呼ばれております。 クラス生成を隠蔽するので、結合が疎になってメンテナンス性が向上しま…

Railsでのサインイン・サインアウトの実装

サインインを永続化する サインインを永続化して、サインアウトしたときにセッションを削除するシステムを考えます。 cookieと認証のためのモジュールであるSessionsHelperを用います。 SessionsHelperモジュールをアプリケーションコントローラにインクルー…

RESTfulなルーティングで必要なアクションだけ指定するresourcesのonlyオプション

resourcesのonlyオプション route.rbに以下のように書けばRESTfulなルーティングが自動で割り当てられます。 resources :users でもそんなに要らないじゃん?index,new,create,show,edit,update,destroy全部は要らない場合。 resources :users, :only[:new,:…

Factory Girlを使用してデータベースにデータを読み込ませる

Factory Girl 恥ずかしながら、いままでテストに使用するデータはデータマッパーを使ったスクリプトを作成して対処していました。 Factory Girlでは簡単に登録できるんですね。RSpecを使用する際に親和性が高いみたいです。 何はともあれGemfileを書いてbund…

RailsにおけるValidationの処理をまとめてみた

Validationのお作法をまとめてみました バリデーションの基本的なパターンは存在性、長さ、フォーマット、一意性の確認となります。 整理のため、これら4つの処理をRailsで行う際のお作法をまとめてみます。テストコードも最後に付記しています。 存在性の検…

Railsのテスト・開発・本番環境に関する整理

Railsの3つの環境 Railsにはテスト環境 (test)、開発環境 (development)、そして本番環境 (production) の3つの環境がデフォルトで装備されています。 Railsのコンソールrails consoleではデフォルトで開発環境が使用されます。コンソールで環境を確認すると…

matchを使ったroute.rbの記載

config/routes.rbの編集 ルーティングの記述は、Railsの流儀に従うと以下のように書き換える必要がある。 get ‘static_pages/help' 例えば、上記のようなルートを書いていると、リンク作成時に都度

パーシャルを用いてコードの重複をなくす

パーシャルの使い方を整理します。 headrerとかfooterとかタグ情報を書くのがとにかく嫌い。重複なんて大嫌いなのでパーシャルを使って重複をなくします。「パーシャル」って言葉でひっかけることができなくて、いままで恥ずかしながら知らない概念でした。 …

個人的メモ「vimでPasteするときに自動インデントさせない」コマンド

vim

コードをコピーしてくる際にvimによる自動インデントが猛烈に邪魔なので回避方法。どうせすぐ忘れちゃうのでメモ。 :set paste その後、普通にPaste。 【参考】http://qiita.com/quwa/items/019250dbca167985fe32

RSpecのlet関数を使ってコードの重複を排除する

Ruby on Rails チュートリアル、3章にしてテスト駆動の話が出てくるので初学者が恐れおののいている(だって罵詈雑言が飛んで来るじゃないですか)テストの書き方を学べてとても良いと思います。 というわけで、RSpecの重複を排除するlet関数を書いてみます…

has_manyとbelong_toの関連付け

例によってRuby on Rails チュートリアルです。2章のモデルの関連付けをメモします。 関連付け苦手なので出会ったそばから書き留めておきます。 class User < ActiveRecord::Base attr_accessible :email, :name has_many :microposts end class Micropost <…

Gemfileに記載されているrakeを使用するためのコマンド

例によってRuby on Rails チュートリアル読んでます。 http://railstutorial.jp/ Gemfileに記載されたrakeを使う場面があったのでメモ bundle exec rake db:migrate rakeを実行する前に「bundle exec」を接頭につけます。 その他 bundle exec rake -T db rak…

Ruby on Rails チュートリアルのGitの解説がわかりやすかったので個人的まとめ

普段Git等さわらないので操作をすぐに忘れてしまいがちなので個人的にまとめ。 ブランチの作成 git checkout -b <branch-name> -bオプションを入れれば作成したブランチにcheckoutした状態で作成が済みます。 拡張子の変更 git mv README.rdoc README.md コミット git com</branch-name>…