anti scroll

ブラウザと小説の新しい関係を模索する

プログラミング

Time-based renderer task throttling

Chrome ver56から導入されるようですが、ざっと読んだ感じだと、こういう動作らしいです。 バックグラウンドタブの処理に時間枠を設ける。 バックグラウンドタブの処理時間が時間枠を超えると、値が負になって(いったん)眠る。 ただし眠りっぱなしというわ…

textNodeの出力オプションを追加

2chからのアクセスに、珍しくリファラが付いてたので、元スレを覗いてみたのですが、縦書き文庫に投稿された作品へのリンクに「踏まないほうがいいよね?」ってレスが付いていて、地味に傷ついたのでした。 capturePageTextオプション それはさておき、表題…

nehan.jsのデモページをReact/Fluxで作ってみた

必然性は全くなかったのですが、Fluxを試してみたかったので作ってみました。 http://tb.antiscroll.com/static/nehan-demo/ 使ってみた感想 あんまり感触は良くないかも… ただ今はなんとなく全体像を掴んだかもっていう段階なので、もっと複雑なUIを作ると…

「貼るだけ」のアクセス解析?

今回アクセス解析を実装するにあたって疑問に思ったのですが、よくある「貼るだけでOK」なアクセス解析って、サイト所有者の確認ステップがないっぽいのがありますが、これって大丈夫なんでしょうか。 例えば誰かが勝手に他人のサイトを先に登録したら、後か…

nanocのほうがjekyllより良いかも

nanocとは nanocはRuby製の静的サイトジェネレーターです。 静的サイトジェネレーターとは、固定的な内容のウェブサイトを作るのに使われるサイトジェネレーターです。 ホームページ制作ツールのような複雑なIDEではなく、コマンドラインとエディタでサクっ…

datasetにセットしたboolean値について

ちょっとハマったのでメモ。 例えば、 <div id="foo" data-hoge="true"></div> とかあったとき、以下の結果はどちらもfalse $("#foo").data("hoge") == "true" // false $("#foo").data("hoge") === "true" // false 理由はdatasetにセットした"true" もしくは "false"は、boolean型として評価され…

backbone.touch.jsでモバイルデバイスの「クリック」を高速にする

クリックが遅い? おそらく世間的には常識的な内容なんでしょうが、モバイル用フロントエンドの初学者には新鮮なことだったので書き残しておきます。 実はモバイル用のビューアーを書いていて、前から「なんかクリックが遅い?」と気になっていたのです。 ず…

reactive programming / getterは共変、setterは反変

reactive programmingについての動画(語り手がハイテンション)を見つけました。 http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2014/Keynote-Duality まだ前半しかみてないのですが、途中getterとsetterを「共変(covarience)」と「反変(contrav…

HTMLの閉じタグを省略する記法について、パフォーマンスの検証と考察

nehan readerで長文エントリーを読むときに、少し前まで正常にパースできていたページが、ある日から突然レイアウト崩れを起こしてしまったりすることがあります。 で、調べてみたら、閉じタグの省略を使ったマークアップに変更されたことが原因のようでした…

OCaml用の麻雀ライブラリ

フォルダ整理していたら、二年ほど前に書いたOCaml用の麻雀ライブラリが発掘されました。 しまっておくのも無駄だし、バックアップも兼ねてgithubに上げておくことに… https://github.com/tategakibunko/ocaml-mjlib 一応、ゲームやプレイヤーなども含めて抽…

unicode substring of OCaml for application layer

cwn経由でextlibにUTF8.substringが定義されたと知り、じゃあオレオレな実装からサヨナラできるかな、と思って試してみましたが、 assert_equal (UTF8.substring "hoge" 0 5) "hoge" は残念ながら "out of range" という例外で終わってしまう……extlibのsubst…

OCamlでObject-relational mapping(ORM)みたいなやつ

ocormは表題の件をなんとなく実現するライブラリです。https://github.com/tategakibunko/ocormocormのMakeRelationMapファンクターは、schemaの定義モジュール(Schema)と、データ型の変換モジュール(FieldMap)を受け取って、(string, string) listをFieldMa…

ocamlのネットワークライブラリでfile_descrリークするものが多い理由

ocamlの通信系ライブラリでUnix.open_connectionを使っているライブラリは、Unix.shutdown_connectionを呼ぶだけで切断処理を終わらせているものが多いなあと思いました。最近さわったredis用のclient libraryとmemcached用のclient libraryはどっちもそうい…

「red」は#f00、「blue」は#00f、「green」は?

redは#ff0000だし、blueは#0000ff。となればgreenは#00ff00だと思うじゃないですか。でも違くて、Gの成分がffの色名は「lime」というらしく。色名の「green」は、Gの成分がlimeの半分で#008000なのだそうです。色相を語るときのGと、色名を語るときのgreenは…

ChromeにおけるConsoleオブジェクトを使ったデバッグ覚書

今までオブジェクトのデバッグは単体行で書かなくちゃいけないかと思って、 var obj = {name:"taro", age:10}; console.log("taro is"); console.log(obj); とか書いてた……けど、なんか違うんだろうなあと思って調べたらこんな風に書けるらしく。 var obj = …

Gruntの覚え書き

最近知ったjs task runnerのGruntですが、なるほど便利。 今までは拙作テンプレートエンジン(jingoo)でスクリプトの断片をrawincludeするテンプレートを作って結合していたのですけど、今後はGruntで統一しようと思いました。 Gruntfile.jsでお仕事を定義…

githubで初めてforkされた

少し前に作ったlwt-websocketですが、初めてforkされちゃいました(嬉しい)。 セッションで使うsecret keyを、自分で指定するのではなく自動でランダム生成するように改良してくれたようです。 diffを眺めていたら、今まで知らなかったテクニックとか、まず…

ocaml lwt based websocket library

lwt-websocketというライブラリを公開しました。酉打ち麻雀を開発するにあたって作ったものです。クライアント側とサーバー側の両方で使え、ハンドシェイク後の通信チャネルを簡単に作成できます。使い方はexampleのclient.mlとserver.mlを見ると早いですが…

jingoo1.2.0 release

jingoo1.2.0にて、オブジェクト型にThash型を追加しました。これまでのオブジェクト型は連想リスト、つまり(string * string) listだけでしたが、フィールド数の多いオブジェクトで、かつ表示件数が多い場合にパフォーマンスが落ちるので、ハッシュ型のオブ…

すごいHaskellたのしく学ぼう、の読書メモ(関数Applicative Functor編)

すごいHaskellたのしく学ぼう!(略してすごいH本)ですが、難しかったけどなんとか読了できました。しかしこの本、全体的に解説が丁寧なのですが、重要じゃないとみなされた部分の説明は、意外とザックリしてる印象です。というわけで、ちょっと理解に時間…

closure compilerの配列最適化にビックリした

今日はじめて気付いたのですが、 var array = ["hoge", "hige", "hage"]; って配列をclosure compilerにかけると var array = "hoge,hige,hage".split(","); とかなるんですね。そんなんするんだ……って、ちょっとビックリしました。これって、配列の要素が全…

jingooでテンプレートをコンパイル

jingooはjinja2と同じくテンプレートをコンパイルすることも出来ます。 コンパイルする際には、デフォルトで/usr/local/bin にインストールされるコマンドラインコンパイラjingooを使って、 jingoo -input cheatsheet.tmpl > cheatsheel.ml としてください。…

jinja2互換のocaml製template engine 「jingoo」の紹介

先日公開したjinja2クローンのOcaml製テンプレートエンジン「jingoo」ですが、jinja2のことを知らない人のために、ちょっとしたgetting started & cheatsheet的な捕捉です。 より詳しいシンタックスを知りたい人は、せっかく日本語訳を書いてくれた人もいる…

jingoo - ocaml template engine compatible with jinja2

縦書き文庫をリニューアルする際に開発したテンプレートエンジンjingooをgithubに公開しました。ライセンスはMIT Licenseです。github.comjingoo はOCaml製のテンプレートエンジンで、jinja2と全く同じシンタックスで、ほぼ全ての機能をクローンしています。…

JSON Web Token encoder decoder for OCaml

Google In-App Payments API for the Webで取引の暗号化に使われるJSON Web Token (JWT)を扱うOCaml用のライブラリをGoogle Codeで公開しました。ocaml-jwt - JSON Web Token encoder, decoder in OCaml - Google Project Hostingビルドするのに必要なライブ…

(ocamllex)単一アクションで複数のトークンを返す

ocamllexでlexerを書くとき、あるシンボルに出会ったら複数のトークンを返したいという時があります。 そういうときは、lexerをこんな風にラップするclosureを書きます。 let cached_tokens = ref [] let cache_token token = cached_tokens := token :: !ca…

promptを使って検索するchrome拡張を作りました

Chromeアドレスバー(Omnibox)は検索にも使えて便利なのですが、一文字入力するたびにローカルの履歴を探したり、設定によってはグーグルにデータを送信したりするので、時々フリーズするのがいただけません。 なので、サジェッションもヒストリもなく、も…

XP Home EditionではSafari拡張が開発できない?

ここ数日の流れでいくと、最後はSafariの拡張を書いて締めたいところですが、どうもXP Home Editionでは開発できないらしいことがわかりました。 原因は簡単に言えば、XP Homeがサーバー的な仕様のOSではないため、自分自身のPCの証明書を発行できないから、…

Operaの拡張でもクロスドメイン通信

Chrome、Firefoxと拡張を開発できたので、調子にのって普段まったく使わないOperaの拡張も作ってみました。で、何ヶ月ぶりかで起動してみたら、案の定バージョンが偉く上がっていて、早速バージョンアップしてみたら、また一段と我が道を行くUIに変わってま…

Firefox Add-on SDKでサクっとクロスドメインXHRする拡張を作る

Firefoxの拡張機能を作ろうと思って公式のサイトを見たら、ドキュメントは色々とあるんだけど何を読んだらいいのかよくわかりませんでした。でもなんか「今はこれが一押し」みたいなリンクがあって、そこを辿っていったらAdd-on SDKというものに巡り合って、…

kay framework をgae SDK 1.6.0 で動かした時にtoo many values to unpack

gae1.6.0 になってから dev_appserverのLoadAppConfig関数の戻り値が三つになったので、kay/misc/__init__.py の21行目を次のように書き換える。 def get_appid(): from google.appengine.api import apiproxy_stub_map have_appserver = bool(apiproxy_stub…

sphinxがpython2.5でも動いた

Sphinx1.1.1がpython2.5でインストールできたものの、make html してもエラーでドキュメントの出力ができず辛すぎたんですが、どうもSphinxってpython2.6からのサポートらしく……でも僕の環境はgaeの影響でpython2.5に縛り付けられているので2.6には移行しに…

IndexModelを作ってgaeの検索を高速に

ソースは「Building_Scalable_Complex_App_Engines」です。2009年の資料なんですね……完全に見落としてました。 まずよくある多対多のリレーションにおけるデータ検索の正直な実装……例えば複数の送信先のあるメッセージの中から、自分宛てのメッセージを取る…

chrome extensionでcross domain のXHR

表題の件で数日前にブログを書いたのですが、なんか間違っていたっぽいので破棄しました。 困っていたのは、クロスドメインのXHRを許可するpermissionが正しく設定されているのに、contentスクリプトやらbackgroundスクリプトを編集して、デベロッパーメニュ…

kay framework のCRUDでデフォルトのURLマッピングをカスタマイズする

これも忘れそうなので、メモ。 例えば、Category というモデルに対してCRUDビューグループを作ると、 /category/list /category/show/<key> /cateogry/create /category/update /category/delete</key> などとマッピングされるけれども、このURLマッピングが、自分の使…

kay framework で日本時間を出力

kay framework のメモです。表題の件ですが、色々と調べたらフィルターを書くのが楽そうだと思いました。 # myapp.filters.py def to_local_time(time): import datetime return time + datetime.timedelta(hours=9) def local_time_ymd(time): return to_lo…

kay framework のCRUDでkey_nameを設定する

忘れないようにメモ。kay frameworkでは汎用ビューグループという機能があって、データの追加、更新、削除などをやってくれる画面を自動作成することが出来ます。しかしデータを追加する時、モデルにkey_nameを付けたいときはどうすればいいのか。そこで、ka…

javascript の constructor プロパティ

ノリでなんとなく書いていても駄目かなあと強く思うことが増えてきたので、今さらながらjsの基本をしっかり覚えていこうと思うようになってきました。とくにプロパティまわり。今までprototype以外のプロパティをあんまり意識した事がなかったのですが、最近…

PayPalのAdaptive Payments APIについて調べてみた

ちょっと興味があってPayPalのAdaptive Payments API について調べたのでメモです。 今後、ちょこちょこ付け足していくかもしれませんが、間違いなどあったら指摘してくださるとありがたいです。Adaptive Payments APIとは これまでのExpress Checkout APIな…

kay framework でsubmitボタンの文字を変える方法

最近kay-frameworkを調べているのですが、自動フォーム作成で表題の件について意外と苦労したのでメモです。 結論としては、テンプレートで、 {{ form()|safe }} としている部分を、 {{ form(button_label="送信")|safe }} などとすればボタンの文字が「subm…

amazonの価格変動をチェックするスクリプト

先日ウイニングイレブン2011というゲームを買おうと思ってアマゾンを見たら、なんと驚きの8900円。めちゃめちゃ高かったので、仕方なく別の通販サイトで買ったのですが、直後にアマゾンをチェックしたら一気に値下げしてて、そこで買った値段より五百円も安…

gaeで設置できない名前のスクリプト

gaeではまったのですが、本番環境では、PYTHONPATHに定義されているのと同じ名前のスクリプトを設置できないらしく… だから例えば以下のようなファイル名のスクリプトは(テスト環境では動くけど)本番環境では設置できない……と。profile.py struct.py warni…

fc2ブログにツイートボタンを貼る

Twitterからもツイートボタンがリリースされましたね。FC2で導入する場合は、URLを<%topentry_link>として、ツイート内テキストを<%topentry_title>とするのが良いと思います。僕の場合はテンプレートの設定で、記事のタイトルの後あたりに次のようなコード…

jquery の click ハンドラにはまった

今まで知らなくてはまったのでメモ。例えばjqueryで、何かのクリックハンドラをこんな風に書くじゃないですか。 $("#some-button").click(function(){ console.log("hoge"); }); $("#some-button").click(); // -> hoge だけど次のような感じで、クリックハ…

facebookのlikeボタンを付けてみました

なんかfacebookのlikeボタンというソーシャルリンクが凄いらしいので付けてみました。フェースブックのプラグインページにあるコードをテンプレートに貼り付けるだけ。FC2なら、各記事のリンクは<%topentry_link>なので、 <iframe src="http://www.facebook.com/widgets/like.php?href=<%topentry_link>" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px;"></iframe> というコードをテンプレートの中で…

OCaml から OAuth

OCamlでOAuthを使う方法を探していたら既にooauthというライブラリがあって助かった、と思ったのですが結構はまったのでメモしておきます。まずCryptokit。これをooauthが使うのですが、ooauthがfindlib経由でcryptokitを参照するのに、本体のcryptokitはデ…

Ocaml で Twitter Bot を作る

せっかくTwitterに登録したのだから、縦書き文庫のホットエントリーを自動的にTwitterに流すことにしました。Ocamlで作ったのですが、せっかくなので公開しておきます。ocamlnetというライブラリのHttpClientモジュールを使っています。 let sm_update = "ht…

IEにおけるinnerHTMLの不思議

今日初めて気が付いたのですが、例えばIEで以下のように<font size="1.8">あああ</font> みたいに、fontタグのsize要素に浮動小数点を設定した時、このタグの内容を innerHTML経由で参照すると、<font size="1">あああ</font> と内容が書き変わって返ってくるようです。 もちろん本来のfontタグのsizeは整数…

960 grid system メモ

ブラウザごとのレイアウト整合性を確認するのがしんどくなってきたので、何か統一的に使えるCSSフレームワークを導入しようと思いました。960 Grid System というグリッドフレームワークを使うと、IE用のファイルとかが必要ないらしいです。 でも今はぶっち…

camltemplate 覚え書き

忘れそうなので、以下は覚え書き。camltemplate のパス指定で、絶対パスを指定したいとか思って次のように書いても、 let cache = CamlTemplate.Cache.create () in CamlTemplate.Cache.get_template cache "/path/to/hoge.tmpl" デフォルトのロードパスが "…