黄色い救急車を呼ばれるレベル

今日は、朝から乾燥機の電気の点検修理の予定だと思っていたんです。
朝、園に行くと、今日じゃないよと。
そろそろ黄い救急車を呼ばれるレベルです。
大丈夫か、俺。

空振りだったので、ジムニーの 1 ヶ月点検に行ってきました。
1,000km 走るのに 3 ヶ月くらいかかってます。
とりあえず、エンジンオイルを交換してもらいました。

それと、タイヤの件です。
まだまだ純正タイヤに山があるのでもったいないという思いが強いんですが、とりあえずということで、トランパス MT の値段を聞きに行きました。
谷町のアルペンの向かいに BEE LINE さんができていたので、そこに行ってきました。
結論から言うと、5 本(お尻に背負っているスペア)を交換すると、8 万弱、ということです。
そんなに高いの?
BEE LINE は安いと言う印象でしたが、これはダメですね。

組み替えの工賃、ということなんでしょうかね。
にしても、タイヤ組むのなんて、ガソリンスタンドのアルバイトでもできる程度のことで、多少の設備が必要なだけです。
真っ当に商売してもらいたいですね。

タイヤ交換 持ち込み、で調べたら、

松山市の持込タイヤ交換専門店(1本1,485円~)車検の速太郎 松山店

と出てきました。
まあ、2,000 円だとしても、やはり 1 万前後で交換できそうです。

格安のマッドタイヤ

マッドタイヤに交換するとなれば1本当たり大体1万円以上の出費は覚悟しなければなりません。それがトランパスM/Tなら1本1万円以下の出費に抑えることができる神タイヤです。

ネットショップの中には1本7,000円台で取り扱っているところもあります。国内タイヤメーカーのジムニー用マッドタイヤでこの価格は最安値です。

参考:195R16 104Q TRANPATH M/T – Google ショッピング

海外タイヤメーカーにも格安マッドタイヤはありますが、国内タイヤメーカー並の品質や信頼性を期待できるかは微妙なところです。あらゆる面で考えるとトランパスM/Tはコスパ最高タイヤなんです。

タイヤ自体、よく探してませんが、パッとみただけでも、8,000 円台で売られていますから。
探せば 7,000 円くらいのところもあるかもしれませんね。

あと、このサイズのタイヤを履くとなると、ノーマル 175 → 195 と 20mm 幅が増えるんですが、ホイルはそのままでいいのかなと思います。
ホイルも欲しいんですけど、どうせガリっとやるだろうし、先立つものないし、悩みどころです。

それはそうと、なんなんでしょうか、この数字は。
クッソ遅い軽四なんですけど、ミニよりも悪いですね。
4t ユニック、キャンター並ですよ、これ。
キャンターは軽油ですから燃料が安いので、ジムニーの方がよろしくない感じ。
黒だから、エアコンガンガンで燃費が悪化しているのでしょうか。。。

それで、輸出許可のために必要な書類作りをしていたんですが、Amazon や Walmart で買い込んだ生活用品は、インボイスがバラバラなので、ダウンロードして PDF に変換してまとめているのですが、単純作業なので、AppleScript で Safari を操作して自動化しているのです。
curl とか、wget で落とせたら、もっと早くて確実なんでしょうが、ログインが必要な先にあるので、Safari でやった方が楽かなと思ったわけです。

前回まではバナー広告とか、そういうのを CSS に細工して非表示にしてから PDF にして保存していたのですが、Walmart の画面デザインが変わって動作しなくなったので、ソースをダウンロードするスクリプトと PDF に変換するスクリプトを分けたんですが、ソースをダウンロードするスクリプトすら Walmart は、動かなくなりました。
Amazon とか他は問題ないんですけど。。。
さらに、手動で保存して PDF に変換する際に、もう無茶苦茶にレイアウトが崩れる(多分 CSS が引っ張ってこれてない)ので、使い物になりません。
大した量ではないので、手動でやりましたが、本当に不毛です。
なんとかならないもんでしょうかね。

