スタッフブログ
kakaku.comによると、工人舎から発売された、
タッチパネル液晶の新品ノートパソコンが、24800円で買えるそうです。
http://kakaku.com/spec/K0000001943/
古いパソコンや液晶ディスプレイが壊れたら、パーツを買うよりも
ノートパソコンを買う方が安いくらいです。
CPUが500MHzでメモリが512MBしかないのが少し不安ですが、
画面解像度は1024x600で、ハードディスクも120GBと、とても2万円代とは思えない性能です。
私が去年購入した26万円のパソコンのハードディスク容量が180GBである事と比較すると
少し涙が出てきます。
CPUやメモリが少ないというのは、デザイナなどのメディアを扱う人達にとっては致命的ですが、
プログラマ。中でもLinuxを使っているWebプログラマにとっては案外障壁にはなりません。
サーバ環境を別のマシンに構築して、そこへSSHで接続すれば、実際にCPUリソースを消費するのは
クライアントのマシンではなくサーバになるからです。
私も、開発環境を中心に、多くのタスクをサーバでこなす事で、クライアントであるノートパソコンの
リソースを節約しています。
Windowsならリモートデスクトップでも同じような使い方ができるでしょう。
なんでも一台でやろうとせず、サーバを利用する形でパソコンを使うなら、2万円代のノートパソコンで
生活するのも悪くないかもしれません。
こんにちわ。なおとです。
いま読んでいる本について書いてみようと思います。
「ウェブログの心理学」
山下清美/川浦康至/川上善郎/三浦麻子 著
2005年に発表された、ちょっと古い本です。 以前にここで紹介した「教科書には載らないニッポンのインターネットの歴史教科書」と合わせて読むと、より一層理解が深まります。
私が個人的な「ウェブ日記」を付けようと思ったのは、2000年のことでした。 その後私が使っていたのと同じウェブ日記ツールで、著者の山下さんも日記を書いていることを知り、 また、世の中「ウェブログ・ブーム」が起こっていろいろと興味をもつようになり、 山下さんの「結局、日誌」を熱心に読んでいました。
その頃に一生懸命いろんなブログや掲示番やらを読んでいた時の経験は、今でも生きていると感じます。
まだこの本の半分読み進んだところなのですが、当時接した(結局、日誌などから知った)論文の流れを受けた内容で、その独特の視点に感心、納得させられます。
ところで巻末の附録「インターネット・ウェブログ関連年表」は2004年まであって、mixi、Gree、キヌガサの始まりを記して終わっています。 今日日のネット界隈のコミュニケーションといえばSNSは外せないと思うのですが、一方ではテキストサイトやVNIとかもはや古典となった昨今、 いっそう興味深く思いました。
先日、Firefox3.5やPHP5.3、Maven2.2.0やVirtualBox3.0と、いろいろリリースされました。
ですが、今回はFirefox3.5の導入について書きたいと思います。
Firefox3.5は、元はFirefox3.1だったものが、変更点が思ったより多くなったので3.5となったものです。
このバージョンは、開発コードネームが「Shiretoko」ということで、日本の知床が由来になっております。
そのため、今回のリリースに合わせ、Discover Shiretokoという名前で、知床財団とMozilla Japanがコラボレーションしております。興味のある方は是非一度ご覧下さい。
Firefox3.5では、主に以下の大きな変更点があります。
・JavaScriptエンジンがTraceMonkeyに変更
・HTML5の一部サポート(video/audio)
・プライベートブラウジング
3.0で見れたページが見れなくなるというようなことは基本的に起こらないので(JavaScript絡みでもしかすると何かあるかもしれませんが)、積極的に3.5にアップデートしたいところです。
さて、Firefoxのアップデートで問題になることといえば、拡張があります。
Firefoxの拡張は、基本的に動作確認されているバージョンでしか動作しないようになっているため、最新のFirefoxがリリースされると、使っていた拡張が動かない、ということが起こります。
昔からFirefoxを使っていたユーザーには最早お馴染みのことなのですが、最近使い出した人だと対応方法がわからないことがあると思います。
■Nightly Tester Tools
非対応の拡張を強制的に動かせるようにするための拡張です。
動かせるようにすると言っても、バージョンチェックを無視するようにするだけですので、実際に互換性のないものは動作しません。
ですが、あまり変なことをしていなければ、これで大体動くようになります。
当然、非対応の拡張を入れてFirefoxがおかしくなっても保証はできませんので、自己責任でインストールしてください。
■実はここに3.5対応版が落ちている!というもの
Firefox Add-onsにあるものは3.5に対応していないけど、実は作者の公式ページで配布している、というようなものです。
・Tab Mix Plus
恐らくほとんどの人がインストールしていると思いますが、Index of /dev-builds(作者公式サイト内のページです)で3.5対応のものがダウンロードできます。
・Selenium IDE
公式からダウンロードすると3.5に対応しています。
・bbs2chreader
2chブラウザの拡張ですが、3.5からはChaikaでサポートされるようです。bbs2chreaderとは同時には使用できないようですので、3.0以前で使う場合はアンインストールしてからインストールしましょう。
■バージョン情報を直接書き換える
Nightly Tester Toolsを入れるまでもないけどあれをインストールしたいなー、という場合は、拡張の対応バージョン情報を直接書き換える方法もあります。
具体的な方法に関しては、以前このブログで書いた通りですので、そちらを参照してください。これも同じく自己責任でお願いします。
ちなみに私のFirefox3.5では以下の拡張がインストールされています。
・All-in-One Sidebar
・Coral IE Tab
・Download Statusbar
・Firebug
・FireMobileSimulator
・FireQuery
・Google Date
・Greasemonkey
・Live HTTP headers
・NoScript
・PDF Download
・Personal Menu(強制書き換え)
・Resurrect Pages
・Secure Login
・Selenium IDE
・SQLite Optimizer(強制書き換え)
・Stylish
・Tab Mix Plus
・User Agent Switcher
・XUL/Migemo
・ソース表示タブ
・ツリー型タブ
既にこれだけのものが(一部強引に使っているのもありますが)使えるので、是非Firefox3.5をインストールしてみてください。
今日は、DNSキャッシュサーバのUnboundについて書こうと思います。
上述のとおり、自宅のサーバが壊れてしまったこともあり、こちらの記事で書いたCitrix XenServerを利用して、サーバの分散と仮想化に着手し始めました。
今までは、さほど必要としなかったこともあり、内向きDNSを構築せずにバーチャルホストを利用することで、複数のドメインを扱っていたのですが、勉強も兼ねて内向きDNSを構築してみることにしました。
最初は、BINDを利用することも考えたのですが、設定が面倒なことや、トップシェアを誇ることにより攻撃対象となりやすいことなどから、別のソリューションを探し、最終的にUnboundを利用してみることにしました。
Unboundを選んだ主な理由は、
- 昨年あたりから、かなり注目されている
- 設定がシンプルである
- 内向きDNSの構築に向いている
- デフォルトでも、そこそこセキュアである(らしい)
設定は非常に簡単で、サーバにunboundをインストールしてから、unbound.confに最低限の設定を記述して、サーバ自身が参照するネームサーバの一番最初にサーバ自身を指定するだけです。
オープンソースワールドは昨年まで開催されていたLinuxワールドがリニューアルされたイベントです。
今回私とmikはOSSコンソーシアムのブースにて、いろんなオープンソースCMSをインストール不要ですぐためせる WARP CD-R を皆様にお配りしてきました。
・WARP
今回お配りしている WARP には、XOOPS Cubeで構築した社内ポータルサンプル XOOPS Cube for Corporate、サンプルコンテンツ&デザインカスタマイズ済みの NetCommons、デザイン自由度の高い軽量CMSである MODx、BLOGの定番となりつつある WordPress、エンタープライズ向けCMSの eZ Publish がインストール済みの状態でパッケージしてあります。
オープンソースワールドは明日(7月2日)も開催されますので、是非OSSコンソーシアムのブースで、このWARP CD-Rを手に入れてください!
明日もRYUSからは私、天野龍司と うさでき&うさ通でおなじみの mik がOSSコンソーシアムのブースに立つ予定です。
決算といっても実際に全ての計算が終わるのは再来月となりますが、
皆様のおかげで売り上げは1期に較べ飛躍的に高くなりました。
また、今月から始めたRYUS戦略「すごいRYUS」を実行することにより、次期である4期は大きな発展を社員一同見込んでいます。
さらに、一昨年東京に出てきたときに拠点とした事務所も10坪に8人とかなり手狭になってきました。ということで来週月曜日に同じフロアの広い部屋に移転することになりました。そのための移転作業もこれから大詰めです。
#部屋が異なるだけで住所や電話番号の変更はありません。
ということで来期も皆様に役立つRYUSとして発展していきたく思っております。
…という話とはかなり粒度が異なるのですが(!)、「XOOPSうさぎ通信」の読者を大募集しています。本日までに+100名というコミットメントに取り組んでいます。
あと一歩というところでまだコミットメントが果たされていませんが、まだ十数時間ありますので、可能な限り読者が増えるよう努力してます。
XOOPS Cubeに関するTIPSや便利情報などありますので、よろしければ
コチラ↓
http://ryus.co.jp/modules/mailmag/index.php?content_id=5
からご登録いただけますと大変ありがたいです!
アルバイトaoiさん作のマンガもありますので、見るだけでも是非お願いします。
今回は久しぶりにXOOPSの簡単にできるTipsについて書いてみようと思います。
[内容]
カスタムブロックにTwitterのつぶやきを表示する。
[効用]
日本でも結構、流行はじめたコミュニケーション・サービス「Twitter」
このTwitterのつぶやきをXOOPSのブロックで表現豊かに表示できます。
Twitter (WikiPedia)
http://ja.wikipedia.org/wiki/Twitter
[やり方]
まずTwitterのサイトで表示コードの設定をします。
http://twitter.com/
Twitterにログインします。
http://twitter.com/widgets/which_widget
「Other」を選択して「続く」を押します。
Flashによるゴージャスな表示かHTMLのシンプルな表示かを選択します。
最終イメージが観られるので、分かり易いです。今回はHTMLを選択した場合で進めてみましょう。
http://twitter.com/widgets/html_widget
「Number of updates」はつぶやきの表示数です。「No Title」をチェックすると「Twitter Updates」の文字が非表示になります。こちらの設定も最終画面を観られるので分かり易いです。Flash表示の方もだいたい同様な設定になっています。(Flash表示はサイズがnarrowの設定でも横幅があるのでコードをみて幅のwidth部分を適宜修正する必要があります)
最後に「Get the Code」下のフォームからTwitter表示の為のコードをコピーします。
次にXOOPSの方でカスタムブロックの設定です。
タイプ「htmlタグ」を選択して通常と同じようにカスタムブロックを作成します。通常のパターンですと表示サイドは左右のどちらかのブロックでしょうか。
コンテンツのフォーム部分に先ほどコピーしたコードをペイストします。あとの部分は任意に設定します。必要箇所を全て設定したら「送信」を押して作業完了です。
上のスクリーンショットは自分のTwitterのつぶやきを表示してみたものになります。
以上のように基本的にTwitterのサイトからコードをXOOPSのカスタムブロックにコピペするだけなので作業は簡単です。TwitterユーザでXOOPSを使っている人は試してみると面白いと思います
一日中ブラウザでWebサーフィンができる状態にある時に、業務効率を下げる原因となるのが、「業務と関係ないサイトを見てしまう事」です。
仕事で調べものをしている時などは、自分が意図していなくてもついつい業務から離れたサイトにアクセスしがちで、気がついた時には多くの時間を使っていた。という経験は誰にでもあるのではないでしょうか。
そういった問題を解決してくれるのがFirefoxの拡張であるLeechBlock ( https://addons.mozilla.org/ja/firefox/addon/4476 )です。
LeechBlockアドオンはあらかじめ設定した時間に、特定のサイトへのアクセスをブロックしてくれます。
これを利用する事で、業務時間中はmixiにアクセスできないようにする事ができるわけです。設定はかなり柔軟で、平日の9時から22時まで、のように、時間だけでなく、曜日などを指定する事ができます。
あきらかに業務時間中にアクセスする必要がないサイトはLeechBlockに登録しておくと、よそ見の回数が減って業務効率をあげられるのではないでしょうか。
なおとです。
来月始めの週末に、あるセミナーに参加しようと思っています。
セマンティックなマーク付けとメタデータ活用
〜『セマンティックHTML/XHTML』の出版を記念して〜
(案内ページ
出版者の書籍情報)
私はいま「ウェブのお仕事」をしているわけですが、そうなる前からWWWやHTMLというものと親しんできました。 ウェブの技術というものを紐解いてみると、本当に感心されられます。
この世界は知れば知るほどにさまざまな事柄と結び付いていて、奥深さを実感します。 一度身に着けた知識などは古いままでは活かしきれず、いつも新しいことを学ぶことによって、 さらに得るものがあるのだと思っています。
いまではHTMLといえば基礎的なスキルと思われがちですが、「いまさらHTML」などと思わずに、学びたいと思っているのです。 本当に楽しいことです。
テストと言えばユニットテストとかはだいぶ充実してきましたが、機械的なコードになりがちなので、プログラマ以外のテストケースの検証が難しいという問題があり、別途説明用にテストケースを書き直したりする必要がありました。
Ruby on Railsの話になりますが、Cucumberというツールがあるようです。
これは、YAMLで受け入れテストを書くことによって、Railsアプリのテストを行えるようにするものです。
ちなみにこれは正確にはBDD(Behavior Driven Development/ビヘイビア駆動開発)のためのツールらしいです。
Cucumberのページを開くと、以下のようなものが記述されています。
Feature: Search courses
In order to ensure better utilization of courses
Potential students should be able to search for courses
Scenario: Search by topic
Given there are 240 courses which do not have the topic "biology"
And there are 3 courses A,B,C that each have "biology" as one of the topics
When I search for "biology"
Then I should see the following courses:
| title |
| A |
| B |
| C |
■インストール
CucumberはRails2.1以降で動作します。
gem install rspec rspec-rails cucumber webrat
また、別途
gem install term-ansicolor treetop diff-lcs nokogiri builder
■テスト用プロジェクト作成
とりあえずブログアプリケーションのようなものを作る想定で作ります。
rails blog
cd blog
script/generate scaffold entry name:string title:string body:text
rake db:migrate
■Cucumber初期化
script/generate cucumber
script/generate feature Entry
features/manage_entries.feature
features/step_definitions/entry_steps.rb
このうち、manage_entries.featureが、実際のテストコードになります。このファイルを開くと以下のように書かれています。
Feature: Manage entries
In order to [goal]
[stakeholder]
wants [behaviour]
Scenario: Register new entry
Given I am on the new entry page
And I press "Create"
Scenario: Delete entry
Given the following entries:
||
||
||
||
||
When I delete the 3rd entry
Then I should see the following entries:
||
||
||
||
実際の動作は、各Scenarioに記述していきます。
とりあえずScenarioを書いてみます。
Feature: Manage entries
In order to [goal]
[stakeholder]
wants [behaviour]
Scenario: Register new entry
Given I am on the new entry page
When I fill in "Name" with "user"
And I fill in "Title" with "blog title"
And I fill in "Body" with "blog content"
And I press "Create"
Then I should see "user"
And I should see "blog title"
And I should see "blog content"
Scenario: Delete entry
Given the following entries:
| name | title | body |
| name1 | title1 | body1 |
| name2 | title2 | body2 |
| name3 | title3 | body3 |
| name4 | title4 | body4 |
| name5 | title5 | body5 |
When I delete the 3rd entry
Then I should see the following entries:
| name | title | body |
| name1 | title1 | body1 |
| name2 | title2 | body2 |
| name4 | title4 | body4 |
| name5 | title5 | body5 |
rake features
すると、以下のようにテストが実行されます。
/usr/bin/ruby1.8 -I "/usr/lib/ruby/gems/1.8/gems/cucumber-0.3.11/lib:lib" "/usr/lib/ruby/gems/1.8/gems/cucumber-0.3.11/bin/cucumber" --format pretty features/manage_entries.feature
Feature: Manage entries
In order to [goal]
[stakeholder]
wants [behaviour]
Scenario: Register new entry # features/manage_entries.feature:6
Given I am on the new entry page # features/step_definitions/webrat_steps.rb:6
When I fill in "Name" with "user" # features/step_definitions/webrat_steps.rb:22
And I fill in "Title" with "blog title" # features/step_definitions/webrat_steps.rb:22
And I fill in "Body" with "blog content" # features/step_definitions/webrat_steps.rb:22
And I press "Create" # features/step_definitions/webrat_steps.rb:14
Then I should see "user" # features/step_definitions/webrat_steps.rb:93
And I should see "blog title" # features/step_definitions/webrat_steps.rb:93
And I should see "blog content" # features/step_definitions/webrat_steps.rb:93
Scenario: Delete entry # features/manage_entries.feature:16
Given the following entries: # features/step_definitions/entry_steps.rb:1
| name | title | body |
| name1 | title1 | body1 |
| name2 | title2 | body2 |
| name3 | title3 | body3 |
| name4 | title4 | body4 |
| name5 | title5 | body5 |
When I delete the 3rd entry # features/step_definitions/entry_steps.rb:5
Then I should see the following entries: # features/step_definitions/entry_steps.rb:12
| name | title | body |
| name1 | title1 | body1 |
| name2 | title2 | body2 |
| name4 | title4 | body4 |
| name5 | title5 | body5 |
2 scenarios (2 passed)
11 steps (11 passed)
0m1.040s
passedとなっているので、正常終了しているようです。
試しに失敗させてみます。
app/controllers/entries_controller.rb
def destroy
@entry = Entry.find(params[:id])
# @entry.destroy # ここをコメントアウト
respond_to do |format|
format.html { redirect_to(entries_url) }
format.xml { head :ok }
end
end
rake features
すると以下のようになると思います。
/usr/bin/ruby1.8 -I "/usr/lib/ruby/gems/1.8/gems/cucumber-0.3.11/lib:lib" "/usr/lib/ruby/gems/1.8/gems/cucumber-0.3.11/b
in/cucumber" --format pretty features/manage_entries.feature
Feature: Manage entries
In order to [goal]
[stakeholder]
wants [behaviour]
Scenario: Register new entry # features/manage_entries.feature:6
Given I am on the new entry page # features/step_definitions/webrat_steps.rb:6
When I fill in "Name" with "user" # features/step_definitions/webrat_steps.rb:22
And I fill in "Title" with "blog title" # features/step_definitions/webrat_steps.rb:22
And I fill in "Body" with "blog content" # features/step_definitions/webrat_steps.rb:22
And I press "Create" # features/step_definitions/webrat_steps.rb:14
Then I should see "user" # features/step_definitions/webrat_steps.rb:93
And I should see "blog title" # features/step_definitions/webrat_steps.rb:93
And I should see "blog content" # features/step_definitions/webrat_steps.rb:93
Scenario: Delete entry # features/manage_entries.feature:16
Given the following entries: # features/step_definitions/entry_steps.rb:1
| name | title | body |
| name1 | title1 | body1 |
| name2 | title2 | body2 |
| name3 | title3 | body3 |
| name4 | title4 | body4 |
| name5 | title5 | body5 |
When I delete the 3rd entry # features/step_definitions/entry_steps.rb:5
Then I should see the following entries: # features/step_definitions/entry_steps.rb:12
| name | title | body |
| name1 | title1 | body1 |
| name2 | title2 | body2 |
| name4 | title4 | body4 |
| name5 | title5 | body5 |
expected: "name4",
got: "name3" (using ==)
Diff:
@@ -1,2 +1,2 @@
-name4
+name3
(Spec::Expectations::ExpectationNotMetError)
./features/step_definitions/entry_steps.rb:16
./features/step_definitions/entry_steps.rb:15
(eval):3:in `each_with_index'
./features/step_definitions/entry_steps.rb:14:in `each'
./features/step_definitions/entry_steps.rb:14:in `each_with_index'
./features/step_definitions/entry_steps.rb:14
(eval):3:in `each_with_index'
./features/step_definitions/entry_steps.rb:13:in `each'
./features/step_definitions/entry_steps.rb:13:in `/^I should see the following entries:$/'
features/manage_entries.feature:25:in `Then I should see the following entries:'
2 scenarios (1 failed, 1 passed)
11 steps (1 failed, 10 passed)
0m0.884s
rake aborted!
Command failed with status (1): [/usr/bin/ruby1.8 -I "/usr/lib/ruby/gems/1....]
(See full trace by running task with --trace)
削除をコメントアウトしたので、削除の部分が失敗しているのがわかると思います。
このような感じでテストを書くことができるようになります。
英語だと若干わかりづらいのですが、有志の手によって一部を日本語で書けるようにしたものもあるようです(今回は省略します)。また、同時に生成されたstepファイル(今回だとentry_steps.rb)で、細かい実行内容の定義を書くことができます。これらを組み合わせることにより、自然な日本語でテストを書くことができるようにもなります。
従来のテストコードに比べて視認性が格段に良くなりますので、Railsで開発をしている方は是非試してみてください。