anti scroll

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

プログラミング

HomebrewからMacPortsへの移行でハマった部分(主にRust周り)

2023年の中旬ごろ、HomebrewがBigSurなどの古いMacOSをサポートから外してしまいました。 しばらくは「なんとかなるさ!」と使っていたのですが、半年もしないうちに重要なパッケージが更新できなくなり… 特に痛かったのは、libheifが更新できなくなって、Im…

だれでも簡単にページ組版が扱えるウェブ・コンポーネント「nehan-player」を公開しました

nehanによるページ組版を簡単に扱えるウェブコンポーネントを作ってみました。 ドキュメント デモ 導入 テキストの内容を、サーバーからsrc属性で読み込む場合は、こんな感じになります。 <nehan-player writing-mode="horizontal-tb" width="responsive" src="/path/to/your-novel.html" height="500" font-size="16" layout="1x2"> </nehan-player>

ゲームパッドの操作を記述する言語「combo-script」と、その再生アプリ「combo-player」を作りました

きっかけ 作ったきっかけは、最近買ったウイイレ2020の操作が、ちっとも頭に入らなかったからです。。。 一応ゲーム内にマニュアルがあるんですけど、文字とか矢印で説明されても、ピンと来ないんですよね。。。 そこで思いついたのが「ゲームの操作をぱぱっ…

AngularのExpressionChangedAfterItHasBeenCheckedErrorに関する覚え書き

ネットでExpressionChangedAfterItHasBeenCheckedErrorを検索すると、よく「子が親の状態を変更するとビューに一貫性がなくなることが警告される」という説明を目にしますが、少し混乱を招きかねない説明なんじゃないかなあと思いました。 正確には「Angular…

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…