月曜日までに書類は揃えないといけないので、ボチボチ頑張りたいと思います。

CSS selector 覚書

これで飯食っている人なら何を今更、だと思うんですけど。。。
CSS selector と JavaScript の覚書です。

昨日ボヤいた Walmart のサイトデザインが変わって、印刷した inovice のレイアウトが悲惨なことになったという件ですが、一括ダウンロードする際に、CSS を編集して保存していました。
そうすると、サイトの構成が変わったら、また一からダウンロードしなおさないといけないので、このやり方はまずいなと。そこで、ダウンロードは素のままで、それをローカルで開いた時に JavaScript で CSS を後から細工することにしました。
やることは、document.querySelector('#target').style.display = 'none' 的な感じなんですが。

まず最初のお題は、いくつかのアイテムをまとめて注文した場合、返品ボタンとかが複数表示されて、それも印刷されてしまうので まとめて 消したい、です。

先に結論を書きます。

document.querySelectorAll('.product-button-groups').forEach(e => { e.style.display = 'none'; });

ボタンは、product-button-groups というクラスなので、querySelectorAll まとめてひっかけます。

ここまではいいんですが、querySelectorAll で戻ってきた NodeList をどう回していくかというのが問題です。

ありがとう、エラい人。
自分は美しさが気に入りましたよ。
IE なにそれですし。

今までだったら、for で回すところです。
美しくないけど、何やっているかは明らかだし、ちゃんと動くし。

どういえばいいんでしょうか、便秘で溜まったものが一気に出たというか、そういうスッキリ感です。
便秘になったことはないんですけどね。

スッキリしたところ、次のお題です。
先にコードから書いちゃいます。

document.querySelectorAll('[data-automation-id=gc-payment-details] tr:nth-child(n+2)').forEach(e => { e.style.display = 'none'; });

支払い内容の表示なんですけど、table になっていて、普通はカードで払ってそれでおしまいなので、最初の tr に Total が、次の tr にカード番号が入ってきます。

ところがどっこい、最近、ギフトカードがバンドルされたお買い得商品をよく買うもので、買った以上使うわけですが、1 度に 5 枚まで使えるので、そこにさらに 5 件のカード番号が表示されて、もうトイレットペーパー占いで引き出された便所神の如く、だらだらと長いインボイスになってしまうので、2 番目以降には消えてもらおうってわけですよ。

:nth-child(n+2) でまとめてひっかけ、スッキリ。
forEach でまとめて消して、スッキリ。
ダブルスッキリ。

ダブルといえば、JB64 ですがオーディオレスなのでヘッドユニットを買わないといけないのですが、日本だと 2 DIN っていうじゃないですか。アメリカだと、double DIN といいます。
それで、ナビはもっぱらスマホのを使っているので Apple Car Play に対応していて、そのほかの下らない機能、ナビはさておき DVD だとかの光学ドライブといったもう 10 年は使っていないものがなくて、シンプルで安いものを探していたんです。

Amazon.com 売れ筋 No.1 が Sony XAV-AX1000 です。

これ、物理的なボリュームがあるし、前に USB コネクタがあるんですよ。
なもんで、USB メモリを挿すのも楽。
そして何よりも安い。
注文しようと思ったら、日本に直接出荷してくれるセラーさんが品切れしてしまいました。

それと crutchfield で適合を確認したかったんですが、そもそも SUZUKI が存在しなかったです。JB23 の情報でもあれば、付くかどうかくらいはわかると思ったんですが、JB23 を置いておけば、XAV-AX1000 単体を輸入して、動作確認をした上で、配線キットなどは JB23 と JB64 との差分で行けると判断できましたが。
なんにせよ、段取りが悪すぎました。

