Android端末を買い替えた時のEye-fiとSugarSyncの悩ましい挙動。

先日GALAXY-TabからARROWS Xに移行した際、microSDHCについてはそのまま差し替えて使いまわしているわけですが、これに関してEye-fiとSugarSyncが共に困ったちゃんな挙動をすることに。

差し替えたmicroSDHCには当然GALAXY Tab時代の撮影画像が入っているのですが、Eye-fiもSugarSyncも、これらをすべて「新規カメラ画像」とみなしてしまうのです。

どちらも、起動一番「xx枚の新規画像があるからアップロードするぜ?」と聞いてくるのです。あたしの場合、その数82枚(SugarSync調べ)。数枚ならば無視もできますが、この枚数となるとアップロードにも時間がかかり、2重化するデータ量もそれなりです。

SugarSyncについては「止めれ」と言ったら以降黙ってくれたのですが、Eye-fiは先ほどセットアップが終わったところでガツンガツンとアップを始めてくれましたさ?

設定を見回してもこの挙動を止める術は見当たらない気がするのと、そもそもどちらのソフトもカメラ画像等を自動で探し回って見つけてしまうようなので、たぶんmicroSDHCの別の場所に移動しても無駄。下手をすると3重になりそう。

対応としては

  1. 多重アップロードなんて気にしない♪
  2. microSDHCを差し替える前に、カメラ画像の類は削除しておく
  3. microSDHCの使いまわしを止める

…といったところ。1.は論外として、2.をやるくらいならば3.にしたほうが良い気が。

MicroSDHCに入っているデータで新しい機種に持ち込みたいものを考えた場合、ダウンロードしたアプリ類が持って行けることを少し期待したものの、これはできない様子(認識されてない)。データファイル類の大半はそれこそSugarSyncかEvernoteに入っているので、ローカルで持ち込む必要は無し。

となると、新しいmicroSDHCを買ってきたほうが良さそうだね。

SugarSyncも、Eye-fiも、データのほうに何かフラグつけるとか、「今日この日以前に撮影した画像はアップロードしない」とか、なによりも「このディレクトリはみなかったことにしてくれ」という機能が欲しいなぁ…。てか、イメージギャラリーとか画像系はどれも共通して「見なかったことに」機能が欲しいのだけど…。

Android的に、どれも同じ「画像検索機能」とか使っていそうだな。

「見なかったことに」機能を持ったアプリを作ってみるのも一手?

| | コメント (0) | トラックバック (0)

Rubyの魔法に惑わされる日々。

Ruby on RailsのActiveResource & Restfulなコーディングをマスターするぜ!と泥沼にハマるなど。

問題としては、世間がRails 3.1の時代にあってやっとRails2.xを見始めたところにあるような気がしないでもないのだけど。だってメンテしてるアプリRails1.xなんだもん!Rails3.xはOS自体が受け付けないんだもん!!

もとい。

ざっくり世の中の資料によるとAcitveResourceにお任せ設計したRailsでのレコード更新は、

<% form_for @record % do |f| %>...<% end %>

としておけば、@recordにidがあったらPUTでupdateメソッドを叩きに行き、@recordにidが無かったらPOSTでcreateメソッドを叩きに行く…らしいのだけど。

今使っているRails2.3.14でこの書き方をやると、PUTでupdateを叩くのまでは良いのだけど、params[:id]が無くなってしまった。色々試行錯誤した結果として、

<% form_for @record :url => {:action => :update, :id => @record.id} do |f| %>

とするとようやくまともな動きをするように。ちなみに:actionをさぼるとPUTでeditを叩きに行く気配。

editメソッドを叩くURLの生成も

<%= link_to( 'Edit', edit_record_url( @record ) ) %>

では駄目で、

<%= link_to( 'Edit', edit_record_url( :id => @record ) ) %>

としないといけない。

どうも過渡期のRailsを使い始めてしまった気がしないでも無いけど、ここらへんの差異は資料が見つかりにくいというか魔法が効きすぎてかえって解除に手間取る気がする。

てか、form_forに至っては開発環境でri form_for して出てくる説明と実動作が合っていないので、あたしの環境はドキュメントとコードがずれているような気もする…。

| | コメント (0) | トラックバック (0)

そしてARROWS X LTE F-05D。

ありがとうbmobile、そしてさようならbmobile。あたしはXiに行くよ。

一説によると"くろっしー"とは"苦労と試行"の略で、苦労試と書くそうな(ねぇよ)

…いや、苦労死とか?(おぉい)

えぇぇ、やっと手に入ったですよARROWS X。bmobile Fairの更新をするかXiに行くかの瀬戸際、bmobile Fairの期限切れ5日後に横浜ドスパラで出会えたのはまさに僥倖と言えませぅ。

時間制限の都合で受け取りは翌日夜閉店時間後になってしまいましたが(汗)

もとい。

GALAXY Tabが契約後1年経過し、Xiはテザリング上等、料金についてもテザっても電話機単体でも5985円、しかも今はキャンペーン中、そしてbmobile Fairの更新期限が1月という環境。

画面サイズについてはGALAXY Tabの7インチが捨てがたいのですが、防水タイプが欲しくなったです。理由は「お風呂でEvernote編集できる」ということで。iアプリ版もあるのですが、あたしのN-03Cはメールホーダイなので非メールのパケットは極力絞らないといかんのですよ。

しかし今季のDocomoはGALAXY Tabのマイナーチェンジを出してきたものの防水ではなく、構造的にもあまり変わり映えが無いという始末。Docomoってばなんでこの機種出したのだろう…。自分ところのラインナップでも7インチスレートは特別扱いにしているあたり独自のニーズを掘り起こしている自覚はあるのだろうし、だったら無理にマイナーチェンジしなくても良いと思うのだけどなー。

で、ARROWS Xなのですが、画面サイズは4.3インチと小さいものの、解像度で見るとTabが600x1024なのに対し、Xは720x1280。解像度では勝っているので、あとは4.3インチで小さい文字を見ていられるか、という点に勝負が移るのデス。

まー、あたし的には4.3インチでも一応電子書籍読めるな。具体的にはO'Reillyのebookですが。

カラーは赤です。3倍速い少佐のレッド。その証に角が付いてきました(嘘) もちろん伯爵もおまけに付きます(何)

いや赤しかなかったのですが。

プラン。

今回はテザリング含めがっつり通信する見込みがあるので、最初からタイプXiにねん+Xiパケホーダイ・フラット+SPモードです。目指すは通信各社言うところの「1/3」ってやつです。

GALAXY Tab時代から特に用もなかったのでスマートフォンでのimodeメールは使ってませんが、先日のトラブルを考えると使う気にはなれませんなアレは…。まぁimodeメールはN-03Cでやれば良いのですが。

通話するつもりは無いので、Xiカケ・ホーダイは付けていません。

あとケータイ補償お届けサービスを付けたので月額399円。前回付き合いで付けてそのまま忘れていたゆうゆうコールは、Xiから適用外になったので強制解除になりました。

最終的に出てきた注文書にあるXiにねんの「起算日:2008年12月6日、定期契約満了日: 2012年12月31日」ってなんだろう…?FOMA時代の2年縛りが継続している…の?これが正しいのであれば、今年末には解約できることになるけど…。

費用。

あたしの場合この日のために溜めたDocomoポイント22,800円を適用で、支払いは36650円に。ここはニコニコ現金一括払い。月々サポート割が2年あるので、2013年12月まで耐え抜けばさらに32,760円割引…のはず。でもきっとまた1年くらいで機種変更するよあたし。てか2年ものんびりしてたら置いて行かれるのがこの業界ですから!

GALAXY Tabは端末購入サポートがあと1年弱残っており、違約金が6,600円かかっています。今回Xi化にあたりファミリー割引も適用外になるのでこちらの違約金はどうなんだろう、と思っていたのですが、これは除外でした。まぁファミ割の適用外にするのはDocomoの都合なので、除外されないと困りますが。

あと、Xiの契約事務手数料は2,000円でした。契約事務手数料、GALAXY Tabの違約金、その他日割り計算とか

その他、ドスパラのなんぞよくわからない割引適用によって2490円キャッシュバックが来てます。パチンコ屋かよオマエラ…とかちょっと思いましたが。え、そういうシステム構成では無い?(笑)

結局、その場での支払いは36650円、キャッシュバックで2490円、差引34,160円也。別途Docomoからの2月分請求額が15,126円。うち、契約/解約関連が6,600円。その他は日割り計算が入り乱れているのであまり考えたくない感じが。

合計40,760円が今回の費用って感じですかね。

来月から4月末まで5,505円+ユニバーサル料…なのかな?

トラブル的な。

  • ドスパラ店員が手続きに慣れていなくて手間取る。
  • 店に行ったのが20時過ぎ(ドスパラ閉店は21時)なのであたしも問題はあったのだけど、この時間帯でもDocomoの契約はできるものの、Docomoポイントの適用システムが時間外になっていた。結果、手続き書類をあたしが預かり、翌日再チャレンジということに。
  • ドスパラにはファミリー割引の合算請求用書類が無いそうで、強制的に個別請求へ移行することに。今月中にDocomo行かないとなぁ…。
  • あれ、携帯電話の購入はドスパラポイントつかないんだ…?だったらカード払いにすればよかった。

全体的な使用感。

基本的には悪くない感触。ちょっとiPod touchとの棲み分けが微妙ですが。

スマートフォン購入時は毎回叫んでいる気もしますが「電池持たない!超持たない!

特にWifiテザリングすると致命的にぐんぐん減りよる。USBテザリングにすれば多少良いのかもしれませんが、防水タイプでコネクタの蓋開けるなんてそんな馬鹿な。

テザリングなしでも、全力全開で通信すると毎日充電しないと危険域。通話はせず、PCメール受信にはK-9 mailでIMAP4を1時間おきに確認するようにしたところ、朝満充電からスタートで夜帰宅するころには残15%以下に。メールチェックを3時間おきにしてもさほど変わらず。実際問題として、日中会社にいるときは私物メール読まないので(そもそも安易に取り出せない)メールチェック間隔はもっと広くしても良いのですが、それだと休日時に面倒。

最終的にはメールなど各種自動確認なし、普段は機内モードOnにしています。これならば数日は持ちそう…なのですが、おもむろにテザリング始めると一気に減る…(汗)

「お風呂でEvernote」はよろしくない気配。水にぬれた状態だと、タッチパネルが誤動作。たぶん水滴のほうも認識してしまっているのかと思われます。やるなら防水Bluetoothキーボードでも導入するか…。

なお、初期アクセサリとして透明タイプのバリアジャケットも導入したのですが、これがお風呂持込みにおいて盲点に。ジャケットと本体との間に水が入ってしまうので、一度外して拭かないといけませぬ。2度目からはジャケット脱がしたうえでお風呂持込みしましたさ。

クレードル。

いまいち。

  1. ジャケット付けている影響もあるかもしれないのだけど、コネクト精度が悪い。数回置きなおさないとNG。
    でもN-03Cも似たような問題抱えているよな…。本体置いたときに充電ピンが飛び出すタイプの宿命なのかな…?
  2. クレードルに刺している間は画面操作ができません。特に、ロック解除時に解除ボタンがクレードルの中に入ってしまっていたり、画面上から引き下ろしたやつ(なんて言ったかねアレ)を戻したくても操作エリアがクレードルの中に入ってしまっていたり、です。
    元より毎日充電しないと持たない性格なので、充電中に操作できないとかなりアレなことがあるのですが。
  3. てか、ワンセグ視聴したい時は横置き充電できたほうが便利だろ…。なんで縦よ?

手書き入力はそこそこに便利。片手もちで親指で書いても案外大丈夫。これ、Graffitiに変えたいな…。Android用ソフトあるよね確か…。

SugarSyncの罠。

GALAXY Tabで使用していたMicroSDHCをそのまま使いまわしたのですが、ここにSugarSyncの罠が。カードに記録されていたGALAXY Tab時代の写真をそのまま「新しい写真」と認識してしまい、アップロードしようとしまする。この写真はGALAXY Tab時代にアップロード済みなので、再アップは不要なのですが…。

メモリカードを使いまわすときは写真の類は一度削除するか、そもそもカード使いまわすな、ということかしらね…。カードに保存してあるアプリ類も、そのまま使えるわけではない様子だし。

Evernoteの…罠?

今回もプレミアム会員特典があったので何も考えずYesとしてしまったのだけど、あたしつい最近会員料金払ってプレミアム会員継続してる…。失敗?

と思ったら、FAQによるとちゃんと1年分加算になるらしい。よしよし。

| | コメント (0) | トラックバック (1)

自宅サーバのLennyなDebianをアップデート…したいの(希望)

VMをぶん回したくて久々に こぁ i7 な機体に火を入れたけど、Debianっていつの間にかメジャーバージョンしておったのか。

取り敢えず/etc/soueces.listをsqueezeに書き換えてapt-get updateしているのだけど、volatileが終わっていたり、なんぞ「 子プロセス bzip2 がエラーコード (2) を返しました」とか言い出してみたり、何度やっても試しにサーバをftp.jp.debian.orgからftp.debian.orgに変えてみてもエラーが回復しなかったりよくわからん状態に。

なんかちょっと面倒になってきたというかそもそもあたしが今やりたいのはDebianを最新にすることではなくVMを動かすことだったのでいったん止めよう。

てか、面倒だから最初から入れなおしてやろうかコイツ…。

とりあえず後で何かしら手を打とう。

| | コメント (0) | トラックバック (0)

本日の教訓。

郷にいる間は郷に従え。

…RonRで3画面作るだけなのに「何キロステップ?」と申されましても…っ

| | コメント (0) | トラックバック (0)

ACCS、Winny開発者の無罪判決確定の件で、ユーザーに釘を刺すコメント

無罪になって言い訳が辛くなったところがちらほらと…。まぁ製作者無罪と使用者無罪が別枠なのは、今回製作者が無罪になったことの理由そのものでもあるわけだけど。

ACCS、Winny開発者の無罪判決確定の件で、ユーザーに釘を刺すコメント (INTERNET Watch)

某社での「けいもうかつどう」でも、今後とも「Winnyウィルス」(Winnyに感染するウィルスの意、ではない)って言い続けるんだろうなー。

| | コメント (0) | トラックバック (0)

UQ、上り高速化サービスを28日よりスタート

で、Mobile Cubeは対応せんのかい?

UQ、上り高速化サービスを28日よりスタート (ケータイWatch)

上りが遅いとリモートデスクトップとかSSH作業とかがきついんだよね。bmobile Fair、イー・モバイルは割と論外、WiMAXでもたまにきつい。

以外なことに画像を使うリモートデスクトップよりも文字列しか扱わないSSH接続のほうが、通信速度の影響を受ける。なによりもキーボード入力のエコーバックが遅くてイラつく。たぶんキータイプ速度以上で通信してくれないとダメなんだろうな。

 

| | コメント (0) | トラックバック (0)

Radiant CMSで構築しているサイトをgit管理しようとしてハマる。

ダウンロードしてきたextensionを自分のgitリポジトリに追加して別の場所でcloneしようとしたらディレクトリしか届いてこなかった顛末。

元の場所に戻って状況確認していったところ、extensionの開発元gitのログが出てきてはふーんな感じに。えぇと、他のリポジトリ管理下のソースを自分のところに関連づけるにはどうするんだ…?

…それとも「導入するextension一覧」的なものを作れたっけ?そっちのほうが前向きか?

あとで調べよう。

あと、同パターンでさくらのVPSで構築していたRadiant CMSサイトをMacbook Airにgit cloneしてきてよぉしこれでローカルでも作業できるZEと思ったら、Macbook AirにMySQLが入っていなかったというオチが。はぅぅ。

| | コメント (0) | トラックバック (0)

Ruby on Railsアプリで2つめのDBを使う。

具体的にはRadiant CMSで、Radiant自身のコンテンツ管理に使うDB以外にコンテンツ上に表示するDBを使いたい、など。ただしハードコーディングになってしまうので、たぶんYAMLとか使ってもう一工夫することになるかな。

class OuterDbRecord  < ActiveRecord::Base
  ActiveRecord::Base.establish_connection(
    :adapter => 'sqlite3', :database => 'db/outer_db.db' )
end

---

record = OuterDbRecord.new record.value = 'Homu Homu Homu' record.save!

こんな感じで。

| | コメント (0) | トラックバック (0)

Ruby on Railsでコンソールアプリを作る。

MVCだって言うのなら、GUI以外のViewだって使えないとおかしいと思うのさね。

RonRはWeb GUIが前提になっているけど、アクセスログ管理アプリとか一括データ登録機能とかを作るとWebではなくコンソールから操作したいことが多々ある。

wgetとかw3mでWeb GUIにアクセスする方法もあるけど、今ひとつイケてないので。Rubyコードで済ませる方法をメモっておく。

  • config/bootをrequireする。
  • config/environmentをrequireする。
  • rubygemsをrequireする。
  • active_record、および使用するmodelをrequireする。
  • -I $RAILS_ROOT/app/modelsを指定してrubyを実行。

以上でRuby on Railsとして”普通に”DBアクセスする環境は整う。

DB環境の切り替えは、RAILS_ENV環境変数で指定する。ActiveRecord::Base.established_connectionに直接指定する方法もあるけど、ハードコーディングになって扱いが面倒なので試しておらず、故によくわからん。

例:

#!/usr/bin/ruby -I app/models

require 'config/boot'
require 'config/environment'
require 'rubygems'
require 'active_record'
require 'apache_log'

STDIN.read.each do |line|
  line.chomp!
  record = ApacheLog.new
  record.log_text = line
  raise 'DB access error!' if not record.save
end

なお、アクセスログみたいに巨大なファイルをSTDIN.read.eachでさばこうとすると最初に全部メモリに乗っけてしまうようなので、巨大な敵を撃つときはSTDIN.getsでnil判定した方が良いようです。

    

| | コメント (0) | トラックバック (0)

明日も仕事ですぜいぇーいい。

明日で終わらせなければ…。

ところでPNGとかの画像が65536pxを超えられない問題の核がどこにあるのか、誰か教えてほしいのですがー。

今回経験則的に

  • 画像の生成・出力はJavaのBufferedImage + ImageIO。ファイルサイズは65535x100pixel位でも100Kbyte以下な感じ。
  • PNG形式もJPEGも縦横片方が65536pxを超えると表示できない。65535pxは一応OK。
  • 英語のPNG仕様を読むのがつらい…というかじっくり読んでいる余裕が無くてWikipedia資料だけで見ると、4byte管理っぽいので2byte限界があるというのは納得がいきませぬ。
  • ここで65536=2byteだよね?という不安が出てきて計算機で「16の2乗」を求め始めるあたり、今日はもうだめかもしれない。
  • OSはWindows XP 32bit。表示はWindows previewとかペイントブラシとかGimpとかIE7とか。メモリは4GB載っているけどOSが32bitだし、そもそも「セキュリティ」として色々余計な素晴らしいものが動いているので使える領域はもっと少ないはず。

ちなみに、ここで「では最大値を65535にしませぅ」と決定した後、IE7ではOKだがFirefoxとChromeとSaffariがNGであることが発覚してさらに縮小するなど。

どこかが2byte管理なんだろうけど、それはいったいどこなのかなー、という疑問。ていうか本来は4byteなのか否かという疑問も。

| | コメント (0) | トラックバック (0)

不用品のデジタルフォトフレームを小型モニターとして使いたい→挫折 orz

仕事の関係であまり欲しくもない安物デジタルフォトフレームが手元にあり、こやつの使い道をなんか探してみようとして早々に挫折するなど。

モノはDreamMaker DMF070W43。というだけでどういう経路で来たかわかる方がきっと相当するいるであろうこのギョーカイ。

サイズは7インチとそれなりに手ごろであるものの、解像度がSVGAなので一眼レフ画像とかの表示は期待できない感じの困った代物。

ふと思い出して電源を調べたところ、5V2A。コネクタ企画がViliv S5と同じ。ということはもしかしてUSB給電可能?

結論としては十分可能と判明。待機電力状態のデスクトップPCからでも充分だったので、500mAくらいで動いていそうな感じ。しかしViliv S5に使っているこのUSBケーブル、秋葉原の「どこか」で買ったやつなんだよな…どこで売っているんだっけ(汗)

仕様を確認したところ、USBケーブルでつなげばPCからデータ転送できる。例えば画像1枚だけにして、PCから定期的に画像の形で表示したいモノを送り出してやれば、あとはスライドショーで勝手にリロードしてくれたりはしないかなー、とか期待。

PCの繋ぎ先…は、CentOS release 5.5(単にアップデートをさぼっているだけで深い意味は無い)。接続してみたところ内臓メモリが/dev/sdb/になったので、mountしてみるとちゃんと見えてる。ほかのUSB Hostやメモリーカードスロットも見えているようなので、ここらに心配はなさそう。

