Rubyのif式で気づいたこと

安心してください。とても今さらな話です。

jpmobile を読んでいたら if も式だと

今日 jpmoile 1.0.0.pre を読んでいてふと

lib/jpmobile/mailer.rb

@mobile = if tos.size == 1
            # for mobile
            (Jpmobile::Email.detect(tos.first) || Jpmobile::Mobile::AbstractMobile).new(nil, nil)
          else
            # for multi to addresses
            Jpmobile::Mobile::AbstractMobile.new(nil, nil)
          end

こんなコードが目に留まった。

あーそうか。

Rubyは制御構造も式です

ってこういうことか。あまり意識してなかった。式とか文とか普段あまり意識してなくて、

基本的には値が返るので return を省略できる

程度にしか覚えてなかった。

Ruby は条件演算子をかっこよく書けないけど問題にならない

※ 実際に気づいたのは 4/5 のこと。

PHP を書いているときによく

function funk() {
  return ( condition )
    ? val1
    : val2;
}

と、いわゆる三項演算子、厳密には条件演算子を使って if 文を書かずに済むなら書かないようにしていた。そうでないと

function func() {
  if ( condition ) {
    return val1;
  } else {
    return val2;
  }
}

と書かねばならず1、とても記述量が増えてしまうから。後置 if も使えないし、とにかく短く書けない PHP での必死の抵抗として条件演算子にはとてもお世話になっている。この場合は単に return するだけなのでそうでもないが、例えば

var = ( condition )
        ? val1
        : val2

となると、もはや条件演算子を使わずにスッキリ書くなど不可能と言ってよい。

ところが Ruby では逆にこの条件演算子を気持ちよく書きにくい。というのも

? を次の行に下ろすことができない

から。なんと syntax error になるのだ。そうすると

( condition ) ?
  val1 :
  val2

こう書くのか。しかしこれではとても読みやすいとは言えない。実はこれずーーっと困ったなぁ思っていたんだけど、上のように

var = if ( condiition )
        val1
      else
        val2
      end

と書けるんならこれでいいな。いやはや、式とか文とかあまり興味ないんだけど、ちゃんと分かってないとダメだなぁ。

  1. ブレースは必ず書く派なので書いてあるだけ 

健康診断の再診をした

健康診断の大腸検査で引っかかった。というわけで再診。何をするかというと大腸の中身を空っぽにしてカメラで確認する。

……。マジです。

結論から言うとなんともなかったんだけど、まずは中身を空っぽにするための下剤がまずい。微妙に塩味と苦みのある液体を2時間掛けて2リットル飲む。1時間ほどが経過した辺りから下剤が効き始めて2時間半後くらいにはもうその飲んだ水くらいしか出ないようになる。ヒー。書いてるだけでもつらい。

個人的にはしかしこの下剤が合わなくて、飲むと気持ち悪くなるのがつらかった。吐くほどではないので愚痴以外は言わずに飲みきったけど、基本的に薬が飲み慣れていないせいか、結構しんどい。そしてその間、じっとしていればいいわけではなく、内臓の動きを刺激するためなのか、多少身体を動かしてくださいと言われる。廊下歩いたり階段を上ったり下りたり。こっちは気持ち悪いんだってば。

もう一つ。カメラが本当に痛いのは入り口ではない。コーナーの内壁にぶつかったとき。検査中は実は軽く全身麻酔が入っててよく覚えてないんだけど、この内壁にぶつかったときに痛い痛いと暴れたらしく、3人掛かりで抑え込んだらしい。すいません。だって身体の中が痛いんだぜ。どうしろっていうのさ1

  1. 痛みが強く出るかどうかは個人差があるらしい。オレは強く出る方だったのかな。 

字幕…

ぎゃーす。せっかく保存しておこうと思っていた世界遺産の番組中に県議会の補欠選挙の結果が入ったよー。