ステアリングリモコンに対応しているし、純正でも良かったんですけど、それはそれで、面白くないので Alpine の DAF9, フローティングビッグDA を買いました。

しかし、クソ高かったなぁ。。。

その割に、DAF9 もそうだし、純正の DA も、XAV-AX1000 も、Bluetooth 機能はあるんですが、Apple Car Play に関していえば、有線で接続しないとダメなんです。

Mini の場合、乗ると勝手に Bluetooth でペアリングして、勝手に音楽の再生(レジューム)がはじまります。
何もしないでいいんですよ。
センターには Qi の充電機能付きホルダがありますから、XR 以外だったら、そこにセットできます。
自分も 5 号も XR だからセットできませんけど。
なので、それが当たり前だと思っていたのですが、随分と完成度が低い気がしますね。

あと、「ビッグだ」なんて、安直な名前だと思ってたんですけど、

DA = ディスプレイオーディオだったんですね。。。

スッキリと言えば、愛媛の愛すべきクソ CM 企業、たかだ引越センターさんですよ。
スッキリする(?)CM を全国の皆々様にみていただきたいところなんですが、なんと非公開になってしまいました。
ネタバレするので、一応伏せ字にしときますけど。。。

逆に、全くスッキリしないのがコレ。

なんなんですが、このブ男は!
外人さんたちも激おこデス!
なかには、

ひっこシコシコしたかだ

という突っ込みまで入る始末。。。

えっと、なんの話でしたっけ?
CSS selector の話でした。

まあ、ここを見ろで終わってしまう話でもあるんですが。。。

それで、消えてもらう場合ですが、CSS selector でやる場合は、

visibility:hiddenは名前の通り、要素はあるけど見えない状態。
display:noneは、要素も取得されず、完全にその場にない扱い。

の違いがあって、見えなくする(場所は確保されている)のと、全くない場合と 2 パターンあるので、レイアウトの崩れ具合によりどっちがいいってのは変わるわけです。

ところで、querySelector でひっかけた要素に完全に消えてもらう場合、どうするのかという話です。
child.parentNode.removeChild(child); しないといけない。

[document.querySelector].forEach(e => { e.parentNode.removeChild(e); }) みたいな?
これだと e に代入しているから同じだし、まあ All よりも [] で一文字減ったというかなんというか。

逆に、querySelector だと、引っかかる要素がなかったときに、null が戻るもんだから、引っ掛からなかったらそこでエラーが起こって後の処理が中断されてしまうんです。

TypeError: null is not an object (evaluating 'document.querySelector('foo').style')

まあ、それはそれで、Knuth がエラーが起こると塗りつぶして文章を書きなさせるように、不都合を無かったことにしないほうがいいのかなとも思うんですが。

try { /* some stuffs here */ } catch { document.body.style.backgroundColor = 'red' }

この作業自体がとても美しくないことに起因している対症療法であるわけで、適当に済ませておこうと思います。

不良品撲滅!

FISKARS の砥石なんですけど、意外と不良率の高い商品なのです。

不良のパターンとしては、よくある順で、

  • 滑り止めが取れて数が足りずガタガタする
  • 砥石のカバーの爪が折れている
  • 砥石が入ってない

なんですが、輸送中の事故なら、箱の中に壊れた残骸とかありそうなものなんですが、箱に穴もなく残骸もない、っていうのが毎度のパターンです。

それで、当然検品しているんですが、Amazon の場合は袋を作って包んでいたんですが、直送する場合には、かなり手間がかかるので省いていたんです。

プチプチ封筒に入れて送るのですから、もし事故があればわかると思うわけですよ。
ところが、それでも事故が起こったもんですから、念には念を入れて、袋に入れることにしたわけです。

ざっと寸法を測って注文したら。。。写真の有様です。
ピッタリすぎて、蓋ができません。。。

なんとも。

そんなこんなで、今日の出荷は 1 パレットのみでした。