問題は、PCに繋いでいる間は本体が動かないらしいこと。PCから定期的にデータアップロードしようとしてもこれではNG(-_-;

「PCに繋いでいる状態」はminiBポートに通電している状態の模様。PC側からmount/umountしても反応無いので。

で、ケーブルを抜いてみると勝手に電源が落ちるステキ仕様(えぇ仕様のようです)。

はい、しゅーりょー。

んー、USBメモリを繋ぐ機能はあるのだから、逆にPC側をUSBゲストにできれば、そちらのデータを定期差し替えして再読み込みさせる…なんてことはできそうな気もする。Googleると、 USB Server for Linux とか参考になるかもしれない。これはLinuxをUSBデバイスサーバ化するものなので少し毛色が違うけど、要はUSBポートに繋がれたものをリダイレクトするか、本体HDDのパーティションをリダイレクトするか、の違いだろうし。

後は、Mass Strage class周りのコードでも読んでみれ、ということかなぁ。要はUSBポートに対してファイルシステムのデータを送り出してやればいいんでしょ、的な。

多くの「USBでPC同士を通信します」的なケーブルは、実態としてはUSB LAN+LANケーブル+USB LANケーブルのような構成みたいなので、使えないと思う。てか、試しにUSB LANを繋いでみたが、ただの屍のごとく何のリアクションもなかった。

以前購入した「USB経由でPCの内臓光学ドライブをマウントします」ケーブルはもしかしたら有効かも…しれないけど、なんぞスマートでないというかエレガントさに欠けてトレーズ閣下がお怒りになりそうだ。

てか、そこまでしなくても素直に小型モニタを買ってくるとか、7インチクラスのAndroidを安く買ってきてフォトフレームにしたほうが色々高機能なんだよね。

つーことで、取り敢えずPCをUSBゲストにする方法を探したいなー、というメモを残してオチなく終わる。

| | コメント (2) | トラックバック (0)

Software Design 11月号 (2010年バックナンバーPDF付)。

今月号は2010年版バックナンバーのPDFが付いてきているので購入。さて、捨てられる本をまとめておくか…。

Software Designは毎年確実にバックナンバーPDFを付けてくれるので安心感があるのだけど、他の雑誌も例えば「年末にはバックナンバーPDFを出しますよ」と予告・宣言しておいてくれれば、雑誌をせっせと自炊整理する人の助けにもなるだろうし、年末の売り上げも期待できるんじゃないかなー、とか思うのだけど。

ついでに年初の時点で年末のPDF版をAmazonとかで予約できるような体制になっていると、購入忘れが無いというか見込み客確保にもなるんでないかとか。

11月号自体のメインはさくらインターネット大特集!誌面の1/3くらい占めている印象が。さくらちゃんを隅々まで紹介していてとてもエロい(なんぞ)

これ、次は他のデータセンター系インターネットプロバイダとかやらないと不公平ぢゃないですかね?(笑)

あとは、Hack For Japanの活動報告第1回が掲載。プログラマの一人としても、何かできることが無いか活動内容を見直したいところ。

あとは印刷環境特集。Software Designで「プリント環境」って書かれると一瞬印刷のことか基板のことかで悩むのはあたしだけか、あたしだけなのか。

#2011.10.24 追記

購入した11月号を読んでいて、デジタル版があることに初めて気づく。「雑誌オンライン.COM」で購入できるらしい。バックナンバーも買えるし、価格も紙版より100円安いし、Androidでも読める。

取り敢えず今月号を購入して読み比べるか、買っていないバックナンバーを試すか、微妙なところではある…。

あと、先日の記事でぼやいていた週刊ダイヤモンドもこちらでは単品電子版が購入できる模様。

うーん、ぬかった…。

| | コメント (0) | トラックバック (0)

specにp埋め込むなら! 出力をみんなspecに書けばいいじゃない!

割と自虐的に。

モデルのテストやってるとついつい生成した結果を目視確認したくてspecの随所に

p homuhomu

とかやっちゃうのだけど、だったらその目視で「正しい」とみなす値をspecに書いておけば済む話だろー、という。

なんとゆーか、テスト仕様書片手に目視確認してマトリックスシートを塗りつぶしていた癖の悪影響かしらね(汗)

ま、spec書くよりpでちょっと出してみたほうが早い、というか出してみないとよくわからん、という時も確かにあるのだけど。

んー、でも確かにRSpec+FactoryGirlは慣れると楽だわ。utestの味気ないドットが並んでいくより、specdocの一覧が出てくるほうが、どこで失敗しているかもわかりやすいしね。

| | コメント (0) | トラックバック (0)

あぶねーあぶねー。

カラムに一意性持たせたいからって1カラムしかないテーブルにインデックス張るところだったZE!

寝ぼけておるな…ていうか昨日やっぱり寝ていなかったみたいなんだけど、今日の死にっぷりから考えると。

| | コメント (0) | トラックバック (0)

Radiant CMS 0.9.1のExtension開発でFactoryGirlを使う。

RADIANT_ROOT(radiantコマンドで生成するディレクトリ)にspec/factories/を置くべし! ←結論

問題:

  • FactoryGirlは通常spec/factories/以下にテストデータの定義を置く
  • Extensionの場合、vendor/extensions/<エクステ名>/spec/が該当(するはず)
  • だがしかし、ここに定義を置いても読み込んでいる気配が無いんだなこれが
  • あ、FactoryGirlのバージョンは1.2.4 (Rails2なので)

原因:

  • FactoryGirlの検索パスは、初期状態でRAILS_ROOT/test/factories/とRAILS_ROOT/spec/factories/ (factory_girl-1.2.4/lib/factory_girl.rb)
  • Radiant CMSの場合、みょんな小細工がいろいろ入っていてRAILS_ROOT = RADIANT_ROOTになる
  • エクステのディレクトリ内でrake specしても、同様。一度RADIANT_ROOTまで上がって、そこからspecとかを呼び出している
  • なので、FactoryGirlも一生懸命RADIANT_ROOT/spec/factories/を探していたようで。

対策:

取り敢えずの逃げとしては、RADIANT_ROOTにvendor/extensions/<エクステ名>/spec/のシンボリックリンクを作ればOK。

しかしこの方法では複数のextension開発に対応できず、あとRADIANT_ROOTからvendor/extensions/<エクステ名>/spec/へのパスが2種類になってしまうので、何かの拍子に予期せぬ誤動作がでそうで怖い。

しかしextension開発中にいちいち上のほうの階層にテストデータを置きに行くのもたるい。

やり方をまだ確認していないけど、たぶんspec_helperあたりでextensionごとにfactories/の位置をFactoryGirlに教えることができると思うので、それを確立するのが一番良い気がする。

共通で使うテストデータ(たとえばRadiantCMS本体に元からあるテーブル類とか)はRADIANT_ROOT/spec/factories/に置き、extension固有データは各spec/に置く、とかが一番スマートか?

| | コメント (0) | トラックバック (0)

妹の…もといリモートのリポジトリを用意したいので。

一番手っ取り早いのは契約しているVPSとかレンタルサーバにSubversionリポジトリ作っちゃえばいいのだけど、そのVPSを初期化リセットしたくなったらどーするんだとか、いやいや世の中にはgithubってーものもあるんですぜ旦那、とかそんな宇宙毒電波が聞こえる毎日。

リポジトリに突っ込みたいのは、Macbook Airでいじっているソースとか、VPSで構築しつつあるRadiant CMSの自作エクステとか。

最終的に公開することもやぶさかではないけど、今はとても見せられませぬ、というかそこまで本気でやっていないというか。

となると公開共有が前提のgithubはちょっと用途が違うかなー、というかアレは完全プライベートのリポジトリにも使えるのか?<本を読め、買ってあるんだから

さて、どこに置いたものやら…。

| | コメント (0) | トラックバック (0)

エンジニアとしての生き方  IT技術者たちよ、世界へ出よう!

読み始めた本。読了したので更新。しかしこの本、よく見ると初版第1刷の発行日が凄まじいな…。

今のあたしにはそこそこ有益なフレーズが貰えたかも。

P.32-33 "こんな時代だからこそ、自分のやりたいこと・目指すところを明確に定めたうえで、それに向けたキャリアパスを考えながら、職場を選び、自分への投資を積み重ねて行く必要がある。そのためには、現在の日本の景気低迷の原因がどこにあるかをキチンと理解し、その上で自分なりの「立ち位置」を定めて次の行動に結びつけることが大切である"

P.42 "そして、グローバル人材市場において価値のある人材になるためには何を学べば良いのか、どんな仕事を経験すれば良いのか、どんな人的ネットワークを築けば良いのかを常に意識し続けて自分のキャリアパスを創っていく必要がある"

まずは改めて自分への投資を意識していきたいところ。

あとはP.71 「青田刈り」とか。まぁこれについてはあたしの場合、自ら前に飛び出していったところがあるんで刈られたとは思わないけど、最近の就職戦争についてはなんかすごく納得できたかな。

で、これに関連して連想したのだけど。

最近開発サイクルが短くなって常に忙しいような印象を覚えてしまうのだけど、本来はサイクルが短いから常に忙しいのではなく、回転するときはフル回転、その後しっかり休んでまたフル回転、が正しいんだよね。なのに会社的には遊休資材を出すと効率悪いので、がんがん仕事を投下してくるし、受け取る側も仕事が無いと不安で休んでいられない、という状態になる。そして始まるデスマーチ♪

どうも筆者とあたしの性格は、P.182で述べている「公式・定石の暗記が嫌い、自分で解けるまで進まない」というところを考えるにかなり近い感じが。ま、そこで「時間内」に自力で解いて進めたか、途中で止まってしまったかが今の差なんだろうけど。

あたしも数学の方程式とか解くのは嫌いではなかったけど、「これはこーなる」式の覚え方はダメだったし。

しかし、のんびり読んでいるうちに、P.222 での

「ジョブズが本当に偉大なCEOであれば、彼がいなくなっても引き続きすばらしいデバイスを作り続けることができる組織を作ってから引退するはず」

と言う言葉が、今となっては色々な意味でタイムリーになってしまったような。

Blogとか雑誌連載からの再録が多いようなので、書き下ろしよりは気が向いたときにぽつぽつと読める本。

筆者のBlog「Life is Beautiful

| | コメント (0) | トラックバック (0)

宇宙からの毒電波により。

えっちな女子高生ラブなひとが女子小学生に手を出すまでの軌跡(hjklな人がJSに手を出すまでの軌跡)という寝言が聞こえた気がします。

えぇ、もちろんvi使いがJavaScriptに手を出すまでの軌跡、ってことですが何か。

具体的には女子高生男爵とかその辺りれすかね。かすみ遊戯的に。

| | コメント (0) | トラックバック (0)

まどか☆マギカ汚染が広がっているようデス。

本屋で何気に新刊をチェックして、思わず噴きそうに(当然即購入)。こんなところにまで契約が…(笑)

僕と契約してFreeBSD使いになってよ!

…最近FreeBSDとか見ていなかったなぁ…。Macbook Air買ったから、BSDと契約と言えばそうなんだが(Max OS XはBSD系)。たまにはインストールしてみようか?

| | コメント (0) | トラックバック (0)

Mini-ITXを4枚収納可能なATX筐体。

実はMini-ITXのAtom 330マザーが登場したころから実現を目論みつつも資金面の問題とかから実現できなかったネタなのですが、これ。

準備段階として、100円ショップの部材でPCケースを作ってみる。なんてネタもやっていました。ちなみにこの時作った筐体はある日両面テープで済ませた個所が外れて崩壊したり、その後梅雨時にMDFボードにカビが発生したりと散々なことになって廃棄していますが。

で。

マザーが4枚入るMini-ITXケースが発売に 見た目は普通のATXケース (AKIBA PC Hotline!)

相変わらず資金面は辛そうですが。

そもそもなんでコレに興味があるかというと、次のような理由で1つの筐体に複数マザーを放り込めると便利だなー、と思った次第。

  • Mini-ITXのAtom 330(今だとD550のほうが良いか)だと、HTまで使えば論理4コアマザーになる
  • しかも1枚1万円以下、低電力、低発熱
  • お手軽並列コンピューティングを考えた場合、高価なマルチコア+複数HDD+大量メモリのPC上で複数プロセスを実行するより、安価PCを複数用意してネットワークでつなぐほうが、メモリとかHDDの管理面で単純(だと思う)
  • しかしMini-ITXといえど、複数配置は場所を取る
  • だがサーバラックなど一般家屋には言語道断

まー、興味持ち始めた時代はまだVPSとか今ほど普及していないし、実際自分の趣味範囲で並列処理するようなデータをもっているかというと持っていなかったりするわけで、結局実行に移さずじまいだったのですが。

この筐体だと電源系は独立しているようなので、少しずつマザーを増やしたり、壊れたところだけ交換とかも容易にできそうですねぇ。

しかし49,800円か。うちにある小型のMini-ITX筐体(ACアダプタ電源+スリム光学ドライブ+2.5インチHDD)が13,000円だったので×4で52,000円。…んー。お値段としてはあまりお得感は無いなぁ。ケーブル類がすっきりするとか、場所移動が楽、という利点はありそうだけど。

D550マザー1枚1万、メモリ3,000円、HDD1台5,000円×2として、49,800円+(2,3000×4)=141,800円…実際にはもう少し安いかな?

| | コメント (0) | トラックバック (0)

gitのソースコード配布が復活しておる。

よく考えたらGit無いとRadiant CMSのエクステ入れられないぢゃんダメぢゃん仕方ないからEPEL使おう…と思いつつもふと魔がさしてGit本家を見に行ったところ、ソースコードのtar.gzがcode.google.comからの配布に切り替わって復活してる!!

どうやら過去のリリースも一式code.google.comに移住した模様??

ということで早速。

configureは特に指定なし。/usr/local/に入るけどまぁ良いか。パス通せば済むことだし。

粛々とmakeしてmake test。

結果。

fixed   0
success 7146
failed  0
broken  32
total   7278

…なんだbrokenって(汗)

まぁいいか(おぃ)

checkinstallでRPM化をば。

1 -  Summary: [ GIT - Fast Version Control System. ]
2 -  Name:    [ git ]
3 -  Version: [ 1.7.6.4 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ Applications/System ]
7 -  Architecture: [ x86_64 ]
8 -  Source location: [ git-1.7.6.4 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ git ]

こんな感じでいいかな。

出来上がったRPMをインストール。

$ sudo rpm -ivh /usr/src/redhat/RPMS/x86_64/git-1.7.6.4-1.x86_64.rpm
error: Failed dependencies:
        perl(SVN::Core) is needed by git-1.7.6.4-1.x86_64

ぬぐぐぐぐ。

# yum install subversion-devel
Installed:
  subversion-devel.i386 0:1.6.11-7.el5_6.4
  subversion-devel.x86_64 0:1.6.11-7.el5_6.4

Complete!

…が、しかしcpanでうまく入らん…。

こっちか!

# yum install subversion-perl

Installed:
  subversion-perl.x86_64 0:1.6.11-7.el5_6.4

Complete!

なんぞいつか来た道だなぁ、って。

りとらい。

$ sudo rpm -ivh /usr/src/redhat/RPMS/x86_64/git-1.7.6.4-1.x86_64.rpm
[sudo] password for kmamiya:
Preparing...                ########################################### [100%]
   1:git                    ########################################### [100%]

よし入ったらしい。

試しに適当なテストアプリを用意してエクステを拾ってきてみる。

$ script/extension install language_redirect
$ ls vendor/extensions/
language_redirect

大丈夫そう。

| | コメント (0) | トラックバック (0)

さくらのVPSにRadiant CMSをセットアップ

さくらのVPS を導入してRadiant CMSの運用環境を構築するまでのメモ。なお、バージョンが指定された物は、依存関係を解決する過程で特定した物です。2011年9月現在の結果なので、OSや各モジュールの依存状況によって変動が出る可能性があります。最新状況の確認は各自にて。

また、バージョン指定物については「可能な限り最新版、ダメだったら少しずつバージョンダウンしてみる」という手法で解決を図っていますので、例えばrspecとrspec-railsはバージョンがずれており、合わせたほうがキモチ良いなーと思いつつそのままになっていたりします。

ちなみに、あたしはクリーンインストールに成功したこの記録に到達するまで、2回のOSリセットと概ね2回のごり押しをやっていまする。だいたい、1回目で破綻しつつ勘をつかんで、2回目+ごり押しでなんとか押し込むことに成功して、3回目できれいに納める、といった感じ。

記事全体としては、大まかな作業手順導入するRPM導入するgem具体的な手順、となっています。RPMやgemは、実際には導入手順の中で数回に分けて導入作業を行っています。大抵は最初に一括インストールして問題ないはずですが、確認はしていません(4回目をやるのが面倒)。RPMとgemの関係性とかもあるので、一括作業する人は注意。

大まかな作業手順

  1. rubyのインストール(1.8系)
  2. gemsのインストール
  3. railsのインストール(2系)
  4. DB関係のインストール
  5. radiant CMSのインストール
  6. 開発環境構築
  7. Passengerのインストール
  8. 運用環境構築

導入するRPMパッケージ

rubyのコンパイルで使うものたち。ext/の内容物をコンパイルするためのライブラリ類です。あとでアレが無いコレが足りないとやるのが面倒なので、後々必要になりそうなものをあらかじめ選び、導入要件を調べた結果こうなりました。
ncurses ncurses-devel gdbm gdbm-devel openssl openssl-devel zlib zlib-devel readline readline-devel
Rails運用に使うものたち。DB2種。ほかに使いたい人はそれを。sqliteは概ね最初から入っているはず。
mysql mysql-server mysql-devel sqlite-devel
Radiant CMS運用/開発に使うものたち。基本的には開発方面で必要になった気がします。ざっくりXML系ですな。
libxml2 libxml2-devel libxslt libxslt-devel
Passenger運用に使うものたち。
httpd-devel apr apr-devel httpd-devel curl-devel

導入するgem

Ruby on Rails本体。Rails3はあたしが慣れていないせいかそもそも一般流通しているgemが追従しきれていないのか、色々要らぬトラブルが発生するので当面Rails2でいきます。
rails -v 2.3.14
SQLite。これも、最新版(1.3.3)ではエラーになるので。まぁ基本テストで使うものなので多少いい加減でも良いかと。
sqlite3-ruby -v 1.2.5
MySQLについては特にひねりはありません。
mysql
Radiant CMSの開発環境まわり。運用だけならば不要だったように思います。
cucumber cucumber-rails database_cleaner webrat
おなじく、Radiant CMSのうちバージョン指定が必要な物。ちなみに、specぢゃなくてutest使うんだい!という人には不要です。
        
  • rspec -v 1.3.0
  •     
  • rspec-rails -v 1.3.2
Radiant CMS本体。Rails2系です。Rails3系は、radiant3だったかと。
radiant
Passenger。
passenger

手順

多少端折っていますが、実際に打ち込んだコマンドのログ。

まずはRubyとRubyGemsのインストール。前提条件として、RPM化するためにcheckinstallが導入済みとなっています。

rubyについてはインストール先のみ、/usr/に変更しています。単なる趣味というか職場環境がそうなっているからというか、まぁそのあたりが理由。

$ sudo yum install ncurses ncurses-devel gdbm gdbm-devel openssl openssl-devel zlib zlib-devel readline readline-devel

Installed:
  gdbm.i386 0:1.8.0-26.2.1.el5_6.1
  gdbm-devel.i386 0:1.8.0-26.2.1.el5_6.1
  gdbm-devel.x86_64 0:1.8.0-26.2.1.el5_6.1
  ncurses-devel.i386 0:5.5-24.20060715
  ncurses-devel.x86_64 0:5.5-24.20060715
  openssl-devel.i386 0:0.9.8e-20.el5
  openssl-devel.x86_64 0:0.9.8e-20.el5
  readline-devel.i386 0:5.1-3.el5
  readline-devel.x86_64 0:5.1-3.el5
  zlib-devel.i386 0:1.2.3-4.el5
  zlib-devel.x86_64 0:1.2.3-4.el5

Dependency Installed:
  e2fsprogs-devel.x86_64 0:1.39-33.el5 keyutils-libs-devel.x86_64 0:1.2-1.el5
  krb5-devel.x86_64 0:1.6.1-62.el5     libselinux-devel.x86_64 0:1.33.4-5.7.el5
  libsepol-devel.x86_64 0:1.15.2-3.el5 libtermcap-devel.x86_64 0:2.0.8-46.1

Complete!

$ cd ruby-1.8.7-p352
$ ./configure --prefix=/usr/
$ make ; make test

test succeeded

checkinstallでRPM化するにあたり、説明文はyum infoで得られるものをそのまま使います。どうせ個人使用なんで何でも良いといえばそれまでなんですが。

また、checkinstallでは1~4までの項だけを再設定します。Summaryについては同じくyum infoの内容をコピペ。2~3もyumで取ってこれるRPMに合わせることで、あとで入れ替えるときなどに要らぬトラブルが出ないようにします(したつもり)。

$ yum info ruby >description-pak
$ vi description-pak
★Description: の項だけ残して後は削除しておく。

$ sudo /usr/local/sbin/checkinstall
★1~4まで再設定。
1 -  Summary: [ An interpreter of object-oriented scripting language ]
2 -  Name:    [ ruby ]
3 -  Version: [ 1.8.7 ]
4 -  Release: [ p352 ]

**********************************************************************

Done. The new package has been saved to

/usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p352.x86_64.rpm
You can install it in your system anytime using:

      rpm -i ruby-1.8.7-p352.x86_64.rpm

**********************************************************************

$ sudo rpm -ivh /usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p352.x86_64.rpm
Preparing...                ########################################### [100%]
   1:ruby                   ########################################### [100%]

gemについては何のひねりもありません。

$ cd rubygems-1.7.2/
$ sudo ruby setup.rb
RubyGems 1.7.2 installed

Ruby on Railsについては、バージョン指定しているところだけが特殊です。何も指定しないと、Rails3が入ってきます。

$ sudo gem install rails -v 2.3.14

ここで、うっかり忘れていたDB関係を入れることに。sqlite3-rubyのみバージョン指定が入ります。

$ sudo yum install sqlite-devel
$ sudo gem install sqlite3-ruby -v 1.2.5

$ sudo yum install mysql mysql-server mysql-devel

Installed:
  mysql.i386 0:5.0.77-4.el5_6.6           mysql.x86_64 0:5.0.77-4.el5_6.6
  mysql-devel.i386 0:5.0.77-4.el5_6.6     mysql-devel.x86_64 0:5.0.77-4.el5_6.6
  mysql-server.x86_64 0:5.0.77-4.el5_6.6

Dependency Installed:
  perl-DBD-MySQL.x86_64 0:3.0007-2.el5       perl-DBI.x86_64 0:1.52-2.el5

Complete!


$ sudo gem install mysql
Successfully installed mysql-2.8.1

ここで、Ruby on Railsのテストアプリを作ってみて、welcomeページ程度まで表示できることを確認しておきます。

$ rails testapp
$ cd testapp
$ script/server
★http://<IPアドレス>:3000/にアクセス

Radiant CMS関係。試行錯誤の結果、特に開発環境についてはあらかじめ相性問題を解決したgemを導入しておかないと、勝手気ままに依存関係を解消しようとした結果訳の分からない状態に突入する、という結論になりました。

$ sudo yum install libxml2 libxml2-devel libxslt libxslt-devel

Installed:
  libxml2.i386 0:2.6.26-2.1.12          libxml2-devel.i386 0:2.6.26-2.1.12
  libxml2-devel.x86_64 0:2.6.26-2.1.12  libxslt.i386 0:1.1.17-2.el5_2.2
  libxslt-devel.i386 0:1.1.17-2.el5_2.2 libxslt-devel.x86_64 0:1.1.17-2.el5_2.2

Dependency Installed:
  libgcrypt-devel.x86_64 0:1.4.4-5.el5     libgpg-error-devel.x86_64 0:1.4-2

Complete!

$ sudo gem install cucumber cucumber-rails database_cleaner webrat

Successfully installed json-1.6.1
Successfully installed gherkin-2.5.1
Successfully installed term-ansicolor-1.0.6
Successfully installed builder-3.0.0
Successfully installed diff-lcs-1.1.3
Successfully installed cucumber-1.1.0
Successfully installed gherkin-2.4.21
Successfully installed cucumber-1.0.6
Successfully installed nokogiri-1.5.0
Successfully installed mime-types-1.16
Successfully installed json_pure-1.6.1
Successfully installed rubyzip-0.9.4
Successfully installed ffi-1.0.9
Successfully installed childprocess-0.2.2
Successfully installed selenium-webdriver-2.7.0
Successfully installed rack-test-0.6.1
Successfully installed xpath-0.1.4
Successfully installed capybara-1.1.1
Successfully installed cucumber-rails-1.0.5
Successfully installed database_cleaner-0.6.7
Successfully installed webrat-0.7.3
21 gems installed

ここで以下のエラー発生。ただしどうやらドキュメント類が破損したような気配だったので放置。だがしかし、その後のgemも軒並みドキュメント類で「Could not find main page README.rdoc」というエラーが出たようなので、対処したほうがよかったのかも…。

ERROR:  While generating documentation for builder-3.0.0
... MESSAGE:   Unhandled special: Special: type=17, text=""
... RDOC args: --ri --op /usr/lib/ruby/gems/1.8/doc/builder-3.0.0/ri --title Builder -- Easy XML Building --main README.rdoc --line-numbers lib CHANGES Rakefile README README.rdoc TAGS doc/releases/builder-1.2.4.rdoc doc/releases/builder-2.0.0.rdoc doc/releases/builder-2.1.1.rdoc --title builder-3.0.0 Documentation --quiet

この時点で、「Invalid gemspec in [...]: invalid date format in specification: "2011-09-18 00:00:00.000000000Z"」というエラーが大量に出始めて非常にウザくなります。調べたところどうもgemspecの日付フォーマットが実動作にあっていないものがいくつかあるようです。仕様がDateTimeからDateに変わったか、その逆なのでしょうたぶん。

取り敢えず、一通り入れます。

$ sudo gem install rspec -v 1.3.0
Successfully installed rspec-1.3.0
1 gem installed

$ sudo gem install rspec-rails -v 1.3.2
Successfully installed rspec-rails-1.3.2
Successfully installed rspec-core-2.6.4
Successfully installed rspec-expectations-2.6.0
Successfully installed rspec-mocks-2.6.0
4 gems installed

$ sudo gem install radiant
Successfully installed will_paginate-2.3.16
Successfully installed RedCloth-4.2.8
Successfully installed radiant-0.9.1
3 gems installed

先のInvalid gemspec in …を回復させます。 gem list 等を実行するとエラーがどどっと出るので、それらのgemspecファイルを開き、s.dateに代入されている日付の文字列表現を修正します。具体的には後半の時刻部分を削除。

前:"2011-09-18 00:00:00.000000000Z" →後:"2011-09-18"

もう一度 gem list 等を実行してみて、エラーが無くなればOK…だと思います。今のところ障害は無し。

今回構築した環境では、Radiant CMS関連を実行する際にMutex (NameError)というエラーが出ます。これもたぶん標準ライブラリか何かの構成が変わった…用なのですが、対処療法としては require "thread" を追記してやることでエラーが解消します。

今回は、書き換えるファイルが最も少なくて済む方法を検討した結果として次の2ファイルに追記しました。どちらも先頭(RAILS_ROOT =の直後行)に追記しています。

  • /usr/lib/ruby/gems/1.8/gems/radiant-0.9.1/config/boot.rb
  • /usr/lib/ruby/gems/1.8/gems/radiant-0.9.1/lib/generators/instance/templates/instance_boot.rb

テストアプリを作ってみて、Radiant CMSとその開発環境(取り敢えずあたしはextensionを自作したい)が正常動作することを確認します。

$ radiant -d sqlite3 testapp
$ cd testapp
$ env RAILS_ENV=production rake db:bootstrap
$ script/server -e production

★http://<IPアドレス>:3000/にアクセス。
adminログインし、ページ作ったりレイアウト作ったりしてみてDB書き込み含めて稼働することを確認。
$ script/generate extension test_ex
$ script/generate extension_model test_ex xxx
$ pushd vendor/extensions/test_ex/
$ rake spec
★app/models/xxx.rbをちょこっといじってみる
$ rake spec
★xxx.rbをいじった結果が反映されればOK。

$ pushd

| | コメント (1) | トラックバック (0)

Radiant CMS 0.9.1でextensionをgenerateしようとするとgitを要求された顛末。

コトはさくらのVPSにRadiant CMS環境を、開発環境込みで構築しようとして起こりましたさ。

まずRadiant CMSが動くところまでで四苦八苦し(ハックなだけに)。

なんとか動いたぜー次はexntesion開発環境だぜーと思い、おもむろに script/generate extension xxx としたとき、こんなエラーなぞ。

$ script/generate extension page_category
NOTE: SourceIndex.new(hash) is deprecated; From /usr/lib/ruby/gems/1.8/gems/radiant-0.9.1/vendor/rails/railties/lib/rails/vendor_gem_source_index.rb:100:in `new'.
git version   2>&1:sh: git: command not found

まー、この"NOTE: SourceIndex.new(hash) is deprecated"もなんとかしたいのですけどね…。

で、問題はgit様。まぁこの機会に使い方を覚えるぜ?とインストを試みたところ、

  • CentOSの標準yumではRPMが無い。
  • Git本家に行ってソースコードを落とそうとしたところ、ソースのtar.bz2に何度やっても日を改めてもアクセスできない。
  • しかし「gitがダウンロードできない」的なキーワードでGoogleっても何も出てこない。

今日ようやく適切なキーワードを見つけ、真実に行き当たることができましたさ。

曰く、kernel.orgがクラックされた→gitのソースコードはkernel.org配下にある→ミラーは…無いの?(汗)

で、git無しでRadiant CMSのextensionを開発するための回避方法。つまりgit入れない。

radiant-0.9.1/lib/generators/extension/extension_generator.rb を読んだところ、どうもgit.gemが無かったり、Gitの呼び出しに失敗したときはスルーするように実装してある様子。また、件のgit: command not foundエラーは、require "git"した時点で発生します。

なんでgit.gem入れちゃったんだろう…と思っていたのですが、どうもRadiantをインストールしているどこかの段階で要求されたjewelerが依存していたことが判明。で、jewelerとは何ぞや?と調べなおすと、ソウルジェムもといrubygemの作成支援ツールのご様子。まぁ当面は要らないでしょう。

ということでgem uninstall jeweler gitなう。

結果として、

  1. script/generate extension xxxは成功。
  2. rake spec:extensionも成功。
  3. vendor/extensions/xxx/に移動し、rake specももちろん成功。
  4. spec/models/にtest_spec.rbを作成、中に適当な出力命令を仕込んでrake specしたところ、ちゃんと仕込んだ出力命令が実行されて終了。

ここまで動いたので、たぶん一安心かと。

この後もう一度さくらのVPSを初期化、Rubyのインストールから始めてみて、トラブルなく環境構築までできれば運用フェイズに移行しても良いかな、的な。

だがしかし、よく考えると運用環境に開発環境まで持ち込むのは色々危険だぜ?という真実のコトバは割と早い段階から聞こえてはいたのだけど、そこは取り敢えずスルーいたしたく。

| | コメント (0) | トラックバック (0)

gitのソースがダウンロードできないなーと思っていたら。

kernel.orgがクラックされていたのね。そのニュース全然気づかなかったよ。最近、会社命令で情報から遠ざけられているからなぁ…さすがIT系大会社。ま、そもそもgithubがブロックされているしな。

てか、目的はgitを使うことではなく、Radiant CMSをセットアップしていたらgitが無いと怒りだしたご様子なので対処していたところなのですがね。

さぁて、どうしたものかな。

| | コメント (0) | トラックバック (0)

なのはさん vs タッチ。

いえ別に魔法少女 対 野球漫画、では無いです(おぃ)

ここしばらく、思うところあって自分のスキルを一段上げるべく色々画策中です。

で、やはり英語力は上げておく必要があるという結論に達し、以前購入してリッピングまで済ませていた「聞くだけ英語教材」の類をちゃんと使おうということになったのです。

が、そもそも使っていなかった理由というのが、通常音楽を聴いているiPodに入れてしまうと予想外のタイミングで音楽の代わりに英語が流れてしまうので、再生機器を分けたい、しかし機器が無いというところだったのですな。

で、当時それを理由にiPod nanoを買おうかと思い、ふと見たiPod Touch 8GBとの価格差が7000円であることに気づいてしまい、さぁてどちらにしたものか…というところで買わずじまいになっておったのです。

で、今回いよいよ買うぜ!と。

目的を考えると「取り敢えず1アルバムが再生できれば良い」のでiPod Shuffleでもまぁ良いのですが、アレはさすがに使いにくいので値段も考慮してnanoにしようか、と思いつつ、ふと「これってアプリ開発できたっけ?」とか思ってしまい。

単なる音楽プレイヤーだったらアプリ開発しようなんて思いつかないんですけどねー?あそこまで機体性能が上がってくると、アプリ自作できた…かな?とか考えてしまって。

あのサイズでRSSとかTwitterとかメールの新着通知とか出せるようになると、結構面白そうなんだけどなー。あの画面で文章読むには向かないので、新着の通知のみ。

調べたところ、どうもnanoではアプリ開発とかできない様子。そゆ人はTouchに行け、ということらしく。やはりモバイルアプリ開発もスキル向上には必要だな、とか言い訳を付け。

あ、iPhoneはソフトバンクってところで除外ですよ?

次の課題は8GBか16GBくらいか?というところなのですが、適当にさまよったQAサイトで得た結論としては、動画見ないならば多少音楽詰め込んでいても8GBで十分、というようで。

あたしの場合、音楽も聞く(こっちをメインの音楽プレーヤーにするか、今使っているほうをメインのままにするかは微妙)けど、むしろアプリいぢりに走りそうですし。GALAXY Tab使っていても、結局動画とかは見ませんし。ヘッドアップディスプレイがあったらもっと見るかもしれないけどねー。

ということでiPod Touchの8GBをぽちってしまいました。←結論

で…。今日届くのさ(汗)

いやね、昨日の夜時点でiPod Touchにしようと決めたものの、今日の天気で帰り量販店寄るの面倒だなーとか思い、Amazonを覗きに行ったらまだ今日の到着に間に合う時間だったので、今日は台風だしちょっと早く帰ることにして帰ったらTouchが届いていたりすると幸せだよね、とか思ったわけで…。

ごめん。ほんとごめん。クロネコさまマヂごめん…。

あ。AppleCareも忘れないうちに買っておくべきかな…?(ぢつはMacbook airのほうもまだ買っていない)

| | コメント (1) | トラックバック (1)

Being Geek。

今読んでいるのは、Michael Lopp著の「Being Geek」。概ね読み終わったところ。

一章が短いので、通勤電車内で1日30分だけ読んで後は寝よう、とかやっていても1週間くらいで読み終わったかな。途中数回の集中読破があったかもしれないけど。

あたしがGeekかっつーとソコまでは到達していない中途半端野郎だけど、まぁ生き方としてはかなり共感できる。

敢えて言うなら、「左脳デジタル、右脳アナログ」というのがあたしの特性であり、このあたりのカオスっぷりがこのへたれ同人絵描きプログラマ、という困った状態を生んでいるのだろうとは思うが。

閑話休題。

この本はGeek=エンジニアが生きていくための本であると同時に、Geekが後輩Geekをうまく使って仕事していくための本でもある、と思う。Geekが生きていくために必要な転職の方法や面接のコツなんかも載せつつ、マネージャー視点として「困った人」の部類に属する様々なGeekをうまいこと捌くコツなんかも載っている感じ。

基本的にはどちらも日本社会というよりアメリカ社会の枠内だとは思うけどね。いやそもそもこの「日本社会」とかいう枠を設けることがまず誤りではあるのだけど、しかしこの枠を取っ払って生きていくにはそれこそ大気圏を脱出できるくらいの出る杭っぷりが必要なのではないかと思われ。

結局のところエンジニアがエンジニアのまま生きていくには独り立ちしかなく、そのためにはエンジニア以上の存在にならなければいけない、と。その点については大企業に所属していても独立していても変わりはないのだろうけど、残る最大の問題は「そこがエンジニアが生きていける環境であるか」ということなんだろうな。

となると、エンジニアにとって大事なのは「将来管理職になれるか」よりも「生きていける環境か」なのかも。

「生きて」いけない環境であれば、「生きること」に意味は無いのですよ。しかしまぁ、「生きる」ことを放棄するにはかなりのエネルギーが必要だけどね、どちらの意味でも。

| | コメント (0) | トラックバック (0)

ブックマークスティッキーメモ。

本を読みながらとか、システム手帳を見ながらとっさのメモを取りたい時に便利。

普通の付箋紙パックと違い、メモブロック自体がブックマークとして機能できる点が売り。

ビジネス書読んでいてこれはと思うキーワードをメモっておくとか、技術書読んでいて気になる記述を見つけたときとか、手帳眺めながら唐突に全く関係ないこと思い出したときとか、そんな感じに便利。

まぁしかし、挟んでおくとメモブロックの分本が歪むので、読むとき、読んでいるとき一時的に本を閉じたときにページの端にひっかけておくとかいう手が有効かな。普段はシステム手帳のポケットに放り込んであるです。

包装部分に

「ポスト・イットノートを使用しています」「ポスト・イットは3M社の商標です」

さらには

「フセンを使い切った後はサイズの合うフセンをご購入いただきご使用ください」

うん、なかなか潔い態度ですな。

ちなみに、リアル店舗だと東急ハンズ横浜店にて購入できましたさ。

| | コメント (0) | トラックバック (0)

伝統工芸だけが"職人"、芸術家だけが"クリエイター"じゃないと思うのです。

プログラマーだって、サービス業だって、事務職だって「クリエイター」を名乗っていいと思うし、それを自覚して生きるべきなのです。その自覚があれば、違法コピーも本屋で写メも創り手の気持ちを考えもしない軽い発言も、できるわけがないのです。

ということを改めて思い知らされるBlog記事を。

札幌島屋呉服店 店長のきもの?支離滅裂、七転八倒ブログ: 職人さんの心を傷つけ、涙した一言・・・・

「そんなの、同じようなのがリサイクルショップに行ったら1,000円も出せばたくさん転がってるよ!」

だったら貴方はリサイクルショップで1000円で好きなだけ買えばよろしい。安さが価値になる人もいるし、リサイクルにも意味はあるし、それで幸せになれるなら別に否定はしない。

だけど、少なくとも作っている人の前でそれを口に出すな。表情に出すな。そういうところの「空気は読め」。

自分自身が責任を持っている仕事を、「そんなの、誰にでもできるよ」「そんなの、やっても意味がないよ」そう言われたらどう思う?専業主婦とか関係ないよ?「家事なんて、そんなの何の意味もない」って言われて何も感じない?手間はかかるし汚いし自分の時間は取れないし、それでも意味があるから家事をするんでしょ?

あたしはプログラマーで「ソフトウェアを創る」のが仕事だし、趣味程度とはいえ絵描きで同人誌作っていて職人芸的世界に生きているほうなんだとは思うけど、そもそも資本主義ってのは「何かを生産する」ことで対価を得るシステムなのよ。

サービス業は「人が対価を認める行為を創る」仕事だし、事務職は「他人の事務作業を代行することで相手の時間を創る」仕事なのよ。みんなそうやって創ったモノや他人の時間や誰かが認めた価値に対して、給料や代金や名誉という対価を受け取り、受け取った対価を資本として他の価値に対価を支払うことで経済が回っていくものなのよ。

自分の価値を自覚すれば自ずと相手の価値も尊重できるし、そのうえでは違法コピーも盗撮も、できるわけがない。作者の前で作品の価値を否定するなんて、できるわけがない。

なぜなら、それは自分自身の価値を否定する行為だから。

ここで間違えてはいけないのが、「作品を創った人の価値を否定する」のと「作品を否定する」ことの違い。前者は最低だけど、後者は作者のためになる場合も、ある。ただし、作品を否定したうえで相手の価値を認めることが必須。

今回のBlogで紹介されているエピソードは前者だろうな。仮に後者だとしても、言われた当人が深く傷ついてしまったのであればケア不足だし。

伝統芸能だから価値があるとか、一つ一つ手作りだから価値があるなんていうのは「伝統」に胡坐をかいた詐欺。まぁそういう意見もあるさ。

でも、それを詐欺だと思うのはそこに価値を見いだせないからであり、逆に「伝統」であるというだけで価値を見出す人だっているの。有名作家だというだけで殴り書きラフのコピー本が1000円でも、地獄に堕ちるべきダミーサークル+x時間待ちで並ぶ人だっているのと同じ。

ま、書店で1000円の委託販売しているものをイベント会場で800円で買って20000円で売っているところから買おうとするのはちょっと止めたほうが良いが。いやそこで「イベント会場でナマで手に入れたものが欲しいんだ!」というなら止めることもないが。

結局どこに価値を見出すかなんて個人単位でしかないのだし、価値観は他人が変えるものでもないし。ましてや価値を創った本人の前で価値がないことを叫ぶのは、自分自身が最低の人間ですって叫んでいるようなものよ。

この職人さんは、そんな自分の価値すら認められない人の意見は聞かなくてよろしい。耳に入っても忘れてしまえ。テンション上げてひとしきり八つ当たりして愚痴りまくってですっぱり忘れるべき。

そんなことで手を止めるのはもったいないよ。

…ところで、リサイクルショップでゴミのようにゴロゴロしている着物って、質はどれほどのものなの?いくらなんでもその値段だと、状態とかかなり悪そうな感じがするのだけど。でもそれでも欲しい人はいるからリサイクルショップは運営できるのよね。日焼けした100円処分品の古書にお宝が発見できるのと同じ論理よね。

そういう意味だと、「リサイクルショップで1000円でごろごろしている程度のモノ」にだって1000円の価値はあるのさ。「そんなもの」と呼んではいけないのさ。

本当に価値がないのは、価値がないと自ら認めた人間なのかもね。

| | コメント (0) | トラックバック (0)

日本マイクロソフト、ビジネスアプリの簡易開発ツール「Visual Studio LightSwitch 2011」

プログラマとしてもこれはちょっとチェックしておくべきソフトかな、と。やっぱり自腹購入かな…。

以下抜粋。

日本マイクロソフト、ビジネスアプリの簡易開発ツール「Visual Studio LightSwitch 2011」  (Impress クラウドWatch)

日本マイクロソフト株式会社は27日、ビジネスアプリの簡易開発ツール「Visual Studio LightSwitch 2011 日本語版」(以下、LightSwitch)を、MSDN Subscription会員向けに提供開始した。企業向けのボリュームライセンスは8月1日、パッケージ製品は8月5日に、それぞれ発売される。

LightSwitchで作成されたアプリケーションでは、Excelへのデータエクスポートに対応。さらに、SQL Server、SQL Azure、SharePointやサードパーティのデータソースに対しても、容易なアクセスを行えるという。

対応OSは、Windows 7/Vista/XP SP2以降、Windows Server 2008/2003 R2/2003 SP1以降。

パッケージの参考価格は、通常版が3万7800円(税別)、アカデミック版が4800円(税別)。なお、2012年1月末までの期間限定で、約33%の割引を行うキャンペーンも実施される。

33%割引きで25,326円…か。まぁそれなりのお値段であることには変わらず。

公式サイトで評価版が入手できそうなので、あとで使ってみよう。

| | コメント (0) | トラックバック (0)

Macbook Air。

…ちなみに旧版(Core2 Duo)ですにょ?

我慢できなくなってポチったのが先々週

届いたのが18日

新作発表されたらしいのが20日

ある意味完璧な死亡フラグの立て方というか、ほとんど最終生産ラインだったんぢゃなかろーか、とか。

そしてこのレビューは意味があるのか(笑)

もとい。

購入したのは11インチのApple Storeカスタマイズモデル。SSDは128GBで。容量的には64GBでも十分かなと思っていたのですが、CPUを1.6GHzにできるのが128GBのほうだけだったので。

CPUは1.6GHz Core2 Duoに、メモリは4GBに変更しています。Airは購入後のカスタマイズが効かないので、最初で積めるだけ積み込まないといけませぬ。

外付けアクセサリー類は全部無し。この辺りは家電量販店やAmazonで売っているのを確認したので、必要になったら順次購入。Apple careも、1年以内に購入すれば良いのでとりあえず後回し。

到着後手持ちの機材を試したところ、USB LANはBUFFALOのLUA3-U2-ATX がさっくりと認識。

キーボードはESCが小さく、Windowsの全角/半角があるところに1キーがある都合上、気がつくと画面上に"1"が乱舞していることが(汗)

あと、カーソルキーが小さいとか、deleteの上にある電源キーをなぜかBackspaceと誤認しそうになるとか問題は多少発生していますが、まぁこのあたりは慣れるしかないよね。

キーのサイズとか打鍵感覚はなかなかよろしい感じ。

マウスパッドはマルチタッチということを失念していて、スクロールを思い出すのに一苦労というか。ホームポジションのままスクロールさせようとすると、2本指を合わせるのにちょっと辛い感が。やり方が悪いのでしょうか…。

あとPCと違ってきっちりクリックしないといけないのが少し戸惑う感じ。PCだと軽くタップすれば反応するからねぇ。

モニタを閉じた瞬間即時静かにスリープしてくれるのは便利。使い方がPCよりPDAとかスマートフォン系になる。やー、WindowsでもSSD化してきっちり割り切って使えばこの程度にはできるとは思うんだけどさ。

あと、この薄さだと鞄の書類エリアに放り込めるってのは素晴らしいねぇ。本体も金属で剛性があるし、SSDで衝撃にも強いし、この「手軽に扱う」ためにもこいつはクッション入りケースではなく、バリアジャケット式で保護すべきだと思うさ。

しかし、買ったのがMacなのに常時展開しているのはターミナルだっていうのはどうなんだ?すっかりRuby on Rails開発環境になってますさ?

プログラミング環境としては中々良いので、今度ちゃんとSubversionなりGitなりのリポジトリを確保しないといけないなぁ、とか。

導入したソフト:

  • Evernote
  • Sugarsync
  • Firefox
  • Thunderbird

ThunderbirdについてはIMAP4接続で、ローカルデータとかSPAMフィルタとかをSugarSyncでWindows PCと共有。今のところ、特に支障は感じていない。

Firefoxもいい加減Syncを設定すべきか、うぅむ。

そういえばVAIO Zを常備しなくなったので、Eye-fiのデータ行先を考えないといけない。アレってMac使えたっけ??

購入した機材:

エアージャケットを取り付けてみたところ、非常にしっくり収まる上に透明度も高く、取り外しも可能という優れもの。ここは一つ、ジャケットの裏側にデコるしかないのではと画策中。

しかしこいつの背面はいただけませぬ。Macbook本体のゴム足込みでジャケット入りしてしまうのですが、ゴム足の代わりとしてシール式のゴムが付属しています。これをゴム足部の頂上に貼れ、という指示。
シールの接着剤はそこそこ粘度が高いのですが、それでも丸みを帯びた突起部に貼ったシールなんぞあっという間に剥がれるのです。鞄に放り込んで1日を待たずして既に2枚脱落。

しょーもないので全部剥がしてしまったけど、やっぱり滑るので何か手を打たないと。案としては、ジャケットのゴム足部分を開口して、本体のゴム足を露出させようか…とか検討中。この厚みのポリカーボネートとなると、ドリルで開口+糸鋸で切断…でもなんか苦労しそうでちょっとアレだけど。

しかしまぁ、アレだ。新型Airはポートのレイアウトとか変わったようなので、ジャケットもちゃんと新型を待ったほうが良いと思うよ?

| | コメント (3) | トラックバック (1)

Mockとガチャピン(ちげーよ)

Radiant CMSをいぢる過程でRspecの使い方を勉強中なわけだが。

ここでモデルのテストをするにあたって関連モデルのインスタンスを作るにはfixturesをつかうのが良いのかMock/Stub(Mockかな?)を使うのが良いのか。

ナウなヤングとしてはMockっぽい気もするけど、よく考えたらActiveRecord実装があるのにそいつをわざわざ作りこむのは本末転倒な気もする。

てことは素直にfixturesを使うのが良いのか。しかしRadiantのextensionジェネレータはfixtures置き場を作ってくれていないのだがいったいどこに置けと?ぬぐぐ。

あと、Rspecは確かに自然言語っぽくて読みやすくはなるのですが、英語上等的な色が強くて一種のイジメだと思います、はい。

普段 "should" なんて読みも書きもしないからスペルミス連発ですがな…。

| | コメント (0) | トラックバック (0)

Radiant CMS 0.9.1でextensionのrake specがエラーになる場合の対策。

もっと良い方法ないのかなぁ…。Radiant自体のほうに覚え込ませたいんだが。

環境は ServersMan@VPS。

対策:

$ radiant <application_name> として環境構築した場合、 <application_name>/vendor/plugins/ に必要なgemを入れる。ln -s でもOK。

調査過程:

確認した環境では rake spec とすると次のようにエラーが出る。

Missing these required gems:
  rspec-rails  >= 1.3.2

rspec-railsのバージョンチェックをしているのは、 <application_name>/config/environments/test.rbの末尾。ここでは「"#{Rails.root}/vendor/plugins/rspec-rails"というディレクトリが存在したらバージョンチェックを省略という実装になっている。

で、Rails.rootは環境変数などで制御しないと <application_name> となる。これはextension用のRakefileに出力コードを書き込んで確認。

なので、<application_name>/vendor/plugins/ にrspec-rails/を置いてやれば良い。

gemをインストールする過程で色々できた気もするけど、今回はすでにrspec-rails-1.3.2をインストールしてしまっていたので、ln -s で rspec-rails-1.3.2/ を rspec-rails、rspec-1.3.2/ を rspec として配置。

取り敢えず先のエラーが出ず、spec自体のエラー(だってまだ実装していないモン)が出るようになったので、良しとしたい。

ここに毎回gem入れるのは面倒だし、複数環境構築すると個々に同じファイル群ができてしまうのは嫌だなぁ…。RAILS_ROOTあたりを適当に設定すれば対応できそうな気がしないでもないが…。

| | コメント (0) | トラックバック (0)

力技デスマーチ担当。

VBAを使ったことがないのに開発環境的にVBA以外選択肢が無くてあまつさえ1.5日で完成させるなんて…。

こ ん な の 絶 対 お か し い よ ? !

| | コメント (1) | トラックバック (0)

Logicool K360 + M515。

自宅デスクトップメイン魔神のキーボードとマウスをリニューアルしました。導入したのは次の2つ。

本当はこのあたりでBlueToothとかにしたかったのですが…。どーもピンとくる奴がいなくて。今回はK360のほうにピンときてAmazonで予約購入、到着に合わせてマウスも新調、といった順序。古いワイヤレスキーボード+マウスセットは予備的に動かしている別のデスクトップに移動でする。

使用OSはWindows 7 Pro. x64。コレ、Linuxとかはどうなんでしょうね…?

K360の使用感。

この機体の売りはコンパクトかつフルキーボード、いわゆるアイソレーションタイプ。あと電池の持ちが良くてUnifying対応。あたし的にはコンパクトフルキーボードで省電力というあたりを評価して購入に踏み切りました。

アイソレーションは真紅Pad EdgeとかVAIO Zで使っていますが、なんとなく「個性がない代わりに当たり外れもない」印象があります。キータッチが似たような感じになるというか。なので試し撃ちなしで買ってしまったのですが。

実際に使った印象としては、Amazonレビューにもありますがキーが少し重めです。あたしはあまり気にならないというか、元々打ち付けてしまうタイプなのでこのくらいのほうがちょうど良いきもします。打鍵感がちゃんとあるから…かも?

キーが分離していることで位置を誤認する、ということは取り敢えず出ていません。普通に打てています。これは、ノートPCで慣らされたから、という説もありそうです。

本体は過度の丸い長方形なので、邪魔な時そこらに立て掛けることも可能。背面はゆるい傾斜がついてゴム足が5か所(4隅+中央手前)。折り畳み式のチルトスタンドもついています。

サイズ的にはノートPCと一緒に持ち歩けそうですな。

 

難点。

  • カーソルキーが小さい。辛い人はNumLock解除を活用すべきかと。あたしは文章入力中はあまりカーソル使わないし、コーディングはすっかりviになってしまったのでhjklが使えればOKとも。えっちな女子高生万歳(1文字足りてないぞ)。
  • deleteキーが小さい。しかもちょっと遠い。ホームポジションで見て、左手のESCくらいの距離に右手のDeleteがある感じ。
  • FN(Function)キーが右にしかない。かつ、コンテクストキーがFN連動。CtrlとAltは両側に残っているので、あまり文句はいえませんがね…。
  • 製品画像ではまったく気づかなかったのですが、なんぞ変な模様がついておる(笑)

M515の使用感。

ごく普通の、左右対称形状のマウスです。余計なボタンもありません。あたしはマウスを両手で使うので、左右対称であることは結構重要なのです(腱鞘炎防止に基本左手、精密作業時のみ右手)。

スクロールホイールは左右移動も対応。あと押下状態でマウス移動によるスクロールができるボタンとか、ホイールのロックを外して高速スクロールとかの機能があります。

あ、色が赤いからと言って3倍速いスクロールとかはできない筈デス。

裏面がフラットでほこりが入りにくいのと、どこでも(人の肌でも)きちんと検知できるというのは良いですな。しかしあたしはマウスパッドの上で使っていますが。

側面の親指/薬指が当たる持ち手部分はラバーっぽい質感なので、指が滑りません。

難点。

ホイール部分の中央ボタン機能がありません。ホイール自体のロック/アンロックになっています。あたしはニュースサイトを見ているとき、気になる記事をとりあえず別タブに開いて読み進めていく癖があるので、ちょっと気に入らないかな。

Unifying。

Unifyingアダプタは足元に置いたPCの背面USBポートに直結していますが、今のところ電波は安定している様子。マウスのほうが時々反応しないのが、電波のせいなのかドライバのせいなのかが、微妙です。

アクティブウィンドウを切り替えた瞬間に反応がおかしくなる傾向があるので、ドライバ系じゃないかなー、と思うのだけど。

アダプタ1つで1台接続する分には、勝手に認識していくようです。2台目以降を繋ぐ場合は、専用ソフトをインストールしてペアリグする必要があります。

マニュアルによると、アダプタに対して複数機器はOKだけど、アダプタ複数に単一機器はできないそうなので、余ったアダプタをあちこちのマシンに刺しておく…という使い方はNGなのですね。

あと、1アダプタ6台接続、余ったアダプタは本体に仕舞っておきましょう…といっても余るもんは余るので、「5つ集めてLogicoolに送ると記念品がもらえる」とかやらないんですかね?アダプタのリサイクルにもなると思うのですがっ

| | コメント (0) | トラックバック (0)

こぁ i7 PCの電源を交換。

我が家最強を誇る小悪魔、 こぁ i7 920マシン。半年ほど前に電源を抜いたまま放置していたところをパワー重視系の開発機として使うべく、1TBのHDDも追加してDebianにて復活させたのですが…。

マザーボードのリチウム電池が切れていたので交換した後、どーも調子が悪かったのです。

具体的には、

  • エラー音連続発振で起動しない
  • 起動するけどOSが一通り立ち上がった直後フリーズ
  • ふと気付くとフリーズ
  • 画面上にsyslog書き込みに失敗した旨のメッセージを出しつつ操作不能(操作のたびにsyslogに書こうとするのでシャットダウンもできず)

等々。状況的にBIOS周りを疑い、実際CMOSクリアをするとしばらくは調子が良いのでBIOSが飛びかかっているかな…と思っていたのです。

で、そろそろメモリなど適合部品も手に入りにくくなってきたし、いっそCPUとM/Bとメモリを売り払ってしまおうと思っていたのですが…。最後に改めてGoogle様に聞いてみたところ、電源の劣化ではないかと言うことに気付きましたさ。

実際、HDDを取り払った状態での12V電圧が11.795Vといった具合にすこーし低いのです。他のは一応定格超過しているのですが。

という事で、売り払う前にまずは電源交換を。別の こぁ i5機も電源を強化したかったところなので、電源ユニットが無駄になることはないであろうと。

購入したのは Huntkey パソコン用ATX電源500W BK-5000

お値段そこそこ、12Vが4ライン化されているのが少し安心?(よくわからない)

80Plusへの適合はしていませんが、まぁ24時間連続フル稼働させるもんではない予定なので、当面あまり関係は無いかと。連続稼働させる気になったら再交換しても良いかも。

M/B側への供給ケーブルは、電源ユニット直付けなので、不要なラインがあっても外せません。まぁまとまりが良いので、それほど邪魔とは思いませんけどね。ケーブル帯も数本付いてきます。

従来搭載しているのも500Wなので、ここは変更なし。実は こぁ i7機に最近安いメモリを増設してしまい、12GBメモリ機などと言う意味不明な化物化も考えてはいるのですが…(12GBメモリだとたぶん500Wぢゃ足りない)。

ま、その場合はこの500Wを こぁ i5機に積むので良し、と。

本日交換して電源チェックしたところ、HDD繋いでも12Vは定格超過。代わりに5Vがすこーし下回っているけど…だ、大丈夫かな?(汗)

現状4時間ほど連続運転させていますが、特に障害は出ていない様子。まぁこれで様子見ですかねー。


しかし古い電源ユニットはどうしたものか…。それほどシビアな用途で使わなければ、まだまだ使える…かな?

参考までに、搭載した Core i7 920機の構成:

  • Core i7 920
  • メモリDDR3 10600 2GB×3 (6GB)
  • HDD 50GB ×1 (OS用)
  • HDD 1TB×1 (大量データ用)
  • Matrox Milleunium II 8MB (当初はGeForce積んでいたのですが、調子が悪い時に省電力狙いで交換、そのまま)
  • 光学ドライブなし

いたって普通というか、たぶんCPUの割にしょぼい構成だと思うので、あんまり参考にはならないかも。特にグラフィックボードのチョイスが(笑)

でも、このグラフィックボードでもDebian lenny + LXDE だとちゃんと使えるンよ?

元々SSHログインで使う予定だったので、ビデオは「とりあえずコンソールが映れば良い」程度という判断。

ちなみに、当面の主用途はお仕事で関係する技術の予備研究/検証用にJava開発に使いまする。Javaはメモリを喰うので、安いVPSだと足りんのです。

| | コメント (0) | トラックバック (0)

自宅Linux (Debian 5.0.6; lenny)にmaven2を入れる。

別に大したことはしてないけど、備忘的に。

Java VM自体はOpenJDK x64のbuild 1.6.0_0-b11を使用。

maven2は当初apt-getインストールしようとしたのだけど、時間がかかるのと依存パッケージにGNU Javaっぽいのが居たのが気になったので中止。最新版を直に導入することにします。

最新版はApache maven2の公式サイトからダウンロード。当初sourceコンパイルしようとしたのですが、コンパイルにはmaven2自身、もしくはantが必要となっており、今回素っぴんの状態からJava開発環境を導入している都合上両方共インストールされていなかったので、これも断念。バイナリを使用します。

とは言え、バイナリはtar.gzなりzipなりを解凍するだけでOK。個人用なので自分の環境に置いていてもいいのだけど、ここはきちんと配置することに決定。

置き場所は、javaコマンドの場所に近いところとして/usr/lib/に。バージョン番号付きで配置後、update-alternativeで/usr/binに導入。

# cd /usr/lib
# tar xfz apache-maven-3.0.2-bin.tar.gz
# update-alternatives --install /usr/bin/mvn mvn /usr/lib/apache-maven-3.0.2/bin/mvn 1 --slave /usr/bin/mvnDebug mvnDebug /usr/lib/apache-maven-3.0.2/bin/mvnDebug --slave /usr/bin/mvnyjp mvnyjp /usr/lib/apache-maven-3.0.2/bin/mvnyjp

確認。

$ ls /usr/bin/mvn*
/usr/bin/mvn  /usr/bin/mvnDebug  /usr/bin/mvnyjp
$ /usr/sbin/update-alternatives --display mvn
mvn -状態は auto。
 リンクは現在 /usr/lib/apache-maven-3.0.2/bin/mvn を指しています
/usr/lib/apache-maven-3.0.2/bin/mvn - 優先度 1
 スレーブ mvnyjp: /usr/lib/apache-maven-3.0.2/bin/mvnyjp
 スレーブ mvnDebug: /usr/lib/apache-maven-3.0.2/bin/mvnDebug
現在の `最適' バージョンは /usr/lib/apache-maven-3.0.2/bin/mvn です。

JAVA_HOMEを.bashrcにセットした後、適当なディレクトリで

$ mvn archetype:create -DgroupId=test -DartifactId=TestBuild

で色々とダウンロードなぞ開始。mvnの気が済んだところでおもむろにTestBuildに入り、mvn compile。

無事終了したので、試しに実行。

$ java -cp target/classes/ test.App
Hello World!

ということで動作確認終了っと。

| | コメント (0) | トラックバック (0)

Serversman@VPS (debian) にJava開発環境を構築

検証用に。

しかし最近はServersManサーバとしても使うようになっているので、リセットボタンが手軽に押せなくなっています。そろそろもう一台契約するか、ファイルサーバかサンドボックスサーバのどちらかを、用途に合った別サービスに移すことを考えるべきかも。

オチ:

Javaを満足に動かすには今のエントリープランではメモリが貧弱らしい、ということに落ち着きましたとさ。次回は他社も含めたVPS検討。どっとはらい。

方針:

  • できるだけOSパッケージをそのまま使う。
  • あまりみょんな事はしない。
  • 当面の用途はSpringフレームワークとApache Winkの検証用。お仕事目的だけど、帰宅後に思いついたことがあったとき、試す環境が無いので。お仕事サーバは乗っけないよ。そもそもディスクが大幅に足らんし。

導入作業:

まずSun JDKを導入。以下のDebianパッケージ。

  • sun-java6-jdk
  • sun-java6-doc
  • sun-java6-javadb (当面不要だけどなんとなく)

依存関係補正後;

以下の特別パッケージがインストールされます:
  avahi-daemon dbus dbus-x11 gsfonts-x11 java-common libasound2 libavahi-common-data
  libavahi-common3 libavahi-core5 libdaemon0 libdbus-1-3 libnss-mdns libxtst6
  sun-java6-bin sun-java6-jre
提案パッケージ:
  avahi-autoipd equivs libasound2-plugins binfmt-support sun-java6-demo sun-java6-source
  sun-java6-plugin ia32-sun-java6-plugin sun-java6-fonts ttf-baekmuk ttf-unfonts
  ttf-unfonts-core ttf-kochi-gothic ttf-sazanami-gothic ttf-kochi-mincho
  ttf-sazanami-mincho ttf-arphic-uming
以下のパッケージが新たにインストールされます:
  avahi-daemon dbus dbus-x11 gsfonts-x11 java-common libasound2 libavahi-common-data
  libavahi-common3 libavahi-core5 libdaemon0 libdbus-1-3 libnss-mdns libxtst6
  sun-java6-bin sun-java6-doc sun-java6-javadb sun-java6-jdk sun-java6-jre
アップグレード: 0 個、新規インストール: 18 個、削除: 0 個、保留: 23 個。
67.6MB のアーカイブを取得する必要があります。
この操作後に追加で 198MB のディスク容量が消費されます。

…と思ったんだがなんぞjavadocは面倒なことを言い出したので中止した。

ということで入りましたよ。

$ java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode)
$ javac -version
javac 1.6.0_22

