✖
✖
✖
Perl の Locale::Maketext::Lexicon::Gettext フォーマットのメッセージをJSでフォーマットする
Perl の Locale::Maketext::Lexicon::Gettext は以下のような Gettext ライクなフォーマットを扱うが、同じようなことを JS でしたいとき
%1 さん、こんにちは %quant(%1,user,users)
- %function() は任意の関数が呼べる感じなので、JS でもそのようにしておく。
- numf は実装してない。
- Locale.data= { ... } みたいなのが言語別に完全にわかれているのを想定してる
var Locale = {
loc : function (msgid, arg) {
var args = Array.prototype.slice.call(arguments, 0);
var text = Locale.data[msgid];
if (text) {
if (/%/.test(text)) {
text = text.replace(/%(\d)/g, function (_, n) {
return args[n];
});
text = text.replace(/%([a-z*#]+)\(([^\)]+)\)/g, function (_, func, args) {
if (func == '#') func = 'numf';
if (func == '*') func = 'quant';
args = args.split(/,/);
return Locale[func].apply(null, args);
});
return text;
} else {
return text;
}
} else {
return msgid;
}
},
quant : function (number, singular, plural, negative) {
if (number == 0 && negative) { // no warnings
return negative;
} else
if (number == 1) {
return singular;
} else
if (plural) {
return plural;
} else {
return singular + 's';
}
},
numf : function (number) {
return number; // XXX
}
};
関連エントリー
- JS 数値リテラルに単位をつけたい [tech] デカい文字をA4で分割して印刷するツールをJSで書いた | Sat, Mar 7. 2015 - 氾濫原 では、実寸サイズを扱...
- Locale::Maketext::Extract でスキャンだけする。 Locale::Maketext::Extract::Plugin 以下にはいろいろ対応してるフォーマットがあったりする。まぁ大抵一緒なので...
- AngularJS のテストでページ側のスクリプトを実行する protractor (webdriver) を使った場合、外から executeAsyncScript を使うと文字列でページ側で実行でき...
- JSDeferred -> Angular $q 置き換え方法 AngularJS には $qっていう promise の枠組みがあるので、使っておくといいこと (ビューが自動的に更新されるだけだけど) ...
- Ruby でスコープをはずれたときに自動で何かをする Guard オブジェクト Perl だと Guard オブジェクトとかいうハックがあって、スコープを出るタイミングで必ず呼ばれるファイナライ...
✖
1回休み
一昨日、15時ぐらいまでは普通だったが16時ごろから急激に悪寒、歯がガタガタしてどうしようもなく、18時ごろに会社を出た。電車に乗るうちに悪寒から吐き気になって途中下車。トイレに行って吐こうとしてみたが吐けず、とりあえず売店で買い物してビニール袋を用意しつつなんとか帰宅した。帰宅してからは吐き気よりもとにかく頭痛がひどくなった。帰宅した時点で体温は38℃前後だった。
仕事で対応が必要だったのでしかたなく VPN 繋いで居間で半分寝ながら1時間ぐらいごとに対応していたが、こっちで対応が必要になるタイミングがさっぱりわからずイライラした。おかげで悪夢倍増しつつだらだら夜中まで対応するハメになった。その日は結局居間で寝たが尻が痛くなった。
日があけて9時近くになったので病院に行って診察をうけたが今一原因はわからなかった。インフルエンザではなかった。鼻も喉もおかしくなく、下痢もないので、薬はロキソニンの処方だけだった。
とりあえず勤怠で休みますというメールをしたが、あいかわらず仕事でタイミング不明の対応が必要だったので1時間ぐらいごとにチェックして対応していた。
午後からは熱が下がった。たぶん仕事でイライラしすぎたせいで熱出たんだと思う。仕事ほんとしたくない。
関連エントリー
- 体調不良 帰宅してから急激に体調が悪化し、悪寒がひどくて眠れないぐらいに。体温を計る余裕がなかったけど、38度〜 ぐらいは出ていた気がする。1時間ぐら...
- ✖ とにかく疲れきってる。電車に乗るときから帰宅して一息つくまでずっとイライラしている。毎日些細な嫌なことが起こって、たまにめちゃくちゃ嫌なこと...
- 骨折してる 右の小指の中手骨を骨折してる。先週の水曜日の9時ごろ子どもを保育園に送ったあと家でやらかしたが、折れてるとまでは思わず普通に出社してしまった...
- 熱がでて一回休み 15時ぐらいから悪寒がしたが MTG が連続で入っていたのでとりあえず出てから帰った。一晩で治るかなと期待したがそんなことなく1日休み 最近...
- 体調不良 あいかわらず断続的に体調不良。一日会社を休んで寝てたら回復した気がしたが、また腹痛になった。吐き気はしないのでまだマシ。 ここ最近、夜中に子...
✖
洗濯漕クリーナー
そろそろ、1年ほど使っているので洗濯漕綺麗にしとかないとなあと思っていた。とりあえず手元にあったワイドマジックリンでやってみたが、落ちてんのか落ちてないのかよくわからない感じだった。
いろいろ商品があるけど、やっぱ純正で一度やってみようと思いやってみた。入れて1時間ぐらい動かしたあと、一旦止めて見るとかなり濁っていて (ワイドマジックリンやった直後でも)、さすがに強力という印象。
1500円〜2000円で1回分と、値段がかなり高く感じる。たぶん防錆剤とか入れて調整してるのかな。アマゾンへのリンクを貼ったけどヨドバシが最安だった。落ちている感じはするので、来年もたぶんこれでやると思う。
関連エントリー
- 洗濯機からアンモニア臭 子供が生まれてから、洗濯機がアンモニア臭でものすごいことになることがあった。ちゃんと処理してるつもりなんだけど、どこかのなにかに尿が付着した...
- 洗濯機 Panasonic NA-VX7200L を修理 買ってから1年とちょっと経過したが、U04 という乾燥フィルター掃除エラーが頻発し、フィルター周辺が結露するようになった。当然洗濯物がなかな...
- 100均グッズを使ってデスクの天板裏でケーブルの整理 両面テープ式のフック(100均)でワイヤーラティス(100均)を固定して、それにいろいろくくりつけるようにした。 最初、突っ張り棒でワイヤー...
- 洗濯機 Panasonic NA-VX7200L を買った。 NA-VX7200L-N パナソニック ドラム式洗濯乾燥機 cho45 パナソニック(Panasonic) ★ 5.0 / 5.0 cho4...
- カフェインが入っていないOTCイブプロフェン カフェインが入っていないOTCイブプロフェン OTCのイブプロフェンにはだいたいコーヒー一杯分ぐらいのカフェインが入っていて「高熱のときにお...
ブラックキャップ
去年夏ごろに出てから家の中の各所に設置していた。ネットで検索すると圧倒的に人気がある商品。
一応設置してからは一度も見ていないけど、見ていないので効いているのか効いていないのかはよくわからない。今年ずっと見なければ効いてると考えてよさそう。
半年で誘引効果が切れるらしいので、再度購入して全部とりかえた。そんなに高くなく、12個入っていて、半年効くというのが良い。
関連エントリー
- 今年買ってよかったものまとめ ドラム式洗濯・乾燥機 NA-VX7200L-N パナソニック ドラム式洗濯乾燥機 cho45 パナソニック(Panasonic) ★ 5.0...
- グランズレメディってなんなのか cho45 ★ 3.0 / 5.0 cho45 靴の消臭に使われる商品にグランズレメディというのがありますが、商品説明の雰囲気的に主成分はた...
- 最近『メーデー』を見ている メーデー!9:航空機事故の真実と真相 (吹替版) cho45 --- ★ 5.0 / 5.0 cho45 メーデー!10:航空機事故の真実と...
- デスク裏の整理 こんな感じで壁に背を向けて座る感じでデスクを設置したので、普通に部屋に入ってくるとき、デスクの裏側が見えるようになってる。 ケーブル自体はデ...
- Twitter, Facebook を見ないようにして2ヶ月 そういえば なんとなく思いたったので Twitter 使うのをやめてみ… | Mon, Feb 15. 2016 - 氾濫原 というエントリ...
✖
桜の季節はいいんだけど、こういう細かい写真はやはり JPEG の圧縮ノイズが非常に気になる。Lightroom で見てるうちは綺麗なのに、JPEG として出力すると、たとえクオリティを100%に設定しても圧縮ノイズがでて悲しくなる。
せっかく Retina になって細かい画像も出せるようになったのに、ブラウザがクソフォーマットにしか対応していないのでどうしようもない。
次世代 JPEG と呼ばれるものは、以下のようにあって、それぞれのブラウザでそれぞれに使えるのがあるが、全部のブラウザで使えるというものはない。政治的なものが絡んでいて大変クソっぽい。画質とか気にする人が全然いないから対応が全くすすまないんだと思う。
- JPEG 2000
- Safari が対応
- Mozilla はWONTFIX(笑)
- 圧縮スピードが遅いとかなんとか言われてる
- JPEG XR
- IE が対応
- Mozilal は無視
- リファレンス実装がクソとかなんとか言われてる
- WebP
- Chrome, Opera, Android とかが対応
- Mozilla は 未対応
- 権利的にどうなの?とか言われてる
全部のフォーマットに対応する ImageMagick のビルドを試みたがうまくいかなかった。
関連エントリー
- Google Photos の webp 対応 前まで webp のアップロードはできなかった気がするんだけど、最近試したらできるようになっていた。 Google Photos はいつから...
- ✖ ↑ の写真 webp で Google Photos にアップロードしたんだけど、Chrome で見ても jpeg でしか配信されない。うー...
- Lightroom 4 届いたのでさっそくインストールして LR3 は削除した。現像パラメータがちょっと変わって戸惑うけどすぐ慣れると思う。それにしても Light...
- このサイトのキャッシュ キャッシュの持ちかたを変えて、圧縮 (gzip) して持つように変えた。キャッシュを返すときは gzip ずみのをそのまま返すように。 gz...
- 広色域時代の画像の正しい扱いかた モバイル端末も iPhone7 など DCI-P3 サポートが増えてきて、CSS での広色域サポートもはじまりつつあるなかで、サーバサイドな...
✖
WebAudio のデバッグ用のオシロスコープ

WebAudio で ScriptProcessorNode とかを使ってちょっと変なことしようと思うと、波形が実際どうなっているのか見たくなったりするわけですが、うまいこと取得できなくてイライラするわけです。なのでトリガをかけて一定期間の波形を表示するのを作りました。
デバッグ用なので、UI 上には殆ど機能はなく、以下のようにコード上で設定を引数で渡す感じです。トリガはSimple, RaisingEdge, FallingEdge, DualEdge だけとりあえず実装してあります。実装すればチャンネル間の and トリガとかもできる感じの設計です。
WebAudioDebug.prove(context, merger, {
bufferSize : 64e3,
windowTime : 100e-3,
highResolution : false,
trigger : WebAudioDebug.OscilloscopeNode.Trigger.RaisingEdge({ triggerChannel: 0, width : 10, threshold : 0.5 }),
continuous : false
});作ってる途中でやる気が失せたので、特に highResolution: true (Retina 対応) にしたときパフォーマンスがめっちゃ劣化するけどそのままです。あと、繋げる段数が違ったノードを merge して渡すとズレたりするので、ちょっとめんどうくさい感じです。なんとかしたいけど、その前にやる気がなくなったのでそのうちやる気がでたらやるかもしれないです。
関連エントリー
- Chrome の WebAudio でステレオ入力ができない場合 input channel 数はちゃんと2なのに同じデータが入っている モノラルになるとかじゃなく、ステレオ入力すると、デフォルトではモノラ...
- WebAudio ComplexFirFilterNode AudioWorklet ComplexAnalyserNode (WebAudio) を作った (IQ信号のFFT) | tech - 氾濫原 に続き、WebAss...
- ComplexAnalyserNode (WebAudio) を作った (IQ信号のFFT) https://github.com/cho45/complex-analyser-node WebAudio の AnalyserNode...
- Spring MVC で @Async と @RequestScope を共存させるには? @Async と @RequestScope を同時につかうとどうなるか @RequestScope、これは @Scope(value = ...
- Manchester Encoding を JS で WebAudio での通信用に使おうと思って書いていたけど、やる気が失せてしまった。WebAudio 非依存部分だけ習作的に書いた。思ったよ...
ngResource を使って未保存の情報を明確にする
ngResource は $get してオブジェクトを変更して \$save を呼んだらサーバサイドに反映とかいうことができます。
- データを $get などで取得した直後の状態、(サーバサイドで) 保存されている状態
- 取得したリソースを変更した状態、(サーバサイドで) 未保存の状態
- $save などで保存完了した状態、(サーバサイドで) 保存されている状態
とリソースの状態が変化します。
しかし、実際のアプリケーションでは、変更されたが更新されていない状態というのを表示したくなることが多々あります (変更があって未保存なら項目の色を変えるとか)。
なので、保存前の状態をどこかに保存して、保存されたらそれを更新するとかいう作業が必要になります。ただ、コントローラ側の ngResource のコールバックでいちいちこんなことしようとするとバグるので、ngResource の定義側でなんとかしたいところです。
transformResponse を使う
transformResponse は ngResource で何かしたときに呼ばれてくれるので、ここで angular.copy() で resource.saved みたいなプロパティに変更前のデータを全部つっこんでやると大変楽です。だいたい以下のようなコードです (実際はコードをまとめるけど)。
var Entry = $resource('/api/entries', { id : '@id' }, {
'query': {
method:'GET',
isArray: true,
transformResponse : function (data, headers) {
data = angular.fromJson(data);
data.saved = angular.copy(data);
return data;
}
},
'save': {
method:'POST',
transformResponse : function (data, headers) {
data = angular.fromJson(data);
data.saved = angular.copy(data);
return data;
}
}
}); // controller
$scope.entry = Entry.get({ id : 1 });
// $scope.entry.saved is original data // template
<div ng-class="{ changed: entry.body != entry.saved.body }">
<textarea ng-model="entry.body"></textarea>
</div> このように、取得したリソースを $scope に突っ込み、リソースを対象に ng-model を設定してやると、あとはいい感じになります。save などを呼ぶと変更された内容でリクエストが飛び (unsaved も送信されるのが余計ですが)、サーバ側で適切に保存されたエントリのレスポンスを返せば、transformResponse でリソースの更新がかかるので、全状態が自動でリセットされます。
関連エントリー
- AngularJS の ngResource を既存APIの仕様にあわせる AngularJS には ngResource という拡張があって、サーバに対する API 経由の CRUD 的操作を JavaScript...
- ngResource は何が便利なのか? ngResource は単にAPIのラッパーという感じではなくて、JS でサーバ側のモデルとうまく同期するように作られている。 最も簡単な例...
- AngularJS のテストでページ側のスクリプトを実行する protractor (webdriver) を使った場合、外から executeAsyncScript を使うと文字列でページ側で実行でき...
- Google Fit の REST API で体重を自動入力する (画像は過去に入力したデータを全て Google Fit へ入力しなおした様子) Fit API 全体の概念 単純にグローバルな「体重」に対...
- AngularJS で http リクエスト中画面内のボタンを disabled にする とにかく面倒だから全部の http リクエストを監視してボタンをオフにしたい。という要件 いまいちいい方法が思いうかばないけど以下のようにし...















![【防除用医薬部外品】ブラックキャップ ゴキブリ駆除剤 [12個入] - ブラックキャップ](https://m.media-amazon.com/images/I/51wme1nDTNS._SL500_.jpg)



