2011年11月18日

[SQL]日付範囲同士の検索

日付範囲同士の検索というのは意外と落とし穴があります。
会議室予約や、機械や作業状況をある期間で集計したい場合等、しっかり考慮しないといけない。
例えば、ホテルの部屋管理を、以下のように部屋番号、チェックイン日、チェックアウト日というテーブルに管理していたとします。

テーブル:hoge
ID from_date to_date
1 2011/11/15 2011/11/17
2 2011/11/10 2011/11/14
3 2011/11/19 2011/11/23
4 2011/11/10 2011/11/23
5 2011/11/10 2011/11/12
6 2011/11/21 2011/11/23

では、2011/11/14から2011/11/19に予約が入っている部屋を抽出したいと言った時に
SELECT *
FROM hoge
WHERE from_date >= '2011/11/14'  AND  to_date <= '2011/11/19'

と、安易にしては当然、ダメです。これでは1つめのデータしか取得出来ません。
この場合、以下のようなタイムラインを描くことが出来ます。


1,2,3,4のパターンは範囲内という扱いにする必要がある
結論から言うとSQLは以下の通りとなる
SELECT *
FROM hoge
WHERE ('2011/11/14' <= from_date AND from_date <= '2011/11/19')
OR ('2011/11/14' <= to_date AND to_date <= '2011/11/19')
OR ('2011/11/14' >= from_date AND '2011/11/19' <= to_date)

このSQLで希望通りの結果が表示されます。
WHERE ('2011/11/14' <= from_date AND from_date <= '2011/11/19')

この条件でID1,3がHitする。
('2011/11/14' <= to_date AND to_date <= '2011/11/19')

2つ目の条件でID1,2がHit。
('2011/11/14' >= from_date AND '2011/11/19' <= to_date)

最後の条件ではID4がHit。
この条件をORで指定する事により、正しい検索が行われます。
タイムラインの図を見ながら、考えるとわかりやすいと思われます。

  
タグ :SQL

Posted by 109 at 15:01Comments(0)TrackBack(0)SQL

2011年11月16日

[Rails]will_paginate 検索条件を指定する画面から生成する場合

will_paginateを利用すると、1ページあたりに表示するデータ件数を制限出来き、次ページや1.2.3.等のページリンクも簡単に作成出来る。
しかし、検索条件を指定するページから新たに表示する場合にはparamの値に気をつける必要がある。



例:search → index という画面遷移を前提。searchは検索条件、indexは結果を表示。paginateはindexにて行う。
hoges_controller.erb
def result
    staffwhere.and('code = ?',"#{params[:code]}")
    @hoge = Hoge.paginate(:page => params[:page],:conditions=>where,:per_page => 20)
    render :action => 'index'
end

index.html.erb
<%= will_paginate @hoges, :previous_label => '«前', :next_label => '次»' %>

こんな感じにすると、indexのページには前へ1,2,3,4...次へというリンクが付くが、リンクの項目がpage=1とかpage=3とかページ番号が付く。
実際に次へや2をクリックしてページを切り替えると、検索条件が無しの状態で全件表示になってしまう。

検索条件をコントローラーで使いまわすように index.html.erb
<% pm={:code => params[:code]} %>
<table>

(省略)

</table>
<%= will_paginate @hoges, :previous_label => '«前', :next_label => '次»', :params => pm %>

というように、paramsの値を追加する必要がある。これで、ページを切り替えても検索条件は保持される。   

Posted by 109 at 14:44Comments(0)TrackBack(0)Rails

2011年11月14日

[Rails]ActiveScaffoldでRestfulしている場合のroutes.rbの設定

とあるシステムにて明らかにActiveScaffoldで作成された画面の動きがおかしかった。
次へやページを変えると

こんな感じでActiveRecord :: Record Not Found なんたらってエラーが発生。
Restfulの場合、routes.rbは以下の設定が必要
map.resources :hoge, :active_scaffold => true'


という事でroutes.rbを確認。
map.resources :hoges

となっていたので
map.resources :hoge, :active_scaffold => true'

に変更。ちなみにhogesではなくhoge(単数形)。
ルーティングを変更して、再度、次へをクリックしたところ、正常に次ページが表示されました(^^)
根深い問題ではなくて良かった。  
タグ :RailsRuby

Posted by 109 at 18:50Comments(0)TrackBack(0)Rails

2011年11月14日

hamazoでSyntaxHighlighter3を利用