Tomcatの導入。以下のDebianパッケージ。

  • tomcat5.5

依存関係補正後;

以下の特別パッケージがインストールされます:
  ant ant-gcj ant-optional ant-optional-gcj gcj-4.3-base jsvc libbcel-java
  libcommons-beanutils-java libcommons-collections-java libcommons-collections3-java
  libcommons-daemon-java libcommons-dbcp-java libcommons-digester-java
  libcommons-el-java libcommons-launcher-java libcommons-logging-java
  libcommons-modeler-java libcommons-pool-java libecj-java libecj-java-gcj libgcj-bc
  libgcj-common libgcj9-0 libgcj9-0-awt libgcj9-jar libjaxp1.3-java libjaxp1.3-java-gcj
  liblog4j1.2-java liblog4j1.2-java-gcj libmx4j-java libregexp-java libservlet2.3-java
  libservlet2.4-java libtomcat5.5-java libxerces2-java libxerces2-java-gcj
提案パッケージ:
  ant-doc libbsf-java liboro-java libxalan2-java junit jython antlr libjdepend-java
  libgnumail-java libxml-commons-resolver1.1-java libcommons-net-java libjsch-java
  javacc libbcel-java-doc libcommons-beanutils-java-doc libcommons-collections3-java-doc
  libavalon-framework-java liblogkit-java classpath-doc ecj libgcj9-dbg
  libservlet2.4-java-gcj libxerces2-java-doc libapache2-mod-jk tomcat5.5-webapps
  tomcat5.5-admin