納品のラベル作成スクリプトをちょっと更新してたら、出荷の締め切りは 18:30 なんですが、18:20 くらいになってしまいました。

それで、ダンボールの話になるんですが、輸送箱の重量やサイズを入力しないといけないのですが、これがものすごくかったるいのです。

写真の箱だと、9″ x 9″ x 7″ ってことがわかるんですが、入力フィールドが 3 つに分かれているし、cm なのでいちいち変換しないといけなくてかったるくて仕方ない。

実際、納品のデータを作るのに小一時間かかっていますし、ミスがあると送料で莫大な損が出ますので、ものすごくストレスなんです。

作業のやり方自体に詰めて、データはアップローできるようなので、自前のシステムを構築して行こうかと思います。
ローマは一日にして成らず。
コツコツ頑張らないと。。。

それと、輸出書類の件。
Save as PDF で保存しないことにはどうにもならないので、重い腰を上げて書き直しました。

まあ、世界狭いんですよね、Mac 界隈は。
木下さん、お世話になりました。

書いてある通りなんですが、要素をひたすら every UI element で調べまくる、これで解決です。

例えば画像の状態の場合、開いているウインドウが window 1, そこに印刷のモーダルダイアログが出てますが、これは sheet 1 of window 1 となります。

PDF の部分ですが、これは menu button "PDF" で、画面の状態にするにはクリックしないといけません。
クリックする click menu button "PDF" と、メニューが表示され、選択可能になります。
click menu item "Save as PDF" of menu of menu button "PDF"

そうすると、さらにモーダルダイアログが出てきて、保存場所を選択できるんですが、これは sheet 1 of window 1 になるんです。ややこしい。

ここでは keystroke "g" using {command down, shift down} すると、フルパスが入力できるようになるので、パスを keystroke で入力した後に Save ボタンをクリックしてやると、問題なく保存されます。
ただし、ファイルが存在するややこしいので、事前に保存先の PDF は掃除しておきます。

というわけで、every UI element で調べまくる、という気づきがあり、なんとか解決することができました。

一難去ってまた一難、今度は Walmart がサイトのデザインが変わって、レイアウトが崩れまくってます。。。
ボチボチ頑張ります。

Safari の Export as PDF と Print からの Save as PDF

大ハマりです。

輸出のためのインボイスをまとめているんですが、結構枚数があるので、半自動処理をしています。

これがかなり曲者というか、トリッキーというかなんですが、流れとしては、

  • 倉庫にある品物のうち、積み込むもののインボイス番号をピックアップする
  • インボイス番号から、Amazon 等での注文だと判明したもの(日用品, 例えば洗剤など)の invoice を Safari で表示, 一旦 HTML としてローカルに保存する
  • ローカルに保存した HTML のうち不要なものを CSS を細工して取り除く(ヘッダやふった、ロゴなど)
  • Export as PDF を使い PDF に変換して保存する
  • 各インボイス番号に基づきソートし、連番を振った上で、FPDF を使い 1 ファイルにまとめる

って感じなんです。

Amazon とか、まあその辺での小物の買い物は、次のような理由でものすごく数が多いので、いちいち人力でやっていたら、大変だし、ミスが起こります。
なので、自動化しているんですが。。。

  • 洗剤やケミカル類, おにゃー様のグッズなどは、Subscribe & Save という定期注文で、1 アイテムごとにインボイスができるため、10 アイテムを定期注文しているなら、10 件のインボイスが発生する
  • Subscribe & Save は、同じアイテムを 2 個買うと、1 件の定期注文とカウントされるけど、1 アイテムづつを 2 件定期注文すると、注文件数に下駄をはかせることができ、割引率がアップ
  • また、数が多いときは、数量変更だと、いちいち変更作業が必要だけど、全部ならスキップをワンクリックするだけで良いので楽

ぱっと見はうまく動いていたんです、ぱっと見は。

