✖
Ruby Sequel で生 SQL をメインに使う
Sequel はドキュメント見ると SQL そのまま書くやりかたもとクエリビルダを介すやりかたも許されていると感じるので (別に他のライブラリでも可能だろうが)、導入負荷が低くてよさそうです。結構機能はもりだくさんありますが必要なければ使わないのも許されてる感じもよさそうです。
Sequel でのクエリ発行のしかたは sequel/querying.rdoc at master · jeremyevans/sequel · GitHub を読むとだいたい網羅できるが、特に自分に重要なところだけ別途メモしておく。
モデルを使っても使わなくても SQL クエリはそのまま発行できる。複雑な JOIN も安心。
モデルを使わない場合
SQL を発行して Hash として取得できる。
dastaset = DB["SELECT * FROM foo"] dataset.all # 全インスタンス化
モデルを使う場合
任意の SQL を発行しつつあるモデルとしてインスタンス化したい場合
class Foo < Sequel::Model(:foo)
end
dataset = Foo.with_sql("SELECT * FROM foo")
dataset.all # 全インスタンス化 Sequel::Model(:foo) の :foo はテーブル名を渡す。何も渡さないとクラス名を複数形にしたものを探そうとする。が明示したほうが良いと思います。
どういうときにモデルを使うか
使いたいときに使う。単にクエリ投げたいだけならモデルはいらないし、特に JOIN がからむなら余計なことせず Hash で返ってくるのは気楽で良い。
機能的な面からいえば、DBからひいてきたインスタンスにメソッドを生やしたいというときはモデルを使ったほうが楽。既存の行を update したいときもモデルがあったほうが楽。
Sequel のモデルも若干マジカルで、DBコネクションがないとモデル定義できなかったりする。キモいけどテーブル情報を使ってアクセサを定義したりするっぽい。
関連エントリー
- Lightroom のカタログを SQLite で読んで統計を出したりする .lrcat っていったい何なのか カタログファイルの実体である lrcat は SQLite の DB ファイルそのもの。sqlite3 foo.lrcat すると中身を見ることもできる。 部分的に...
- SQLite で LOG や SQRT を使うには SQLite にはかなり基本的な算術演算関数しかない。追加で何かしらやるためには拡張 (Run-Time Loadable Extension) を使う必要がある。 LOG や SQRT などはオフィ...
- ユーザ由来の構造化データによるSQLインジェクション Kazuho's Weblog: The JSON SQL Injection Vulnerability について。元記事をはっちゃめっちゃに要約すると SQL::Maker にユーザから受けとった...
- MySQL で SET 型の UPDATE 以下のようなテーブルのとき CREATE TABLE foo ( aset set('aaa', 'bbb', 'ccc') ); 空文字列を SET のメンバーとして許していない null 可 値を...
- TF-IDFとコサイン類似度による類似エントリー機能の実装 TF-IDFによる類似エントリー機能の実装をしてみました。ほぼSQLiteですませるような構成です。 やっていることの概要 エントリーのHTMLを適当なワード単位に分割 タグ削除とか記号削除とかしつつ...
JavaScript で MQTT するなら MQTT.js が良い
https://github.com/mqttjs/MQTT.js
- ブラウザ (MQTT over WebSocket) でも node.js でもほぼ同じ使いかたができる
- 自動でリコネクトしてくれる
- API がモダン
Eclipse Paho の JS 版を一時期使っていたが、完全に乗り換えました。
MQTT over WebSocket の場合
ドキュメントの通りだけど以下のようにする。TLS なら wss にするだけ。
const client = mqtt.connect("ws://" + location.hostname + ":" + (location.port || 80) + "/mqtt", {
username: USER,
password: PASS,
reconnectPeriod: 500
}); 関連エントリー
- RabbitMQ で MQTT over WebSocket ウェブページから JavaScript で MQTT ブローカーに送られてくるデータを取得したかったので、MQTT over WebSocket を試してみました。 RabbitMQ 3.6.6 をい...
- MQTT のトピックを prometheus に登録する MQTT のトピックを subscribe して一時的に保持し、prometheus 向けに exporter として働くデーモンを書いた。要は pushgateway の MQTT 版のようなもの。...
- センサーデータ用に RabbitMQ + MQTT をセットアップする RabbitMQ + MQTT で Pub/Sub サーバを立てることにしました。 いろいろなセンサーのグラフ化にあたって GrowthForecast へ直接 POST を行っていましたが、やはり一...
- 7年放置した mqtt_topic_exporter を Copilot とともに書きかえた mqtt_topic_exporter という mqtt ブローカーに接続して特定の topic を subscribe して prometheus 形式で出すというのを、7年前に書いたまま放置してい...
- golang で websocket websocket.JSON を使った場合 JSON をやりとりする場合専用の方法がある (JSON-RPC ライクな実装を書いてみた場合) package main import ( "fmt" "...
✖
Material Design Lite のテキストフィールドと Vue.js の相性があんまりよくない
Material Design Lite のテキストフィールドの input 要素を Vue.js で扱うとき、普通に v-model で two way binding すると、ラベル位置が更新されなくて文字が重なってしまったりする。つまりこれは Vue.js側の更新処理がMDL側に適切に伝わっていないために起こる。
MDLのソースを軽く読んだ解決として、mdl-js-textfield クラスがついている親要素に v-mdl 属性を追加し、以下のようにカスタムディレクティブを定義すると解決する。あんまり美しくないがしかたない。
静的な要素だけなら upgradeElementは必須ではないが、動的になると必須になるためついでにやっている。
Vue.directive('mdl', {
bind: function (el) {
componentHandler.upgradeElement(el);
},
update: function (el, binding, vnode) {
const textfield = el.MaterialTextfield;
if (textfield) {
Vue.nextTick(function () {
textfield.checkDisabled();
textfield.checkValidity();
textfield.checkDirty();
textfield.checkFocus();
});
}
}
});
関連エントリー
- 一瞬で開発開始するための Vue3 無トランスパイル環境 いきなりトランスパイルの環境作って常時ビルドツールを動かして開発するのがいまいち性にあわず、いまだにそういうことをしないようにしてる。小さいプロジェクトだと管理が面倒くさい。 Vue3 はなんかいろい...
- ES2015 の iterable/iterator/generator による無限 FizzBuzz (オブジェクト指向編) ES2015 の iterable/iterator/generator による無限 FizzBuzz | tech - 氾濫原 に続いて、オブジェクト指向っぽく書けるようにしてみました。 ポイントは...
- ES2015 の iterable/iterator/generator による無限 FizzBuzz ES2015 の iterable protocol / iterator protocol だとそこそこ自然に無限リストを作れるわけなので、ちょっと試しにやってみました。node v5.2.0 で動...
- Angular JS で View を伴う Service 的なことをしたいとき、あるいは Directive に Controller をつけたいとき。 クソコード を書いたはいいが、釈然としなかった。 "View independent business logic: Services" とドキュメントに書いてある通りなので、やはり他のやりかたのほう...
- Spring MVC で @Async と @RequestScope を共存させるには? @Async と @RequestScope を同時につかうとどうなるか @RequestScope、これは @Scope(value = "request", proxyMode = ScopedP...
✖
✖
✖
✖
Google Photos の ICC カラープロファイルの扱いの続き
Google Photos の ICC カラープロファイルの扱い | tech - 氾濫原 の続きです。前回のまとめとしては
- Google Photos は基本的に sRGB に変換
- s0 (オリジナル同等サイズ) のみ元々のカラープロファイルが保持される
- 500px 未満の場合はカラープロファイルが削除される
でした。
ただしある程度時間が経つまではオリジナルのプロファイルの画像が配信されることがあることがわかりました。
検証の試行錯誤
今日追試してみたところ、前回わかったルールよりもうすこし複雑なようだぞという挙動にみえ、ついでにいうと法則性がわかりませんでした。
あらたなファイルをアップロードして検証
今日あらたにアップロードしたファイルで検証してみました。以下のようにして s0 の部分をかえています。
curl https://lh3.googleusercontent.com/-4gapCD_T4ag/WOT-_iAPFkI/AAAAAAAAu-I/KXcMpxSoEcMurTrZ3umFh8nfOfOV88knQCE0/s0/IMG_7343-16MP-2.jpg | exiftool -
- s320 - なし
- s480 - なし
- s499 - なし
- s500 - sRGB IEC61966-2-1 black scaled
- s1024 - sRGB IEC61966-2-1 black scaled
- s1280 - sRGB IEC61966-2-1 black scaled
- s1919 - sRGB IEC61966-2-1 black scaled
- s1920 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
- s1921 - sRGB IEC61966-2-1 black scaled
- s2047 - sRGB IEC61966-2-1 black scaled
- s2048 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
- s2049 - sRGB IEC61966-2-1 black scaled
- s0 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
前回のファイルを再度検証
一方、前回検証したときに使ったファイルを再度検証してみましたが、こちらは前回と変わりませんでした。
curl https://lh3.googleusercontent.com/-BDMfJtqE7Mw/WIlEQ29H7II/AAAAAAAAnw0/2ZUwqimJUcQUbiLomaBrvwcrAebJFSjWQCE0/s0/IMG_9415-16MP-AdobeRGB.jpg | exiftool - curl https://lh3.googleusercontent.com/-pEtCDwM8HhQ/WIlEQ5CSwLI/AAAAAAAAnw8/rAyZIkuFVzEk3x68vRLPAkkevHUxEicJQCE0/s2048/IMG_9415-16MP-ProPhotoRGB.jpg | exiftool -
- s320 - なし
- s480 - なし
- s499 - なし
- s500 - sRGB IEC61966-2-1 black scaled
- s1024 - sRGB IEC61966-2-1 black scaled
- s1280 - sRGB IEC61966-2-1 black scaled
- s1919 - sRGB IEC61966-2-1 black scaled
- s1920 - sRGB IEC61966-2-1 black scaled
- s1921 - sRGB IEC61966-2-1 black scaled
- s2047 - sRGB IEC61966-2-1 black scaled
- s2048 - sRGB IEC61966-2-1 black scaled
- s2049 - sRGB IEC61966-2-1 black scaled
- s0 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
よくわからないので、前回と同じファイルをアップロードしなおしてみましたが変わらず。
同じ内容ですこし違うファイルを再アップロード
しかし s0 をダウンロードしたものを再度アップロードすると今度は以下のような結果に…
curl https://lh3.googleusercontent.com/-ykbJTkOQRME/WOUC9VszXHI/AAAAAAAAu-g/E5q6Ds_DJu06zrYiOK8J2FKNbmMjlU34ACE0/s2049/IMG_9415-16MP-AdobeRGB.jpg | exiftool -
- s320 - なし
- s480 - なし
- s499 - なし
- s500 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
- s1024 - sRGB IEC61966-2-1 black scaled
- s1280 - sRGB IEC61966-2-1 black scaled
- s1919 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
- s1920 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
- s1921 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
- s2047 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
- s2048 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
- s2049 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
- s0 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)
なぜか s500 でオリジナルが適用されていたり、だいたいオリジナルが適用されるかと思いきや s1024 や s1280 では sRGB になったりと意味不明です。
落ち着く
あきらかに挙動に疑問があるので、一旦冷静になります。さすがに Google といえどファイル内容を見てプロファイルを埋め込むかどうかを判定しているわけではないだろうし、なぜこんなことに……
と少し時間が経過してから再度検証してみたところ、結局 s0 以外は全て sRGB になりました。つまり
- 動的にリサイズする場合はプロファイルが保持される (s0 はリサイズしないのでそのまま)
- リサイズ結果は sRGB となり静的にキャッシュされる
が真相のようでした。動的にリサイズする場合はプロファイル変換までやるとオーバーヘッドがあるためプロファイルを埋め込むみたいな戦略なんでしょうかね?
関連エントリー
- Google Photos の ICC カラープロファイルの扱い Google Photos は配信画像は基本的にすべて sRGB でなっています。 そこで ICC のテスト用 jpeg ファイル や、手元でいくつかカラースペースを変えた画像を Google Pho...
- 広色域時代の画像の正しい扱いかた モバイル端末も iPhone7 など DCI-P3 サポートが増えてきて、CSS での広色域サポートもはじまりつつあるなかで、サーバサイドなどで画像をとりあつかうときに、正しく扱えていないというのはと...
- CSS の色空間は sRGB のはずだけど… Chrome, Firefox, Safari で調べたところ、 Chrome: カラーマネジメントされない ( sRGB は適用されない) Firefox: デフォルカラーマネジメントされない (後...
- Picasa にあげるときのカラープロファイル Picasa での色化け 先にまとめ sRGB で出力すること sRGB もいろいろあるので、できれば sRGB IEC61966-2.1 black scaled にしておけば確実 Google+ ...
- cwebp はメタデータを削除する WebP に変換するデモコマンドである cwebp はデフォルトでメタデータを全て削除する。ICC プロファイルすら消しさるのでかなりひどい。 -metadata <string> ..... com...
✖
waveshare 7inch LCD (USB Touch センサー付き) を買ってみた。
BeagleBone Black 用に。$54.88
BeagleBone Black では専用イメージを使えみたいなことが書いてあって不安だったけど、繋ぐだけで表示できたしタッチも動いてくれた。しかしタッチは感度か精度がいまいち。細かい操作のために抵抗皮膜式が良かったんだけど、静電容量式のしかなかった。タッチペンが反応しなくてこまってる。
関連エントリー
- Picasa にあげるときのカラープロファイル Picasa での色化け 先にまとめ sRGB で出力すること sRGB もいろいろあるので、できれば sRGB IEC61966-2.1 black scaled にしておけば確実 Google+ ...
- Original Prusa i3 MK2S でペンプロッタ 3Dプリンタとペンプロッタはほとんど似たようなものなので、アタッチメントをつけて簡単にペンプロッタ化してみた。アタッチメントはこんな感じ。4〜5回試作してプリントしていい感じになった。STLなどは T...
- BeagleBone Black の LED をはんだゴテなしで延長する BBB には USER LED という青色 LED が基板上4つあって、デフォルトではフラッシュアクセス時に点灯するような設定になっています。基板上にあってすぐ使えるので便利です。 ただ、この USE...
- Raspberry Pi / BeagleBoard Black / Intel Galileo / Arduino の違いのメモ いろいろでてきてる。 Raspberry Pi Type A と Type B があり、Type A はイーサネットポートと組込みUSBハブがなくメモリが少ない分少しだけ安い。 BeagleBoard...
- 激安カーボンデジタルノギス 800円弱ぐらいで買えてしまうカーボンノギス。スペック上は器差±0.2mm、表示上は0.1mm。安いアナログノギスの変わりには十分だろう。 センサは静電容量式のようだ。 良いところ 電源オフ状態で動か...
✖
サントリー東京・武蔵野ブルワリー
工場見学にいってきた。府中の森に行く途中にあるので存在はしっていたが「本当にここでビールを作っているのだろうか?」と半信半疑だった。どうやらほんとうに作ってるらしい。
見える部分は案外こじんまりしているように感じたが、実際はどれも高さが結構あって、容量はあるようだ。見学はおおむね写真撮影しても良いのだが、動画禁止なのと釜の中は撮影禁止になっていた。しかし釜の中を覗きこむことはできる。止まっていて攪拌用のものが見えたが全く詳しくないのでどこに撮影禁止にする理由があるのかはわからなかった。
酵母室の配管はおもしろくて、大量に圧力センサーか何かが並んで一様に緑のランプを点灯させていた。冒頭の写真。
写真にはないがビールが一時的に溜められるタンクの中を歩く経路がある。宇宙船みたいで面白かった。
原料の麦を食べさせてくれる。ほんとにこのまま「良く噛んで食べてみてください」と言われる。噛んでると結構甘い。あとホップを固めたペレットの匂いもかがせてくれる。ホップの匂いを嗅ぐことはまずないので貴重な体験。鮮度を保つため現地でペレット状に固めて輸入するといっていた。
最後にプレモルシリーズの試飲がある (普通のプレモルとマスターズドリーム・香るエールがある)。3杯までは飲んでいいんだけど、そんなに時間があるわけではないので、3杯飲もうとすると現実的にはキツいと思う。2杯半ぐらい飲んだけど酔っぱらってしまった。そして最初の1杯が一番うまいという。
ちなみに飲まない人はジュース(なっちゃん)が無限。運転手はオールフリーが提供されるみたいだった。案外子連れが多かった。
関連エントリー
- 東大総合研究博物館 東大総合研究博物館 ウェブサイト見ても特に何がテーマで展示されているかわかなくて不安だったけど、とにかく標本が大量にある。実物の図鑑みたいな印象。細かい説明はない。とにかく物量が多い。 剥製がむきだし...
- 造幣局 さいたま支局 工場を見てから展示を見た。工場は平日しか見れないが、工場で何の作業しているかは特に事前にはわからないので運。今回は通常の硬貨の製造は行われておらず、プルーフ硬貨と勲章の製造をやっているようだった。工場...
- 七社神社 / 渋沢史料館 / 北区飛鳥山博物館 / 紙の博物館 / 国立印刷局東京工場 / お札と切手の博物館 七社神社 渋沢史料館。渋沢栄一の史料館だけど本館はそれほど広くはない。ただ庭園と、晩香廬・青淵文庫も管理されてるみたい。 青淵文庫の内部 晩香廬の外観。中にも入れるが素足だとダメなので靴下の貸出もして...
- 調布市郷土博物館 / 調布市文化会館たづくり1階展示室 調布市郷土博物館 展示室内は基本撮影禁止。受付に許可が必要。 受付ホールに映写機がある 縄文土器の欠片に触れるコーナーがある 大日本帝国政府の改正地券 調布学校下等小学第八級卒業証書 明治は小学校にも...
- 東京農業大学 「食と農」の博物館 / 馬事公苑 / 世田谷美術館 東京農大「食と農」の博物館は入場無料。東京農大の構内ではない。 企画展が「南極飯」で面白かった。ペンギンの剥製がかなり近くで見れる。コウテイペンギンでかい。アデリーペンギンかわいい。 常設展は割といろ...
Safari 10.1 から CSS でも広色域対応
New Web Features in Safari 10.1 | WebKit
Editor’s Draft の CSS Color Module Level 4 を実装する形で Safari に color() が入ったみたい。
color() = color( [ <ident>? [ <number>+ | <string> ] [ / <alpha-value> ]? ]# , <color>? )
Apple はデバイスの DCI P3 対応をすすめてるのでその一貫なのかな。写真はもちろん広色域表示が現状でも可能なんだろうが、これがウェブのCSS色でも可能になる。広色域な画像とサイトのCSS色とを完全に一致させる方法は今までなかったが、これによって実現できるようになる。
関連エントリー
- 広色域ディスプレイの広がり アップル製品は iPhone も含めて徐々に DCI-P3 という色域をサポートしつつある。特に iPhone7 はカメラで撮影した JPEG の色域が DCI-P3 になっているらしい。 Andro...
- CSS の色空間は sRGB のはずだけど… Chrome, Firefox, Safari で調べたところ、 Chrome: カラーマネジメントされない ( sRGB は適用されない) Firefox: デフォルカラーマネジメントされない (後...
- Android O から広色域ディスプレイがサポートされる デベロッパープレビューのそのようなことが書いてあった。 Wide-gamut color for apps: Android developers of imaging apps can now ta...
- 広色域時代の画像の正しい扱いかた モバイル端末も iPhone7 など DCI-P3 サポートが増えてきて、CSS での広色域サポートもはじまりつつあるなかで、サーバサイドなどで画像をとりあつかうときに、正しく扱えていないというのはと...
- ディスプレイキャリブレーションの覚書 久しぶりにやるとカラーマネジメントまわりのことをすっかり忘れている。 キャリブレーションしてもOSのUIの色はあわない 写真を表示させるとあっているように見えるのに、OS の UI (例えば Find...
Amazon Cloud Drive に写真をバックアップ
Amazon プライムに入っていると無限に写真をアップロードできるので、バックアップのバックアップという位置付けで、たまに Amazon Cloud Drive にもアップロードしています。
Amazon Cloud Drive の定義する無料の範囲の「写真」には RAW ファイルも含まれるため、完全なバックアップとすることができます。そして容量がかさみがちな RAW ファイルのバックアップ先としては、プライム価格に含まれていることで Google Drive など競合サービスよりも圧倒的に安い選択になります。
転送が止まる
「待機中」のまま全てのタスクが止まることがあります。よくわかりませんが Amazon Drive のプロセスを再起動すると継続されます。
たぶんクライアント側のバグなんですがサービス開始当初からずっとなおりません。この挙動のためアップロードを放置しておくことができず、定期的に再起動する操作がいるのでだるいです。
アップロード済みフォルダの再アップロード
観察した限りではアップロードフォルダを再度指定しても再転送は行われず、即座にアップロード完了になるようです。
不要なファイルを除外したい
できないようです。
サイドカー XMP ファイルや動画ファイルはバックアップから除きたいわけですが、バックアップしたいファイルだけを含んだディレクトリ構造をつくるしかありません。
写真以外の無料枠も多少はあるので XMP ファイルぐらいなら上げておいてもそれほど問題ではない気もします。
関連エントリー
- 大量のファイルのバックアップにNASを使うのは適切なのか? すこし昔書いたGoogle Keepのメモを発掘してきました。 NASの維持コスト 電気料金 を30円/kWh、NAS の消費電力を 20W で計算すると、446円/月。24時間動かすので思いのほか電...
- Google+ の画像自動バックアップで、一部画像がアップロードされないとき Google+ の画像自動バックアップは、デフォルトだとカメラで撮影されたものしかアップロードされない。(いつのまにかこういう仕様になってた) なので、スクリーンショットや、他のアプリケーションが独自...
- Android と USB 接続したとき、どうあがいても一部のファイルを転送できない 症状としては ファイル転送 / Android Auto モードで USB 接続し Windows Explorer からコピーしたいデバイスのフォルダを開き ほとんどのファイルのコピーは成功するが ...
- さくらのVPSを Mondo Rescue でバックアップして Virtual Box に再現 現在は Ubuntu 12.04 を使っております。12.04 にするときは 10.04 のサポートが終わってからやるというひどさでしたが、さすがにダメだろうということで最近早めのアップデートを考えて...
- Google Photos のアルバム共有がよくできててビビった なんで今まで使っていなかったのか…… と思いました。 前提として、Google Photos はアシスタントを有効にしていると、適当にアップロードするだけで自動的にアルバムを作ってくれます。旅行のとき...





























