ブラウザ対象でユーザーを縛れない場合はもうしばらくはObject.assignを使わない

具体的には IE と Android のため。

ではどうするのがよいか

  1. まずESLintで弾く
  2. 代替コードにする

根拠

  • Babel は Object.assign をトランスパイルしない
    • しかし古めのブラウザでは動かずエラーで死ぬ
  • babel-polyfill という手もあるが、asset bundler が適切にセットされていないと polyfill 二重読み込みで死ぬ可能性が残る
    • あとサイズがでかい

ESLint が面倒見てくれない時は気をつけるしかなかったが今は大丈夫。

Node.js ネイティブならバージョンに従ってください。

cf.

別解

Babel などのトランスパイル環境が整っているのなら babel-plugin-transform-object-assign を常に入れておく。

@babel/plugin-transform-object-assign · Babel

これが入っていると static な Object.assign() を spread operator に変換してくれるので、結果的に IE にも対応できるようになる。ただし、完璧ではない。

Kanazawa.rb meetup #6 でなんか途中から覚えてない

本当は Kanazawa.rb の日記はすぐに書くと自分に課してたんだけど、なんだかすごく無理だった。これを書いている今日は実はもう一ヶ月後の 2013-03-16(Sat) である。ごめんなさい。

ということで予想通り記憶が薄れてきているんだけど、意識していたことと実態を簡単に。

お願いしたこと

「今日はいつもよりtsuda力高めで」

これは概ねうまくいったように思います。皆さんご協力感謝します。

お話

いろいろあって序盤は全然話に集中してなかったんだけどtsudaってるうちに吹っ切れてきて、途中からはだいぶ面白く話を聞けました。

MOGOKの方はbetaで無料ということもあって実際にちょっと試してみていたんだけど、「あれーなんか毎回妙にbuild遅いけどなんだろう」と思っていたら中の複雑さがすごいことになってて、そら多少時間も掛かるわなぁというのが分かって面白かった。規模がでかく、ダウンも許されず、それでいて更新を掛け続けるために仮想化、冗長化がこれでもかと張り巡らされてて、

「あーやっぱそうだよなー」

てなことを思っていた。

仮想化は自分もちょっとやってみたけど、

  • お手軽準備のための仮想化
  • ガチの冗長化のための仮想化

って全然ベツモノで、正直、規模が小さいうちは下手に仮想化すると面倒なだけだなーというのが自分の感想だった。大規模の話はとても面白かった。

懇親会

なんか吹っ切れた勢いで1次会から飛ばして、3次会は会計した記憶もなければ帰ってきた記憶もありませんorz

いろいろあって疲れた。まぁでもみんな楽しんでくれたみたいで、そこはよかった。楽しかった!って聞こえてくるとやっぱり嬉しい。別に自分が楽しませたわけじゃなくて、参加者同士で楽しくなってるわけで、それは分かってるけど、まぁちょっと嬉しいのですよ。

ということで meetup #7 の準備はもうやっちゃってるけど、meetup #8 からはお前らに任すからな。ヨロシコ!

Forgeryの独自辞書でFabricateする

それぞれの言葉の意味を知らないとさっぱり想像もつかないタイトルになってしまった。

えーと Ruby でダミーデータを生成するためのツールを自分で拡張する話です。

Forgeryは独自辞書を持てる

どうもそうっぽいなぁというのはドキュメントを見てると想像がつくんだけど、具体的にどうしたらいいかはちょっとすぐには分からなかった。でもこれ見てだいたい分かった。

Forgery Gem, How to create Dictonaries and Forgeries « Ruby NYC

まとめると Ruby のコード的には

  • Forgery を継承したクラスを作る
  • そのクラスの中で dictionaries[:dictionary] と書くと symbol で書いた名前の、独自に定義した辞書ファイルの内容を読み込むことができる

ということらしい。

Rails 環境下のパスが載っているが、これはちょっと違うみたい。

独自Forgery用のディレクトリ

Rails 3.0.4 + Forgery 0.3.7 環境で

rails g forgery

とすると所定のディレクトリがダダッとできる。それが以下。

lib/
└── forgery/
       ├── dictionaries/
       ├── extensions/
       ├── forgeries/
       └── formats/

これを forgery のコード内では

require 'forgery/forgery_railtie'
  if Forgery.rails? && Rails::VERSION::STRING >= "3.0.0"

から

Forgery.load_from! "#{Rails.root}/lib/forgery"

こう繋いでいるので、

Forgery.load_from!( DIRECTORY )

としたら

DIRECTORY/
├── dictionaries/
├── extensions/
├── forgeries/
└── formats/

こういうディレクトリの中から forgery クラスや辞書を探すという動きをする。

独自Forgeryクラスの定義方法

上の記事のサンプルでは

class MyForgery < Forgery
  ...
  def self.method
    ...
  end
  ...
end

のような形になってるんだけど、これは

class Forgery::My < Forgery
  ...
  def self.method
    ...
  end
  ...
end

にしておくと、Alternate syntax で

Forgery(:my)

のように呼び出すことができる。

メソッドはクラスメソッドにしておくとスムーズに呼び出し可能。

独自辞書の定義と利用

例えば以下のようにファイルを置いた場合には

DIRECTORY/
└── dictionaries/
       ├ foo
       └ bar

以下のように呼び出すことができる。

class Forgery::My < Forgery
  ...
  def self.method
    ...
    dictionaries[:foo]
    dictionaries[:bar]
    ...
  end
  ...
end

辞書ファイルは

  • 拡張子なし
  • 1行1項目

で書く。

dictionaries の戻り値は Array なので Array のメソッドがいろいろ使える。

Fabricatorからどう使うか

同じく Rails 環境のまま話を進めると

rails g fabrication:model NAME

が使えるので、指示通りに作ると

spec/fabricators/NAME_fabricator.rb

ファイルができる。まだ試してないのでよく分からないけど、ここで Fabricator を定義しておいて spec の中で Fabricate して使えということらしい。しかしここで個人的には疑問があって、

  1. fabricator を fixture_replacement にしてしまうと spec 走るたびにデータが変わっちゃって、テスト書きにくくない?
  2. 正しく意図通りに fabricate できてるかどうかすぐにチェックできなくてもどかしくない?

の二点がすごく気になっている。

easy_fabricatorを使う

上の疑問については自分で解決できなかったので、先日作った easy_fabricator を使うようにすると少しマシかなと思っている。

require 'forgery'
Forgery.load_from!( DIRECTORY )

を書いてやれば独自定義の辞書を使った独自 Forgery クラスが利用できるので、これを書き足したうえで

script/easy_fabricator

として置いてみた。うむ、これは便利だな。辞書を定義している途中経過とかで確認しやすい。

これでできあがったものを CSV や YAML で吐いてそのまま fixture として利用してもいいんだし。というか、実は最初からそのつもりで easy_fabricator を書いたんだけど。

まとめ

なんとか独自の辞書を使ったダミーデータを作れるようになった。まだ辞書が足りないので十分に活用できていないが、地味に地味によくしていく予定。

それはともかく、

動的にダミーデータを生成する場合のテストってどう書くのがいいのか、誰か教えてください。

もう一つ。

独自クラス独自辞書を追加するためのgemができたら便利だよね。

この期に及んでEmacs + sql-XXXが便利

DBMS のフロントエンドって何使ってますか? phpMyAdmin ? いやいや、やっぱりね、ターミナルから離れたくないんですよ。

自分の場合は普段 PostgreSQL なので psql を使っているのですが、いつも日本語に関してはなんとなくごまかしながら作業していました。よくやるのは

screen の :encoding を DBMS の encoding に合わせる

という方法で、これで日本語の表示に関しては問題ないのですが、Terminal.app を使っていると日本語を含む文字列を shell 上で扱う際に若干問題があったりします。1今まではこの環境で直接日本語を検索しないようにしていたのですが、今回ちょっとした日本語検索の作業を行うことになって、困ったことになりました。

  • Terminal.app + psql では編集してくり返し作業を行う際に日本語が乱れる
  • pgAdmin III では日本語をまともに入力できない

以前は DBMS の作業のためだけに eclipse を入れていたりしました。くやしいですが CSV ダウンロードなどの機能を持った GUI のツールが便利なのは認めます。でもやっぱセットアップが面倒で、可搬性が高くないし高負荷で地球に優しくないなぁとも思うわけで。

そこで思い出したのが Emacs の sql-postgres. え、eclipse 使うのと違わない? まぁまぁ。

21世紀ですよ。Emacs くらい許してください。

まぁ要するに Emacs の中から psql を呼ぶんですが、こうなると screen の :encoding で合わせる技は却って面倒になります。screen の encoding と emacs の terminal-encoding が合わなくなる可能性が出てきます。えぇ、データが euc-jp とか化石な環境の場合は、ですが。

少し悩みましたが、マニュアルを読んでいたらあっけなく解決2

\encoding utf-8; だけでよかった3

なんだそういうことか。よーしもう一度整理しよう。

  1. Emacs + sql-XXX4 でコマンドラインツールを呼び出して DBMS サーバに接続する
  2. \encoding 使っているクライアントのエンコーディング;
  3. shell 上の生 psql5 と違って Emacs 上なので日本語の編集も問題なし
  4. Emacs なので M-/ でいろいろ補完できる。これが素の psql より断然便利。
    • 履歴を戻るときは shell-mode と同じで M-p

という、予想外に強力な環境ができあがった。なんだー、みんなそりゃ Emacs から出ないで作業するわけだよー。

これで一安心。

  1. より細かく言うと Terminal.app 2.0.2 + zsh 4.3.x + screen 4.00.03 辺り 

  2. 今までどれだけまともに使っていなかったか! 

  3. Terminal.app を UTF-8 で使っているから 

  4. 各種DB用に揃っている 

  5. しつこいけど Postgres の場合 

IE7キタ

別に楽しみにしていたわけでもないんだけど、なにやらうちの Vista には自動で入っていたらしい1。で、気がついたんだけど、今までこの日記の h3 の部分とか無造作に border 引いた部分で border が消えちゃうってことが実はよくあったんだけど、それが直ってるみたい。要するに CSS 対応がよくなったみたいだと。

我慢して IE 対応を無視してきた甲斐があったということだね(違

それにしてもメニューバーがデフォルトで表示されないとかメニューバーの位置がアドレスバーの下に来ちゃうとか、なんか自ら Windows アプリのお約束とも言える部分をぶち壊してるけどいいのかな、これ。Windows Live Toolbar は邪魔だから消しておいたけど、この、、、タブの右の方にあるこれは消すか場所動かすかできないんだろうか? タブ増えていったら絶対邪魔になるんだけど。(「ツールバーを固定する」のチェックを外すと「寄せる」ことはできるけど、邪魔なもんは邪魔だ。)

というかタブ開くの遅いなぁ。クイックタブの機能は便利だと思うけど。あ、アクティブでないタブはワンクリックで閉じることができないんだね。親切なのかなぁ、これ。

もうひとつどうでもいいことだけど、アイコンが今となっては寂しいね、IE って。最初グラデーションがついたときは「おぉ!」とか思ったけど、このご時勢に e の周りのラインの色が変わっただけってのはちょっとどーだ。

いいことも書いておこう。CSS 対応は見た目に分からない細かい話なので普通のユーザーは嬉しくない。ユーザーが嬉しいのはやっぱこのズームかな。タブは使い慣れないうちはウィンドウデザインが変だなって感じる程度だと思うけど Opera 風の画像の拡大縮小まで行われるズームは便利。

フィードの機能はもっと勝手に前面に出てこないとあんまり使われないかもしれないなぁ。あ、フィード表示はタブ開いてからやってよ! 編集中のタブの上にそのまま表示しちゃうとビビるからやめて。

というわけでこの日記は IE 7 で書いてみた。そんだけ。

  1. よく知らない。ひどい。 

円熟を飲んでみた

KIRIN_円熟

発泡酒なんて久しぶり。

思ったよりかなりうまい。残念ながら後味がちょっと悪い気がするけど、それはいつも麦100%を飲んでるからかな。

進むも戻るも茨の道

最近ゆとり教育反対の blog が多いように見えますが、本当のところはどうなんでしょうね。とりあえずおおざっぱに feedback とかからたどった限りでは

  • ゆとり教育なんか要らんからまともな授業をさせろ(教師側)
  • ゆとり教育なんかよりちゃんとした勉強した方がいいんじゃない?(外野)
  • ゆとり教育ってちょっと前に始まったばっかなのにもうやめるの?(外野)
  • ゆとり教育って学力低下したからやめるらしいよ(外野)

な感じ。乱暴に言うと

  • 週5日制と総合的学習の導入とそれにともなう教科書の内容削減がゆとり教育であるという認識

に基づいている人の方が多いように見える。そして

  • だから学力は低下して当然と思っている
  • なのにそこで新たに導入される総合的学習に対する理解は全然ない
    • つーかそんなわけの分からんもんやるから学力が落ちるんじゃボケって感じ

とくるわけだ。(現場の先生には総合のハードさはいやというほど理解されているだろうけど、効果なんてまだ誰も分からないしね。)

まぁ、基本的に報道に出てくる情報ってこれだけだから、こういう形に世論が操作されてしまうのは当然なんだけど、みんないつもそんなに報道信じてるのかなぁ。例えば政治の話や経済の話のとき、ニュース報道だけで全部語られてると思ってる? 思ってないよね? 思ってたら相当めでたいよ? 技術ネタとかで間違ったこと書きまくりなの、理系の人たちはとっくに知ってるよね?

だったらなんで教育ネタは報道を鵜呑みにしてんのよ?

もう一つ。ずいぶん前から学校の勉強は社会で役に立たないとワレワレ一般市民や経済関係の人は批判してませんでしたか? みんなそれ忘れてますか? そのときは机に向かう勉強じゃダメだってゆってなかったか? まぁ、百歩譲って言ってなかったとしよう。

この先も絶対ゆーなよ?

と子どもみたいなことを思ってしまう。

要するにどっちに転んでも好き勝手に文句言ってるだけやん。机に向かう学習が実社会、実生活で役に立たないとか、知識は持ってるが応用は効かない学生ばっかとか、そういう過去の反省があるから総合的学習なんやろーが。そんで総合で頑張ろうとしたら学力低下でやめろてかい。ええかげんにせえよと。しかもこれで見直して教科書の内容をまた増やしますなんてことになったら

教科書の内容を減らすときと変わらない悲惨な状況が絶対生まれる

と断言しよう。総合を全面廃止して速攻元に戻すならあるいは可能かもしれない。今なら過去の資産を掘り起こせばなんとかなるだろう。でも実際には

微妙に増やす

はずだ。あー悲惨だね。絶対悲惨。そもそも減らすときだって体系を考えてざっくりまとめて一分野減らすべきだったのに、教科書で扱わなくなるとその分野の専門家の存在価値がなくなってしまうから、それができなくて虫食い削減した(妄想100%)わけで、また増やすとなったときには自分の専門分野により多くの時間を割かせたい専門家同士の骨肉の争いになりますよ。なりますね。例えば四角形の専門家が三角形の専門家をこてんぱんにけなすような事態になります。もちろんなりますとも。円周率の専門家はここぞとばかりに「小学校で円周率は少数第30位まで暗記させよう」って言うね!1

結局、「ゆとり教育2」は進むも戻るも茨の道なのよ。

というか、社会の要請、時代の変化ってものがある限り、教育ってのは必ず茨の道なわけよ。昔のある時点での方法がそのまま今もこれからも通用し続けるなんてことはあり得ないわけ。3だってどんどん社会も文化も変わってるんだから。単に昔の方法の方がよかったなんてことを言うやつに対してはこう言おう。

  • 寝言は寝て言え
  • 寝てないならちゃんとその目で今を見ろ
  1. でも10桁までらしい http://www.f7.dion.ne.jp/~moorend/news/2005020901.html 

  2. もうあえてこの言葉をそのまま使うけど 

  3. 特に学校という集団を前提に考えた場合は。これが家庭内での一対一の教育とかであればまた話は別。 

謎の Gecko エンジンのバグ?

年明け早々再インストールした今の Windows で謎の現象が続いている。それは

  • Gecko エンジンが時間の概念をなくす

というとても困った現象だ。具体的には

  • GIF アニメから間(ま)がなくなり、ものすごい勢いでぐるぐる画像が変わるのでとてもブラウザウィンドウを見てられない
    • → AdBlock で対処
    • 実は throbbar もものすごいことになっている
  • JavaScript で自動的にリロードするページではミニ田代砲化
    • 頻繁にリロードし、なおかつマシンパワーが貧弱なので最悪何もできなくなる
  • メールの受信がかなり難しい
    • タイムアウトまで待ってくれないってゆーか自分勝手にソッコータイムアウトする。だってちゃんと時間を数えられないんだもん。

こんな現象聞いたことないのでどういう言葉で検索すれば類似の現象が見つかるのかも分からない。bugzilla-jp ではキャレットの点滅で同様の現象が見られるらしい。確かにキャレットの点滅も超高速になっててうざい。しかし bugzilla-jp の話ではアニメ gif や throbbar は出てこない。つーか https://bugzilla.mozilla.org/ 繋がらないのはなんでだろう。

試したことは

  • 現象を確認したのは Firefox 1.0, Thunderbird 1.0, K-Meleon 0.8 および 0.9
  • K-Meleon の 0.8 でも 0.9 でも再現するので最近入ったバグってわけでもなさそう
  • とりあえず常駐ソフト切ったり入れたりしてみたけど今のところ収穫なし
  • とゆーかほとんど同じ構成で今まで大丈夫だったんだよな
    • 変わったのはプロセッサと、常駐するものに OOo と Adobe Reader Speed Launch が加わったくらい。常駐については上に書いたようにテスト済み
  • マウスを動かすと顕著にアニメ GIF が速くなるのでその辺がカギっぽい

うーん。なんか変なライブラリをインストールしたっけなぁ?

車が汚れた

土曜は東京では春一番だったそうだが、金沢でもめちゃくちゃ風は強く、おかげで激しく車が汚れた。冬から春に掛けては洗車の苦労はまったく報われない。頑張るだけ無駄だ。

tDiary 以外のものも試そうかな

とか思ったのだが、あまり FreeBSD の ports には blog 系のツールが入ってなかったりするのでちょっと躊躇。最近のやつは DB 前提だったりしてお手軽に試すにはちょっと大げさな感じのするものが多いのでちょっと困っちゃうな。

かといって tDiary はあまり趣味に合わないし(と言いつつ半年以上使ってるんだけど)。

ローカルでスクリプトを動かすタイプにもけっこう惹かれていたんだけど、考えたら外から手軽に更新できた方が楽なのでやっぱ http で更新しちゃうものがいいかも。wordpress とかちょっと気になってるんだけど。。。MovableType は ports に入ってるけど流行りに乗っちゃう感じがなんかイヤだな。

WinSCP3

WinSCP3 は実行ファイル名に依存した設定ファイルの読み込みを行う。 例えばデフォルトのインストールでは実行ファイル名は WinSCP3.exe になっているので、

言語情報
WinSCP3.jp
設定
WinSCP3.ini

から情報を読み込む。WinSCP2 から 3 に上げたうえで設定を引き継ぎたい、という場合は実行ファイルの方を WinSCP.exe にするか、設定ファイルを WinSCP3.ini にする。言語情報なども含めると設定ファイルの方を WinSCP3.ini にする方が簡単そう。

以前はいきなり実行ファイルを落としてそのまま手で設定するのが好きだったが、インストーラも賢いみたいで、putty 鍵関係のツールも一緒に入れられるので、今後はインストーラ任せの方がよさげ。(OS の再インストールに備えて全部手動、ってのももちろん選択肢としてアリなんだけど。)

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