このBLOGに技術的な備忘録を書いていく事を考えています。
その際に、ソースコードを貼り付ける必要が出てきますが、どうせなら綺麗に貼りつけたい!
という事でhamazoでSyntaxHighlighterを利用出来るようにしてみました
これでhamazoでもこのように綺麗にソースコードが表示出来ます!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>テスト</title>

これで備忘録も見やすくなります。
という事でhamazoでSyntaxHighlighterを使用する方法を記載します。

注意:この設定を行うと、BLOGの記事は自動で改行されなくなります。明示的にbrタグで改行する必要があります。
注意2:hamazo単体では利用出来ません。hamazo以外にファイルをアップロード&アクセスがする事が出来るサーバーが必要です。

1.SyntaxHighlighter本体をダウンロード

2.ダウンロードしたファイルを解凍。testsフォルダ以外をアクセス可能なサーバーへアップロードします。

3.管理画面の左のメニューから「ブログの設定」→「テンプレート」を選択
使用中のテンプレートの「カスタマイズ」を選択

4.トップページ、個別記事、アーカイブを以下のように追記します。の直前に以下の記述を追加。
<script type="text/javascript" src="ファイルを置いた場所/scripts/shCore.js"></script>
<script type="text/javascript" src="ファイルを置いた場所/scripts/shBrushhoge.js"></script>
<script type="text/javascript" src="ファイルを置いた場所/scripts/shBrushhoge.js">
<link href="ファイルを置いた場所/styles/shCore.css" rel="stylesheet" type="text/css" />
<link href="ファイルを置いた場所/styles/shThemeRDark.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">     SyntaxHighlighter.all()</script>
</body>
2行目、3行目のshBrushhoge.jsは自分が使う言語のBrush aliasesを指定する。

shBrushhoge.jsをC#ならばshBrushCSharp.js、RubyならばshBrushRuby.jsに変更
ちなみにhtmlはxmlでOKなのでshBrushXml.jsに変更

5.ブログの管理画面TOPより、「ブログの設定」→「ブログ環境設定」を選択
「表示内容の設定」の項目にある「記事の自動改行」を「自動で改行しない(<br>タグで改行)」に変更する。

以上で設定は完了
記事を書く際は
<pre class="brush: ruby;">
puts 'hello world'
</pre>


こんな感じで記入。
puts 'hello world'

こんな感じで表示されます。
classのbrushの値は言語により変更して下さい。Rubyならruby、C#ならばcsharpとかhtmlならxhtmとか。
かなりの言語が用意されています。


ちなみにレイアウトはスタイルシートで選択可能です。おいらはshThemeRDark.cssを選択しています。
  

Posted by 109 at 18:15Comments(0)TrackBack(0)Web技術

2011年10月28日

NetBeansでRailsをデバッグ

Windows7マシンにRailsの開発環境を作成しました。
開発環境作成後のデバッグの設定で戸惑ったので、忘れないように覚書。

NetBeans7だとRubyの対応は微妙そうなので、今回は6.9.1を使用しました。
1) NetBeansをインストール。
2) JRubyを使う設定になっているのをRubyを利用するように変更。

「ツール」→「Rubyプラットフォーム」
開いた画面の中にプラットフォームを追加ボタンがあるので、ボタンをクリック。
インストール済みのRuby.exeを選択。
3) FastDebuggerをインストール

2で追加した後の画面にFastDebuggerをインストールボタンが存在するが、これを押してもエラーになってインストール出来ない。
調査した結果、FastDebuggerはruby-debug-baseとruby-debug-ideをインストールすれば良い事がわかった。
しかし、これをgemでインストールしようとしても失敗する。

という事でgemでruby-debug-baseとruby-debug-ideをインストールする為に以下の操作を行う。
3-1) linecache-0.43-mswin32.gem をインストール
linecache-0.43-mswin32.gemを取得する。
ダウンロードしたフォルダへ移動してgemでインストールする。
gem install -l linecache-0.43-mswin32.gem
3-2)ruby-debug-base-0.10.3-mswin32.gem をインストール
ruby-debug-base-0.10.3-mswin32.gemを取得する。
ダウンロードしたフォルダへ移動してgemでインストールする。

gem install -l ruby-debug-base-0.10.3-mswin32.gem
3-3)ruby-debug-ide をインストール
ruby-debug-ideを取得。0.4.6以下を取得した方が良いという情報が多いので、今回はruby-debug-ide-0.4.6.gemを取得。
ダウンロードしたフォルダへ移動してgemでインストールする。

