Mix-in が分かった気になる

分かっていたこと

  • module のインスタンスは生成できない
  • module は class にいくつも include できる

分かっていなかったこと

  • module の include は結局多重継承みたいなもんである
  • module を include した class を継承することで単一継承の形を維持できる
  • is-a 関係ではないがメンバ変数やメソッドを共有したい場合はやはりあって、このときに include を便利に使える
    • ただ class 的には is-a ではないから module で include するんだけど、include してるかどうかは is_a?() でチェックできる。ここは理屈から言うとスッキリしない気もするけど実際には便利だと思う。

自分は Java 的な Interface ってコンパイル時にチェックが効くだけでコードの再利用ができないのがイケてないと思っているんだけど1、module がまさに自分の欲しいものなのだとやっと理解できた気がする。

今までただの namespace 的なものとしてしか使ってなかったよ。

cf.

  1. そもそもこの理解もあやしいです 

クライアントサイドで dnsbl を使った URL フィルタリングを自由に選べたら便利かも

特に PHP の調べものをしていてたまらなく腹が立つことに、マニュアルを丸々そのまま公開しているサイトが意外に多いという事実があります。

これね。邪魔なだけ。

本家と同じかそれより古い情報が大量に存在しているだけでメリットがない。例えばある関数にどこかのバージョンでバグがあるか調べようとしても、とにかくこのマニュアルばかり引っかかって欲しい情報になかなかたどり着けない。本家の php.net にしかマニュアルがなければ検索のキーワードに

-php.net

と書き足すだけで除外できるのに、劣化コピーが大量にあるおかげでこの方法が通用しない。

そこで除外したい URL の情報をどこかのサーバに dnsbl で置いて、特定の内容の検索を行いたいときにユーザーがどの dnsbl を利用するか指定して利用できたら便利かなと。URLフィルタリングとしては有害情報なんかと同じ発想。(ある意味本当に有害だし。)

dnsbl と言っているのは、共同でフィルタリングしたい URL を管理しようと思ったら dnsbl の方法がいいのかなと思っただけで dnsbl でなきゃいけないという理由はないです。Greasemonkey とかだけでも似たようなことはたぶんできるんだけど、随時アップデートされる URL リストの反映が面倒になるので、やっぱ dnsbl がいいのかなと。例えば上のような場合は

phpman_copys

みたいなリストにコピーを公開している URL の情報があれば、それを指定して検索1したときに自動的に余計なマニュアルを除外してくれるようなイメージ。

あれか、ブラウザとは別にプロキシ立ててる人はそっちで dnsbl を利用できるようにすればいいのか。あーそうすれば Greasemonkey 依存にならないということで Camino 使いの自分はプロキシで解決した方がいいのかもしれない。dnsbl のメンテとプロキシの方でリストを指定する UI をどうやってまとめるのかが面倒くさそうだけど、とりあえず何か一つクライアントサイドで利用できるプロキシをマスターした方がいいのかな。

  1. この辺の UI をどうやって実現するかは考えてません。 

JavaScript で Safari 1.3 除け

※ Safari と書く際にバージョン番号を抜いちゃう人は IE 5, 5.5, 6 が混在していた時期や Netscape 4 と 6 が混在していた時期のいやらしさ、あるいは WinIE と MacIE の信じられない挙動の違いなどを知らない幸せな人か、または忘れちゃった幸せな人に違いないと自分は思っている。省略するな! 全然ベツモノなんだよ! お前は IE 6 と 7 の違いも無視すんのか!?

えー今回は Safari 1.3 のお話。

JavaScript を書く際に window.onload にあれこれ処理をつけていくのはよくある話だと思うのですが、この onload event、中を覗いてみたことありますか?

いやね、あたしゃ知らなかったんですよ。

Safari 1.3 と WinIE1 では onload event の中に event の発生した target(IE では srcElement)が存在しない

んです。な、なんだってー。

じゃあお前どこでそのイベント拾ってきやがったんだ。言ってみろコノヤロー。子どものお使いじゃねーんだぞ、ちゃんと報告しなさいよ、報告を。このアメ玉誰にもらったの? 知らない人? 知らない人から食べ物もらっちゃダメって言ってるでしょ!

