達人出版会×マイナビ 年末・年始電子書籍セール - 達人出版会 が行われていたので
ちょうどいいと思い 30日でできる!OS自作入門を電子書籍版で購入した。
初版がやや古く、手元の環境がwindows10の為どこまで書籍に従い動くかも含めておべんきょーを。
以下電子書籍版で動かし始め-chapter1,2までのメモ
○付録CD-ROMについて
電子書籍版は付録CD-ROMがついてない。
どうするかというとhttps://book.mynavi.jp/support/pc/1984/ 書籍サポートサイトで
isoが配布されているのでこれをマウントして利用した。
作者のサイト http://hrb.osask.jp/ が閲覧不能状態だが
http://hrb.osask.jp/tolset_h.zip をダウンロードしてきてCD-ROM内部のデータを上書き。
○chapter 01
バイナリの写経は少し面食らったがフロッピーディスクのサイズに収まるOSのひな型づくり
そしてコンピュータの動作する仕組みについてとアセンブラの導入としてバイナリ直書きするアセンブラプログラムの作り方を手を動かしながら
○chapter 02
chapter 01の内容を発展させてアセンブラの命令セット群の解説とレジスタについて
バイナリ直書きから意味を持たせたアセンブラプログラムの作成そして今後の開発の為にmakefileについての解説が少し。
1点だけ 本文 P45 に記載されているMakefile(及び付録CD-ROM内のMakefile)では
動作しないところがあったため修正した。
----
[書籍内のMakefile (抜粋)]
run :
../z_tools/make.exe img
copy helloos.img ..¥z_tools¥qemu¥fdimage0.bin
../z_tools/make.exe -C ../z_tools/qemu
[修正後の記述]
run :
../z_tools/make.exe img
cp helloos.img ../z_tools/qemu/fdimage0.bin
../z_tools/make.exe -C ../z_tools/qemu
---
とにかくchapter01の段階でも書いたものが動いて動作を確認できるので
おもしろく進めて行けてます。
2016年1月6日水曜日
2015年12月19日土曜日
現代的なC言語での開発環境を構築する。(2) githubを利用できる環境にする。
現代的なC言語での開発環境を構築する。(1) の続き
ローカルでプログラムを書く環境は整ったのでgithubを使えるようにする。
[前提]
Virtual Box上のXubuntu 14.04でEclipse(CDT)を動かしている。
○githubとの連携
・git,githubのセットアップ
$ sudo apt-get install git
$ git config --global user.name "username" #githubのユーザーネーム
$ git config --global user.email mail@address.com #githubに登録しているアドレス
$ ssh-keygen -t rsa -b 4096 -C "mail@address.com"
作成した秘密鍵(~/.ssh/id_rsa.pub)をgithubのsetting→SSH Keys→Add RSA Keyから登録
$ ssh -T git@github.com
接続確認
・Eclipse用gitプラグイン Egit のセットアップ
help→Install New Softwareを選択
http://download.eclipse.org/egit/updates/ から
Eclipse Git チームプロバイダーをインストール。
ウインドウ→設定→チーム→gitから適宜設定を行う。
・接続テスト
適当なプロジェクトをcloneしてみる。
eclipse の ウインドウ→パースペクティブ→パースペクティブを開く→その他から
gitを選択。gitリポジトリーの複製を選び、URIに対象のリポジトリのSSH URIを入力。
プロトコルにsshを選択し「次へ」。
cloneする場所等を設定しリポジトリが無事cloneできれば設定完了
ローカルでプログラムを書く環境は整ったのでgithubを使えるようにする。
[前提]
Virtual Box上のXubuntu 14.04でEclipse(CDT)を動かしている。
○githubとの連携
・git,githubのセットアップ
$ sudo apt-get install git
$ git config --global user.name "username" #githubのユーザーネーム
$ git config --global user.email mail@address.com #githubに登録しているアドレス
$ ssh-keygen -t rsa -b 4096 -C "mail@address.com"
作成した秘密鍵(~/.ssh/id_rsa.pub)をgithubのsetting→SSH Keys→Add RSA Keyから登録
$ ssh -T git@github.com
接続確認
・Eclipse用gitプラグイン Egit のセットアップ
help→Install New Softwareを選択
http://download.eclipse.org/egit/updates/ から
Eclipse Git チームプロバイダーをインストール。
ウインドウ→設定→チーム→gitから適宜設定を行う。
・接続テスト
適当なプロジェクトをcloneしてみる。
eclipse の ウインドウ→パースペクティブ→パースペクティブを開く→その他から
gitを選択。gitリポジトリーの複製を選び、URIに対象のリポジトリのSSH URIを入力。
プロトコルにsshを選択し「次へ」。
cloneする場所等を設定しリポジトリが無事cloneできれば設定完了
現代的なC言語での開発環境を構築する。(1)
モダンC言語プログラミング を読みすすめる上で提示されている開発環境について
2015年12月現在の状況にあうようにセットアップしていく。
[前提]
windows 10 (64ビット) メモリ8GBのデスクトップPCに
Linux 仮想環境を構築し、その中でEclipseを動かす。
[手順]
1. Virtual Box のインストール
https://www.virtualbox.org/ から最新のVirtualBox(現時点では5.0.12)
をインストールする。
2.XUbuntu 14.04をVirtualBoxへインストール
書籍ではxbuntu12.04 LTSが推奨されているが14.04LTSがリリースされているため
14.04をインストールする。
http://ubuntutym2.u-toyama.ac.jp/xubuntu/14.04/release/
から xubuntu-14.04-desktop-amd64.iso をダウンロード
VirtualBoxを起動し、新規に仮想マシンを作成する。
(HDD40GB メモリ割り当て2GB)
3.Eclipseのインストール
Xbuntu起動後
Eclipseのサイト ( http://www.ecripse.org )から
Eclipse IDE for C/C++Developersをダウンロードし、適当なフォルダに展開する。
以上で一通りセットアップ完了。
2015年12月現在の状況にあうようにセットアップしていく。
[前提]
windows 10 (64ビット) メモリ8GBのデスクトップPCに
Linux 仮想環境を構築し、その中でEclipseを動かす。
[手順]
1. Virtual Box のインストール
https://www.virtualbox.org/ から最新のVirtualBox(現時点では5.0.12)
をインストールする。
2.XUbuntu 14.04をVirtualBoxへインストール
書籍ではxbuntu12.04 LTSが推奨されているが14.04LTSがリリースされているため
14.04をインストールする。
http://ubuntutym2.u-toyama.ac.jp/xubuntu/14.04/release/
から xubuntu-14.04-desktop-amd64.iso をダウンロード
VirtualBoxを起動し、新規に仮想マシンを作成する。
(HDD40GB メモリ割り当て2GB)
3.Eclipseのインストール
Xbuntu起動後
sudo apt-get install openjdk-7-jdkでJDKをインストール
Eclipseのサイト ( http://www.ecripse.org )から
Eclipse IDE for C/C++Developersをダウンロードし、適当なフォルダに展開する。
以上で一通りセットアップ完了。
2014年3月6日木曜日
組込みAndroidボードでシリアル通信やりたい時にどうするか
ArdiunoだったりBeagleBoardだったり組込みAndroidボード側のシリアルポートから何らかの通信を行う時の方法メモ。
ボード側の端子がUSBの場合の方法はすぐにぐぐれば情報に行き着くので割愛
シリアルポート制御をJavaからやる方法について。
○android-serialport-apiを使う。
NDKが必須になるが
[android-serialport-api]
https://code.google.com/p/android-serialport-api/
シリアル通信のサンプルもついてるソースコードは
svn checkout http://android-serialport-api.googlecode.com/svn/trunk/ android-serialport-api
で取得する。
jniのソースをプロジェクトに組み込んで
サンプルを参考にAPIを呼ぶだけで簡単にシリアル通信をAndroidアプリから実現できて便利。
ボード側の端子がUSBの場合の方法はすぐにぐぐれば情報に行き着くので割愛
シリアルポート制御をJavaからやる方法について。
○android-serialport-apiを使う。
NDKが必須になるが
[android-serialport-api]
https://code.google.com/p/android-serialport-api/
シリアル通信のサンプルもついてるソースコードは
svn checkout http://android-serialport-api.googlecode.com/svn/trunk/ android-serialport-api
で取得する。
jniのソースをプロジェクトに組み込んで
サンプルを参考にAPIを呼ぶだけで簡単にシリアル通信をAndroidアプリから実現できて便利。
2013年12月20日金曜日
Android 4.2.2 用タブレット向アプリの開発環境をwindows上で構築する。
業務上Androidアプリ開発の必要性がでてきそうになったので前準備をしたい。
ちょうど持ち物にNexus7があるのでAndroidアプリ開発環境を構築してみる。
[持ち物]
Nexus7 (Android 4.4.2) (4.2.2用なのは別デバイスで動かす目的があるため)
Windows 7 なデスクトップPC
[手順]
1.JDKのインストール
JDK(Java Development Kit)を
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
からダウンロード(手元ではwindows x64)し、インストールする。
その後環境変数に JAVA_HOME = C:\Program Files\Java\jdk1.7.0_45;を追加
(下図参照,パスはインストール先によって適宜変更)
2.Android SDKのインストール
Android SDKのサイト (http://developer.android.com/sdk/index.html)から
Android SDK(adt-bundle-windows-x86_64-2013xxxx.zip)をダウンロードし
任意のフォルダに展開する。
3.Eclipseの日本語化
Eclipseの表記を日本語化するため
http://mergedoc.sourceforge.jp/ で
Pleiadesプラグインの最新版をダウンロードする。
ダウンロードしたzipファイルを展開し、中身を2.で展開したAndroid SDKのフォルダ
のeclipseフォルダの下にコピーする。
その後eclipse.iniの最後尾に
無事、起動。
ちょうど持ち物にNexus7があるのでAndroidアプリ開発環境を構築してみる。
[持ち物]
Nexus7 (Android 4.4.2) (4.2.2用なのは別デバイスで動かす目的があるため)
Windows 7 なデスクトップPC
[手順]
1.JDKのインストール
JDK(Java Development Kit)を
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
からダウンロード(手元ではwindows x64)し、インストールする。
その後環境変数に JAVA_HOME = C:\Program Files\Java\jdk1.7.0_45;を追加
(下図参照,パスはインストール先によって適宜変更)
2.Android SDKのインストール
Android SDKのサイト (http://developer.android.com/sdk/index.html)から
Android SDK(adt-bundle-windows-x86_64-2013xxxx.zip)をダウンロードし
任意のフォルダに展開する。
3.Eclipseの日本語化
Eclipseの表記を日本語化するため
http://mergedoc.sourceforge.jp/ で
Pleiadesプラグインの最新版をダウンロードする。
ダウンロードしたzipファイルを展開し、中身を2.で展開したAndroid SDKのフォルダ
のeclipseフォルダの下にコピーする。
その後eclipse.iniの最後尾に
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=default.splash
を追加してファイルを保存して閉じる。
その後eclipse.exeを起動し、ワークスペースを指定する。
無事、起動。
2012年4月26日木曜日
Ruby on Rails + RSpec 画像アップロードのテスト方法
画像をformからアップロードする時のバリデーションテストをどうするか?
という話をメモしておきます。
簡易blog(食べたもの記録)アプリの記事本体部分を想定。
Modelの名前はDiningとします。
app_root/db/migrate/[date]_dinings.rbより抜粋すると
という話をメモしておきます。
[環境]
CentOS6.2
Rails 3.2.2
Ruby 1.9.3-p125
CentOS6.2
Rails 3.2.2
Ruby 1.9.3-p125
(1)テスト対象のModel
前回に引き続き簡易blog(食べたもの記録)アプリの記事本体部分を想定。
Modelの名前はDiningとします。
app_root/db/migrate/[date]_dinings.rbより抜粋すると
class CreateDinings < ActiveRecord::Migration def change create_table :dinings do |t| t.date :date #日付 t.string :time #「朝」「昼」「夜」が入る t.string :menu #「食べたもの」 t.integer :price #「お値段」 t.string :shop #「店」 t.string :place #「店の場所」 t.integer :evaluetion #1~5の5段階評価 t.string :impression #感想 t.string :ctype # 写真が指定されている時写真のcontent_type t.binary :photo #写真 t.timestamps end end end写真データを直接DBに格納するモデルです。 ここでは ・画像ファイルのcontent-typeが画像で無い時バリデーションエラーになること をテストしていきます。
(2)テスト
app_root/spec/model/dining_spec.rbより抜粋describe "写真(photo)" do it "content-typeが画像の時バリデーションエラーが発生しないこと" do @dining.data = Rack::Test::UploadedFile.new(Rails.root.join("test/fixtures/test.jpg"), "image/jpeg") @dining.should be_valid end it "content-typeが画像以外の時バリデーションエラーが発生すること" do @dining.data = Rack::Test::UploadedFile.new(Rails.root.join("test/fixtures/test.jpg"), "image/text") @dining.should be_valid end end
Rack::Test::UploadedFile.new()が仮想アップロードファイルをテストするためのメソッドで 第1引数にテスト画像,第2引数にcontent-typeを設定します。
(3)バリデーションの実装
テストがでけたので。 app_root/app/model/dining.rbにバリデーションを実装していきます。#coding:utf-8 class Dining < ActiveRecord::Base #中略 validate :file_invalid? #写真のバリデート def data=(data) self.ctype = data.content_type self.photo = data.read end def file_invalid? if !self.photo.nil? then #写真が指定されてる時 ps = ['image/jpeg', 'image/gif', 'image/png'] errors.add(:photo, 'は画像ファイルではありません') if !ps.include?(self.ctype) end end endテスト/実装コードにもある通りフォーム側で画像をアップロードする時に、 直接model上のカラムである:imageではなく、:dataという仮のパラメータにセットして アップロード時に:ctypeと:imageを:dataから抽出してセットしている点が注意が必要。 form側では
という記述でアップロードフォームを実現しています。<%= f.label :data, "写真" %> <%= f.file_field :data %>
2012年4月13日金曜日
Rails3.2 + RSpecで楽しいTDD(ModelのValidationテスト)
というわけでModelのバリデーション機能をテストしていきます。
[環境]
CentOS6.2
Rails 3.2.2
Ruby 1.9.3-p125
(1)テスト対象のModel
簡易blog(食べたもの記録)アプリの記事本体部分を想定。
Modelの名前はDiningとします。
app_root/db/migrate/[date]_dinings.rbより抜粋すると
1.必須パラメータが空の時バリデーションではじかれること
2.必須で無いパラメータが空の時バリデーションではじかれないこと
3.長さの最大長があるものに関しては境界値動作が正しいこと
を確認するためのコードを書いていきます。
(2)テストデータの準備
app_root/spec/fixtures/dinings.ymlに以下の内容のテストデータを準備します。
(3)テストコードの実装
app_root/spec/models/dinings_spec.rb
にテストコードをバリバリ書いていきます。
というわけでテストを通すコードを書いていきます。
app_root/app/model/dining.rb
というようなサイクルで
テストコード→実装→テスト通った嬉しいを繰り返していくと
段々緑色が見える度に脳内麻薬が出てコード書くのにboostがかかるのでおすすめです。
あと赤色が緑にならないと気持ち悪くて寝られなくなる。
次回は写真アップロードテストのやり方あたりをメモしておきます。
[環境]
CentOS6.2
Rails 3.2.2
Ruby 1.9.3-p125
(1)テスト対象のModel
簡易blog(食べたもの記録)アプリの記事本体部分を想定。
Modelの名前はDiningとします。
app_root/db/migrate/[date]_dinings.rbより抜粋すると
class CreateDinings < ActiveRecord::Migration def change create_table :dinings do |t| t.date :date #日付 t.string :time #「朝」「昼」「夜」が入る t.string :menu #「食べたもの」 t.integer :price #「お値段」 t.string :shop #「店」 t.string :place #「店の場所」 t.integer :evaluetion #1~5の5段階評価 t.string :impression #感想 t.string :ctype # 写真が指定されている時写真のcontent_type t.binary :photo #写真 t.timestamps end end end写真データを直接DBに格納する荒っぽいモデルですが利用者が1人ということでご勘弁を。 このモデルに対して
1.必須パラメータが空の時バリデーションではじかれること
2.必須で無いパラメータが空の時バリデーションではじかれないこと
3.長さの最大長があるものに関しては境界値動作が正しいこと
を確認するためのコードを書いていきます。
(2)テストデータの準備
app_root/spec/fixtures/dinings.ymlに以下の内容のテストデータを準備します。
#coding:utf-8 valid: date: 2012-03-22 time: "朝" menu: "おうどん" price: 290 shop : "おにやんま" place: "五反田" evaluetion: 4 impression: "おいしい" ctype : "image/jpeg" photo:ここではバリデーションに引っかからないようなデータを用意しておきます。
(3)テストコードの実装
app_root/spec/models/dinings_spec.rb
にテストコードをバリバリ書いていきます。
#coding:utf-8 require 'spec_helper' describe "Dining バリデーションテスト" do fixtures :dinings #テストデータを設定 before(:each) do #全テスト実行前の共通動作 @dining = dinings(:valid) #dinings.ymlの (valid:)で指定されているデータを設定 end it "dateが空の時:エラーが発生すること" do @dining.date = "" @dining.should_not be_valid #be_validで無いことを確認する endさてこれでテストを実行すると(sporkはたちあげておいて下さい)
$ rspec --drb --drb spec/models/dining_spec.rbバリデーションコード書いてないので失敗(日付が空だけどbe_valid)します。 4.テストを通すコードの実装
というわけでテストを通すコードを書いていきます。
app_root/app/model/dining.rb
#conding:utf-8 class Dining < ActiveRecord::Base validates :date, :presence => true #dateは空を許さない endこれでテストを再度実行すると無事テストが成功。
というようなサイクルで
テストコード→実装→テスト通った嬉しいを繰り返していくと
段々緑色が見える度に脳内麻薬が出てコード書くのにboostがかかるのでおすすめです。
あと赤色が緑にならないと気持ち悪くて寝られなくなる。
次回は写真アップロードテストのやり方あたりをメモしておきます。
2012年4月12日木曜日
Rails3.2 + RSpecで楽しいTDD(導入編)
さて、標題にはTDDと書いてますが実際にはコード書いてからテスト書いてたりしてます。
手元でちまちま書いてるアプリもさすがにテストも無しではいかんだろうということで
まずは手元にあるコードのカバレッジが100%となるテストを書き、
その後次に何か乗っける時からはテストから書いていきたいと思います。
というわけで今回はテスト環境の導入編から。
この記事で前提とする環境は
・CentOS6
・Ruby on Rails 3.2.2
・Ruby 1.9.3 p-125
・MySQL
となっています。
(1)テストに必要なGemの導入
app_root/Gemfileに以下の記述を追加
'simplecov'はカバレッジ計測の為のGem(rcovはRuby 1.9系列では使用できない為)
'simplecov-rcov'はカバレッジレポートをrcovと同等の形で出力するためのgemで
Jenkins先生の出番がある人以外はいらないと思います。
sporkはTwiwt:Blog / jugyo : spork でサクサク RSpec on Rails3
こちらを参照。テストを高速に実行しまくる為に導入します。そして
app_root/spec/以下に自動生成されたテストケースのひな形ができると思います。
(2)テストの準備
1.sporkを起動する
テスト実行用のサーバーことsporkを起動します。
最初の1回のみ以下の設定が必要です。
2.カバレッジ計測処理の追加
app_root/spec/spec_helper.rbの先頭に以下の記述を追加
(3)テスト実行
カバレッジは app_root/coverage/index.html
を見るとわかりやすく表示されていると思います。
次はmodelのバリデーションテストの書き方をメモしておこうと思います。
手元でちまちま書いてるアプリもさすがにテストも無しではいかんだろうということで
まずは手元にあるコードのカバレッジが100%となるテストを書き、
その後次に何か乗っける時からはテストから書いていきたいと思います。
というわけで今回はテスト環境の導入編から。
この記事で前提とする環境は
・CentOS6
・Ruby on Rails 3.2.2
・Ruby 1.9.3 p-125
・MySQL
となっています。
(1)テストに必要なGemの導入
app_root/Gemfileに以下の記述を追加
gem 'rspec-rails' gem 'simplecov', :require => false #gem 'simplecov-rcov', :require => false gem 'spork''rspec-rails'は文字通りRailsでRSpecテストを行うためのGem
'simplecov'はカバレッジ計測の為のGem(rcovはRuby 1.9系列では使用できない為)
'simplecov-rcov'はカバレッジレポートをrcovと同等の形で出力するためのgemで
Jenkins先生の出番がある人以外はいらないと思います。
sporkはTwiwt:Blog / jugyo : spork でサクサク RSpec on Rails3
こちらを参照。テストを高速に実行しまくる為に導入します。そして
$ bundle installここまでが済んだ状態で既存のものに対するテストのひな形を作る場合は
$ rails g rspec :controller hoge hage ...てな感じで実行してみると(hoge,hageは自分が作ったコントローラ名)
app_root/spec/以下に自動生成されたテストケースのひな形ができると思います。
(2)テストの準備
1.sporkを起動する
テスト実行用のサーバーことsporkを起動します。
最初の1回のみ以下の設定が必要です。
$ spork --bootstrap終われば
$ sporkで起動。
2.カバレッジ計測処理の追加
app_root/spec/spec_helper.rbの先頭に以下の記述を追加
require 'rubygems' require 'spork' Spork.prefork do end Spork.each_run do end require 'simplecov' require 'simplecov-rcov' SimpleCov.start 'rails'
(3)テスト実行
$ rspec --drb spec/model/user_spec.rbとこんな感じで実行できます。
$ rspec --drb spec/*とかでまとめて実行も。
カバレッジは app_root/coverage/index.html
を見るとわかりやすく表示されていると思います。
次はmodelのバリデーションテストの書き方をメモしておこうと思います。
2012年4月4日水曜日
Ruby on Rails3.2でログイン機能を実装する。
というわけで。
簡易なブログアプリを作っていて、記事の投稿・編集・削除はログインした管理者のみで行いたいので
Rails3.1で追加された認証関連機能を使ってログイン機能をつけました。
参考にしたエントリー
ASCIIcasts - “Episode 270 - Rails 3.1の認証機能"
以下作業メモ
[環境]
CentOS6.2
Ruby 1.9.3(p125)
Ruby on Rails 3.2.2
1. Gemfileにbcryptrubyを追加
Gemfile内のgem 'bcrypt-ruby', '~>3.0.0~のコメントアウトを外した上で
bundle install
2.ユーザmodelの作成
※password_digestのカラム名は変更してはいけない
/app/model/users.rbにhas_secure_passwordを追加
あとは同様にログイン中のみ新規作成等を行えるようにしていけば目的は達成できた。
しかし簡素に書けて便利ですね。
簡易なブログアプリを作っていて、記事の投稿・編集・削除はログインした管理者のみで行いたいので
Rails3.1で追加された認証関連機能を使ってログイン機能をつけました。
参考にしたエントリー
ASCIIcasts - “Episode 270 - Rails 3.1の認証機能"
以下作業メモ
[環境]
CentOS6.2
Ruby 1.9.3(p125)
Ruby on Rails 3.2.2
1. Gemfileにbcryptrubyを追加
Gemfile内のgem 'bcrypt-ruby', '~>3.0.0~のコメントアウトを外した上で
bundle install
2.ユーザmodelの作成
$ rails g model user name:string password_digest:string $ rake db:migrate
※password_digestのカラム名は変更してはいけない
/app/model/users.rbにhas_secure_passwordを追加
class User < ActiveRecord::Base has_secure_password end3.管理アカウントの追加 とりあえずユーザアカウントは管理用アカウント1つでいいので、新規登録画面はつけずに直接DBに追加
$rails c User.create!(:name => "admin", :password => "hoge", :password_confirmation => "hoge")本来はpasswordなんてカラム無いのでエラーになるはずがこれで登録できている (DB上にはハッシュ化された値で登録されている) 4.ログイン機能実装 ・まずはコントローラの生成
$rails g controller sessions・ログインフォーム(app/view/sessions/new.html.erb)
・ルートの追加 config/routes.rbに以下を追加Log in
<%= form_tag sessions_path do %><%= label_tag :name, 'login name' %> <%= text_field_tag :name, params[:name] %><%= label_tag :pass, 'password' %> <%= password_field_tag :pass , params[:pass]%><%= submit_tag "ログイン" %><% end %>
resources :sessions do end・コントローラ処理実装 app/controller/session_contoroller.rb ログインに成功したらトップヘリダイレクト 失敗したら同じフォームを再描画
def index render "new" end def create user = User.find_by_name params[:name] if user && user.authenticate(params[:pass]) session[:user_id] = user.id redirect_to root_path else flash.now.alert = "Invalid" render "new" end end def destroy session[:user_id] = nil redirect_to root_path end5.ビュー用ヘルパーメソッドの定義 ビューからログインユーザを参照できるようにする app/controller/application_contoroller.rb
class ApplicationController < ActionController::Base app/controller/application_contoroller.rb protect_from_forgery def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end helper_method :current_user end6.ビューにログイン機能へのパスを追加
<% if current_user == nil %> <%= link_to "ログイン", sessions_path %> <% else %> <%= link_to 'ログアウト', session_path(current_user.id), :confirm => 'ログアウトしますか?', :method => :delete %> <% end %>こんな感じでログインされてなければログイン表示・ログインしていればログアウト表示に切り替える。
あとは同様にログイン中のみ新規作成等を行えるようにしていけば目的は達成できた。
しかし簡素に書けて便利ですね。
2012年4月3日火曜日
CentOS6.2 + Rails 3.2.2 + Passenger+nginx環境構築メモ
とりあえずモダンな環境を試してみたいミーハー心で環境を構築
Rails 3.2.2をインストール済みの環境にpassenger+nginx環境を構築する際の
作業内容メモ
[環境]
CentOS6.2
rubyは
1. Passengerをインストール
2.nginxのインストール
標準では/opt/nginx/に入る。
3.nginxの設定
/opt/nginx/conf/nginx.confに以下を追加
手元で作っているアプリがnginx起動後に403やらなんやらで起動できなくハマりました。
4.nginx起動スクリプトの設定
/etc/init.d/にnginxを作成し
RedHatNginxInitScriptの中身を貼り付ける
※
5.起動確認
httpdを停止してから
環境も表示されてます。
微妙にハマったけれども
お試しで作ってる簡易ブログアプリが無事動作。
Rails 3.2.2をインストール済みの環境にpassenger+nginx環境を構築する際の
作業内容メモ
[環境]
CentOS6.2
rubyは
1. Passengerをインストール
$ gem install passenger
2.nginxのインストール
$ rvmsudo passenger-install-nginx-module
標準では/opt/nginx/に入る。
3.nginxの設定
/opt/nginx/conf/nginx.confに以下を追加
user = hoge; #適宜変更 server { listen 80; server_name localhost; root /opt/my_app/public; #追加 passenger_enabled on; #追加 rails_env development; #追加 charset utf-8; #追加 ...最初rails_envがproductionモードに標準でなっていることに気づかず、
手元で作っているアプリがnginx起動後に403やらなんやらで起動できなくハマりました。
4.nginx起動スクリプトの設定
/etc/init.d/にnginxを作成し
RedHatNginxInitScriptの中身を貼り付ける
※
nginx="/usr/sbin/nginx" NGINX_CONF_FILE="/etc/nginx/nginx.conf"はそれぞれ
nginx="/opt/nginx/sbin/nginx" NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"に変更
5.起動確認
httpdを停止してから
nginx="/usr/sbin/nginx" /opt/nginx/sbin/nginx -shttp://localhost/にアクセスするとrailsの初期ページが無事表示。
環境も表示されてます。
微妙にハマったけれども
お試しで作ってる簡易ブログアプリが無事動作。
2012年3月26日月曜日
Peercastハッカソンで一発芸を披露してきました
というわけで。
普段からどっぷりつかっているpeercastでハッカソンが開催される
ということで一発芸を披露してきました。
レギュレーションは3/24(金)21:00-3/26(日)18:00までに
なんか作るというもの。
せっかくRails勉強したのでなんかやってみようかと思いましたが
2.5日で完成させられる気がしなかったので温存してたアイデアである
普段から愛してやまないマナカナでゲームを作ってみました。
[ゲーム]
http://telegnosis.sakura.ne.jp/manakana/
(怒られたら消します)
[発表用メモ]
http://telegnosis.sakura.ne.jp/manakana/ref/img0.html
・実装したもの
○コンボシステム。3コンボから段々と画像が小さくなり5コンボからはランダムで
マナボタンとカナボタンが入れ替わります。
○ハイスコア。PHPでテキストに吐き出してるだけですが世界記録がみられます。
○BGM機能。HTML5のaudioタグ使ってみました。
・実装してないもの
○ランキング機能。設置環境のDBの関係で。
・作ってて初めて知ったこと
○HTML5の<audio>タグの音再生はスマートフォンのマナーモードとかお構いなし。
これautoloadだったら迷惑だなぁ。
○発表会
スライドによる普通のLTっぽいレベルの高い発表から
ひたすらウインドウが動くアプリのデモまで
カオス極める内容で腹筋が鍛えられるほど笑いました。
カオスの片鱗は こちら から。
最近は便利なサイトが多くて助かり申す。
○まとめ
・一発芸は絵が大事
・プリキュア勢v.s.将棋勢という新たなアングルが発生したお祭り。
主催のぷろぐれさん楽しいイベントありがとうございました。
2012年3月20日火曜日
Ruby on Rails3 アプリケーションプログラミング(山田祥寛)学習日記(5)
間が開いたものの続き。
第6章コントローラ開発から。
リクエスト処理では基本的なアップロードフォームとアップロードされたバイナリデータをDBに格納するケース。
レスポンス操作、状態管理(クッキー・セッション管理)、フィルタ、
全体共通な挙動を定義するためのApplicationコントローラについて、
ひと通りコードを叩いて動きを確認。
残りがルーティングとテストそしてjavascript(Ajax連携)なんでこれが終わったらなんか
お試し的なものを書いてみよう。
そして環境をUbuntuからCentOSにしよう(謎
第6章コントローラ開発から。
リクエスト処理では基本的なアップロードフォームとアップロードされたバイナリデータをDBに格納するケース。
レスポンス操作、状態管理(クッキー・セッション管理)、フィルタ、
全体共通な挙動を定義するためのApplicationコントローラについて、
ひと通りコードを叩いて動きを確認。
残りがルーティングとテストそしてjavascript(Ajax連携)なんでこれが終わったらなんか
お試し的なものを書いてみよう。
そして環境をUbuntuからCentOSにしよう(謎
2012年3月14日水曜日
Ruby on Rails3 アプリケーションプログラミング(山田祥寛)学習日記(4)
続き。
第5章モデル開発
ここではデータベースアクセスに関するいろいろなこと。
特に5.4.2 attr_protected/attr_accessibleメソッドは
github の mass assignment 脆弱性が突かれた件
にもあるようについ最近話題になったRailsアプリケーションの脆弱性になりやすいとこだそうなので実際コードをかきながら確認。
他にトランザクション・オプティミスティック同時実行制御について
ふむふむとコードを書きながら読み込む。
とりあえずデータのCRUDに関してはできるようになったはず。
次回は6章コントローラ開発から。
第5章モデル開発
ここではデータベースアクセスに関するいろいろなこと。
特に5.4.2 attr_protected/attr_accessibleメソッドは
github の mass assignment 脆弱性が突かれた件
にもあるようについ最近話題になったRailsアプリケーションの脆弱性になりやすいとこだそうなので実際コードをかきながら確認。
他にトランザクション・オプティミスティック同時実行制御について
ふむふむとコードを書きながら読み込む。
とりあえずデータのCRUDに関してはできるようになったはず。
次回は6章コントローラ開発から。
2012年3月12日月曜日
Ruby on Rails3 アプリケーションプログラミング(山田祥寛)学習日記(3)
3章Scaffolding機能によるRails開発の基礎
4章ビュー開発
基本的に機能の説明なので流してよみつつ気になるものについては実際に書いてみて確認。
メモ
・部分テンプレートの命名規則は 「_名前.html.erb」
・P91 rake db:drop:allは rake db:dropで良さそう
・データベースの初期化は rake db:reset
・特定のモデルを更新する為にはform_forのが手っ取り早い。
全く無関係ながらvim の NERD-TreeプラグインとRails.vimの連携が非常に便利でした。
4章ビュー開発
基本的に機能の説明なので流してよみつつ気になるものについては実際に書いてみて確認。
メモ
・部分テンプレートの命名規則は 「_名前.html.erb」
・P91 rake db:drop:allは rake db:dropで良さそう
・データベースの初期化は rake db:reset
・特定のモデルを更新する為にはform_forのが手っ取り早い。
全く無関係ながらvim の NERD-TreeプラグインとRails.vimの連携が非常に便利でした。
2012年3月11日日曜日
Ruby on Rails3 アプリケーションプログラミング(山田祥寛)学習日記(2)
2章Ruby on Railsの基本から
本書の記述と異なっていた点
P49 2.4.5 フィクスチャによるテストデータの純美
本文
rake db:fixtures:load FIXTURES=books.yml
books.ymlの.ymlまでは不要らしい
rake db:fixtures:load FIXTURES=books
で解決。
その他のメモ
sqlite3がdbconsoleでエラーを吐く。
エラーメッセージを検索する限り sudo ldconfigで解決するはずがまったく解決しない。ぐぬぬ。
対処どうすればいいんだろう。
本書の記述と異なっていた点
P49 2.4.5 フィクスチャによるテストデータの純美
本文
rake db:fixtures:load FIXTURES=books.yml
books.ymlの.ymlまでは不要らしい
rake db:fixtures:load FIXTURES=books
で解決。
その他のメモ
sqlite3がdbconsoleでエラーを吐く。
hoge@ubuntu:~/work/railbook$ rails dbconsole SQLite header and source version mismatch 2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2 2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204
エラーメッセージを検索する限り sudo ldconfigで解決するはずがまったく解決しない。ぐぬぬ。
対処どうすればいいんだろう。
2012年3月10日土曜日
Ruby on Rails3 アプリケーションプログラミング(山田祥寛)学習日記(1)
というわけでrails事始めとしてRuby on Rail3 アプリケーションプログラミング(著:山田祥寛)を上から順番に追っていく
お勉強日記。
[環境]
(作業側)
Ubuntu11.10
ruby1.9.3
rails 3.2.2
ほんとうに最初からなんでのんびり。
[1]インストール
いろいろなところで書かれているので省略
[2]アプリケーションの作成
アプリケーション直下のGemfileの
意外にハマってしまったので今日はここまで。
次回はコントローラってなんぞ?ぐらいから。
お勉強日記。
[環境]
(作業側)
Ubuntu11.10
ruby1.9.3
rails 3.2.2
ほんとうに最初からなんでのんびり。
[1]インストール
いろいろなところで書かれているので省略
[2]アプリケーションの作成
rails new testApp[3]動かしてみる
rails s /home/ゆーざ/.rvm/gems/ruby-1.9.3-p125/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)うおーなんじゃこりゃ。色々調べる。
アプリケーション直下のGemfileの
# gem 'therubyracer'のコメントアウトを外して
budle installを実行。再びrails s。動いたっぽいので。http:/localhost:3000/にアクセス。お、ページ出た出た。
意外にハマってしまったので今日はここまで。
次回はコントローラってなんぞ?ぐらいから。
2012年3月8日木曜日
BingAPIを使用した画像検索(2)_Rubyでかく自動ZIPでくれスクリプト
ゆーすけべーさんのおっぱい収集スクリプトに触発された
自動ZIPでくれスクリプト第2回。
画像検索APIを叩いて帰ってきたJSONデータの例が↓(公式ドキュメントより)
-------------------------------------------------------------------------------------------------
getしたい画像データがどこに入っているかというと
"MediaUrl" ここ。
というわけでMediaUrlが.jpg or .jpegだったらDLしてきてローカルに保存。200件終わったらまとめてzipにする。
zipに固める為gem install rubyzipしておく
rubyでの実装は 橋本商会 いかにしておっぱい画像をダウンロードするか〜2012 をRubyで書いた様をパクリ参考にさせて頂きました。
--------------------------------------------------------------------------------------------------------------------
これでYukie Nakama.zipができて生活がはかどった。
クエリを変えれば壁紙収集ぐらいはできるのかな。
自動ZIPでくれスクリプト第2回。
画像検索APIを叩いて帰ってきたJSONデータの例が↓(公式ドキュメントより)
-------------------------------------------------------------------------------------------------
{ "SearchResponse":{ "Version":"2.0", "Query":{ "SearchTerms":"xbox site:microsoft.com" }, "Image":{ "Total":92, "Offset":0, "Results":[ { "Title":"Microsoft Deutschland GmbH auf der CeBIT 2006.", "MediaUrl":"http:\/\/www.microsoft.com\/germany\/presseservice\/images\/pressemappen\/cebit2006\/Xbox-360_5.jpg", "Url":"http:\/\/www.microsoft.com\/germany\/presseservice\/service\/pressemappen\/cebit2006.mspx", "DisplayUrl":"http:\/\/www.microsoft.com\/germany\/presseservice\/service\/pressemappen\/cebit2006.mspx", "Width":3259, "Height":3264, "Thumbnail":{ "Url":"http:\/\/ts2.images.live.com\/images\/thumbnail.aspx?q=2847678867077&id=b3ba5b922c04d322d937275335c8cf75", "ContentType":"image\/jpeg", "Width":159, "Height":160, "FileSize":2624 } }, ...
getしたい画像データがどこに入っているかというと
"MediaUrl" ここ。
というわけでMediaUrlが.jpg or .jpegだったらDLしてきてローカルに保存。200件終わったらまとめてzipにする。
zipに固める為gem install rubyzipしておく
rubyでの実装は 橋本商会 いかにしておっぱい画像をダウンロードするか〜2012 をRubyで書いた様を
--------------------------------------------------------------------------------------------------------------------
# -*- encoding: utf-8 -*- require 'rubygems' require 'open-uri' require 'json' require 'uri' require 'kconv' require 'zip/zipfilesystem' APP_ID = '' #APPIDは別途取得 API_URI = 'http://api.bing.net/json.aspx' dir = './img/' Dir.mkdir dir unless File.exists? dir page_count = 0 dl_count = 0 query = "Yukie Nakama" loop do if page_count == 4 #50 * 4 DLしたら打ち止め break end url = API_URI + '?' + "AppId=" + APP_ID + "&" + "Version=2.2&Market=ja-JP&Sources=Image&Image.Count=50&Image.Offset=" + URI.encode((page_count * 50).to_s) + "&Adult=off&Query="+ URI.encode(query.to_s) search_result = JSON.parse(open(url).read.toutf8) search_result['SearchResponse']['Image']['Results'].each do |entry| if /\.jpe?g$/ =~ entry['MediaUrl'] then #jpg or jpegを拾う dl_count += 1 file_name = dl_count.to_s + ".jpg" #ファイル名は 数字 + jpg path = "#{dir}/#{file_name}" puts "No #{dl_count}:Start" begin #imgをDLしてローカルに保存 img = open(URI.encode entry['MediaUrl']) img.close puts "DL Success" File.rename(img.path, path) rescue puts "DL Fail" next end else next end end page_count += 1 end #画像DLここまで #zipで圧縮 Zip::ZipFile.open("./#{query}.zip", Zip::ZipFile::CREATE) do |zip| Dir.open(dir).each{|f| next if f == "." or f == ".." #ディレクトリの下のみが対象 f = File.expand_path(f,dir) zip.add(File.basename(f), f) } end #DLしたファイルの削除 Dir.open(dir).each{|f| next if f == "." or f == ".." #ディレクトリの下のみが対象 f = File.expand_path(f,dir) File.unlink(f) } Dir.rmdir(dir)
これでYukie Nakama.zipができて生活がはかどった。
クエリを変えれば壁紙収集ぐらいはできるのかな。
2012年3月7日水曜日
BingAPIを使用した画像検索(1)
[目標]
Bingの画像検索APIで画像を検索し、その検索元画像をダウンロード後ZIPにまとめる
「ZIPでくれ」ならぬ「ZIPでやる」
[やったこと]
○Bing 開発者登録
https://ssl.bing.com/webmaster/developers/appids.aspx から登録しApplicationIDを取得
APIの叩き方をふむふむと読む。
○JSONライブラリのインストール
> gem install json
○APIを叩いてみる
# -*- encoding: utf-8 -*- require 'open-uri' require 'json' require 'uri' require 'kconv' APP_ID = ''#Bingで登録したアプリケーションID API_URI = 'http://api.bing.net/json.aspx' query = "仲間由紀恵" url = API_URI + '?' + "AppId=" + APP_ID + "&" + "Version=2.2&Market=ja-JP&Sources=Image&Image.Count=50&Image.Offset=0&Query="+ URI.encode(query.to_s) dat = JSON.parse(open(url).read.toutf8) #とりあえず検索結果を吐き出す File.open("./result.txt", "w") do |f| f.puts dat end無事検索結果のJSONが取得できた。
次はここから画像の元URLをたどり画像をDLすることを目標。
2012年3月6日火曜日
Ubuntu11.10をインストールしてコードを書きだす前にやったこと(2)
前回の続き
[Vim plugin]
quick-run :vim上で即座に実行
neocomplcache:補完用
インストール方法は
新卒さん向け、速攻でプログラミングをマスターできるvimプラグイン「quickrun」と
そろそろしっかりvimを使う。vimでRubyのコーディングをするためにを参考にさせて頂きました。
[ruby]
Rubyのインストール
- ソースコードのダウンロード .http://www.ruby-lang.org/ja/downloads/ から1.9.3-p125を取得
- 解凍。tar zxvf ruby-1.9.3-p125.tar.gz
- インストール
./configure
make
su(Ubuntuはインストール時にrootのパスワードが設定されてないのでsudo su - で設定しておく)
make install
4. $ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]
irb(main):001:0> p "Hello world!"
"Hello world!"
=> "Hello world!"
とりあえず実行環境は整った。
2012年3月5日月曜日
Ubuntu11.10をインストールしてコードを書きだす前にやったこと(1)
Ruby なるものをかじってみたいと思いRuby環境を構築するまでのメモ
[環境]
VMware Player 4.0.2
OS:Ubuntu11.10
[エディタ]
vim派なのでvimのインストールから
- sudo apt-get install vim-gnome
- インストール完了後gnomeを叩くと3`.
- (gvim:3869): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap",
(gvim:3869): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap",
(gvim:3869): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap",
(gvim:3869): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap", - sudo apt-get install gtk2-engines-pixbuf で解決
- しかしgvim起動してもどうにも動かない...なぜ?
- https://forums.ubuntulinux.jp/viewtopic.php?id=12237で解決。.bashrcに gvim(){ /usr/bin/gvim -f "$@" & true; }を追加。
- 無事起動。.vimrcやらは省略。
次回はプラグインやらなんやらの設定から。vimのインストール1つでここまで手間取ると思わなかった。
登録:
投稿 (Atom)