gem install -l ruby-debug-ide-0.4.6.gem
3-4) インストールの確認
正しくインストールされたか確認する。
「ツール」→「Rubyプラットフォーム」よりFastDebuggerをインストールボタンがなくなっていればOK。
4) プロジェクトの設定

プロジェクトを開き、プロジェクト名を右クリックしてプロパティを選択。
RailsタブのRubyプラットフォームをRubyを利用するプラットフォーム(2で作成したもの)に指定する。
後はデバッグで、普通にデバッグが出来るようになります。
  

Posted by 109 at 10:57Comments(0)TrackBack(0)Rails

2011年10月27日

うぅ(/ _ ; )

初めて、iPhoneからブログを投稿します。

昨日から頭痛がヤバイです。
風邪なのか、疲れなのかわかりません (´・ω・`)
残念な事に仕事はたいしてないはずなのに何故か最近、忙しく、今日も病院に行く暇がありませんでした。
明日も行けない(/ _ ; )
早くこいこい、木曜日。
じゃなかった、日曜日。

しかし、早くこいこい、木曜日のネタがわかる人はどのくらい、いるんでしょうか。  

Posted by 109 at 19:28Comments(2)TrackBack(0)雑記

2011年10月26日

MBR破損時の修復方法の記事を復活

ブログのアクセス解析をすると、MBR 破損 復元といったキーワードで訪問している方がチラホラいらっしゃいます。しかし、その記事は既に削除済み・・・。
Googleでまだキャッシュが残っているようで、検索にかかってしまうようです。
需要がありそうなので、MBRの記事を復活しておきますね。
以下、復活。
USBメモリにLinux(Ubuntu)を入れて遊んでいたら、ちょっと油断してしまい、MBRが破損してしまいました(´・ω・`)
パソコンを起動すると
grub rescue>
って文字が出て、無反応ー。やってしもうた。
という事で復旧作業。
WindowsXPの場合のみ利用出来る方法ですが、以下の方法でMBRにWindowsXPの起動を上書き出来ます。

1.LinuxのLiveCDを用意して、CDからリブートする。
2.端末で
$ sudo install-mbr /dev/sda
でOK。
ちなみに僕はUbuntuを利用したのですが、install-mbrが存在しなかったので

$ sudo apt-get update
$ sudo apt-get install mbr
$ sudo install-mbr /dev/sda

の手順をとりました。
で、再起動後、無事にWindowsXPが起動。あー良かったー。

しかし、よくよく考えたら今使用しているPCのリカバリーディスクがない事に気づく・・・。
今回は立ち上がったからいいけど、今後を考えると不安だ・・・。
確か、メディアであったはずだから、家の中を探せば、あるかな?
3連休はリカバリーCD探しで潰れそうだなぁ・・・。

ちなみに上記の方法以外にもLiveCDよりms-sysを使って修復する方法もあるようです。

$ sudo aptitude -y install build-essential
$ sudo aptitude -y install gettext


$ cd /tmp
$ tar zxvf ms-sys-2.1.5.tar.gz
$ cd ms-sys2.1.5
$ make
$ sudo make install


でインスコ。

$ sudo ms-sys -7 /dev/sda

で実行。
ちなみに上記はWindows7の場合。
Vistaなら -7を-iにする。
XPなら -mにする。
一応、覚書です。  

Posted by 109 at 10:35Comments(0)TrackBack(0)技術全般

2011年10月25日

Microsoftは優秀なマウス屋さんです

自宅作業の時は、ノートパソコンに外付けディスプレイをつけて、ワイヤレスキーボード&マウスという環境で作業しています。

キーボード&マウスはLogicoolのを利用していました。


1つのレシーバーでキーボードとマウスを両方利用出来て、重宝しておりました。
しかし、最近、打合せや別の場所での作業が多く、マウスのみ持ち出ししていたら、どこかでレシーバーを落としてしまいました(´・ω・`)
という事で以前から気になっていた、マウス屋さんのマイクロソフトさんの製品をこの機会に購入する事にしました。
マウスはマイクロソフト ワイヤレス ブルートラック マウス Wireless Mobile Mouse 3500

見た目がカッコいい&握りやすいです。 でもって、普通はマウスって赤い光が出るのに、これは青い光が出ます。
キーボードはマイクロソフト キーボード Arc Keyboard ブラック J5D-00020

やばいっす。このキーボードは超当たり。かなり入力しやすい&省スペースです。
キーボード本体が平らではなく、歪んでいて、キータッチがし易い作りになっています。
おいらは残念な事に独自のブラインドタッチなので、あまり効果がないですが、正統派のブラインドタッチをする人だったら、かなりこの特徴は入力効率をUPすると思われます。
後は、矢印キーがないので代わりにFnを押しながら、矢印パッドを上ならば上、下ならば下に押すっていうのも、思ったより、違和感がありませぬ。

こんな感じで、自宅の机の上に置いてあります。
なんでこんなにマウスとキーボードの性能は良い物を作るのに、OS・・・(´・ω・`)
これ以上、書くと、超巨大権力に睨まれそうなので、口をつぐんでおこう・・・。
もうちょっと、WなんとかSも、頑張って欲しいですよ。  

Posted by 109 at 18:07Comments(0)TrackBack(0)雑記

2011年10月24日

IE6・・・



使用しているパソコンがWindows7になって早幾年。

この子の存在を忘れていました。(いや、本当は忘れてないんですけどね・・・)
困ったちゃんのIE6ちゃん。

いろいろな問題があって内閣官房情報セキュリティセンターでもIE8への移行を推奨したり、生みの親のマイクロソフトも使わないようにとおっしゃられておりますが、未だにバリバリ現役です。

まぁ、マイクロソフトのサポートも2014年まであるし・・・。
ただこんな記事もあったりで・・・。半年前の話ですけどね。

しかし、機密性等、諸事情により、ネット接続が出来ない環境では、パソコン導入当初にインストールされたままのIE6ちゃんはなかなか引退出来ないのです。ネット接続出来ない環境ならIE関係ないじゃんと思われるかもしれませんが、イントラネットっていうもので使ってる事はあるのです。

さて、前置きが長くなりましたが、今回はそんな状況で利用されている、Ruby on Railsで開発されたシステムの修正をお手伝いしました。

計算結果を絶対指定で表示させたんですが、自分のパソコンのIE8だとOKでテスト機のIE6だと思った位置に出ない(´・ω・`)

そ、そうだ、IE6ではCSSのposition:fixed;がそのまま使えなかったんですよね(´・ω・`)

という事で、対応、対応。

あとは、自分のWindows7マシンでもIE6での表示が確認出来る環境を構築しました。


この2点を備忘録としてまとめ。
Windows7でIE6,7,8,9の表示を確認する方法。
有名なので、いちいち書かなくてもいいんですが、IETesterをインストールすれば、IE6~IE10まで確認可能です。
しかし、IE10まで対応とは(´・ω・`)
IE6でもposition:fixed;を有効にする方法。jQueryを利用せずにCSSで簡単に対処する版。
<!--[if lt IE 7]>
    <style type="text/css">
    <!--
        #accnt {
        position: expression('absolute');
        top: expression(documentElement.scrollTop + 90 + 'px');
        left: expression(documentElement.scrollLeft + 950 + 'px');
        }
    -->
    </style>
<![endif]-->
こんな感じでIE6以下だけ適応するCSSを追加。
スクロールがガタガタいうのが気になる場合は
body {
background: url(null) fixed;
}
も追加。そんな感じでOKOK。
って、RailsじゃなくてCSSの話じゃんって書き終わった後に思った・・・(´・ω・`)  

Posted by 109 at 19:39Comments(0)TrackBack(0)Web技術

2011年10月24日

リニューアル宣言

重大ニュース速報 109さんが約4ヶ月振りにブログという名の日記帳を更新したようです。

それも何を思ったのか、ブログ名まで変更しちゃってます。
現場からの報告によりますと

「余はブログを更新したいのであるぞ。けど前のブログはなんか更新するモチベーションがなくなったぞよ。」
「朕は新しくブログを作るのじゃ」


と109さんが曰わっていたそうです。

しかし、基本、小心者の109さん・・・

「すいません。やっぱり元々のブログをリニューアルするだけでいいっす。気持ちも新たにブログを再開させて頂こうかと思います。」

という事で、最終的にブログリニューアルとなりました。
パチパチ8888。
リニューアルした本当の理由は、以前のブログは変に仕事や会社という枠に結びつけてやっていた為、窮屈になっていました。
109さん個人で、他人の意見や目などを気にせず、本能のままに更新したいという思いがありました。

そんなわけで、ダラダラマイペースで再開して行こうと思います。  

Posted by 109 at 17:02Comments(2)TrackBack(0)雑記