以下のパッケージが新たにインストールされます:
  ant ant-gcj ant-optional ant-optional-gcj gcj-4.3-base jsvc libbcel-java
  libcommons-beanutils-java libcommons-collections-java libcommons-collections3-java
  libcommons-daemon-java libcommons-dbcp-java libcommons-digester-java
  libcommons-el-java libcommons-launcher-java libcommons-logging-java
  libcommons-modeler-java libcommons-pool-java libecj-java libecj-java-gcj libgcj-bc
  libgcj-common libgcj9-0 libgcj9-0-awt libgcj9-jar libjaxp1.3-java libjaxp1.3-java-gcj
  liblog4j1.2-java liblog4j1.2-java-gcj libmx4j-java libregexp-java libservlet2.3-java
  libservlet2.4-java libtomcat5.5-java libxerces2-java libxerces2-java-gcj tomcat5.5
アップグレード: 0 個、新規インストール: 37 個、削除: 0 個、保留: 23 個。
1 個のパッケージが完全にインストールまたは削除されていません。
38.5MB のアーカイブを取得する必要があります。
この操作後に追加で 93.9MB のディスク容量が消費されます。

またもsun-java6-docが入ろうとした。

maven2の導入。以下のDebianパッケージ。

  • maven2

依存関係補正後。

以下の特別パッケージがインストールされます:
  antlr libantlr-java libantlr-java-gcj libclassworlds-java libcommons-cli-java
  libcommons-codec-java libcommons-httpclient-java libcommons-lang-java
  libcommons-net-java libcommons-openpgp-java libdoxia-java libganymed-ssh2-java
  libjdom0-java libjsch-java libjtidy-java liblogkit-java liboro-java
  libplexus-classworlds-java libplexus-component-api-java
  libplexus-container-default-java libplexus-interactivity-api-java libplexus-utils-java
  libplexus-velocity-java libslide-webdavclient-java libwagon-java libwerken.xpath-java
  libxalan2-java libxalan2-java-gcj velocity
提案パッケージ:
  libclassworlds-java-doc libcommons-httpclient-java-doc libcommons-openpgp-java-doc
  libdoxia-java-doc libjtidy-java-doc libgnumail-java libplexus-classworlds-java-doc
  libplexus-component-api-java-doc libplexus-container-default-java-doc
  libplexus-interactivity-api-java-doc libplexus-utils-java-doc
  libplexus-velocity-java-doc libwagon-java-doc libxalan2-java-doc libbsf-java
  libxsltc-java velocity-doc
以下のパッケージが新たにインストールされます:
  antlr libantlr-java libantlr-java-gcj libclassworlds-java libcommons-cli-java
  libcommons-codec-java libcommons-httpclient-java libcommons-lang-java
  libcommons-net-java libcommons-openpgp-java libdoxia-java libganymed-ssh2-java
  libjdom0-java libjsch-java libjtidy-java liblogkit-java liboro-java
  libplexus-classworlds-java libplexus-component-api-java
  libplexus-container-default-java libplexus-interactivity-api-java libplexus-utils-java
  libplexus-velocity-java libslide-webdavclient-java libwagon-java libwerken.xpath-java
  libxalan2-java libxalan2-java-gcj maven2 velocity
アップグレード: 0 個、新規インストール: 30 個、削除: 0 個、保留: 23 個。
1 個のパッケージが完全にインストールまたは削除されていません。
12.9MB のアーカイブを取得する必要があります。
この操作後に追加で 41.3MB のディスク容量が消費されます。

JAVAHOMEをセットしないとmaven2は動かない。javaコマンド自体は/usr/bin/にあるけど、こいつはalternativesで管理されているのでJAVA_HOMEは別の場所。

$ /usr/sbin/update-alternatives --list java

/usr/lib/jvm/java-6-sun/jre/bin/java

$ export JAVA_HOME="/usr/lib/jvm/java-6-sun/"

あとでちゃんと.bashrcとかも変えよう。

…mvn --versionですら、heapが足らんと文句を言うので、

export MAVEN_OPTS=-Xmx64m

も追加実行したところ動くように。よく見るとjavaでも同じ現象。ServersMan@VPSのEntryプランだと、Javaはきついか?

その後、createを走らせようとしたところで致命的な自体に。-Xmxを100mまで変えてみたところ、指定値が確保できるメモリ量より大きくなりすぎて失敗するか、Maven2のほうが指定値より多くのメモリを要求して失敗するかの2パターンに収束。ダメっぽいデス。

OS的には、150MB程度まではメモリ残っていたようではあるのですが…。

Entryプランだと保障256MB、最大512MBなので、タイミングを選べばもう少し動く可能性はあり。ただ、Javaは元々メモリ喰いなので、「運が良ければ512MB環境になって動く」ではNG。となると、最低限次レベルのStandard、保障512MBの世界が必要…。