問題は、表題の通りなんですが、Export as PDF と Print からの Save as PDF の違いです。

本当は、Print からの Save as PDF で PDF に変換したかったんですが、プリントダイアログの操作をしないといけなくて、この部分が不安定だったんで、それを省略できる Export as PDF で処理していました。

このところずっとこれで問題なく動いていたんですが、出来上がった PDF の用紙サイズがおかしなことになっているのです。
インスペクタで見ると、Paper size: 40.19 x 23.32cm となっています。
これを A4 サイズにすると、横 210mm x縦 297mm なので、右半分が欠落してしまいます。

当たり前ですが、Print からの Save as PDF の場合、用紙サイズの設定ができるので、このような問題は起こりません。

で、なんで一旦 HTML で保存をするのか、というと、Amazon の側が当然セキュリティのため、暗号通信になっているので、wget だとかそこらへんでゴニョゴニョできそうになかったため、です。

次に HTML から PDF の変換を、それこそ FPDF でやれよ、って話ですが、JavaScript やら CSS でゴニョゴニョしているため、レイアウトが崩れすぎて使い物にならなかったため、です。
Acrobat を使ったらできるんだろうか。。。持ってないけど。

しかしまあ、個人事業者の方で、こういう税金を払う時に提出しないといけないインボイス類って、どうやってるんでしょうかね。

というわけで、丸一日かかっても解決できませんでしたので、今回は人力で Print からの Save as PDF での変換作業で凌ぎたいと思います。

それはそうと、次の Lodge 製品の仕入れの件なんですが、今まではバラバラというか、一個一個の荷物として倉庫に搬入してもらい、それをこちらで輸出用の梱包にまとめていたんです。
ただ、この方法だと輸送コストが嵩む上、紛失や破損、あとそれらの管理のコストもかなりかかるし、Lodge 製品もある程度売れるようになってきたので、量をまとめて注文をしようかなと思うわけです。

それで、担当者が知らない単語がでてきたのですが、

ということのようです。

  • MOQ Minimum Order Quantity 最低注文数
  • SPQ Standard Packing Quantity 最小発注単位
  • SNP Standard Number of Package 標準の梱包の数=「出荷梱包単位」

さて、SNP ですが、例えば Lodge の製品で言えば、L8SK3 などは複数枚, たしか 3 枚で 1 つの箱に入っているんです。
その場合、SNP = 3 なのかなと思うわけです。
ただ、その箱が本当に最終の箱か、とも思うんですが、基本的にある程度の大きさがあり、当然に、鉄なので重たいので、3 枚入りの箱を、さらに大きな箱で梱包するのかという疑問なんですが、以前紹介した Lodge の工場での生産風景で、出荷時にパレットにはい付けして、ストレッチフィルムで梱包している様子が見て取れますが、このパレット 1 枚、これも SNP といえば、SNP じゃないの、って話です。
さらに言えば、パレットにきれいに積みつけられる数、1 段のですよ、これも SNP といえば SNP ではないかと。

うちの標準の梱包サイズで言えば、L8SK3 は LCC3 と共通の箱を使い、1 箱 5 枚で再梱包しています。
再梱包する理由は、L8SK3 には外箱がないため、Amazon で保管されている際に、

  • 1 アイテムがどこまでか範囲をはっきりさせるため
  • 商品を保護するため

1 アイテムごとに箱に入れるか、ビニール袋等で個別に梱包し、FBA ラベルを貼り付けることを求められるためです。

厳密に言えば、この作業はメーカーバーコードで納品すれば省略できますが、手間暇かけて丁寧に検品して、丁寧に梱包してこそ差別化できる わけでし、値段とその部分でしか差別化はできませんから、ここが自分の唯一の仕事と言っても過言ではありません。

で、箱の寸法ですが、B4-80 と同じくらいなんですが、長さ 375 × 幅 265mm(内寸)なので、400 x 300 といったところです。

写真は、保管のために倉庫内で積んである様子で、棒積みになっています。
この後、輸送のために、交互の煉瓦積みに積みなおししましたが。

要するに保管時には、ダンボールの強度を優先して、劣化を避けるために低く積んでおくわけです。
輸送の際には、特にこの箱は輸送専用で、Amazon に到着したら破棄されて、お客様にお届けするものではないので、到着まで持てば良いので、荷崩れせず、かつ、スペース効率の良い積み方に切り替える、というわけです。
写真の量で 3 x 3 で 9 箱、入り数が 5 ですから、一箱 15 キロはないですが、一つ 5 pounds なので、10kg ちょっとですね。なので、1 段で 100kg くらいです。
4 段積めば、一番下の段には 30kg 以上乗っているのですから、小学生くらいの子供が踏み台に使っているようなものです。
なので、ちゃんと考えないと、すぐに箱がダメになってしまうんです。
箱は 100 円近くしますので、パレット一つあたり、梱包の材料代だけで何千円もかかっているんです。

もちろん、LCC3 のように積み上げても、製品全体で重量を受け止めることができ、ダンボールが痛まない場合、また、LCC3 の場合、普通の茶色の箱と、カラー印刷の化粧箱とバリエーションがあるんですが、カラー印刷はコートされているのか、とてもとても滑りやすいため、そもそも棒積みで何段か積んだら、リフトが止まっただけで前方に滑り落ちかねないので、こういうものはシュリンクフィルムを軽く巻きつけておくと、フィルム同士が接すると滑り止めにもなるので、輸送ラベルからの保護も兼ねて、シュリンクフィルムを巻くようにしています。

えらく話が脱線しましたが、アメリカのパレットは、40″ x 48″ なので、1,000 x 1,200mm といったところなので、LCC 3 の箱なら、煉瓦積みで 300 x 400 が 4 個 x 1 列、400 x 300 が 3 個 x 2 列で、10 個/段, ということになるんじゃないかなと思うわけです。

ただ、最初から色々と細かくいいすぎるのもアレかと思うわけで、向こうも素人ではないというよりも、こちらよりも経験も知識もあるだろうから、まずはやってみて、問題が出たら煮詰めていけばいいんじゃないかなと思います。
まあ、結構、自分のやり方に固執して、それ以外はできない、という人もいるというか、そういう人の方が多いんで、問題が出ても解決できないってのは往々にしてあるパターンだったりもするんですが。

案ずるより産むが易しともいうし、とにかくやってみようと思います。

Safari + JXA

STORES やなんかもそうなんですが、意外とかゆいところに手が届きません。

Yahoo! Auctions なども、API で出品できるようにするといっていたのですが、問い合わせたら、できなくなりました、ということなので、ブラウザの側をスクリプトで制御して、決まった動作を(半)自動化しているのですが、今までは AppleScript で行っていたので、AppleScript と JavaScript、更に shell とのちゃんぽんだったわけです。

別に動いているものを特に書き換えるつもりもないのですが、最近覚えるよりも忘れるほうが早いので、なるべく単一の言語でやりたい、というのがありまして、重い腰を上げて JXA なるものを初めてみました。

というわけで、かなりの人にどうでもいいネタだと思いますが、備忘録として。

Imperia Online という村ゲーをしているのですが、これの特定の村を表示するスクリプトを書いてみました。
いや、ブックマークが 20 件までしか登録できないので、不便なので。

