ページャの実装変更
今までのページャは良くある ?page=2 みたいな形式でした。これは内部的には offset / limit を使う SQL になります。
変更したページャは /.page/20160509/3 という形式です。20160509 が表示するページ番号、3 がそのページに表示する最大の数です。ページ番号はトップページからのページの場合、日付になっており、内部的には日付ベースの where 句になります。3 は limit です。
これらによって、サーバ側のエントリ表示数のデフォルト設定によらず、URLによって決まる内容が生成されます。よって
- キャッシュ無効化の負荷が減る
- 古い形式だと ?page=xxx なキャッシュは1つエントリが増えるたびに全て無効にしないといけません
- 古いページを表示したときの負荷が減る
- offset / limit はそのページに至るまでの全てのエントリをソートして辿る必要があるので古いページをページ指定すると不穏な空気が流れます
- 検索流入したとき見たいコンテンツがないことが防げる
余談:この日記の構造
このサイトは「日記」なので、日付単位でエントリがまとめられています。「ブログ」の表示に慣れていると違和感があるかもしれませんが、以下のような違いがあります。
- ブログは全エントリを通して新しい順に並ぶ
- 日記は日付単位で新しい順に並び、日付内では古い順に並ぶ
ちょうど、紙に日記を書くときのように、1日の中では連続し、1日単位では独立しているというイメージです。
この挙動は正直初見ではわかりにくいと思うのですが、過去分は1日単位で上から下へ書かれる前提で複数のエントリを構成しているケースがあって、変えるに変えれません。
関連エントリー
- トラックバックを実装しました トラックバックを実装しました といってもサイト内のエントリ間の言及を表示するだけです。いわゆる古代のオープンなトラックバックではありません。...
- 日記の公開を遅延する機能 日記に「遅延公開」みたいな仕組みが欲しいなと考えている (今はない)。一ヶ月ぐらい遅延して公開したい。機能的には指定日公開機能ともいうが、イ...
- Adsense の新しい広告ユニット 最近になって「関連コンテンツ」と「ページ単位の広告」というのが beta になって登場した。サイト最適化と同時にこれらも有効にしてみたりして...
- ✖ 日記(ブログ)内のカテゴリを自動抽出して設定したい。いわゆるクラスタリングだと思うが、うまくできる方法がよくわからない。 動機としては「カテ...
- ✖ なんとなく思いたったので Twitter 使うのをやめてみることにします。ここ最近のこと考えてみると、特に Twitter を使っていて得る...
チョロQは、ひく時だけ床に押し付けるものだと思っていた
子供のおもちゃのチョロQを見ていて不思議に思ったことがあって調べたので書いておきます。
遊びかたの先入観
チョロQみたいなプルバック式のミニカーは、後退するときにぜんまいを巻き上げることで、前進時に動力にするわけです。なので、くるま全体を床に押し付けたまま前後してもぜんまいは巻き上がらず (後退で巻き上がっても前進させた分巻き戻る)、走らないと思っていました。
自分の遊んだ記憶だと、後退するときだけ押し付けて、一旦持ちあげてもう一度後退させていた覚えがあるのです。
いつこの「プルバックの走らせかた」を学んだのか全く覚えていませんが、当然そういうものという認識でいました。そしてそもそも「後退時に巻いたぜんまいで動く」以上の仕組みを知りませんでした。
実際の挙動
子供は「プルバックの走らせかた」を知らず、適当に前後させたらなんかうごくことだけ学習しています。
子供が遊んでるときの挙動を見てるいると、ただ床に押し付けてゴリゴリと前後するだけでもぜんまいが巻き上がり、しかもどう見ても巻いた以上に長い時間回転することに気付きました。
前進時と後退時でギア比が変わる。
Wikipedia の「プルバック式」の項を見ると
ゼンマイを使うプルバック式動力では、後退の時のみギア比の大きい状態になるよう、内部の歯車が浮き上がるようになっており、ゼンマイの力で前進する時だけタイヤを高速回転させるような構造を持つものも多い。
と書いてあって、ギア比が前進と後退で変わるような仕掛けがあるようでした。
「プルバック ギア」とかで検索すると、もうすこし詳しいページも見つかります。構成するギアのうち2つのギアの軸は方向によってずれることで、いずれか一方が噛み合うように調整されているようです。
もしかすると常識なのかもしれないですが、こういう面白い仕掛けがしてあるとは考えていなかったので、びっくりしました。
関連エントリー
- ルンバをオフィシャルメンテナンスに出した cho45 ★ 5.0 / 5.0 cho45 2013年の3月に買ったルンバをオフィシャルメンテナンスに出しました。約3年ぐらい、平日は毎...
- 機械時計の模型 Robotime 3D立体パズル DIY組立 ギア 宝箱 パーペチュアルカレンダー クラフト 123PCS 子供 おもちゃ おもちゃ オモチ...
- ✖ 次の子どもの誕生日は自転車かなあと漠然と考えて、とりあえず昭和記念公園のレンタサイクルの乗せて様子を見た結果、本人の希望によりまた今度となっ...
- ✖ なんとなく思いたったので Twitter 使うのをやめてみることにします。ここ最近のこと考えてみると、特に Twitter を使っていて得る...
- 子どもに COOLPIX W100 Nikon デジタルカメラ COOLPIX W100 防水 W100PK クールピクス ピンク cho45 Nikon ★ 4.0 / 5....
✖
結局ガルパンは5回ぐらい見てしまった。劇場版がみたい。
✖
ボトルガムを買うと、だいたい2日ぐらいでなくなってしまって金がもったいないという感じになってしまう。
職場にいると無限にストレスが溜まってるので、手の届くところにガムとか食べものを置いておくと無限に食べてしまう。もったいないので、できるだけ買わないで水をガブ飲みしてるけど、口が寂しい。
関連エントリー
- 自転車 (クロスバイク) 関係でさらに買ったもの (この写真はちょっと古い) 装備をいろいろ変えたり、楽に走れる姿勢(ポジションというらしい)を探してたりしてるが、またいくつかものを買った。...
- Amazon Dash ボタン cho45 ★ 5.0 / 5.0 cho45 これだけ買った。本当はおむつが欲しいんだけど、欲しいブランドのものがなかった… 定期便との併...
- Google の新しい2段階認証「Google からのメッセージ」 認証アプリなどと違って数字を覚えることなしに、ロック解除とダイアログの「はい」を押すだけでよくなるっぽい。 ロックがかかっている端末でも、前...
- 体調不良 あいかわらず断続的に体調不良。一日会社を休んで寝てたら回復した気がしたが、また腹痛になった。吐き気はしないのでまだマシ。 ここ最近、夜中に子...
- 骨折してからの手の様子 0日〜7日ぐらいは腫れていて、シーネがキツいぐらいだった。手全体が若干痛いぐらい。痛み止めはいらないかなというレベル。一応処方されたのでボル...
✖
そういえば、ものすごくイライラしているときは掃除すると多少気が紛れる (やる気になった場合だけだけど)。すこし前にイライラしたときは、ひたすらトイレ掃除をしていた。
掃除には良い点がいくつかあって
- 満足するまで終わりがない
- 頭を使わない (普段使っている回路を使わない)
- 目に見える成果がある
一定の「満足感」は手に入ることがほぼ保証される。そんなものは他にあるか? ネトゲとかは瞬間的な満足感はあるが社会的には虚しい。掃除は同居家族がいるなら社会的な利益もある。
しかし、どういった種類のことでも「やらされている」と思った時点ですべての利点は失われる。他人のために働くということをすると、自分で満足するということがなくなる。成果評価の裁量を他人に奪われた時点で生きてる実感はなくなる。
関連エントリー
- ✖ 少しでもストレスが解消されることがら 散歩 掃除 睡眠 うざくないお笑い番組 (内村さまぁ〜ずみたいなやつ) 悪役が出てこないアニメ 高徳な...
- 1回休み 一昨日、15時ぐらいまでは普通だったが16時ごろから急激に悪寒、歯がガタガタしてどうしようもなく、18時ごろに会社を出た。電車に乗るうちに悪...
- ✖ 自分が加害者にならないという自信がある発言をよくあって、それが不思議。その発言自体が加害的なのに、法律的には罪にはないから、マウントが成立す...
- ✖ 別にすぐに死ぬ病気があって生き急いでいるとかではないが、最大でも90歳程度、そしてどんどん頭が悪くなるのを考えれば、70歳程度が人生の限界と...
- ✖ 相変らずバカにされているという感じを毎日感じている。何かしら製作しているときはそれを遠ざけることができるが、部品待ちでちょっとやることがない...
✖
少しでもストレスが解消されることがら
- 散歩
- 掃除
- 睡眠
- うざくないお笑い番組 (内村さまぁ〜ずみたいなやつ)
- 悪役が出てこないアニメ
- 高徳な主人公のアニメ
大きくストレスが溜まることがら
- 路上喫煙 (避けようがない)
- 仕事 (避けようがない)
- 自分から見て道徳感のない人間の存在 (避けようがない)
- 道徳観のない人間の発言 (はてブを見なければ、ほとんどエンカウントしない)
- 他人の儲かった話
- 自分が直接的にしろ間接的にしろ否定されるようなナニか全般
他人の道徳観に関するストレス (路上喫煙も同じ) は「こんなやつが社会でうまく生きてるのに、なぜおれは社会でこんなに否定されているのか」という感情に基いている。
関連エントリー
- 尊重されないということ 普段からほとんど常時に「バカにされている」と感じている。基本的には特定の誰かというわけではない。ただしコンテキストによっては特定の誰かの顏が...
- ✖ たくさんの人を同時に幸せにしたいとは思わない 社会的によいことと思えることをしたい 金以外に直接的に自分が幸福になることをしたい ストレス ...
- ✖ 自分が加害者にならないという自信がある発言をよくあって、それが不思議。その発言自体が加害的なのに、法律的には罪にはないから、マウントが成立す...
- ✖ 〈増補改訂 第2版〉いやな気分よ、さようなら―自分で学ぶ「抑うつ」克服法 cho45 デビッド・D.バーンズ ★ 3.0 / 5.0 cho...
- 家で酒を飲むのが最高 やっぱり飲み会とか好きじゃない。独りでアニメを見ながら「ひふみん可愛いデォユフフwww」とか言いながら酒を飲むのが最高であって、意識高い話を...
✖
Starlet でプロセス名をわかりやすくしたい
ps とかで表示されるプロセス名をわかりやすくしたいという話です。
Starman だと $0 に適当な値を入れてくれて、master なのか worker なのかとか、どの psgi が動いているかとかがわかるのですが、Starlet ではそういうことをやってくれないので、1つのサーバで複数インスタンス動かしていると、plackup のプロセスだらけで、どれがどれだかわからなくなります。
app.psgi で $0 で設定すれば良いかと思ったが
app.psgi で $0 設定したらとりあえずいいだろ、と思ってやってみましたが、どうも上手くいきません。app.psgi 内で $0 を warn してみるとそもそも plackup になってもいません。
調べてみると、Plack::Util::load_psgi で使っている _load_sandbox 内で local $0 をしてから app.psgi を do しており、ロード後に元のプロセス名に戻ってしまうようです。
ということで、単純に app.psgi で $0 を書きかえても plackup を使っている場合書きかわりません
Starlet 用のハックを入れる
なんかうまい方法がなさそうなので以下のようなクソハックを app.psgi に入れました。
{
### set process name for Starlet
use Parallel::Prefork;
my $name = $0;
my $orig_new = \&Parallel::Prefork::new;
no warnings 'redefine';
*Parallel::Prefork::new = sub {
my ($class, $opts) = @_;
$opts->{before_fork} = sub {
$0 = "$name (worker)"
};
$opts->{after_fork} = sub {
$0 = "$name (master)"
};
$orig_new->($class, $opts);
};
}; Starlet は Parallel::Prefork を使っているので、前もって use して new を書きかえて before_fork / after_fork を設定します。
before_fork / after_fork は Parallel::Prefork の機能でセットできるフックポイントですfork 前に worker プロセス用の $0 を設定して、fork 後に $0 を master 用の値に変えています。なのでタイミングによっては master プロセスも一瞬 worker 表示になります。
app.psgi ロード時のコンテキストでは $0 には .psgi のファイル名が入っています。これは上記の Plack::Util::_load_sandbox で設定されたものです。ということで、ロード時のコンテキストの$0を保存しておいて、後の $0 の設定に使っています。
app.psgi が Starlet 専用みたいになってキモいですが、Parallel::Prefork をロードする以上の害はとりあえずないのと、自分の場合は開発中に Standalone で動かす以外は Starlet を使うことにしているので問題ありません。
これで以下のようになりました。
cho45 4699 0.0 0.5 185432 5332 ? S May11 0:00 /home/cho45/project/COQSO/script/app.psgi (master) cho45 4700 0.0 2.4 296604 25168 ? S May11 0:09 /home/cho45/project/COQSO/script/app.psgi (worker) cho45 4701 0.0 2.5 296820 26468 ? S May11 0:11 /home/cho45/project/COQSO/script/app.psgi (worker) cho45 4702 0.0 1.8 302304 19136 ? S May11 0:11 /home/cho45/project/COQSO/script/app.psgi (worker)
関連エントリー
- 複数の psgi を1つのサーバでサービスするときにメモリをケチる このサーバはVPS 1台で動いていて、メモリは1GBしかありません。常時メモリ上限まで使いきっており、スワップファイルもそこそこあります。そ...
- 日記システムPerlからgolangに書き換え この日記システムを golang で書きなおした。元日から4日ぐらいかけた。なんかおかしかったら教えてください。 前々から日記システムをgo...
- CPAN のリリース管理を Minilla に変えてみる $ cpanm Minilla で入れると minil コマンドができる。既存レポジトリで (ここでは Test-Name-FromLine...
- Perl (PSGI) で zip ファイルを動的に作りつつ順次クライアントに送りつける 滅多にないことだと思うが、非常に大きな zip ファイルを動的に生成してダウンロードさせるみたいなことをしたいことがあるかもしれない。 Ar...
- はてブ用ブックマークレット 現在の非表示ユーザの総数: javascript:(async()=>{alert((await(await fetch("http://b...
現状のサイト応答速度
- RTT (ping) が約30ms〜50msぐらいの環境
- * がついているのは http2 の push
- HTML 内で直接参照しているリソースについてもダウンロードしている (nghttp の --get-assets オプション)
関連エントリー
- 現状のサイト応答速度 現状のサイト応答速度 - 氾濫原 と同じように測ったつもり。しかしなんか RTT が 7〜9ms になってて根本的にぜんぜんちがう。。
- lowreal.net のHTTP2/HTTPS 化を実施 全部 HTTPS 対応にしてリダイレクトかけるようにしました。 cho45.stfuawsc.com は既に HTTPS にしてありました。...
- h2o での server-push タイミングの最適化 h2o は mruby ハンドラで link ヘッダを使って push を指示すると、バックエンドへの問合せと非同期で静的ファイルを pus...
- HTTP2 で何をサーバープッシュすべきか 意外と何をプッシュすべきか悩んだのでひとまず現時点での自分の結論をまとめました。 CSS は必ずプッシュ・JSは場合による サイトの構成によ...
- OS X でのネットワークの throttling を簡単に設定する Hardware IO Tools for Xcode をダウンロードすると Network Link Conditioner という環境設...
✖
トラックバックを実装しました
トラックバックを実装しました
といってもサイト内のエントリ間の言及を表示するだけです。いわゆる古代のオープンなトラックバックではありません。
古いエントリに新しいエントリへのリンクがないのは不便だなと思い、とりあえずさくっと LIKE 検索で機能を足してみていたのですが、良さそうなので、ちゃんとリレーションテーブルをこしらえたりしました。
しかし、全体的にページキャッシュ機能を入れているので、単に機能を足すだけでも考えることが増えてしまいます。イメージではトラックバックが送られたページに更新がかかるというだけですが…
キャッシュ処理も見直して、全体的にテストも書いたりしました。キャッシュが入ると複雑性が増す分、独り人力QAには限界があるので、みっちりテストを書くほうがかえって省力化します。
関連エントリー
- しょぼい個人サイトのキャッシュ 殆どアクセスがないサイトは、ファーストアクセスでキャッシュを作るようなサーバサイドキャッシュの戦略が全く意味がないので、バッチで予めキャッシ...
- ブログのキャッシュバックエンドの変更 今までは Cache::FileCache によるファイルシステムキャッシュにしていたけど、いくつか問題があって SQLite にかえた フ...
- ✖ 日記の公開を遅延する機能 | tech - 氾濫原 この機能を実装してみたので、徐々に使ってみる。 実装的には結構やることがあって面倒だった...
- スケートボードのトラックの音鳴りとグリスを塗ってはいけないところ 先に知っておくこと ブッシュの上下にはグリスを塗らないこと。ここがすべってしまうとトラックの動きがおかしくなることがある。トラックがやわらか...
- ページャの実装変更 今までのページャは良くある ?page=2 みたいな形式でした。これは内部的には offset / limit を使う SQL になります。...





