メイリオを試してみた。
ヒラギノとか IPA Gothic に比べると、雰囲気が丸くて、柔らかい感じ。SHARP のなんかのフォント (名前忘れた) に似てる気がする。あんまり好きじゃない。
文字小さめのほうが綺麗に感じる。ClearType のせいかな。
Windows はアンチエイリアスのかけたかがいくつか選べたらいいのになぁ。IPA Gothic も Windows だと汚く感じる。もったいない。
システム系フォントを全てメイリオにしてみた。なんか思ったよりいい感じ。
カタチのあるものを全然作れない。うーん。
プログラムより、ちゃんと物理的に形が見えるのを作りたい。
"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)
エラー出しながらやったけど、「プラグインについて」を見れば依存性が書いてある罠。
hatena-bk-neglect-comment-by-id.user.js
指定ユーザのコメントを消します。デフォルトでは「ブックマークしている」ことは薄く見えるようにしてあります。ERASE_FROM_THE_WORLD を true にするとブックマークしている事実も消します (ブックマーク数は変えません)。
学校のテストでみごとに0点だったのでちゃんと頭に入れるよ!!
何がわからないってことを明確にしとこう。
IP をそもそも理解していないようです。
さてそこで #XSLT で訊き (今現在既に理解の範疇を超えた話をしている (わらい)) つつ @IT:連載 基礎から学ぶWindowsネットワーク 第7回 1.IPアドレスとは とか読みつつ疑問を解決していく。
TCP/IPでは、ネットワーク全体をフラットな1つのネットワークとして扱うのではなく、いくつかの小さなネットワークの集合体として扱うことになっている。
そもそもこの辺で躓いていた。グローバルIPとプライベートIPっていうのはあるけど、グローバルIP の中では全部フラットだと思ってた。グローバルIPの中でも階層があるんだなぁと。無駄なトラフィックを減らすため (同じネットワーク内の通信は同じネットワーク内で完結するように) らしい。
いろいろソフトウェア系でわからないこと
LTS って何。Long Term Support
ダウンロード終了まであと43分
これってアップデートマネージャからアップデートしてもちゃんと ubuntu-ja のほうにアップデートされるのかしら。されなそうな気分。されてほしい。
emacs21 で致命的なエラーっぽいのがでて完了しなかった。apt-get remove emacs21 して再起動した。とりあえず起動はちゃんと?してくれた。PCMCIA マネージャの起動に失敗してたけど、何に影響するのかわからん。
しかしながら emacs は使える。バージョンが違うのかな。emacs のそのへんが意味不明
Rhythmbox が Audioscrobbler をサポートしてる。でも mp3 が再生できなくなった。gstreamer0.10-fluendo-mp3 を入れた。
Audioscrobbler 機能が動いてないような。むーん。
仕方ないので rbscrobbler を今まで通り起動してみる。
Rails 動かすために (ruby 1.8.3 だとダメっていわれた!) うpだてしたけど、終わったころにはやる気がなくなってる罠
一部の曲が文字化けする。エンコーディングとか一緒なのになぁ。意味不明すぎ。
むしろ id3v2 を読めてないくさい。なんだこれは。
RIFF -> Idv2 と変換させたら直った。
読み終わった。関係ないけど学校で暇だったから炎のゴブレットを飛ばしながら読んだ。内容忘れすぎ。
最終巻まだー? ハリーの夢落ち
これで溜まってる本は全部読み終わった。なんか次の探そう。
普通のブラウザならサポートしている便利なやつで data: っていうのがあるわけです。意外と知らない人もいたりいなかったり。たびたびこの話は出る感じ。以下 RFC:2397 のメモ。
data:[<mediatype>][;base64],<data>
セミコロンとカンマを逆にしたりする。
data:text/plain,foobar data:,foobar 上と同じ data:text/html,<html><body style="background:#fff"></body></html> data:text/plain;charset=utf=8,%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92 data:image/gif;base64,R0lGODlhEAAQALMNADAwMBAQEO/v78/Pz0BAQCAgIN/f37+/v2BgYJ+fnwAAAP///4CAgP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAANACwAAAAAEAAQAAAEObDJieq8uFVEer5bR3xZFxQFiaGpOrHSIqtP3cgLbeP6IxlA1wRoEP4MgsPB2FAeElCXE5pgUpmuCAAh+QQJAAANACwAAAAAEAAQAAAEPrDJSaulKF+bUV1glQEEMYHLVZoSqpaSIW9NYTeyQdsFPm88yWF4eRgnw0PxKDwMEomK8VGBRmkTK3bLpUUAACH5BAkAAA0ALAAAAAAQABAAAAQ6sMlJK13Yarw0NQZXIeQEGhqJmGBaNkfsNUQNy15N3MesS4mgpkCcBBPDIlBIeTiVM+dj1nRSr9hJBAAh+QQJAAANACwAAAAAEAAQAAAEN7DJueq80+i6MNYG50nHIWjjVR4ptrZTIrdI3cgJbeM6AkuE4A8ohBUKgaLnwTwWYMyHE8oc/iIAIfkECQAADQAsAAAAABAAEAAABDiwyWnqvPPoapbHknZw3oIlyaBN5YmCMJrAdG3feN4gfM4jmIdwQiAAehfho8AsEmBKZsFpk+pqEQAh+QQJAAANACwAAAAAEAAQAAAENrDJeeq8M+l6jMeSlnCeATbi5C3sCbKLi8Fybd/yo+P6w+uFwgRBPAULhCQRYQwmCcvaE1eLAAAh+QQJAAANACwAAAAAEAAQAAAEObDJmeq8uNV0er5bd3xZJxgGiaGpOrHSI6tL3cgPbeP6IhVA1wRYEP4KAQLB2FASEFCXE4pgUpmuCAAh+QQJAAANACwAAAAAEAAQAAAEPrDJSaulKV+bU31glQ3HMYHPVZoSqpZSIW+NYTdyQdsGPm88CWF4WRgnQ0LxKCQAEIiKcVGBRmkTK3bLpUUAACH5BAkAAA0ALAAAAAAQABAAAAQ6sMlJK33Yavw0LQVXJeQEFhqZmGBaNkTsNUcNy1593MSsS4igxkCcBBHDIlBIWTiVM+di1nRSr9hJBAAh+QQJAAANACwAAAAAEAAQAAAEN7DJ+eq8s+j6MNYF50kEEWjjVRIptrYTIrdJ3cgIbeN6AkuH4A8ohBkMgqJnwTwaYMyFE8oc/iIAIfkECQAADQAsAAAAABAAEAAABDiwyVnqvJPoWp7HkkZw3oMhCKBN5YmCMIrAdG3feN4kfM4nmIVwcjgMehfhwsAsHmBKpsFpk+pqEQAh+QQJAAANACwAAAAAEAAQAAAENrDJSeq8E+lKiseShnBeATbi5D3sCbKPi8Fybd/youP6wusGwyRBPAUNhyQxYQwmD8vaE1eLAAA7
もちろん image/* のときは base64 を使わないといけないという規則があるわけじゃない。% エンコーディングで普通に書いてもいい。クソ長いけど。
ユーザ CSS とか JS とかを配布するとき、一つのファイルに纏めたいときは便利。
久しぶり。黒背景にしたけどきもい。すぐ違うの作らないと
背景画像は /2006/other-side-world です。久しぶりに RDF 書いた……