この価格帯になると他社のVPSサービスも視野に入ってくるので、一度全体的な調査・検討が必要なようです。

| | コメント (0) | トラックバック (0)

kernel 2.6.35.5をdebian (lenny)にコンパイルして導入。

目的:

VAIO Z (VPCZ12AGJ) にdebian (lenny)をインストールしようとしたところ、有線LANが認識せず。Googleをさまよった結論としてここはe1000eドライバをあてがう必要があり、これはkernel 2.6.31以降でサポートされ、lennyはkernel 2.6.26である、ということに。

kernel 2.6.31自体はdebianでコンパイル使用できる実績があるようなので、自力コンパイルに挑戦してみる。

選択したカーネルは2.6.35.5。http://www.kernel.org/で公開されていたstable最新版。これで問題が出るようなら、順次古いものに切り替えていく予定。

資料:

概ね前者。「公式の」やりかたとして後者を確認しつつ読んでいたけど、別にみょんなこと(失礼な…)はしていないみたいなので前者にそのまま従うことに。

  1. Yet Another Diary; Debian Lennyでのカーネルコンパイル
  2. Debian リファレンス; 9.7. カーネル

環境構築:

取り敢えず基本的なものと、資料に記載されているものを一通り。

fakerootってなんぞ?とか思ったけど、rootっぽいことができる環境を用意してくれるようね。しかし前者の資料に従った結果全部sudoしてしまったので、結局使わないのであった。どっとはらい。

  • g++
  • kernel-package
  • bzip2
  • build-essential (どーもこれにg++入っているっぽい…)
  • libncurses5-dev (つい出来心でmake menuconfigを起動してみたら要求された)
  • fakeroot

あとは国内法に則って粛々とコンパイルを進めまする。途中で釈放なんてしないモン!

コンパイル中の調整:

以下のエラーが発生。grep対象のinclude/linux/compile.hは存在せず、近いものはcompiler.h。しかしこの中には"LINUX_COMPILER”なる文字列は存在しない。

compiler.hに対してこのgrepを実行しても、出てくるのはヘッダファイルの読み込みチェックに使用する"#ifndef __LINUX_COMPILER_H"周辺なので、どうも目的にあっていない気がする。

uname -a >> debian/buildinfo
echo using the compiler: >> debian/buildinfo
grep LINUX_COMPILER include/linux/compile.h | \
           sed -e 's/.*LINUX_COMPILER "//' -e 's/"$//' >> debian/buildinfo
grep: include/linux/compile.h: そのようなファイルやディレクトリはありません
echo applied kernel patches: >> debian/buildinfo

資料1のほうを確認すると、同じエラーは出ていないものの、"compile.h"に関する記載が見つかる。include/generated/compile.hというものがあるらしい。こちらのファイルを確認したところ、LINUX_COMPLIERとしてコンパイラ名に関する文字列が定義されていたので、たぶんこっちが正解と判断。

ビルド環境下でgrep -R "compile.h" * として、修正対象を探す。debian/ruleset/targets/common.mkが該当するらしいので、これを修正。

make-kpkg cleanは省略して再度コンパイル。

ここは通った後、資料1にあった問題が発生したので記述どおりに対応、再々度コンパイルして完走。

あとは、出来上がったパッケージをインストール、再起動、e1000eドライバを使用するように設定したところ、無事ネットワークに接続しましたとさ。

次は無線LANとWiMAXだが…。なんかこいつらは既に認識しているっぽい気配なんだよな…。

| | コメント (0) | トラックバック (0)

> 真実を知る勇気

似非管理者の寂しい夜 -真実を知る勇気-

Twitterのリスト経由で見つけたBlog。

元・一部上場企業(会社合併消滅までもうすぐだ(笑))の力技担当プログラマとしては、なかなかに興味深い記事。

確かに力技は最初っから依存しないほうが良いし、完璧な手順が確立できるならそれが最良。

でも。

完璧な手順ってのはたいてい崩れるものだし、コレに頼り過ぎると崩れたときの対応が効かない人財(あえてこっちを使ってやろうぜ)が生まれるだけ。

1から10までの完璧な作業手順がいざ崩れたとき、頼られるのは「力技を行使できる人」なんだよねぇ。そしてあたしの所属部署で「力技」が必要になった時集結するのは、今の会社より規模の小さいところから移籍したメンツというあたり、やっぱり小回りのきく下請けのほうがこういうスキルって高いんだろうね。

あたしは綿密な手順書より完璧な作業記録を推したい。だってたまに、手順書通りにやっても再現できない作業ってのがあるし!手順書もメンテしろよーぅ(泣)

作業手順書はTodoリスト程度に留めておいて、そこに実記録と作業時注意点を書き込んで残す…というのが一番良いと思うんだけどなぁ。

「力技しかできない人」はたぶん2流。

「力技もできる人」なら1流を名乗っても良いんじゃなかろうか。あたしはむしろこっちを名乗りたい。

でも、QA部門にすら「力技デスマーチ担当」と公認されているあたしは、敢えて言うなら「邪流」なんだろう…。もはや出向研究員でフリーダムだし。

| | コメント (0) | トラックバック (0)

もう少しなんだが。

Twitterを契約したので、そっちで喚いた妄言をまとめてBlogに放り込もうとRubyでスクリプトを書いていたのですが、TwitterのRSSから当日分だけを取り出してHTML化、メールで送信…まではできたものの、なぜかそれをココログが受け付けてくれず。

テスト用と保存用を兼ね、サーバに専用のアカウントをつくってそこへRubyで送信、メール転送でココログへ…とやっているのですが、

  • Fromがよろしくないのかと試しにmailコマンドで送り出した時の自動設定なFrom:のアドレスをココログに登録してもNG。
  • もっと単純化しようと、Rubyで直にココログアドレスを送ると、「Please receive your mail before sending」でエラーに。
    うぅむ、本番プログラムは同一サーバ上なので、SMTP通っていないんだな、たぶん。
    しかし、RubyでPOP before SMTPまで書くのは面倒だ…。

まぁ、とりあえずPCや携帯のメール宛にはログを持っていけるようになったので、当面これでcron稼働させておいても良いのだけど。

ちなみに、おなじよーな”車輪”が既にいくつも存在しているだろうということは承知してまする。とりあえず自作してみようかと。

| | コメント (0) | トラックバック (0)

ServersMan@VPSの環境構築#3。

rubyの状態を確認したところ、どうもビルド時点で色々とライブラリが足りていなかったことが判明。要るモノをチェックして、ビルドし直し(や、個別にビルドできるのは調べてわかったんだけど、面倒なので)。

rubyビルド環境のext/にあるモノを調べる。以下のスクリプトでライブラリを叩いてみて、LoadErrorになったら足りないぞ、ということで。

$ cat Setup |perl -ne 'next if $_ =~ /#option /;next if $_ =~ /#Win32API/;next if $_ =~ /^$/;$name = substr($_, 1);print $name."\n";system( "ruby -r $name" );'|grep LoadError

この時点でzlib-devel、openssl-develまでは入れていたので、足りないとわかったのは以下。各々内容を確認して、入れるかどうか決める。

  • curses
    …端末操作ライブラリらしい。面白そうだから入れる。yumで指定するときは、ncursesになるので注意。
  • dbm
  • gdbm
    …dbmかgdbmのどちらか片方あれば良さ気。gdbmを入れる。
  • readline
    …入れる。
  • tcltklib
  • tk
    この2つはGUI系なので、入れない。
  • あとWin系のが1つ混じってたけどそれは見なかった方向で。

yumで各々の実行ランタイム(?)の有無をチェック後、develをインストール。

Dependencies Resolved

==========================================================================================
Package                    Arch           Version                   Repository      Size
==========================================================================================
Installing:
gdbm-devel                 i386           1.8.0-26.2.1              base            36 k
ncurses-devel              i386           5.5-24.20060715           base           1.6 M
readline-devel             i386           5.1-3.el5                 base           146 k
Installing for dependencies:
libtermcap-devel           i386           2.0.8-46.1                base            56 k

Transaction Summary
==========================================================================================
Install      4 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

で、rubyをもう一度configureしてmakeしてmake test。

そしてrubyのパッケージづくりとインストール。

$ sudo /usr/local/sbin/checkinstall --fstrans=no

なんか、ファイルコピーがみょんに時間かかるわね…。

念のため、できたRPMの内容をチェック。

$ rpm -qp --list /usr/src/redhat/RPMS/i386/ruby-1.8.7_p249-1.i386.rpm

大丈夫そうなので、インストール。

$ sudo rpm -ivh /usr/src/redhat/RPMS/i386/ruby-1.8.7_p249-1.i386.rpm

確認。
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]
$ which ruby
/usr/bin/ruby

あと、省略するけどライブラリ類の有無も、必要分を調べたときと同じスクリプトでチェック。

よしよし。次はgemsを入れて、いよいよRuby on Railsの導入へ。

RubyForgeでRubyGemsの最新版を取得。

$ sudo ruby setup.rb
RubyGems installed the following executables:
        /usr/bin/gem

$ which gem
/usr/bin/gem
$ gem -v
1.3.6
$ gem list

*** LOCAL GEMS ***

で、Railsをいよいよ入れるですよ。

$ sudo gem install rails

Successfully installed rake-0.8.7
Successfully installed activesupport-2.3.5
Successfully installed activerecord-2.3.5
Successfully installed rack-1.0.1
Successfully installed actionpack-2.3.5
Successfully installed actionmailer-2.3.5
Successfully installed activeresource-2.3.5
Successfully installed rails-2.3.5
8 gems installed

$ rails -v
Rails 2.3.5

$ rails testapp
$ cd testapp/
$ script/server --port=2222
=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:2222
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2010-04-20 23:57:02] INFO  WEBrick 1.3.1
[2010-04-20 23:57:02] INFO  ruby 1.8.7 (2010-01-10) [i686-linux]
[2010-04-20 23:57:02] INFO  WEBrick::HTTPServer#start: pid=9320 port=2222

動いた…かな?

http://183.181.170.141:2222/へアクセス。

画面は出たんだけど…"About your application’s environment"クリックしたら、sqlite3アダプタが入っていなくてエラーに。ま、これは仕方ないやね。

調べてみるとそもそもyumでsqlite-develが入っていないと言うオチがつき、面倒なので一応終わったことにする。

あ、21日の2:00からメンテやるみたい。一応screenは落としておこう。

| | コメント (0) | トラックバック (0)

ServersMan@VPS の環境構築#2。

Rubyはまぁmake test通っているからいいだろう、という結論にしてみる。

一応checkinstallでRPM化しておこう。ということで1.6.2をコンパイル。

Checkinstall 1.6.2

すわっ!?makeに失敗。「msgfmtが無い」とか言ってるし。…gettextパッケージに入っているらしい。

出典:パッケージリビルド時に msgfmt: command not found というエラーがでる。

日付がやたら古いけど、まぁ定番アイテムってことだろう。

$ sudo yum install gettext

Dependencies Resolved

==========================================================================================
Package              Arch              Version                   Repository         Size
==========================================================================================
Installing:
gettext              i386              0.14.6-4.el5              base              1.4 M

Transaction Summary
==========================================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 1.4 M

Installed:
  gettext.i386 0:0.14.6-4.el5

Complete!

うむ、入れたさ。

$ make
$ sudo make install

で、まずは自分自身をRPM化する。…っと、rpmbuildが無いわ。

$ sudo yum install rpm-build

Dependencies Resolved

==========================================================================================
Package              Arch            Version                       Repository       Size
==========================================================================================
Installing:
rpm-build            i386            4.4.2.3-18.el5                base            301 k
Installing for dependencies:
patch                i386            2.5.4-29.2.3.el5              base             64 k

Transaction Summary
==========================================================================================
Install      2 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 366 k

Installed:
  rpm-build.i386 0:4.4.2.3-18.el5

Dependency Installed:
  patch.i386 0:2.5.4-29.2.3.el5

Complete!

$ sudo /usr/local/sbin/checkinstall

/usr/src/redhat/RPMS/i386/checkinstall-1.6.2-1.i386.rpmができた。--force付きで上書きインストール、rpmが認識できるようにしてやりませぅ。

$ sudo rpm -i --force  /usr/src/redhat/RPMS/i386/checkinstall-1.6.2-1.i386.rpm

とりあえずここまで。

| | コメント (0) | トラックバック (0)

ServersMan@VPSの環境構築#1。

まずはscreen -Rしておこう。

そういえば、 sudo時のaudit_log_user_command(): Connection refusedについてはGoogleるとこんな記事が。

http://d.hatena.ne.jp/tullio/20080930/1222788803

見なかったことにする、もしくは最新のsudoを使うらしい。

sudo新しいのがyumで取れるみたい。
Installed Packages
Name       : sudo
Arch       : i386
Version    : 1.6.9p17
Release    : 5.el5

Available Packages
Name       : sudo
Arch       : i386
Version    : 1.6.9p17
Release    : 6.el5_4

なので更新。
$ sudo yum update sudo

Updated:
  sudo.i386 0:1.6.9p17-6.el5_4

Complete!

どれ、
$ sudo ls /root
audit_log_user_command(): Connection refused

ち、だめか。

さてもさてもコンパイラを。
Name       : gcc-c++
Arch       : i386
Version    : 4.1.2
Release    : 46.el5_4.2

$ sudo yum install gcc-c++

Installed:
  gcc-c++.i386 0:4.1.2-46.el5_4.2

Dependency Installed:
  cpp.i386 0:4.1.2-46.el5_4.2                    gcc.i386 0:4.1.2-46.el5_4.2
  glibc-devel.i386 0:2.5-42.el5_4.3              glibc-headers.i386 0:2.5-42.el5_4.3
  kernel-headers.i386 0:2.6.18-164.15.1.el5      libgomp.i386 0:4.4.0-6.el5
  libstdc++-devel.i386 0:4.1.2-46.el5_4.2

Complete!

入れた。次はRuby。

Rubyのソースを取得。1.9は職場でえらい目にあったので、学習して1.8最新版で。
ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p249.tar.bz2

rubyは/usr/local/が初期状態だけど、職場の環境(というかRHELの環境)に合わせて/usr/に入れる。
$ ./configure --prefix=/usr

まぁアレだ。並列コンパイルとかはやめておこうか。一応時間を計測。
$ time make

real    2m17.749s
user    0m51.361s
sys     0m3.532s

これも(むしろこれが)長いよね。
$ time make check

screen使っておけば切断してしまっても処理とかログとか残るので、こういう長い処理のときは有効やね。
てか、今WILLCOMで繋いでいるし! (In 横須賀線グリーン車<疲れたんだよ今日…)

1950 tests, 1343768 assertions, 2 failures, 52 errors
make: *** [test-all] Error 1

real    15m8.793s
user    5m50.252s
sys     0m9.370s

なんかエラー出てるけど、ざっと見ると

53) Error:
test_soapbodyparts(WSDL::SOAP::TestSOAPBodyParts):
Errno::EADDRINUSE: Address already in use - bind(2)

こんなのがいくつか出てるんで、たぶんhttpdが上がっている状態でport 80を奪い合った結果…かしら?
まぁそろそろいったん終了。

自宅にたどり着いたので、続きを。エラーの内容をちゃんと見る。

  1) Failure:
test_too_big_to_s(TestBignum) [./test/ruby/test_bignum.rb:103]:
<RangeError> exception expected but was
Class: <NoMemoryError>
Message: <"failed to allocate memory">
---Backtrace---
./test/ruby/test_bignum.rb:103:in `<<'
./test/ruby/test_bignum.rb:103:in `test_too_big_to_s'
./test/ruby/test_bignum.rb:103:in `test_too_big_to_s'
---------------


これはメモリ不足か。あきらめるしかないね。
あとは案の定、port 80関連。

Apache2を止める。
$ sudo /sbin/service httpd stop
Password:
audit_log_user_command(): Connection refused
Stopping httpd:                                            [  OK  ]


で、再びテスト。
$ time make check

test_soapbodyparts(WSDL::SOAP::TestSOAPBodyParts):
Errno::EADDRINUSE: Address already in use - bind(2)


エラー再び。Googleで回避策を漁る。

…!そうか、port 80はrootでないと確保できないか?

$sudo bash -c "time make check"

…改善しない。

仕方ないのでいったんrootに降りて、別の環境で.configureからやり直してみる。

今make check中だけど…エラー出てるな…。これで同じモノが出るようなら、もっときちんと状況確認すべきですな。ライブラリとか、足りてないかも知れないしね。

(や、素直にyum install rubyしろ、という噂も…)

…寝るか。明日から二人に分離しないといけないし!

…とか言っていたら、make check終わった。エラー変わらず。SOAPとか使うつもりないし、吐いているのWebrickだし、もうこのままで良いかなぁ…。

あー。エラーログ見直してみたら、なんかインストールする前から「/usr/bin/rubyが無ぇっ」とかやってるのね。
てか、READMEによるとrubyはmake testまで通れば良いんだったか…。make checkがあるとついそっちまで通したくなってしまうのだけど…。面倒だからこのままイクかー。

リモートゆえ、何かトラブった時のリカバリが面倒なので、危ない橋は渡りたくないんだけどなー<ならばyumで1.8.5を入れろよ

| | コメント (1) | トラックバック (0)

ServersMan@VPS開通デス。

うーん、やっぱり本格的にいじれるのは週末やね。

取敢えず

  • 初回ログイン
  • rootパスワード変更
  • 環境チェック
  • 作業用アカウント作成

…あたりまでやっておこう。

dfの結果:

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/simfs            10485760    527652   9958108   6% /
none                    131072         4    131068   1% /dev

うーん、予想通り、HDD容量10GB=OS込で10GBですね。とはいってもこの時点で残り9.5GB余っているので、まぁそんなに困るモノではなさそうだけど。

ところでこれ、思いっきり単一パーティションなのですが、本格的運用サーバ用途で考えると問題出たりしないんでしょうかねぇ…?

yum listの結果:

…貼り付けるとえらいことになるので省略。しかしこれ、OpenOfficeとかFirefoxとか、X-Window関連も入っているような…。
インストール済みパッケージについては、ダイエットが必要かもしれませんな…。

「デスクトップ」とかで入れたのかなぁ…。

開発環境:

あー。しかし開発環境類は入っていない感じ。java、rubyのほか、C/C++コンパイラ系も見当たらず。まずはこの辺からか…。

unameの出力とかlib64/がないあたりとか、32bit版かこれは…。まぁ上位プランでもメモリそんなに多くないし、どうでもいい問題ではあるわね。

要調査:

作業用ユーザ作って、sudoerに指定してログインし直したのだけど、sudo実行すると出てくる以下のエラーは何?sudo自体は結局成功しているみたいだけど。

$ sudo ls /root
audit_log_user_command(): Connection refused

まぁこのあたりで寝るか。今しがたFirefoxも落ちた(むしろWin7が落ちた)ことだし。

| | コメント (0) | トラックバック (0)

ServersMan@VPSの開通予告が来ました。

…危なかったよ…。

メール振り分け設定の優先順位の都合から、アダルトサイトなDTIのほうに入っちゃってたよ…(笑)

もとい。
ServersMan@VPSから開通予告が届きました。

2010年4月14日(水) 13:00~

だそうデス。なんで時間まで指定しているんだろう…。まるで怪盗予告のようだ(笑)

ま、あたし平日は普通に仕事なので、接続できるのは夜…か、気が向いたときにモバイルで忍び込んでみる程度が関の山かと思いますがっ。

明後日なので、作業手順くらいは練っておいてもいいかもね…。

あと、残り2つのプランについても案内が。

※キャンペーンとして、現在、 最大3ヵ月無料を適用させていただいておりますが、7月末までのプラン変更であれば、最大3カ月無料を引き続き適用させていただきます

とのこと。

これで、当初申し込みを躊躇っていた「すぐ使ってみたいけど対象プランがまだ開始していなくて、しかも無料キャンペーンは1回限り」という悩みは解消です。

あー。となるとプラン変更時データの移行はどんなふうになるんだろ。

解約+契約なら普通データ消えるわね。仮想サーバ機器/OSの設定が同じなら、rsyncかなにかでガッ、と逝くのが楽そうではあるけどね。

ま、今は趣味でつついてみるだけなので、最初のEntryプランで好き放題いじり倒して、その記録を元に次のプランできっちり構築し直す、なんて行動計画でも良さ気だけど。

FAQに「Q.ディスクの容量変更はできますか?」「A.プラン変更をしてください。」とあるのを見ると、もしかするとプラン変更ではディスクとメモリの割り当てだけ設定変更して、環境はそのまま残る…という可能性もありそう?

あ、そういえばこのディスク容量、「OS込で10GB」なのか「OS除いて10GB」なのか、どっちだろうね。今ざっと見なおしたところでは、説明 が無いような気がするけど。後者はOSバージョンによって微妙な増減が面倒だろうから、やっぱり前者かなぁ。

だとすると、Entryプランの実空き容量って多くても7GBとか、そんなんだったり?ま、明後日にははっきりするので、今更問い合わせてみること もないけどね。

さてさて、まずは何からしてやりましょうかね。

仕事柄「弾幕はCPUパワー(違)」的にマシンをぶん回すことが多いので、そっち系のベンチマークも回してみたい気もするけど。まずはBLASTでもつっこんでみようか。

| | コメント (0) | トラックバック (0)

や、別にいいんだけどさ…。

Snapshot

「メディア掲載情報」としてカウントするなら、とりあえずサーバー割り振ってよ、とか思った。ちょっとだけ。

Googleの検索結果と比較すると、自動収集というわけでもないみたい。プロの広報+申し込んだ人…かなぁ…。

しかし割り当てが来るのは何時の事やら。

| | コメント (1) | トラックバック (0)

ServersMan@VPSに申し込んでみました。

プランはEntryで。現在「2週間以内に提供」らしいです。

こーいうのに限って、「2週間のうちに残り2プランが開始した」か、「2週間は来ないだろうと思っていたら翌日開通してあたふた」の2択になったりするんですよね(笑)

| | コメント (0) | トラックバック (0)

BUFFALOのタッチレボリューションキーボード(Linux編)。

まー別に何の意外性も無く、普通に使えたわけですが。

起動時にUSB接続しっぱなしだと認識しないのは、キーボードのせいかPCの個性か、はたまたCentOSのインストールディスクの個性か。

インストール後の起動では特にトラブル出なかったので、深く追求しないことにしよう。うん、それがいい(笑)

マウスボタン、スクロールモード、センサー部の左クリック、全て問題なしの様子。どうせWindowsキーが左ボタンで殺されているので、ある意味非Windows機向きかもね。

確認したのはCentOS 5.4をネットワークインストールから。前述したとおり、起動直後USBを刺し直さないと認識しないトラブルあり。が、キーボードが悪いのかは不明。

| | コメント (0) | トラックバック (0)

テスト屋さんを募集するサイトで。

いきなりバグが発動するというのはこれ如何に?

ごめんよ、ようやく公開にこぎつけて、しかも翌日は休みだわーい、とかやっているであろうところに、いきなりバグレポート出して。

今頃泣きながらデバッグしてるのかなぁ、とか、あのタイミングであの種のバグ(編集機能で空欄の個所に初期値が入り、しかも削除できない)はきっと周辺確認で尾を引くだろうなぁ、とか、そんなことを想像すると哀れで思わず顔がにやける風味。

| | コメント (1) | トラックバック (0)

save_beforeはFswiki だ>あたし

正しくはbefore_save。

仕事で使ってるRails 1.2.6にもちゃんとある。

ちゃんぽんで使うと、たまーにこう言う事態に陥る…。

| | コメント (0) | トラックバック (0)

Ruby on Railsでデータの抽象化をしてみる。

まー、仕事で必要だったので。あと、何度か挑戦してはハマっていたので、後々のために考え方を記録。

だいたい実現できそうな感触にはなったのだけど、はたしてこれは規約違反なのかどうかのか…。コードに無理はないと感じているので、たぶん許容範囲とは思うけど…。

しかしRonRはつくづく複合キーに弱いな。

目的:

異なるModelで表現すべきデータを、相互に関連付ける。つまりはハイパーリンクというか、RDBの構造そのものというか。

作っているものとしては、研究プロジェクトとその成果と報告書をかきあつめて関連を示す、というようなモノ(どこでみょんな問題に巻き込まれるかわからんのでソノモノは書かないけど、これだけ書けば十分な気も)。

問題:

  • 同種Model同士なら2点の関係を示すリストを作り、belongs_toで各々を示してやれば終了…なのだけど、異種Modelになると:class_nameに指定する内容がデータ依存で変わってしまい、コードベースで定義できない。
  • 同種Model同士のリストをModel数作ればいいのだけど、関係を示す部分のコードがほとんど同じになることが確実で、非常にうざい。てか、RonRの原則にも反していると思うし。
  • 同種Model同士のリストを作っていくと、テーブルもその分増えていくので嫌。
    なので、共通のテーブルを1つ作り、そこに「どのModelのデータか」を記録することにした。

駄目だったこと:

  1. Moduleでベース部分作って、その中にbelongs_to書いてやれば、includeした先のクラスで展開されないかな…。
    →C/C++の#include的に動いてもらえればベストだったのですが、Moduleでもコード自体は解釈されてからincludeが発動するのですね…。
  2. ベースクラス作って、そこにbelongs_to書いて、
    :class_name => self.name
    みたいにすれば継承先のサブクラスでselfの部分を動的に解釈してもらえないかな…。
    →selfはベースクラスになっちゃいますな…。

今試していること:

  • belongs_toはサブクラス(実際にModel同士を連結するクラス)に記述する。その代り、コピペで済むように書式は全部統一し、:class_nameは
    :class_name => self.name
    にする。これで、車輪の再生産も最低限の労力で済む。
  • ベースクラスは、共通使用するテーブルの名前定義と、コーディング支援用の共通処理を書く場所にする。
  • テーブルに「どのMolelのデータか」を示す情報を書くところは、ベースクラスでダミーのメソッドを用意し、ベースクラスに実装したbefore_save()で呼び出す。
    あと、今使っているRailsがsave_before/afterが無い時代のもの(汗)なので、save()をオーバーライドしてこいつらを呼びだすところもベースに実装。これで、Railsをアップデートしたときに修正するところも少なくて済む。
    [2010.01.18 更新; よくよく見たらbefore/after_save()だった。動かないわけだよ…]
    (Railsもアップデートしないといけないんだけど、それやると動かなくなるコードがちらほらあって…(汗))

で、ざっくり以下のような感じ。手元には当然ソースなんて持ってきていないので、記憶から再コーディングですがー。なので細かいところははしょっているし、多少のミスは見なかったことで。

class Relation < ActionRecord::Base

  # 同一Modelごとに順序を保ちたいので、連番をつけてます。その最大値をとる。
  def max_relation_order
    max_rec = Relations.find( :first :condition => {
        :source_id => self.sorce_id,
        :related_id => self.related_id,
        :relation_class => self.relation_class    # これが格納しているデータのModelを示す
      }, :order => "relation_order desc" )
    return max_rec.relation_order
  end

  # Javaだとabstractの代わりに例外を投げるメソッドを書くのは普通だと思っているの
 # だけど、RonR的にはどうなんだろうね…。
  # 「コード読めばわかるだろ」的な思想は、コードを読まない/書かない/仕事しないを
  # モットーにしているサラリーマンプログラマがいる世界では通用しないので、却下。
  #
  # ユニットテストコードのほうで「set_relation_class()が存在すること」を強制すれば良い
  # 気もしてきた…。
  def set_relation_class
    raise "Please set relation_class!"
  end

  def before_save
    set_relation_class
    @relation_order = max_relation_order + 1
  end
end

class ProductRelations < Relations
  belongs_to :relation_source, :class_name => 'Product', :foreign_key => 'source_id'
  belongs_to :related, :class_name => 'Product', :foreign_key => 'related_id'
  # …conditionsでrelated_classを指定しないとダメかなぁ…。

  def set_relation_class
    @relation_class = 'Product'
  end
end

こんな感じだったかなぁ…。で、今ユニットテストで検証中、save()周りがちと怪しかった気がした…。

ProductRelationは、ほかにProjectRelationとかArchiveRelationとか色々…。リンク先レコードの実在証明はbelongs_toがしてくれたと思うし、その他の検査要素は値の範囲とかになるはずなので、validate()もベースクラスで共通化できるかも。

本当はRelationのユニークキーを複合キーにしたかったのだけど、複合キーのサポートはベータ版の機能を導入する必要があるのと、それが使っているRailsで動くのか不安があるのと、そもそもrelation_order以外全部キーにしないとレコードを一意にできない、という可能性に気付いて止めた。

#2010.01.19 更新

save_before/after→before/after_saveの間違い。ちなみにsave_before/afterはFSFikiあたりと誤認した可能性がちらほら。

| | コメント (0) | トラックバック (1)

Wake On LANで電源ボタンの代わりはできないか?

小型LinuxサーバにボタンとMACアドレスの管理テーブルを載せて、ボタンを押すと対応するMACアドレスでWOL信号を発信、とか。

最近のPCはWOL対応多いみたいだし、起動対象PCにはLANケーブルさえ繋がっていれば良いので、電源ケーブルを引きずり出すより手間が無いかと。

問題はボタンで、自作するにはハード系と、Linuxのドライバまわりの知識が必要。比較的楽な実装として、2案。

案1) USB機器を登録して、差し込んだら起動。

試したことは無いけど、特定のハードが繋がったら特定の処理を、というバッチは書けるのかな〜、と。

指定のUSB機器でパスワードと連動、というソリューションは見た記憶があるので、多分イケるか?
鍵で起動するサーバみたいではあるけど、個人で頻繁にOn/Offには面倒かも。

案2) 特定のキーボードからの入力に対応して起動。

案1の要領で起動用キーボードを指定しておき、例えば数字に応じて特定の処理を。

メインキーボードからのキーマクロでも良いとは思うけど。

個人レベルでの扱いには、こっちのほうが楽かも。キーボードは10キーでも増設しておけばいいかな。

MACアドレスの登録はWeb画面で。ついでに、画面からの起動にも対応しておけば、リモート起動もOKに。

…誰か作って(笑)

| | コメント (0) | トラックバック (1)

NetWalkerガリガリ活用術。

うーん、モバイル機器としては、この手の本が出るのが遅かったねぇ>NetWalker

内容としては、ざっくり

  1. 概観の説明。
  2. 無線LANとかイー・モバイルとかBlueToothな接続の設定方法。
  3. 便利なLinuxアプリの紹介。消費メモリ量のチューニングなど。
  4. 電子辞書導入(EPWING形式)。
  5. リカバリMicroSDカードや本体カーネル周りの改造方法。デスクトップ環境入れ替えたり。
  6. Fedora導入。

といった感じ。3つめ辺りから雲行きが怪しくなり、最後の2つで一気にレベルが跳ね上がりますが、全体としても最後の2つに手を出しかねない人を向いて書いている節が。

ファイルシステムの解説とか、メモリやバッテリー消費を減らす方法とか、SSDの温存とか、「安くて小さいネットブック!」とか思って手を出した初心者(いるのか?)を救済する手段には役立ちません。むしろ混乱するか。

てか、初心者向けの本はのっけの13ページ目でCPUコアのブロック図なんて載せない(笑)

向いているのは、「なんかUbuntu積んだモバイル機があるらしいぞ」と手を出したLinuxを比較的常用しているあたり。むしろ廃人臭がしなくもないところ。

PCでのクロスコンパイル方法、クロスコンパイルしたモノを導入する方法とかもあるので、手を出そうとしている人は見ておいて損はないかも(いや、自分で調べれば良いんだけどさ…。面倒だし)。

本体も辞書モデルならAmazonお急ぎ便で明日には届くようなので、廃人の方はこの際揃えて連休を過ごせばいいのさね(笑)

てか、本体SSDがまさか基板直装とは思わなんだ。つまり劣化したら本体ごと買い替えってことかい!せいぜいメーカー送りだと思っていたのだけど。早いところSDカードベースの動作にするべきか…。

ところで、うちのNetWalkerはこの間ウィルコムモデム導入を試みたあたりから無線LANが効かなくなっているのですが、いったいどうしたものやら…(汗)

リカバリが面倒だなぁというか、本体SSD消耗したくないなぁ。

あ、いつの間にか液晶保護フィルムやらレザーケースが出ている。

| | コメント (0) | トラックバック (0)

Ruby on Railsのテーブル名とモデル名(モデルクラス名)を相互に変換。

Rails環境外でやりたいとき(や、挙動確認したかったので):

  • active_supportをrequire。具体的には、ライブラリの位置をgemから探し出してruby -Iに指定、その後require。
  • テーブル名→クラス名は、"table_name".classify。
    さらに、ここからインスタンスまで作りたいときは、model_obj = eval( "table_name".classify" ).new。
  • クラス名→テーブル名は、"class_name".tableize。
    たぶん、たいていはmodel_obj.class.name.tableize、とやることになりそう。
  • 詳細はActiveSupport::Inflectorのドキュメントを参照。ほかにも色々。

| | コメント (0) | トラックバック (0)

Rubyでオーバーライドしたメソッドを呼び出したい場合。

モジュールの場合は、上書きされる側をaliasで別名作って、別名で呼び出す。

クラスの場合は、super()で呼び出す。

…そう言えば、mix-inの結果として複数モジュールから同名メソッドを持ち込んでしまった場合は、どうなるのだらぅ?

| | コメント (0) | トラックバック (0)

RubyのMix-inにハマる。

えぇー、解決はしたんですがなんか有り得ないハマり方をしたので、記録。

Rubyでログ解析ツールを作るにあたり、Mix-inのやりかたを実践しようとして、まずは簡単なコードを書いたのです。

module TestModule1
  def test_method1()
    p "hoehoe"
  end
end

この程度。本当に誰でもできる簡単なお仕事。

で、まずは軽ーく実行してみようと思い、ruby -eでちゃちゃっとテストコードを書いてみた。

$ ruby -e 'include TestModule1; test_method1();'

…みたいな感じ。ちなみに、どのコードもうろ覚えなので、些細なことは気にせずに。

ハイ動きません。当然ですが。不可解なエラーが出まくりでした。

正しくは、こんな感じにしないといけなかったのです。

$ ruby -e 'require "testmodule1"
class TestClass1
  include TestModule1

  def initialize
    p "hogehoge"
  end
end

# main.
tester1 = TestClass1.new
tester1.test_method1()'

で、何が一番問題だったかと言うと、requireを忘れているとかそういうことではなくて。

「Mix-inっていうのはモジュールで定義したコードをクラスに導入することを言うんだ」

という事実に思い当らなかったこと(requireも最初意味がわからなかったけどさ)。

まぁRubyのリファレンスもちゃんと読まずに拾い読みだったのだけど、このあたりのことは、あまりに当然すぎるのか、モジュールの説明を全部読んでも載っていなくて。

なんというか、もう10年近くもC++とJavaをやってきたんだから、気付いて当然だろうという感じだったのですが…。なんで気付かなかったのかを思い返してみると、

「Rubyがオブジェクト指向言語ということをすっかり忘れていた」

これなんです。で、なんで忘れていたかと言うと、どうもあたしがRuby on RailsからRubyを始めており、さらに

「Ruby on Railsで手続き的なコードしか書いていなかった」

というのが根本にあった気がします。

RonRは本当に良くできているので、書くべきコードなんて個々のアクションだけ。

しかも担当しているWebアプリは、あらかじめ条件付けされたページごとに、表示すべきデータをDBから読む、といった程度の仕様なので、なおさら手続きに没頭することになるのです。まー、せいぜい文字列加工したり文字列加工したり文字列加工したりだね。

結果、スタンドアロンのツールを作るまでクラスやモジュールなんて作ろうとも思わなかったので。Mix-inなんてとんでもない感じだったので。

なにしろ、あたしが機能を追加するたびにコード量が半減していくようなありさまなので(改造の合間にコード整理をしているのです)。

ちなみに、今はそのツールも完成して、以後Mix-inやりまくっていますが。RonR上でも。

これはこれで、本当にこんなやり方して規約違反になっていないのか、という不安はあるのだけど…。いや、ApplicationHelperが肥大化しすぎたので、役割ごとにモジュール化しているのだけど。

思うに。

Ruby on Railsを手掛ける人は、まずRubyを一取りやるべきだねー、と<普通はそうだよ

てか、JSPに手を染めた時も、「なーんかバッチ処理書いているなー」という印象は強く持ったなぁ…ということを思い出したこの一瞬。

ちなみに参考書はこれらです。

さて試験は何時受けようか…。

てか、コードも後半分くらいにはなるんだよなー。今9割方コピペ状態が1組、というところまで抽象化を済ませたのだけど、最後の一手がめっさ面倒で…。

テスト?いやいやいや。はなっからわけのわからん状態になってるので、もはや手がつけられませんよ…。新規分ですらっ!

| | コメント (0) | トラックバック (0)

あ、登録ボタン発見。

スクロールアウトしているだけだった。

あと、RSSは使えますね。>Twitter

ユーザー単位で他人のフォロー無しで取って来れるみたい。

これなら、リアルタイムログの部分はTwitterでもいいかな?

…と言う記事を10時頃に書いて、携帯電話の中で忘れてた(汗)

| | コメント (0) | トラックバック (0)

プログラム遊びのネタとして。

コメントを付けずに保存すると勝手にブランチを作り、コメントを入れた時点でその最新の変更をTrunkに入れる、保存先としてSubVersionを使用するエディタはどうか。

推敲の過程はブランチに残り、保存先は雲の向こう側に。

| | コメント (0) | トラックバック (0)

Webサイト組み込み可能なミニブログを考える。

要はTwitterだが。

Twitterは自分の手元に情報を記録できるのだっけ?

RSSで取ってくればいいのかしら?

まー、それよりも、そういう車輪の設計に興味があるのですけど。

自分のメモにたいして後から追記・再編集とかもやりたいと思うので、1日分のログをリアルタイム反映しつつ、1まとめのblog記事に出来たりすると、便利そうよね。

入力は基本的にメールとして。

1日分のリアルタイムログは即時反映で。

日付変わったところでリアルタイムログを自動的にblog投稿用のメールアドレスに放り込む。

これならリアルタイムログの部分はTwitterでも良いかな?

あれがRSS対応している、としてだけど。

うーん、今ちょいと見に行ったのだけど…。え、コレどこから登録するの?(汗)

あと、Twitterだと他人の発言も混じって来るので(それが優れている点ではあるけど)、後からblogで再編集は、著作権的にビミョーかしら。

| | コメント (0) | トラックバック (0)

ダメ、絶対。

Rubyのちょいとしたコードを検証しようと1行コードをもそもそと書いたですよ。

エラーが出まくるですよ。

おかしい何処にもバグはないてかなんでコレだけのコードでバグが…?

オチ。
RubyのコードをPerlで実行しようとしていましたさ(爆)

ダメだろう。それは絶対動かんだろう…。

ちょっと自分の正気を疑った瞬間。

| | コメント (0) | トラックバック (0)

誰が雄猫殺したの?

それは私。killしてむしろkill -9。kill -9って聞いてチルノだと思ったのはあたしだけか。そーなのかー。

むしろ一生死んでくれ(意味不明)

/etc/init.d/に起動・停止スクリプトが書いてありました。

chkconfigを見ると、ちゃんと妥当なrunlevelも設定してありました。

サーバの起動時には、ちゃぁんと起動していました。

まぁエライ。

でもね。

起動する相手が全く違っていたら、そんなの何にもならないんぢゃーーーーーーっ!

そもそも、Tomcatが複数インストールされているってところも既に言語道断なのだが。

起動するTomcatは間違えてるし、その間違えたTomcatには古いアプリがデプロイされたままだし、一緒に使うMySQLも起動相手を間違ってるし、そこにも古いデータベースが入ったままだし、挙句サブシステムはさらに別のTomcatで動いていて、そっちは自動起動すらしていないと!!

…コレ、あたしがメンテ担当ぢゃないんだけど…。

| | コメント (0) | トラックバック (0)

メール使いホーダイに向けた野望など。

別に、ここに書いたからと言って全部必ずやるとは言ってません(笑)

だってこれ、マニフェストぢゃないですし!マニフェストってのはアレですよ?ブートストラップクラスとか書くための場所ですよ?そしてCLASSPATHがJARの外側に通じなくなって泣くんですよ?<マニフェスト違い

メールでURLを送ると、wgetで取得したHTMLをHTMLメールにして送り返してくるサーバの構築:

操作がちょっと面倒そうだけど、うまくイケば昔のコマンド入力型アドベンチャーゲーム風の使い勝手で、無料でWebブラウジングができるのではないかなー、と。

操作コマンドは定型文に登録してしまえば。URL打つのが面倒ですね。メール本文から取りこんで返信メールを書く、という流れができれば最高だけどね…。

使用者の指示を受けるサーバの名前は、やっぱり「ヤス」だろうか(笑) いえ、イラストレータのほうではなく。

となると操作用の簡易言語はYAMLあたりでどーでしょ。YAs Mail Languageとか(意味不明)

ちなみにあたしはファミコン世代ですが、ポートピア連続殺人事件はやったこと無いです。ていうか実画面を見たことが無い。あたしがファミコン手にしたのは、就職してからデス(笑)

…「天使たちの午後」もそんな形式だったんだっけ…?やって無いけど<当時何歳だオマエ

Webストレージ「quanp」にメールアップロード機能 (Impress ケータイWatch):

コレです。グッドなタイミングです。

携帯で写真撮りまくってとりあえずストレージに放り込む、携帯でメモも撮影しまくってとりあえずストレージに放り込む、なんて活用方法が生まれそう。

携帯電話アクセスができるのは有料コースのみですが、それでも300円/月で10GBですし!

…あ、でも放り込んだものをどうやったら無料で取り出せるだろう?

やっぱり、「メールで指示を送るとファイルを取り出してメールで送り返してくれるサーバ」を作るしか無いか…。

Gmailをストレージとして使う、なんていうソフトが、あった気がするな…。

全部メールでおっけーデス:

スケジュールは全部Google Calenderに入れてしまえ!そして時間が近づいたらメールして来るようにセットだ!

PCメールも一通り携帯にメールを飛ばしてしまえ!DMなんかは携帯でも十分読めるさてか、mailコマンドにリダイレクトしてしまえば良いとか、そんな気も。

Blog書くのも大抵はメールで十分ですよね。今までもたびたび書いているけど。

…あれ?
スマートフォンなんて要らないじゃん?メールで指示が出せれば、大抵のコトはこなせるんじゃ…??

つまりはコマンドラインです。コマンドラインで出来ることなら、大抵はメールベースに載せることができそうな気がします。

…やっぱりあたし、時代を逆走してるよなぁ…。

| | コメント (0) | トラックバック (0)

これでWinny=悪では無くなりましたかねぇ。

「Winny」開発者・金子勇氏、逆転無罪、大阪高裁で控訴審判決 (Impress INTERNET Watch)

Winny、Shareなんかは結局使った経験が無いのだけど(試してみようと思ったけど、セットアップとセキュリティ対策の手順の多さに面倒になって止めた)、基本的には悪くない技術だと思うのですよ。

技術面をざっと把握した感じだと、中央サーバなしで構築できるとか、使用者の多いファイルほどキャッシュが増えて伝達が軽快になるとか、そんな印象で把握しているのだけど。

特に後者は、あたしのいまの土俵であるバイオインフォマティクス系で有効だと思っているのですよ。データはやたらとでかいし、たぶん人気のあるデータとそうでないデータの差は大きいし。基本は公開なので、著作権問題とか考慮不要だし。

ゲノム配列とかCAGEとかTAとか、Winnyネットワークに放流しちゃえば公開サーバも要らず、伝達も早いんでないかなー、とか。

あとはクラウドとかグリッドとか。ノード間で処理対象データの共有がネックになってくるのですが、ノード内で閉鎖系のWinnyネットワークを構築してデータを放流しちゃえば、管理機構もいらなくて楽だろうなー、とか。

技術面を誤解しているかもしれないけど、そーいう使い方ができるモノだと思うのよね。

まぁ、そうは言っても企業では「Winnyウィルス」とか「Winny捜査員」とか「Winny検査」とか自慢げに言っているくらいだし、この傾向は無罪になったところで早々改善はしないだろうねぇ。結局、いわゆる社会の常識では、「Winny=悪」として「啓蒙」してきたわけだし。

あー、でも無実のソフトを悪であるかのように名指しすると、それは名誉棄損とかそのあたりに問えるのかしらね?まぁ、企業内ネットワークで無条件に使っていいものではないと思うけど。

とりあえず、うちの会社の次の「Winny検査」で、Winny使用についての検査処理が外されるか、それが見ものだわ。

検査っても、「Winny」ってファイル/ディレクトリがあったら「Winny使ってる」と判定しているだけだけどねー。だって、「Winnyを検査するソフトだからWinnyってディレクトリにいれておけー」とやったら、検査ソフト自体を「Winny」だと判定したし(笑)

 

| | コメント (0) | トラックバック (0)

Outlook共有の末路。

>rgb400様:

助言ありがとうございます。

Office Live Small Bussinessは途中まで試しているのですが、どうやっても「ローカルマシンのOutlookデータをWeb上のスケジューラに反映」では無いような気がしてならない感じです(反映される様子が無い)。

Office Live Small BussinessのカレンダーをOutlookで表示するようにして、そこに画像を貼り込んでみると、ちゃんと保存されているような気はします。

ただ、この方法だと、画像データはMicrosoftのサイト上にのみ存在することになるので、コレクション的な用途には今一つなのです。

Office Live周辺は何度調べても機能がわかりづらくて、あきらめてしまいました。

てか、Netwalkerに手を出してしまい、こいつはOutlook走らないのであきらめるしかない、という七転八倒ぶり(笑)

SunbirdもURLは保存できるけど画像データそのものは保存できないので、まぁ自作しかないかというか、相手がLinuxになったので、

「ヤフオクのURLを指定するとwgetでダウンロードしてそれをSunbirdにリンク」

的なスクリプトを書けば良いじゃん、とかそんな毒電波を受信した気がしましたさ。

…そんなことやって、SSD大丈夫かなぁ…(汗)

| | コメント (0) | トラックバック (0)

NetWalkerのユーザ登録していてちょっと吹いた。

なんで、「利用目的」に「プログラム制作」が入っているんだ?(笑)

あらかじめ準備されている各開発言語と言い、ターゲット層がめっさ浮き彫りじゃないか(笑)

| | コメント (0) | トラックバック (0)

モバイル機器の整理を考えてみよう。

いい加減増えすぎたというか、ここ最近モバイル環境がまた面白くなってきたので、一度自分の手持ちを書き出してみるべきかと。完全に自分幼メモですが。

手持ち:

  • ミニ5穴システム手帳
  • バイブルサイズシステム手帳
  • SH906i
  • HT-01A
  • AirPen Mini
  • WILLCOM NS
  • PW-AC900
  • Viliv S5

ここまでが割と使用頻度の高いものたち。数多すぎぢゃ!、というのはごもっとも。あたしもむしろ吃驚。
一応入手順に並んでいるのだけど、後半5つあたりは今年に入って急激に増えた気がします。ここらでモバイル機器が盛んになってきた感じ?

  • S11HT
  • FMV LOOX U
  • InterLink
  • NECのピュアタブレットPC
  • HP-200LX

まぁ使用頻度が低い者たち。最近はS11HTが、Viliv S5のモバイルルータとして復活気味か。

さて。
まずはシステム手帳2つ

位置づけとしては、ミニ5穴が常用、バイブルサイズが母艦。ミニ5穴は財布としても使っています。

まぁ、財布を別枠で確保するとすれば、後はとっさのメモに使えるモバイル機器があれば、ミニ5穴は無くても大丈夫ですね。しかし、とっさのメモ書きと言うと、今のモバイル機器ではすべて役不足。キータイプでは間に合わず、ペン入力の解像度が低すぎです。

あと、このサイズは同人誌即売会で、チェックリストを確認しながら現金の出し入れを行い、さらに購入した金額を記録するところまでがスムーズにできるので、そういう意味でも外せないアイテムであるような気がします。

逆にバイブルサイズは、むしろファイルフォルダとしての機能のほうがメインになっているので、無くせるかも。

てか、最近はマインドマップ描くことも多いのでB5のノートが鞄に入っているし、たいてい画材を持ち歩いているのでそこにメモするか、適当な付箋紙パッドを張り付けておけばいいような気も。

いや、むしろB5ノート用のちょっと上質なカバーを買えば、そこにファイルフォルダ機能を代用できるポケットが付いていたりしない?ちょっと探してみますか。

結論:ミニ5穴は残す。バイブルサイズは、マインドマップ用ノートと統合できないか、検討。

SH906i。

うーん、携帯メールが扱える機体は、1台は欲しいデスねぇ。音声通話はめったに使わないのですが。幼は、プッシュ配信型の即時性のあるメールが欲しいということになるのかな。

以前、HT-01Aで10分間隔でPCメールを受信チェックするようにしたことがあるのですが、ただでさえ1日しか持たないバッテリーが、すさまじい勢いで消費されていったので、これは不可。

結論:残すしかないねぇ。機種変更はそのうちするかも知れないけど。

HT-01A。

S11HTと、どちらか1つで十分。てか、元々はS11HTをさっさとヤフオクで売り払うつもりだったのだけど、こいつがあまりに不安定で、どうしたものかと。

マシンパワー、キーボード操作性はこっちが上だけど、バッテリーの持ち、キーボード収納時の操作性はS11HTのほうが良い。鯨飲不明でしょっちゅう落ちる&フリーズするHT-01Aに対し、S11HTではそんな経験、ほとんどない気が。

そういえば、秋に入ってからはHT-01Aの電源落ちが無くなった気がします。やっぱり熱暴走?フリーズはたまにしているけど。

よく見直してみると、MicroSDへのアクセスもS11HTのほうが良いのよね。複数の機器を持ち歩いて、その間でデータ交換をするあたしのようなタイプには、こっちのほうが良いのか…。

あと、EMチャージと比較すると、Docomoは2年縛りとファミ割を使ってすら、金額面で太刀打ちできないというところが…。

「HT-01Aでしかできないこと」…は。

  • 「緊急時、Docomoショップへ駆け込める」
  • 「無料通話分を携帯電話に回せる(しかし、その1,000円を引いても、BizホーダイはEMチャージに勝てない)」

この2点くらいか。あんまり強い理由ではないね。緊急時は、S11HTが修理前の判定に2か月を要したことを思い出すと、ちょっと有利な点だけど(まだ根に持っている)。

結論:決めかねる…が、どうも消える候補に挙がってしまうような気がしてきました。

AirPen Mini。

えー、特殊機体です。マインドマップを使うようになったので、もしかすると今後、優先度が上がりそうな気がします。

今ふと思いつきで、慣れれば紙なしでも空中でメモができるのでは(これが本当のエアーペン)、とか妄想を抱いたのですが、試したところ無理(笑)

感度は問題ないけど、空中に描いた場所を覚えきれないので、文字が重なったり崩れたり。

しかし、この技法を使うと、立ったままマウスを動かすことは十分できました。つまりViliv S5で、立ったままでもペンマウスが使えると。

…限りなく怪しい人だけどな(汗)

代用としては、十分高性能なピュアタブレットPC。そんなものは現存しない。NECのピュアタブは、描くには悪くないのだけど今となってはバッテリーが持たず、経年劣化であちこちガタツキ始めてしまったので。

結論:他に代用も無いので、このまま。

WILLCOM NS。

実はほとんど稼働していません。WILLCOMの回線自体は、ここのところViliv S5の通常回線として重宝しているのですが。

問題は2方向からあって、

  • Googleのサービスに完全に頼っているため、通信可能な状況が必須。回線がつながらないと、今のスケジュールを確認することもできず、メモをとることすらできない。
  • モバイル機器の使い方を振り返ってみても、あたしの場合「移動しながら見る」のではなく、「移動しながら入力する」ことに重点が置かれている。この機体にはキーボードが繋がらないので、入力は辛い。あと、メモが取れない。

システム手帳に電子機器を組み込む、というのは昔からの夢だったし、この画面サイズ、起動速度は申し分ないのですが、入力が思ったよりも弱すぎました。

せめて、手書きメモツールくらいはオフラインで使えるようになっていて欲しいし、何らかの手段でキーボードもしくは手書き入力が欲しかった。

回線維持費用がさほど負担にならないのと、PC幼低速モバイル回線として常用しているので、そういう意味での稼働率はそこそこ。

でも、これ自体もWiFiが使えるので、モバイルルータを仕入れれば、WILLCOM回線を解約しても使えるんですよね、実は…。

結論:無くてもいいかも。しかしこれも特殊機ゆえ、ある意味で身売り先がない娘。
PC接続用、WiFi使用可能の良いモバイル回線が手に入れば、たぶんWILLCOM回線は解約。

PW-AC900。

まぁ辞書だしね。使い勝手の良いキーボードで文書作成ができる、MP3プレーヤーにもなる、という邪な目的としては、代用があります。例えばNetWalkerとか。どうやってもInternet接続はできないので、その点では不利。

しかし、こいつは電子辞書。その部分を見ておくと、手放すことはないのでしょう。

しかし、これとNetWalkerを一緒に持ち歩くという姿は…。同じようなサイズ、形態の機材を2つセットで持つということで…。なんでこのタイミングでこいつとNetWalkerを出してくれちゃったんだSHARP(笑)

結論:電子辞書として生き残り、ですね。

Viliv S5。

さて悩ましい。発売予約開始当時は、まだNetWalkerもAC-900も発表されていなかったので、コレだ!!、とばかりに飛びついたのですが。

NetWalkerを見てしまうと、そっちのほうがあたしの好みに合っているような気もしますね…。購入からいったい何カ月しか使っていないんだあたし、という気分が強いけど。

これも悪くはない機体だし、NetWalkerと比べるとWindowsだったり画面が大きかったりという利点も。例えば、Air Pen miniの母艦として活用、という道も。

しかし、NetWalkerとViliv S5を両方持ち歩くというのは、いくらあたしでもアレだと思うぞ…(汗)

NetWalkerを購入したとすると、こいつは早々に手放すことになりそうな気がします。LOOX Uとかでも代用が効く機体なので。

結論:使用期間の短さが気になるところだけど、生き残り優先度としては低い。

ということで、常用機の見直し。問題の中心は、「スペックは最高だけどサポートに対するトラウマがあるイーモバイルを許容するか否か」にかかっているらしいです。つまり、故障した時2カ月待てるか、ということです。

…他に事例を聞かないところをみると、あたしがたまたま貧乏くじ引いただけ、という気もするのだけど…。なんていうか、「Leafはホラーゲームメーカー」というのと同じくらいのトラウマ度が。

  • SH906i、Air pen mini、AC900は残存決定。
  • バイブルサイズ手帳は、整理を一度検討。
  • WILLCOM NSは、PC通信回線としての役目が無くなったら解約も検討。具体的には、スマートフォン回線がイーモバイルに戻るかどうか、ということ。
  • Viliv S5は…NetWalkerに代わってしまうのか?
  • HT-01Aは…。イーモバイルに戻るのは、サポート面の不安があるのだけど…。むしろそれだけが使い続ける理由?

常用してない者たち。

結局のところ。LOOX Uは「キーボードが使える最小PC端末」であるわけです。

…こいつにLinux入れれば、NetWalker的スペックになったりしたり?(笑)
リカバリ環境は完ぺきにあるしなぁ…。

InterLinkは、ネットブックを買うならInterLinkがあるじゃないか!と思わせる程度には有用なのです。ネットブックに近い外観ですが、画面解像度、重量、バッテリーともに、こちらのほうが上。何しろ、ネットブックが「スペック落として安価にした小型機体」なのに対し、InterLinkは「必要スペックを満たすために相応の値段がついた当時の高性能機体」なので。

最前線に立つことはないとしても、後衛として居てほしい存在。たぶん今でも、数日間の出張とかになるとこいつを持っていくだろうと思います。

ピュアタブレットPCは…。結局お絵かき用途には不十分とわかっているのだけど、既に時代遅れ気味。ヤフオクで売ろうとしても、ねぇ。
しかもこいつ、ドット発光が1つあるのと、ヤフオク落札時から存在している画面の傷があるのよ。

HP-200LXは、さすがに本格使用する気にはならないとはいえ、実は十分なスペックを持つ機体だったり。テキスト入力なら十分、携帯性、バッテリー(乾電池)も申し分なし。

しかし、既にとっくの昔に生産終了しているし、PCカードタイプのシリコンメディアも手に入りづらくなっている昨今。復活は無理だよねぇ…。捨てる気にはならないけど。

ということで、こやつらは予備機として残っていたり、単に残っていたりするのでした。

うーん。つらつらと書きまとめてみたけど、やっぱりキモは「あたしがイーモバイルを許容するか」だねぇ。再契約かねぇ…。

Docomo、なんか一発やってくれないかなぁ…。AndroidベースのSigmarion 4とかさぁ…。

| | コメント (0) | トラックバック (4)

なんでいまさら。

CentOS 3.9に悩まされなければならんのぢゃーっ!!

BioPerl入れたいのにコンパイルがうまく通らん!なんかlibgdがねぇよ?とか言われるのよ!!

仕方ないのでgdを…RPMが見つからないからソースから逝くゼ!…zlibがねぇよ?とか、libpngがねぇよ?とか言わるる(泣)

いやそこにあるぢゃん?/usr/lib/にあるのはなんなのさ???

てか、今の最新カーネルは幾つですかー?3.9はいったい何世代前ですかー?

いや、運用機が現行バリバリのRedHat release 7(…だったかな?)だと言うんで(Enterpriseでないのがポイント)。テスト環境もできるだけ合わせないといけないので。

結局難局、世の中の「さーばーかんり」の常識ってのは、「一度公開運用開始したサーバのOSは絶対アップデートしない」のか、「テスト環境で試したうえでこまめにアップデート」なのか、どっちなんだ???

あたしゃてっきり後者だと思っていたのだけど、今まで見てきた公開運用サーバは全部前者の方針…。
そりゃむやみに最新版にして人柱になることはないと思うけどさ?ちょっとそのカーネルは古いだろう?、と思うわけさ。

資料漁っても、パッケージ取ってきても、はたしてそれが「新しすぎない」モノのなのか、まずそこで判断に迷うのよ!うまく動いていないのは、入れ方が悪かったのか、「新しすぎた」のかがわからん!!

別のサーバでも、未だにRuby on Railsが1.2ベースなので、最近の資料が半分くらい役に立たなくなってるし…。うぅ。

| | コメント (0) | トラックバック (0)

そろそろさくらインターネットも限界かなぁ。

今、何度目かの(汗)ココログ→MovableType切り替えを試行中なのですが。

今回はテンプレートの実装もうまくいっていて、サイトはほぼ完成、後はココログからデータを移行しなおすだけ…なのですが。

どうにも実装サーバである、さくらインターネットの仕様が使いづらくなってきました。

まず、MovableType出力の一部をさらにPHPで加工しようと思ったのですが、ここで文字エンコードの問題が。

MovableTypeの出力はUTF-8っぽいのですが、さくらのPHPはEUC-JPで動いています。php.iniで変更はできるのですが、php.iniの置き場所をApacheに指示できないため、php.iniを全ディレクトリに配置しないといけないようです。

初期状態はともかく、MovableTypeは月ごと、年ごと、カテゴリごと、といった単位でディレクトリを自動生成するので、新しく作られたディレクトリに手動でphp.iniを置いて回る…というのは非現実的。

MovableTypeの出力をEUC-JPにすればよいのだけど、やり方がわからない。プラグインは見つかるのだけど…。もしかして、使用するMySQLに依存?だとすると、MySQLサーバはさくらインターネットの管轄なので、変更は絶望的。

SQLiteも微妙だしなぁ…。

とりあえずPHPでやりたかったのは、「サイドメニューの共通部分をページ表示タイミングで取りこむ」ことだったので、ここはSSIへ逃げて対応。しかし、これによりファイル名がshtmlになってしまうのも微妙な。

専用サーバ契約でroot権獲得してしまえば解決しそうな気もするけど、そこまで資金を投入するサイトでもないしなぁ。

そろそろ、自宅サーバにすることも考えるべきでしょうか。電源周りのバックアップとかが面倒なので、常設サーバは二の足を踏んでいるのですが。

なお、別にココログが不満と言うわけでもないのですが、いい加減メインサイト(最近はBlogのほうがメインと言う説もあるけど、それは放置)とドメイン名を統合しないと、アフィリエイトとかの申請が面倒なので。

その他、ちょっとハマった設定をメモ。

MovableTypeが作るファイル/ディレクトリパーミッションが、さくらのお好みに合わない:

特にPHP化した場合に問題発生。さくらはgroup, otherにwrite権があると、PHPを動かしてくれない。

mt-config.cgiに、"HTMLPerms 0755"と、"DirUmask 0022"(chmod 755相当)を追記して対策。
へたれLinuxユーザなのでumaskよりchmodのほうがわかりやすいのだけど、ディレクトリはumaskでしか指定できないらしい。

文字コード問題:

本文中にも書きましたが、深く考えずにセットアップすると、さくらでのMovableTypeはUTF-8でHTMLを生成するのに対し、PHPはEUC-JPで動こうとする様子。

各ディレクトリにphp.iniを配置し、その中で次のような感じにして対策。過不足は不明だけど、取り敢えずこれで動いているので。

default_charset = UTF-8

mbstring.language = Japanese

mbstring.internal_encoding = UTF-8

mbstring.http_output = UTF-8

mbstring.substitute_character = none

さて、この後データ移行の問題として、「ココログに投稿した画像データは個別にダウンロードしないと、移行先のBlogに移動できない」というのもあるんだよねぇ…。

| | コメント (0) | トラックバック (0)

ThunderbirdベースのWebメーラってないかしらね。

かなり前から欲しくて、時々Google先生にお尋ねしていたりもするのですが。

  • 普段はThunderbird。特に乗り換える気もしない(現在は、Windows Mobile同期用にOutlookも併用してますが)。
  • SPAMがひどいので、SPAMフィルタ通していない状態でメールを見るのは現実的でない。
  • たまーにSPAM以外のメールがSPAMとしてフィルタされてしまうので、フィルタ設定を「判定したら削除」とはできない。
  • さくらインターネット標準のWebメーラはSPAMフィルタが付いているが、こいつで振り分けさせると、Thunderbirdとは別のディレクトリに入れてしまう。そこに入ったメールはThunderbirdで読めないので、整理が面倒。

ということで、いっそThuderbirdでメールを受信処理したものをWebメーラとして表示できれば、割と幸せなんでないかな?、と思うのです。

ThunderbirdってLinux用もあるわけで、稼働させるだけなら簡単なはず。
UI部分はXMLベースで定義していたような記憶があるので、割と簡単にHTML UIを作れるんでないかなー、と思っているわけですよ。

UIをThunderbirdと同じにできれば、使い勝手もよさそうだし。

何か、Webメーラが使うSPAMディレクトリと、Thunderbirdが使うSPAMディレクトを合わせることができれば、まぁそれでもいいんですけどねぇ。

Googleにしても、"Thunderbird"も"Webメーラ"もあまりにインターネットでの一般用語すぎて、どうにも的確な検索キーを指定できないのが難点だ…。

| | コメント (0) | トラックバック (0)

空気を読むのに1日、コーディングに10分。

Ruby on Railsは確かに便利な孫の手が数多く準備されているけど、その内部仕様理解に引っ掛かると、回復にめっさ手間取る。

今日は、has_belongs_to_manyで自動生成されるテーブルの名前が、あたしが作ったテーブル名と違うことに気付かず、1日のたうち回ってしまったとさ。

原因は、productsとprojectsの多対多関係を表現させるテーブル。

RonR的にはproducts_projects、あたし的にはprojects_products。

よくよく見ればアルファベット順に並べてあるだけで、あたしの命名も単に「そのときprojectsに注目していただけ」で特に理由もないのだけど。

問題は、エラーの原因がテーブル名にあることに気付けないエラーメッセージかと。
結局、エラー箇所だったSQLite3のアダプタにデバッグコード仕込んで、テーブル名を引きずり出して気付いたという…。
エラーメッセージにエラー原因を含めておいてよ…。

テーブル名を直して、10分コードを書けば、問題箇所はあっさり稼働状態に。
元々がテーブルレイアウトされてるアプリなので表示がめっさずれてるけど、まぁこんなのは後でもいいか。

| | コメント (0) | トラックバック (0)

Ruby。

仕事でRubyというかRuby on Railsを使い始めているのですが。

確かによく考えられている環境ですな。痒いところに手が届いているというか。

しかし、痒くもないところを引っ掛かれて鬱陶しく感じることも多々あるのは、あたしだけぢゃないと思うが、どうか。

あと、どうも予め孫の手が用意されているような気配があるけど、それがどうやっても見つからないとか。

見つからないし、自作も難しくないけど、どーも既存がありそうなので作るわけにも行かず、ひたすら孫の手を探し求めてストレスを溜めてみたり。

てか、DBにテーブル追加したら、元々のコード量が少ないがゆえに丸ごと書き直しになりそうな気配。

てか、Rails環境で作っているのにも関わらず、せいぜい片輪くらいしかレールに乗っかっていない既存コードを誰かなんとかしてくれ…。構造レベルで脱線してるヨ?(汗)

| | コメント (0) | トラックバック (0)

Namo WebEditor(却下)。

いい加減素のHTMLで書くのもレイアウト調整が面倒になってきたので、そこそこ小回りの効くWYSWYGなHTMLエディタを探していたのですが。

HTMLソースモードがあるし、価格も安いし、体験版もあるのでどうだろう、と思って、Web Editorを使ってみたのですが…。

却下だバカモノーっ!!!

  • 初期状態のHTMLでbodyにアトリビュートでカラー指定しているところでちょっと鬱
  • 一応CSSも扱えることで少し持ち直す
  • 文字コードをUTF-8にするとなぜか<meta name="keywords">にセットした「メジロ」という文字が「メヘロ」という謎変換を起こし、思わず「それはどんなゾンビですか?」と尋ねたくなった
  • 書式設定に「インデント」という機能を見つけ、いやーな予感がしつつも試したら、<ul>で囲みやがった!!2段階インデントを入れてみたら、<ul>を2重に囲みやがった!!!

つーことで、<ul>タグをアレな使い方した時点で却下としましたよ?いや、<blockquote>かなー、と予想していたのですが、まさかリストで来るとは。

基本的には、相性よさそうな感じなのだけどねー。残念。

| | コメント (0) | トラックバック (0)

Tera term pro + Windows 7RC (x64)。

SourceForge.jpで公開されている版は、Windows 7 RC x64で、「現在の実行中のWindowsのバージョンとは互換性がありません」となってインストールすら出来ない。

Vectorで公開されている版は、32bitソフトとしてインストール、実行できる。

…なんなんだ?

てか、ぶっちゃけこの2つの区別がよくわからないんですが…。

実装が微妙に違うが機能としては同等、なのは使っていてわかるのだけど、志向とか立場とか、そういうものが。

Tera term Pro 2.3から引き継がれた時、分派したのかと思っていたのだけど、今回ちょっとよく見てみたら、基本的には同一なの???

Vector→作者→作者Webサイト→プロジェクトページ→SourceForgeにたどり着く???

WikiPedia読んでもよくわからん…。

| | コメント (0) | トラックバック (0)

会社のSubversionリポジトリが壊れて。

ちょっと流行ったコトバ。

みんなのソースをオラに分けてくれ!(笑)

…まぁ、数時間で後遺症もなく復活したんだけどさ。

| | コメント (0) | トラックバック (0)

今日のおしごと。

割り当てられた機能をコーディングしようと資料を漁るも、どうしても肝心な部分のデータを格納した場所が見つからない。

チームリーダーに尋ねると、

「あ、それ仕様検討漏れだ。保留ね。」

…2時間もかけて、資料精査したのに…。

仕方がないので次の割り当て分を始めるも、早々に同じデータへのアクセスにぶつかり、頓挫。

チームリーダーに尋ねると、

「あ、それ仕様検討漏れだ。保留ね。」

…これがゴールデンウィークを食い潰す元凶か!!

しかも、1回目の質問と2回目の質問、15分しか経っていないにも関わらず、言っている内容が変わるし。

駄目だろ、このプロジェクト(-_-#

明日も仕事です。当然のように。

| | コメント (0) | トラックバック (0)

クラッキングをする程度の能力。

お仕事最終日の今日、3月頭から手伝いに入っていたWebサイトの脆弱性診断ツールなるものをセットアップ・実行していたのですが。

クロスサイトスクリプティングの問題が出るわ出るわ(汗)

あちゃ~、これはやばいわ、でもあたし今日で終わりよもう手伝わないよ?と思いつつ、ツール実行が終わるまでの間、テスト環境で再現テストをしていたのですが…。

クロスサイトスクリプティングの原理と穴位置がわかったからと言って、そのサイトを攻撃できると思うな!!

…つまり。
どこに穴があって、どうすれば実現できます、と実例付きでレポートが出ていても、あたしではどーにもうまくいかず。微妙に回避されちゃうのよね…。

再現してみないことには対策できたかどうかも確認しづらいのだけど、再現するには攻撃の定石を知っておく必要もあるのかねぇ。

あたし、アタックとかクラックとかリバースエンジニアリングには、あまり興味無いのだけど。

やっぱり最強のクラッカーは最高のセキュリティ技術者、ということか…。特に技術のみに限って言えば。

| | コメント (2) | トラックバック (0)

たらいと化せこのコード!

当初「Javaができる即戦力がオマエしか居ない」と言われて休みを延ばして仕事受けたのに。

今やってるのはどうみても

PHPのスパゲッティを切り刻んだマカロニを1つ1つ拾い集めて繋げた後にJavaで実装」

…アレ???

これ、Javaが書ける人の仕事ぢゃないよ?!

PHPが読みこなせる人の仕事だよ?!

あたしのコトだけど!!!(児爆)

しかも、これでもかとばかりに切り刻まれたスパゲッティコード。切り刻んだ先は誰も知らない(笑)

確かにソースには「require_once」の文字が踊っているけど、そのうちのどれに入っているかは…開けてみないとわからないミミック状態…。しかもrequireが1ファイルにつき3、4個はありますぜ旦那?

目的はSOAPを呼んだ先が遅いので、その中でやっている処理を全部SOAP提供元の内部に持って行って高速化…。
つまり繋ぎなおしたPHPコードをチューニングしてJavaに置き換え実装すると。それを3日未満で2つやれと。

そろそろアタマの中でWebアプリが踊りだしましたよ?

あぁ、たらいを。あたしにたらいを…。このコードを全部まとめてたらいに変換する程度の能力が欲しい!

一つ確実なのは。
秋から延ばしっぱなしの休みは結局無いと見た!

| | コメント (2) | トラックバック (0)

たとえばクラスタを組むとしたら。

  • Core i7+メモリいっぱい+1物理ノードあたりのスレッド数多め

  • Atom N330あたり+メモリめいっぱい(=2GB)+1物理ノードあたりのスレッドは1本

どっちがいいですかねぇ。

前者は、M/B+CPU+メモリ6GBで、8万円台。ケースと良い電源積んで10万は行くか。グラフィックボードはセットアップ用に1枚くらいは必要か。

後者は、M/B(CPU付き)+メモリ2GBで、下手をすると1万円未満。ケースは小型化にこだわらなければ安いのがあるし、電源に凝っても2万円とかで何とかなりそうだよね。グラフィックは内臓なのでボード不要。

HDDはクラスタノードだったら500MB500GBの単発5,000円とかで充分。一時使用だし、あんまり大きなデータは使わない(転送に時間かかりすぎてクラスタの意味がない)し。

いや、たとえば会社に要求するとしたらどっちかなー、とか。

まぁまず通らないけど。どちらも。今Core2ノート×3台がレンタルで来てるだけでもラッキーだし。

Atom N330のMini-ITXマザーを大量にブレード実装して、信頼性の高いTBクラスのネットワークディスク装置をギガビットLANで繋いだクラスタシステム、とかいうのが、大学とかで流行りそうな予感。

| | コメント (0) | トラックバック (0)

うぐぅ。

嬉々としてVirtualBox 2.1をインストールし、新しいVMでCentOS 64bit版をインストールしようとしたら…。

Your CPU does not support long mode. Use a 32bit distribution.

ログを見ると、リアルCPUはちゃんとVirtual Machine Technologyが検出されているっぽい。もちろんVT-x/AMD-VはOnに。
あと、BIOSも確認してちゃんとEnableになっているのは確認したさ。

しかし、セッション情報を見るとランタイムが「VT-x/AMD-V=無効」
これはどういう意味なんだろう??VMのCPUがVT-x未対応…という意味ではないよねぇ???

うーむ。いったい何の設定が足りていないのやら。

| | コメント (1) | トラックバック (0)

Sun xVM VirtualBox v2.1。

OpenGLやIntel Core i7に対応した「Sun xVM VirtualBox」v2.1が公開 (窓の杜)

  • 本ソフトを実行する“ホストOS”が32ビットの場合でも、仮想PC上で動作させる“ゲストOS”として64ビットOSを利用できる
  • ハードウェアによる仮想化のサポートにおいて、Intelの新CPU“Core i7”のEPT/VPID機能に対応した。
  • ゲストOSが32ビット版のWindows XP/Vistaの場合に限り、OpenGLによる3Dアクセラレーションが可能。

これはつまり、アレですね?イけ、ということですね?

なにせ、あたしがVMWare Workstationをいつ買おうか、LinuxとWindows、どっちをホストにしようかと悩んでいたのは、この「ホストが32bitでも64bit OSを使える」という点だからね!
それ以外は、VMWare Playerで十分だったわけだし!

これは、さっそくインストールしてみるしか!

| | コメント (0) | トラックバック (1)

めんどくさいデスねー。

仕事で使っているFC4のマシン、JDK1.6を入れて、それをAntで使う必要があったのですが。

最初、自分でちまちまとパスを張り替えていたら、Antが頑固に古いJavaを使い続ける。

どうやAlternativesを使わないといけないらしいと気づいて、やり直し。

終わった〜と思ったら、今度はAnt自体のクラスが見つけられない状態に。
ちなみにコレは、自前でパスを張り替えて、JAVA_HOMEセットした時と同じ状況。

どうも、古いJavaであるgcjが、デフォルトで認識できる位置に、AntのJARもあるらしく。

解決策は、必要なJARを見極めて、パスを張れば良いような気もするのだけど、ant/をCLASSPATHに入れても改善せず。

面倒なので、Antも新規で入れてしまおうかと。

そんな状況のまま、明日はLinux Worldデス。

| | コメント (0) | トラックバック (0)

メール関連システムは。

CentOSがどーの、というよりもSELinuxのほうが鬼門だった。権限の渡し方がよくわからん。

そしてメール配送はPostfix+fmlにしたら、SpamAssassinの組み込みとテストで大いにはまる。半日くらいはまる。

Postifxの仕様とMTAの構造をよーっくみたら一目瞭然ではあったのだけど、まさか「smtpはローカル発のメールでは起動しない」なんて!!

メールシステム構築初心者+試作中のシステムなんで、外への影響が少ないようにサーバ上でmailコマンド使っていたわけなのだけどね。

Postfixのsmtpからコンテンツフィルタとして起動させようとしたSpamAssassinクライアントが、何度やっても起動しないさ。届くメールに、X-Spam*ヘッダが付かないさ。

これ、Cleanupあたりで起動できれば、内外ともに共通化できそうなのに…って、いまマニュアルを見直してみたら、milterが使えるのか、cleanup。

むー、どうしようか…。こっちのほうがいいかなぁ…。

さらに。
一通り組みあがったので、メール受信からアーカイブ作成までを一通りやろうと思ったら、今度はfmlが「メール爆弾喰らいました」とか拗ねるし。

テストなんだから同じアドレスから連続送信するのは仕方ないってば(汗)

この後、テストのためにSPAM送信業者(笑)にもならないといけないってのに、あたし。本物使って試作システムに弾かれて、それこそ変なところに送られちゃっても嫌だしなぁ。さて、うまいSPAM(フィルタを突破できないSPAM)は書けるのか…。

てか、Maidir形式にしちゃうと、mailコマンドでメールが読めないってボケもかましてますがっ

…。メールは難しいなぁ…。

| | コメント (0) | トラックバック (1)

GroovyってCGIに使える?

新しい仕事が来た。

CentOSでメールアーカイブのシステム組まなきゃ。CGIも作らないといけないらしい。

うーん、絶対この仕様、ちょっち高機能なWebMailで標準装備していそうな気もするんだけど…。

とりあえず、CentOSのサンドボックスはVMWare Player+QEMUで作った。

できれば、コレで実績作って、この機会に製品版のVMWareを買ってもらえないものかなぁ…。

次は資料を読まないと。

  • CentOSとSELinuxの基本
  • メーリングリストの仕組み。何使おう。fmlあたり?
  • メールアーカイブの仕組み
  • メールシステム自体の基本も抑えておく必要があるか?
  • SpamAssassinの基本
  • CGI。
    Perlかなぁ。Rubyかなぁ。後のメンテ要員考えるとJavaなんだけど、Servletは大仰すぎるしあたしも知識が無いし。
  • WebMailも一応押さえておこう。

ふと思いついた。「Groovy」はCGI書けないのか?

CGIって基本的にはstdinとstdoutがあればどの言語でもできるって認識だし、ここでJavaが出てこないのはVMの起動/終了がオーバーヘッドになりそうだから、てな認識なのだけど(合ってるのか?)。

Servletは起動したまんまでVM内スレッド上げ下げするからCGIより早い、てのが売りだったと思うけど、代わりに環境構築が面倒っぽい。何よりあたしはともかく、理解できる人員が不足。

PerlやらRubyやらの非Java言語だと、これまた理解できる人員が不足。あたしは必要なら複数のプログラム言語並行で扱えるんだけど、実はコレができるひとって少ないらしい…。

いや、むしろ「そこまで努力して仕事してお給料貰いたい」人が少ないのかも。あたし、この辺は趣味レベルで調べちゃうから…。

今はJava中心なのでJavaが良いのだけど、これで普通にCGI書いたら遅いよねぇ。

で、Groovy
これならスクリプト系言語かつJava言語仕様だから、実行速度が十分なら大丈夫じゃなろうか。

ところで今Groovyの名前が思い出せず、「Java + スクリプト」でgoogleったら案の定大量のJavaScriptが出てきてアレだった…。いや、それを見越して「Java + Script」は止めたんだが…。

| | コメント (0) | トラックバック (1)

MovableTypeへの移植メモ:文字化け。

記事タイトルの「~」と一部トラックバックの「~」…とあとナニかが文字化けしてる。

これは、ココログからエクスポートした時点で化けていた。「~」が化けていることから考えて多分、UTF-8の文字コード問題に正面から勝負してしまったのではないかと。

あたしの文体は「~」を多用しているはずなんだけど、とりあえず本文中では化けていないものがあるし、化けている文字の数が少なすぎるので、一律に化けるわけでもないみたい。

タイトルの化けは2箇所のみ、トラックバックはそもそも放置していたSPAMだったので、個別修正(削除)で十分だな、今回は。

#追記
今回の移植分では上記だけだけど、全体を見ると本文でも化け多数。ただ、移植先に格納済みの記事を見ると化けていないので、ココログのバージョンアップ過程で文字コード変換あたりがうまく機能せず、今回化けた可能性が高そう。

インポートは文字コード指定できるけど、エクスポートは指定できないからなー。

| | コメント (0) | トラックバック (0)

MovableTypeへの移植メモ:Blog記事の日付問題。

エクスポート+インポートで移動すると、記事自体に括り付けられている「作成日付(公開日付)」は保存されますが、「更新日付」がインポートした日付になります。

MovableType 4.0のデフォルトテンプレートだと、メインインデックスの記事一覧が、「更新日付」を表示する<$MTEntryModifiedDate$>になっています。このため、インポートした記事は全部同じ日付になってしまう言う問題が発生するのだなコレが。

解決方法:
1回書いた記事をめったに書き換えない、もしくは、書き換えたときに日付を更新する必要を感じないのであれば、<$MTEntryModifiedDate$>(更新日付)を<$MTEntryDate$>(作成日付)に変更すればOK。

記事を頻繁に書き換え、かつ書き換えた日付を表示したいときは…。あきらめるしかないような感じ。
そもそも、エクスポート/インポートのフォーマットに「更新日付」が保存されていない様子。エクスポートについてはテンプレートを自作すれば出力できると思うけど、インポートフォーマットの仕様に無いのではどうしようもないというか。

直接DBに叩き込むようなプログラムを作れば、多分移植できるとは思うけど…。あたしは<$MTEntryDate$>で事足りるので、作るつもりは無いです。

| | コメント (0) | トラックバック (0)

メインサイトのMovableType化。

いったい何度目の正直なのか(2度目です、多分)

MovableTypeがVer.4になり、Blogページのほかに通常HTMLも管理できるようになったので、サイト全体のMovableType化を(今度こそ)進めています。

何が面倒って、ページレイアウトを移植しようとした場合、用意するテンプレートが結構多い上、モジュール化されているので最初は相関関係のHackから始めないといけないってのが…。
いや、全部削除して1から作ってもいいんだけど。しかしこれはこれで、サンプルがなくなってしまうのでどうにも…。

で。
先ほどトップページだけは移植完了!とりあえず記事を更新だ!
と思い、ココログからエクスポートした全記事のうち、前回移行分からの差分を取り出してインポート、そして再構築!

…というところでミス発覚。
今回、メインサイト(HTMLが主)と日記サイト(ココログの完全移植)を分け、メインサイトではサイト全体(メイン+日記)の更新履歴と作品公開を管理しようと思っていたのですが…。

ココログの記事を、メインサイトの方にインポート+再構築しちまったい(爆)

やり直しか…。

あと、問題が1つ。
ココログの機能を使ってCGやら写真やらをアップロード、Blogに張り込むと、その元データは当然ココログ内に格納されます。

が。
これは記事のエクスポート(バックアップ)では取り出せない。そして、記事本体のURLは、ココログのまま。

さてどうしたものか。
URLは、エクスポートしたテキストファイル状態で一括置換するか、インポート後にDBを直接SQLでいじる手もあると思う。まぁこっちはいいでしょう。

問題はココログ内に格納されたデータ実体の移植方法。
とりあえず一緒にエクスポートはできないので、1つ1つ取り出すしかない…のか?オプション指定は無かった気がするし。

エクスポートしたファイルを読んで、ココログから個別にダウンロードするプログラムでも作るか…。

ちなみに、移植途中の新ページは、URLをhttp://www.magicalrabbit.jp/index.htmlとするとアクセスできます。
運用版はindex.phpで、現在.phpを.htmlより優先しているので、通常は見えないはず。

| | コメント (0) | トラックバック (0)

Java:JTable:セル選択モードの変更。

table.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );

のようにする。

  • ListSelectionModel.SINGLE_SELECTION
  • ListSelectionModel.SINGLE_INTERVAL_SELECTION
  • ListSelectionModel.MULTIPLE_INTERVAL_SELECTION

が指定可能。

どーしてこうもモデルが大量に詰め込まれているのか>JTable。

ある意味で機能的かもしれないが、分かりにくく使いにくくバグりやすい原因のひとつは、この複合モデル構造だと思うぞ。

機能構造単位できちんといぢるべきところを把握できていれば、必要なモデルだけをいじるからバグは出にくいしテストもしやすいだろう。

でも、きちんと把握しきれない(する余力が無い)状況下でいぢると、まず間違いなくバグを産むはず。いぢるところが間違っているかもしれないし、いぢりかたも間違っているかもしれないし。

こいつは、チーム内で使うDBアクセスライブラリを組んでいるあたし自身も、常に注意・反省をしないといけない点だけど…。

でも分からなかったら早めに聞いてほしい…。

| | コメント (0) | トラックバック (0)

ライフサイクル。

プロジェクトの立ち上げから参加し、顧客とあるべき仕様について議論し、色々と乗り越えて完成したシステムが、「あれは実情に合わない」「これは性能不足」と次々に駄目出しをされ、徐々に死んでいく様を見送るのは果たして幸か不幸か。

人間に例えるなら、つきあうきっかけから始めて出産の瞬間に立会い、「将来きっとXXするに違いない!」と期待されるのを聞いた上で、その後周囲から「あいつはXXが駄目だった」「もうあいつには何も期待しない」といわれながら醜く老衰していくのを見届け、終いには墓まで見送るよーなものだと思うが。

まぁ、あたしたちの仕事ってのは、一発で完璧な永久機関つくっちゃうとその後路頭に迷うことになるから、一定期間後には陳腐化して捨てられるものの方が長期的にはいいことなんだろうけどさ。

感情的には見ないで立ち去るほうが幸せかねぇ。中にはあの世まで立ち去っちゃった人もいるけど…。

| | コメント (0) | トラックバック (0)

Java:Swing処理の実装方法。

職場で後輩に教えたことの備忘録だけど、後々役立つかもしれないからこっちにも保存。

権利云々は…大丈夫だと思うけど、この程度なら。書いたのあたしだし、文面考えたのもあたしだし。特定業務のネタも…入ってないな、よし。

なお…。あたし個人の方針として定義したパターンなので、明らかな間違い以外は突っ込み無用デス。

1. 基礎知識
1.1 Swingについて

  1. Swingに関わる処理はスレッドセーフではない。
  2. Swingは、Swingに関わる処理を行うためのスレッドを1本だけ持っている。
  3. Swingスレッド以外のスレッドからSwingに関わる処理を実行するためには、Swingスレッドに処理内容を伝達する必要がある。
  4. Swingスレッド以外のスレッドからは、Swingスレッド内でどの処理を実行しているか(ある処理が終わったか否か)を知ることはできない。
  5. Swingスレッドは1本しかないので、スレッド内で長時間処理を行うと、その間GUIは更新されずにフリーズし、白抜き画面などになってしまう。

1.2 スレッド、Runnableについて

  1. Runnableは「run()メソッドを持つ」ことを定義するインタフェース。
  2. スレッドはRunnableインタフェース実装クラスの1種。      「run()メソッドに書かれた処理を、他のスレッドとは独立した時間軸で実行する」
  3. スレッドの開始は、start()メソッドで行う。start()の実行によってスレッドはJava VMに対し、実行権を要求する。      直接run()を実行しても、スレッドにはならない。
  4. Java VMが実行権を与えたタイミングで、スレッドのrun()が実際に実行される。

2. Swing GUI処理の実装基本パターン
2.1 お約束

  1. Swingに関わらない処理は、基本的にSwingから独立したスレッドとして実装する。

2.2 基本パターン

  1. -- Swingイベントスレッド内 --
  2. Swingイベントの発生(ボタンのActionPerformed()呼び出しなど)。
  3. 処理に必要なデータをGUIから取得(選択されているデータ、入力文字列等)。
  4. 処理スレッドのインスタンス生成、必要データのセット。
  5. GUIのロック(全ボタンを使用不能にする、等)。
  6. 処理スレッドの開始、Swingイベントの終了。
  7. -- 以下、処理スレッド内 --
  8. 処理の実行(DBアクセス、計算等)。
  9. GUI更新Runnableのインスタンス生成、GUI更新データのセット。
  10. GUI更新RunnableインスタンスをSwingUtilities.invokeLater()を使用してSwingイベント待ち行列に追加。
  11. ループ処理の場合、8)~10)を繰り返す。
  12. (全処理終了後)GUIのロック解除Runnableのインスタンス生成、       SwingUtilities.invokeLater()を使用してSwingイベント待ち行列に追加。
  13. 処理スレッドの終了。
  14. -- 以下、再びSwingイベントスレッド --
  15. 10)で追加されたRunnableを順番に実行。
  16. 12)で追加されたRunnableを実行、GUIロック解除。
  17. 全終了。

| | コメント (0) | トラックバック (0)

Java:JTable:ヘッダカラムのフォント変更。

JTableHeader header = table.getTableHeader();
header.setFont( new Font( "Dialog", Font.BOLD, 24 ) );

みたいな感じで。他にもセルレンダラとか使う方法があるみたい(むしろこっちが正道?)だけど、どーやってもうまくいかなかったからコレでいいだろ。

「SwingでExcelを作る(マクロ、計算機能除く)」ってのは、立派な検定試験とかになりそうな気がする…。ある意味でJavaMailの日本語処理より面倒だ。

| | コメント (0) | トラックバック (0)

Java:Swing:JTableの横スクロール。

概ね自分幼のメモれす。

  • テーブル内の幅を変更したときに横スクロールするようにするには、JTable#autoResizeModelにAUTO_RESIZE_OFFをセットする。出ないと表示範囲にあわせてセルを縮めてしまう。
  • …カラムのminSizeをセットしてもイけるか?
  • セルのレンダリングはTableModel#getColumnClass()できちんとセルの型を示さなきゃダメよ。
  • セルの編集可否は、TableModel#isCellEditable()で判定。AbstractTableModelの初期値は全false。

JTableは何度いじっても忘れる。複雑すぎるのよねココ。

| | コメント (0) | トラックバック (0)

Java:JavaMail:Folderの扱い。

概ね自分幼のメモれす。

  • IMAP4アクセスでのお話。POP3は未確認。
  • Store#getDefaultFolder()で取得できるFolderは、#open()できない。
    まぁAPIにも「This method is valid only on Folders that can contain Messages~」って書いてはあるんだけど。
    …「DefaultFolderか否か」ではなくて、「#getMessageCount()が0でないか」で判定すればいいのか?もしかして。
  • 実は、DefaultFolderでなくても空っぽのFolderは#open()できなかったりして…。
  • Folderの中身は、#list()でFolder[]を取る分には、#open()しなくてOK。なので、中身としてFolderしか持ち得ないDefaultFolderについては、#open()出来なくても別に害はない。
  • Folderから#getMessages()とかでMessageを取るときには、#open()しないといけない。

ん~。なんかさー。「フォルダ名を指定したらその名前でStore#getFolder(String)、null指定ならStore#getDefaultFolder()」ってな仕様のラッパーを作りたかったんだけど…。

余計にめんどくなったわ。

| | コメント (0) | トラックバック (1)