こういうのもデジタル放送になったら外せるようにならないのかな。単に電波がデジタルなだけじゃダメだけど。その辺全然調べてないから分からないな。データ放送でインタラクティブなんつーのもいいんだけど、放送の繰り上げ繰り下げ情報の伝送方法の標準化とか、余計な字幕を別レイヤーにするとか、そういうのも頑張ってほしいな。音も入ってるな。音のチャンネルも増やさないと。

と、たまに保存目的の録画をすると思うのであった。

bind のポリシー変更

update は便利な面もあるんだけど、必要ではないのと、ゾーン DB が汚れて行く1のがいやなので

bind のエラーをさらに低減

のときの方法とは反対に、禁止することにした。(デフォルトは禁止)

しかしそうすると update に失敗したという情報が error としてログに残る。これはうざいということで今度はこういう方法で対処。

category update {
        update;
};
category update-security {
        update;
};
channel update {
        null;
};

これで FreeBSD の 9.3 では log が残らなくなった。しかし Debian の 9.2 ではこれでは不十分で、

category security {
        null に捨てる channel 名;
}

にしておかないといけない。これだと update 以外の接続拒否のログも一緒に吸い込まれてしまうので面白くないんだけど、これも今回は local で update 以外は全部許可しているので問題なしとした。

なんかどーも Debian Sarge の bind の動きは納得いかないなぁ。

  1. ちなみに、ゾーン DB が汚れていかないように固定 IP のホストを別ファイルに記述しておいてゾーン DB から include する方法も試したみたけど、update が掛かった段階で一緒くたになってしまうのであった。それでも固定 IP の元ファイルは維持されるので、これで十分なら update を許可しておくのも悪くないと思う。bind はいろんなところに穴が開くので、できるだけ余計なことはさせたくないという判断をする人が多そうだけど。 

DocumentMap

以前 Outliner という名前だったページの文書構造に応じてツリーをサイドバーに作ってくれる Firefox 用 Extension が DocumentMap と名前を変えたようです。

http://www-jcsu.jesus.cam.ac.uk/~jg307/mozilla.xml

旧版に当たる Outliner を削除しないとショートカットキーがバッティングしちゃうので注意した方がいいよ、とのこと。

以上、すべて伝言にてお送りしました。

ViewCVS でリビジョンツリー

我が家の ViewCVS はリビジョンツリーがグラフで表示されない。これは ViewCVS 単体の機能ではないのだった。というわけで porinstall cvsgraph してみる。

viewcvs.conf で

cvsgraph = 1

一覧に cvsgraph のアイコンは出てくるが肝心のグラフは出ない。はてな?

cvsgraph_path = /usr/local/bin

などとフルパスで設定する必要があった。当然 cvsgraph.conf.dist は cvsgraph.conf に cp しておく。これでばしばしブランチを切れるってもんだ。

tDiary アップデート

portupgrade は /usr/local/share/example にもろもろつっこむだけだった。実行したいディレクトリに丸ごとコピーして tdiaryinst.rb を実行する必要があった。いや実際には tdiaryinst.rb を使わなくても permission の設定さえできればそれでよい。ちょっと難しく考えすぎてたか。

Ruby はもう 1.8 に上げろってことかな。portupgrade したら binary の名前が ruby16 になった。これは 1.8 系が ruby という名前を使うからの措置に他ならない。

趣味を仕事に

from asahi.com Be|http://www.be.asahi.com/20040320/W14/0026.html1

正直、そんなに追い込まれていない自分は恵まれているのだろうか。というか、仕事を理由に以前よりかなりのめりこんでいるような気もする。「今のうちしか時間がない。」「他のエンジニアより後れを取っている。」という思いが強いからかもしれない。

  1. Be のバックナンバーは3ヶ月まででした。 

クッキーを利用したセッション管理特許?

むぁじっすか。今のところ日本は関係なさげな雰囲気ですが。その辺の日米の特許関係の話はこちら。

やだやだ。まったく。

で。芋づるで「真の電話発明者は誰か」なんて話も。

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm