Shibuya.js TT #2 の LT
まじで普通に GreaseMonkey の入門やるます。
どうも XML 書くのが面倒くさくなってきた。もう全部 Trac wiki 記法で書きたい。
やっぱバックエンドに svn を使った日記とか CMS が欲しい。バージョン管理システムを既存のを使えば、どこでもチェックアウトしコンテンツ書き換えられる感じに。
なーんも考えてない。英語キーボードを試してみたい。ノートPC (たぶん MacBook) が欲しいので15万ぐらい溜める。すげぇ長い。やだなぁ。はやく欲しいなぁ。明日地震がくるかもよ。かもよ。明日死ぬかもよ。やりのこしたことはない? あるよ。あるけど実現できないよ。あるけど実現できないよ。可愛い女の子と青春したかった、なんて叶わないことさ。
ここ数日なぜか中年とすっ飛ばして、このまま老人になって、ああ、みたいなこと考えて、だめだなぁと思った。中年になったって、どうせ、ごちゃごちゃ言ったって、ぎりぎりになった未来の俺はぎりぎりでどうにかするんだろうし、それが詰まらないことでも、どうせ死なないんだろうなぁって。全部やめたい、とか今も思ってるのに結局続けているわけで、なんなのよと、思わないでもない。何なのよなんてわかってはいると思うけど。
最後の砦、みたいなのがいつも必要だと思う。今はまだぎりぎりあるけれど、そのうち無くなることは分かりきっている。もうない人も世の中にはいっぱいいる。
他人を見下してると、見下されてるほうは絶対わかるものだ。だから「見下さない振り」じゃなくて、見下さないことを心がけるんだよ。本当はそんな人はいないのだから!
そんな無意識の自信過剰をまわりは感じる。「ぶっちゃけそんなに自分は頭よくないよ」って何をぶっちゃけているのだろうかとか、そういう。そして見て見ぬふり。しないように意識しないと
まず間違いなく、自分以下の理解力の人はいない。いない。伝わらないなぁってときは、まず間違いなく自分の説明が悪く、まれにそもそも思考レイヤーの差のせいで話が通じないことがあるぐらい。思考レイヤーの違う人とは話していても結局意味がないから、できるだけ話さないように。思考レイヤーの違いは、思考方法の回路が違うから、理解力がどうとかで比べられない。あうか、あわないか、それだけだと思う。
何かが起きたなら、原因があるはず。でもどうしてか理不尽さを感じることがある。例えばちっぽけだけれど、歩きタバコしてる人の後ろを歩いたとき。なんで自分が被害をうけているんだろうと思う。例えばちっぽけだけれど、こんな無駄に長い日記を書いていること。なんで自分はこんなもの書かなければならない情況にいるんだろうと思う。もっと大きく。病気・事故、何に繋がっているんだろう。
携帯電話の「電話」機能が好きじゃない。携帯電話なのに電話機能が好きじゃないとか無駄さが溢れているけど、特にかかってくるのがあんまり好きじゃない。その場の、目の前にいる人間との会話に、半強制的に割り込みをかける感じが好きじゃない。だからあんまりとらない。あんまりかかってこないけど。メールでいいじゃん。メールもこないけど。
それに、そもそも電話が好きじゃない。電話で話すのは気持ち悪い。理由は知らない。考えても無駄だと思う。どうせ理由なんて、殆どこじつけなんだし。上のも、無駄。無駄。
授業とかで Flash を強制されたり、「Flash はこんなに素晴らしい!」みたいな話を聴くたび、Flash のことが嫌いになっていくんだよね。
Flash を何かに置き換えてもいい。Java とか (やってないけど)、VB とか (やってないけど)、ユーザーインターフェイス設計とか (やってないけど)
Flash が苦手なのはもう仕方ない気がしてきた。開発環境もそうだし、雰囲気もそうだし、みたいな……コンテンツとしては悪くはないと思う。でもアプリケーションみたいになってくるとちょっと気持ち悪くて耐えられない。そしてひっぱられてコンテンツもうまく作れない。楽しくない。
Flash のユーザの主導権をにぎるやりかたは、全然消えていない (消そうとしてない?)。ユーザは「こうしないといけない」って Flash アプリケーションに暗に言われる。強制されるのはいつも気分が悪い。その「デザイン」に気付けない Flash アプリケーションは優秀かもしれないけど、デザインに気付いてしまったら、また「操られている」感じが不快だ。どっちにしろ Flash が今のようなユーザにフックを許さないような構造な限り、フックしたい人には不快感を与え続けると思う。
かっこよく動いてるアプリケーションを使ってる俺はオシャレなんだぜ、みたいな、そういう雰囲気、そこで止まってしまう感じ、そんなのもなんかちょっとだめな原因かもしれない。モテ系。
かっこよく動いて、デフォルトのデザインも気持ちいいけど、さらに自分の手をそこに加えたい。そういうことができて欲しい。押し付けがましいのを排除したい。目立たないデザイン。表にでないところが綺麗になっていて欲しい。あなたの自由にしていいですよってことができて欲しい。ほんとに
なんかネガティブなことが多すぎる。もっといいこと考えないとなぁ。いいこと。大学行くと嫌なことばっかり入ってくるなぁ……
前に 短めの bf コードを吐くスクリプト 書いた。
数学が分からなくて、これが本当に最短なのかわからない。そのうえ、255 以上 (より上?) の数値を最適化するとき無限ループさせるコードを吐いてしまうバグがある。よくわからない。
mixi で一時期書いてた bf はこれで生成していた。
今時 Ajax とか (口に出すのが) ワロスだけど、選択式レポートで Ajax について書けみたいなの (他には既存システム推測・ルータの設定詳細) があったので、これを選択することにしようとか思った。
Ajax で実装された何かを取り上げて利点をあげよとかいうのがあって、何をとりあげるか悩む。あんまり Ajax! Ajax! してるのってないしなぁ……
どっかのコメントフォームのやつとか投票みたいな簡単なのにするか、LDR みたいなアプリケーションにするか。どっちがいいんだろう。
むしろ既存システム推測のほうが簡単な気もしてきた。推測だからてきとーに想像しても割りとよさそうだし(ダメすぎ
カタチのあるものを全然作れない。うーん。
プログラムより、ちゃんと物理的に形が見えるのを作りたい。
"CSS3 media queries for Opera" ハックで処理していた部分が修正されたおかげで逆に変になっていたのでコメントアウト。おぺらーな人は 9.0 に乗り換えるよね、乗り換えるよ、乗り換えてくださいよ、って感じで過去のバージョンはざっくり知らんふりします。
でも、このサイトのナヴィゲーション部分が Opera だとなんかズレてるんだよなぁ。なんでだろう……
イソムラさんが面白いバグを発見したので動画にしてみます。他人のサイトを録画とか趣味悪いですが、とりあえず圧倒的に楽しい。
動画を見るより実際やってみるほうが圧倒的に楽しいです。
404 | Opera 9 アンダーグラウンド に詳細な手順が! Flash ダウンロードするのめんどくさい人はとっとと試しやがれですよ。楽しいから
DHH 本がきたので、ちゃんと入門するよ!
ところで全然どうでもいいけど、本を読むと本のマジックというかなんというか、読んでいる間は「うわすげぇー簡単じゃーん」とかわかった気になるんだけど、実際のケース (今作ろうとしているのも) に当てはめようとするとことごとくうまく行かないという泣きたくなる情況が頻発して凹む。
とりあえず多対多の場合 ActiveRecords は id カラムを持たないテーブルを一個仲介役に作ってあげるみたい。んでテーブル名は二つのテーブルをアンダースコアでつなげたものにするらしい。(244 ページ, has_and_belongs_to_many)
それで、一個疑問は解けたけど、実際にやってみようとすると問題がまたでてくる。例えば vote っていうのはそれぞれの Topic に対して User がそれぞれ投票できるような感じ (Topic と User が多対多で、vote という意味で繋がってる) だけど、っていうかコード書いてみよう。
class Topic < ActiveRecord::Base has_and_belongs_to_many :users end class User < ActiveRecord::Base has_and_belongs_to_many :topics end
とかやると vote っていう名前が一切でてこなくなる。
でもってどうするんのよ!って聞いてみたけど、要は has_and_belongs_to_many のリファレンス嫁ってことらしく読んでみる。実際実行して試したいけど、どうやって試せばいいか分からない。うーん気持ち悪い
下のようにするっぽい?
class Topic < ActiveRecord::Base has_and_belongs_to_many :votes, :join_table => "topic_votes" :class_name => "User", :foreign_key => "user_id" end class User < ActiveRecord::Base has_and_belongs_to_many :voted_topics, :join_table => "topic_votes" :class_name => "Topic", :foreign_key => "topic_id" end
この has_* 系メソッドの第一引数は、そのまま@をつけてインスタンス変数名になるのかな。そうっぽいけど明確に書いてあるリソースが見つけられない。ソース嫁ってか。
それにしてもテーブル作って、generate model した直後でテストが通らない。もっと小さいアプリケーションからやるべきだなぁ……でもそういうアプリケーションで作りたいのがない。
長い夢を見た。昨日学校の図書館で爆睡したときに見た夢と、昨日の夜妙に早く (8時ごろ) 寝て、今まで見ていた夢 (15時間)。続いていたけど、前半を覚えていない。クライマックス付近だけ覚えている。アルファギークはでてこなかった。むしろ珍しいことに現実にいる人が一人しかでてこなかった。
キーパーソン (彼女とネコ) といろいろあるけど忘れた。ネコは人語を喋れる。アパートの一人暮らししている時点でただのネコじゃない。ネコのほうは純粋にキーだけど、彼女は元々こちらの人間なので、紛れ込んだときにキーが混入したみたいだ。たぶんそのキーのおかげで彼女の使える力が大きかったんだと思う。
なかなか死なない人がいた。だいぶひどいことをしたと思うけど、結局弱りもしなかった。気持ち悪かった。というか人じゃないんだなあれ。多摩川・長い道路・本
生徒会役員に味方が一人いる。と思いきや、割と味方がいる。というよりむしろ一緒にまぎれこんだ人たちは基本的に仲間のようだ。が、誰がまぎれこんだ人なのか正確に知る方法がないため信用できる数名で動く。
専用食堂で食事をしていると生徒会長が来る。逃げる。違う人間がターゲットになる。よかった。騒ぎが大きくなる。どうでもいいけどエロ本は一万円の罰金 (高すぎじゃない?)。ここで時が止まる (これは誰の協力ない。彼女の独断によるもの。協力がないため、動けたのは彼女と自分だけで、時間も短い)。手紙をもらう (内容は忘れた)。それとは別に口頭で、次の時間は4:00だと告げられる。
急いでこの世界がでないと、という話になる。このへん曖昧。先輩関係でネコがキーワードになっていることが判明し、アパートのネコを尋ねる。学校に帰る途中、今まで入り口がないことが変とは思いながらそれ以上を考えなかった場所がトビラであることに気付く。マーキング (あとで戻るためのしるし) をつけて学校へ。
他の人たちをまとめてマーキング位置に転送し、扉を開いてもとの世界へ。
ビューって何。つまり、使うと何が嬉しいのかよくわからない。パフォーマンスのために云々っぽいけど、実際どういうケースで使うんだろう。
最近分かったこと。というか教えてもらったこと。
カラムに配列 (のようなもの) を突っ込みたいときは、配列の要素をテーブルにして、元の行の id とデータを複数突っ込むらしい。
/* この例だと当たり前な感じがするなぁ。 */ CREATE TABLE entries ( id INT PRIMARY KEY, body TEXT, ... ); CREATE TABLE comments ( id INT PRIMARY KEY, entry_id INT, body TEXT );
多対多な関係の場合は仲介テーブルを作るみたい。
CREATE TABLE ideas ( id INT PRIMARY KEY, body TEXT ); CREATE TABLE users ( id INT PRIMARY_KEY, name VARCHAR(60) ); CREATE TABLE votes ( id INT PRIMARY KEY, idea_id INT, user_id INT );
見て不愉快になる物は見なければいい、と人は言う。例えば自分に対する陰口が書かれた匿名掲示板。例えば自分に向けた悪意が積み重ねられているソーシャルブックマーク。身分の目に入るところにそれを入れなければいい、そう言う人は多い。中にはシステム的にそれをやってしまう人もいる。リンク先のさとうさんはそういう人のようだ。
これはちょっと違うんだよね。あのスクリプト書いたのはもうちょっと違う理由があって、まぁスクリプト自体はそういう風にも使えるんだけど、もともとは違うって意味でちょっと違う。
自分が「何を」消したかったかというと、見たくないものというより、もっとなんていうか、有害なものを消したかった。例えば、本当に例えばだけど「さっさとクソして寝ろ」とか「くだらない」とかしかコメントに書いてないブックマーク (ブックマーカー) って、その文に価値がないうえに、自分にとって不愉快になるという点で「有害」なんです。だから消したかった。読むに値しない以上に有害なのを消したかった。
不愉快になるけど、批判は全うで、読んでおくべきだなぁと思ったらそれを消したりはしない。
何も得るものがないうえに不愉快になるとか、そのこと自体がまた不愉快なのでスクリプトを書くに至った的何かで、そこまで感じなかったらスクリプトなんて書かないわけです。そうじゃなかったら $X("//div[@class='bookmarklist']/ul/li[a["+xpath_fl+"]]/text()[last()]") なんてめんどくさいコード書かないです。
確認がとれたものと修正して動いたもの
ずばばっと表示させるやつはどうも挙動が怪しいです。動的にレンダリングするのを変えるのはやっぱちょっと苦手っぽい。
require 000.user.js
ignore-not-cc-photo.user.js を書き換えた。flickr が gamma になったときぐらいに HTML の構造を変えたらしく、もっと簡単に書けるようになっていた。ついでに $X 使うように修正した。
半月は短編集の前編らしい。なんかもうどうでもいいよ!
さよなら、いもうと。いもうと以外のキャラがいい。負荷軽減のためにわざとやっているのかなんなのかしらないけどそういう雰囲気。実際登場時間も少ない気がする。
「俺だって今日、死ぬかもしれない。明日、死ぬかもしれない。そのことがわかったはずなのに、少しも必死じゃない」 「必死じゃないといけないの?」 「いけないわけじゃないかもしれないけど……なんつうんだろ? 明日死ぬかもしれないのにさ、今日をやけにのんびり生きてるんだよな。死ぬ前にやっておきたいこととか思いつかない。だからそのことを考えないようにして、また明日とか平気で言ってしまう。そんな自分のままじゃダメなんだって思うんだけど、でもどうするんでもないんだよな」
開始早々のアレとか、途中のイベントとか、最後のアレとか、随所に新井輝臭のようなものが漂っています。当たり前だけど
9.0 がリリースされたのでいろいろ調べて書く。
XPath は割と普通に使えるっぽい。時々変な挙動な気もするけど。$X は書き換え無しに動く。と思いきや createNSResolver は動かない
innerHTML 使ってパースさせるやつ は Opera でもできるようだ。
Array#forEach や GM_xmlhttpRequest がないため、殆どの GreaseMonkey スクリプトは動かない (が、後述するスクリプトでほぼ解決)。ついでに Opera はハイパートリッキーなことをしないとドメインを超えられないようだ。
Opera 用のラッパは 000.user.js とか最初のほうに呼ばれそうなファイルに書いてあげればいいっぽい。000.user.js . インターフェイスのラッパだけです。ドメイン超えるのも 000.user.js に書けば普通にいけるかもしれない。
作ったスクリプトで確認がとれたやつを列挙する。
E4X とかクロスドメインとかでひっかかる。E4X を innerHTML + XPath にし、クロスドメインのハックをすれば動くと思われる。
それと、日本語は素でかけないようです。\u でエンコードする必要あり。スクリプトを直接編集する場合もです。(GreaseMonkey はインストールするときに化けるらしく、直接編集している限りは日本語は普通にかけます。)
データベースの設計ができないからなんだと思う。Rails ってまずはじめにデータベース設計ありき、みたいな雰囲気があって、どうしたらいいかわからない。きっとこの辺が分かれば高速に開発できるのだろうけど、いかんせんデータベースって「レスポンスがいいけど面倒くさい」というイメージがずっとある。
というか実際問題面倒くさい。ロックが効かないシステム (学校の鯖) でやろうとするとデータベース使うって段階で既に躓く。自宅鯖でやるとなると、デーモンが一個動いたりするから、セキュリティ云々で面倒くさい (SQLite を使うのはスタンダードじゃなくて躓く)。セキュリティ云々が面倒くさいとかいう人間に公開サーバーを運用する資格なんてないので、この辺で脱落する。公開できないサービスなんて面白くない。だからといって開発用に鯖を借りる金は出てこない。そこまでモチベーションがあるわけじゃない。
データベースありき。データベース側からやっていくと、そのものの表面的カタチ (インターフェイス) がなかなか見えてこなくてつまらないし、いざインターフェイスを作る段階になると、ロジックで疲れ果てててきとーなモノになってしまう (「よしじゃあ rhtml と CSS 書こうか、でももう一応できてる (scaffold のおかげ) しなぁ、めんどいからいいや」みたいな)。
ユーザーインターフェイスなんて後からどうにでもなる、わけない。最初に作ったイメージはあとあとまで引き継がれてしまう。最初のできが悪いと、ずっと悪いまま。すごく優秀な「別の」人が関わらない限り、それは直らない。(自分としてはこういう新しい視点を提供してくれる頭のいい女の子に憧れる。関係ない)
CSS 書くときと、プログラムのロジックを書くときの脳みその状態が全然違う。切り替えるのが面倒くさい。先に見た目を作ると、あとで「あーこれが本当に動いたらなぁ」なんて気分になってロジック書く気になるけど、逆だとならない。
根本的に何か勘違いしている可能性がありまくるけど、現状だといまいちやる気にならない。今作りたいものはあるけど、データベース設計で既に躓いている (だいたいテーブルの数が5個ぐらい)。だからとりあえず UI だけ作ろうかと思った。そのうち。いつか。
throw :life #=> ThreadError : "uncaught throw `life' in thread 0x854b6a8"
スローライフの意味がやっとわかった。@IRC by mayuki さん
いろんなところでカリー化と普通に言われて、カリー化って何だよって思っていたけど、ふとした拍子に理解した (と思う)
引数を一個とって関数を返す関数をカリー化された関数というらしい。なんか言葉にするとそこらの説明と大して変わらないなぁ。
檜山正幸のキマイラ飼育記 - JavaScriptでカリー化 の最初に「カリー化ってなに?」って書いてあるけど、今はこれが一番わかりやすい例だと思える。前読んだときはよくわからなかった。2引数の関数f(x, y)に対して、「gがfのカリー化」だとは、f(x, y) = g(x)(y) が常に成立すること
。ちなみに「なに?」の部分以外はわからない (読んでもいない)
モナドもわからない。ほっといてもそのうち分かるんだろうな
GreaseMonkey では GM_xmlhttpRequest で他のページとってくるじゃないですか。で、onload して req.responseXML をとるなり req.responseText をとるなりするけど、どうにもこうにも not well-formed なページ (HTML とか) をとってきてノード検索するとき面倒くさいんですよ。responseXML はもちろん空だし、responseText はもちろんただのテキストだし。
で、なんとなく思いついたので以下のように解決するようにした。
GM_xmlhttpRequest({
method : "GET",
url : i.href,
onload : function (req) {
// てきとーなエレメント作って突っ込む (ブラウザにパースさせる)
var d = document.createElement("div");
d.innerHTML = req.responseText;
// d を最初のコンテキストノードにして文書を XPath 検索
$X(".//foobar", d);
},
onerror : function (req) {
alert(req.responseText);
}
});
なんてキモイ!
問題点は application/xhtml+xml なページから not well-formed なページをとってくるっていう場合は使えないこと。なぜなら innerHTML が使えないから。でも殆どの場合 (というか殆どのページは) text/html なので問題ない感じ。はてなとかはてなとかはてなとか。
Firefox 1.5 からは application/xhtml+xml なページでも innerHTML 使えるみたいです。by yoko さん
最速インターフェース研究会 :: GoogleAutoPagerというのを作りました のはてブ版。
自分のブックマーク一覧でしか動きません。
hatena-bk-show-ss-and-comments.user.js
似たようなのがあるけどとりあえず公開する。こっちは自分のブックマークじゃなくてもいろんなところで動くと思う。
sayonara-hatena-by-araiteru.user.js
気が付いたらはてなを使っている人向けのスクリプトです。そこそこ適切な代替サービスなどにリダイレクトします。
実装がダサかったので少しだけ変えました。コンセプトが既にダサいとかは知りません。
via 適宜覚書はてな異本 - AdobeAcrobat7のロードをスピードアップする方法
紹介された方法だと何かうまく行かないので自力で try and error してみる。(7.0.5)
エラー出しながらやったけど、「プラグインについて」を見れば依存性が書いてある罠。