えー。

コトの起こりは Safari 1.3 の event がイベントハンドラをセットしたオブジェクトとなんかちょっと違うオブジェクトを抱えて持ってくるという、お前はなんのコントだ状態の変なバグに遭遇したことでした2

悩んだ末、いっそ Safari 1.3 は無視しちまおうと思って3 event をあれこれ調べてるうちに onload event はもっとはっきり変だよ! やった! この段階で無視できるよ! と思って trap を設置したら隣で WinIE が引っかかったよorz

お前もか!

ってね。しょうがないんで target を持ってなくても WinIE 独自のプロパティを持ってたら ok を出すことにして解決とあいなりました。

( evt.target || evt.srcElement || evt.boundElements )

だったかな。なんかこんな感じです。確認したい人は適当に補完してやってみてください。と言っても Safari 1.3 が手元にないと確認できないので多くの人には意味のない情報ですけど。

ところで、WinIE はなぜ window.onload イベントで window.scroll が効かないのでしょうか。不思議ですね。ごきげんよう。

  1. 6, 7 で確認 

  2. イベントハンドラの書き方によっても挙動は違うのかもしれないけど、今回はそこまで深く追求していない。 

  3. 当然 JavaScript を切ってもユーザーは困らないようになってますよ。 

なんだか踏んだり蹴ったり

今週末がいよいよ山場というところで風邪を引いただけでなく、昨日は原チャリが後ろから、今日はコンビニの駐車場を出ようとしたところ、バックしてきた車がどてっ腹に命中。なにしてけつかる。

昨日の原チャリはちょっとバンパーが傷ついた程度だったので相手の人の無事を確認してそのままさよならしたが、今日はさすがにそういうわけにはいかない。とは言えちょっと警察呼んだりなんだりって元気はない(風邪は治ってねーのだ)ので明日また連絡しますということで別れてしまった。幸い走る分にはなんともないし、整備不良でもないし、お互いの身体はなんともないので。

でもなぁ、修理したとして代車が荷物運びに向いてないと困るんだよお。まぁ何はともあれ風邪が悪化しないように寝よう。まずはそこからだ。

しかし今日は車同士でほんとによかった。相手の車、いわゆる RV 系でたぶん普通の車の高さのモノをミラーで確認しにくいんだと思うけど、これがちょっと背の低い子どもやお年寄りだとそれこそ命に関わってる可能性あるから。あんな勢いでドーンと下がったらいかんて。

Tempura

Ruby 用のテンプレート。HTML の出力だけでなく、泥臭い form 周りの処理を隠蔽してくれるものを目指している。よさげ。amrita との住み分けは割と明確かもしれない。

Unison マニュアル和訳

現時点で

  • Tutorial
  • References の Preferences
  • References の Profiles

訳了。(なんて言葉があるのか?)とりあえず業務に絡むという建前で週末から一気に訳してしまった。あとは FAQ が訳せると割と役に立つとは思うんだけど、そこまでの気力と時間がありませぬ。すまん。(誰に?)

翻訳の過程で他のセクションへのリンクが切れてしまいました。ほんとは修復したいところですが、もうメンドイので放置させてもらいます。またいずれ気が向いたときに直します。

誰か気が向いたら使い方教えてください :-) しかし、普段使わない脳を使うと疲労の蓄積が早い。

ジャパネットたかたはもとはカメラ屋

ビッグカメラとかキタムラなんかもそうだけど、当時はカメラって経済成長とともに爆発的に普及した、なんつーか今でいうパソコンみたいな商品だったのだろうか。それでカメラ屋が勢いづいていろんなことに手を出し、いろんな形で事業拡大を進めてきた。のか? 携帯もそうだけど、日本人はよほどカメラ好きなのかねぇ。

パソコン1台に資源1.8t

スラド経由なんだけど、共同通信からの Yahoo Headline 以外にまだ情報がないのでネタとしては扱いにくいな。

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