function run(argv) {
    se = Application('System Events');
    if (se.uiElementsEnabled()) {
        app = Application('Safari');
        app.includeStandardAdditions = true;
        
        //app.activate();
        //delay(1); // waiting for competition of ativatation
        
        // search Imperia Online Document
        world = null;
        for (i = 0; ! world && i < app.windows().length; ++i) {
            for (j = 0; j < app.windows[i].tabs().length; ++j) {
                console.log(app.windows[i].tabs[j]);
                if (app.windows[i].tabs[j].url().match(/imperiaonline/)) {
                    world = app.windows[i].tabs[j];
                    break;
                }
            }
        }
        
        if (!world) {
            return;
        }
        
        try {
            app.doJavaScript("xajax_switchVillageToGlobalMap('global-map-window', {x: 1701, y: -614})", {in:world});
        }
        catch (e) {
            console.log(e);
        }
    }
    else {
        with (Application('System Preferences')) {
            pane = panes.byId('com.apple.preference.security');
            pane.anchors['Privacy_Accessibility'].reveal();
            activate();
        }
    }
}

参考にしたのは、この辺り。

動作的には、Safari のすべてのウインドウを取得して、ウインドウの中にぶら下がっているすべてのタブを巡回し、URL をマッチして目的のタブを調べる、という部分、あとは、そこで取得したタブに対して、JavaScript を実行する、という部分で成り立っています。

例えば、Yahoo! Auctions で発送作業をしようと思った時など、発送情報が開かれているタブと、クリックポストの発送入力画面が開かれているタブと、その両方を取得して、それぞれで doJavaScript をすれば、通常できないクロスサイト・スクリプティングが簡単に可能になり、スクリプトメニューにそういうよく使うスクリプトは登録しておくこともでき、また、所詮はスクリプトですから、サイト側のデザイン変更などにも容易、かつ、迅速に対応ができるわけです。

ところで、今のところのハマっている部分。

いちいちエラー画面を出すのがイヤなので、通常は、say を使って喋らせているんですが、うまくいかないんですよね。
多分、Accessibility の権限設定が間違えているんだと思うんだけど。

こちらで参考にしたのは、openspc。
一体何年お世話になりっぱなしなんだろう。

MacVim も動かなくなっているし。。。

午前中、ウッドバッグ 3 つ分、割ったところでお昼になったし、ウッドバッグ自体がなくなったので、撤収。
暑いので 3 時くらいまで、RCS の件もあるし、いろいろ Mac の掃除をしようと思っています。

Screenshot 2016-05-22 12.52.12このところ、まともに開発してなかったのがばればれって感じですが、MacVim もいつのまにやら動かなくなっていて、面倒くさいので Terminal.app でゴニョゴニョしていたんですけど、そろそろアップデートしたほうがいいんじゃないかと思いまして、久しぶりに新しいのを落としました。

起動しようとしたら、can’t opened because it is from an unidentified developer と起こられて、強制終了です。
そういや、そんな機能がいつの間にか実装されてましたね。

まあ、System Preferences → Security & Privacy → General で Allow apps download from: を Anywhere にして起動しましたが、Open Anyway を押しても、シカトされるのはどういう具合でしょうか?

とりあえず、MacVim が起動することを確認後、Mac App Store and identified developers に戻してみたんですが、一度起動したものは覚えていて、起動拒否はされませんでした。

いやまあ、普通に vi(m) を Terminal で使ってもいいんですけど、:vert diffs とかするときに、ウインドウをでかくしたいじゃないですか。でも、Terminal がそんなにでかいと邪魔ってのがあるので、MacVim を使いたいわけですけど、まあ、かなりどうでもいいレベルの話ではありますね。

そういや、MacVim には Sparkle が組み込まれているんですけど、実際のところ、差分でアップデートするほどのサイズじゃないと思うんですけど、そんなことよりも、iOS の方は、こういう差分アップデート機能というのはないんでしょうかね?

実際問題、facebook だとかのアプリだと、結構な容量があるわけで、ユーザ数も多いと思うんですが、丸ごと更新しているように見えます。

1MB あたり、1円くらい通信費がかかるので、100MB だと 100円もかかるんですが、WiFi でやればいいやということなのかどうなのか知りませんけど、昔のことを思えば、もうちょっと何とかしたらどうかと、常々思っています。

App Store の仕組みを知らないのでなんともですが。