投稿

2025の投稿を表示しています

SumatraPDF の用紙背景が黒になったのを白に戻す

イメージ
SumatraPDF で文字検索か何かを行っている時になにかショートカットキーに触れたのか、用紙背景が黒になってしまった(配色テーマとは別のもの) 設定→詳細設定 でSumatraPDF-settings.txt を開いて InvertColors を true から false へ変更・保存して、SumatraPDFを再起動

minisforum HX90 のケースを開ける手順

イメージ
メモリ交換のため minisforum HX90 ケースを開けた手順をメモ 4箇所のネジを外す このうち1箇所ネジの短いところがあり、その位置に裏ぶたを開けるためのスリットがある スリットをマイナスドライバなどで開ける ある程度開いたら、手で引っ張ればパカパカっと開く 基盤を固定するネジ1本を外し、端子のある側を上、ケーブルのある側を下にして本体を立てると、端子が穴から抜けるので、基盤を手前に起こす(ケーブルに注意しながら) 手前に起こして、裏返すとメインボードが見えるようになる(常にケーブルに注意)

楽天モバイルでKDDI(au)ローミングを確認(Android)

イメージ
Android端末で楽天モバイルのKDDIローミングを確認 今回は  Sim Cell Info というアプリで確認 SIM1(pSIM) にドコモ SIM2(eSIM) に 楽天モバイル データ通信は楽天モバイルへ設定した状態 楽天(44011)モバイルエリア KDDI(44053)ローミングエリア

Delphi の TDdeClientConv と TDdeServerConv の受け渡しでデフォルトコートページ以外の文字列を受け渡す

 Delphi の TDdeClientConv と TDdeServerConv 間の文字列受け渡しでデフォルトコートページ以外の文字を含むとデータが破損して渡されてしまう (Unicodeにしか存在しない文字を使用したファイルパスを受け渡す等) 原因は Vcl.DdeMan が Unicode化されておらず ExecuteMacro関数の引数が PAnsiChar となっているため、UTF-8 の文字列を AnsiChar へ変換してから送信している Unicode版へ書き直すのが正しいのだろうが 自身のアプリケーション間であれば base64 でエンコードして送信、受信してデコードすればよい System.NetEncoding の TNetEncoding.Base64.Encode TNetEncoding.Base64.Decode デフォルトコートページ内で収まらない文字列のときだけエンコードする場合は、判定後に送信文字列にヘッダなどを付与する 判定関数(デフォルトエンコードして戻して比較) function IsDefaultCodePageCompatible(const S: string): Boolean; var EncodedBytes: TBytes; begin try EncodedBytes := TEncoding.default.GetBytes(S); Result := (S = TEncoding.default.GetString(EncodedBytes)); except on E: Exception do begin Result := False; end; end; end;

raspberry pi の php8.3 → 8.4 で Apache2のPHPが動作しなくなった

raspberry pi の apt からアップグレードしたところ、php が 8.3 → 8.4 となり Apache2 でPHPが動作せず、ソースが表示されてしまうようになってしまった 元々、ラズパイ5へ PHPをインストールするとデフォルトで 8.2 となるため 8.3 を入れていた(2024年3月頃)もの PHP8.4のモジュールを入れて、apache2を再起動したら動作するようになった # a2enmod php8.4 # systemctl restart apache2 参考文献

spamassassin の定義をすり抜ける U+FEFF

From が「Apple_サポート」や「TS_CUBIC_CARD」で始まる spam に対して、spamassassin の user_prefs 定義がすり抜けるため調べたところ From の先頭に U+FEFF が挿入されている 0xFE 0xFF は UTF-16BE の BOM のため、これらでエンコードされた後マッチングが行われている可能性 通常、From に U+FEFF は混入しないので、user_prefs の定義へコピペしてマッチするようになった(存在しているが、表示されない) header FROM_UFEFF From =~ // score FROM_UFEFF 4.00 抜け道として FEFFが挿入されているのか、配信システムで元ファイルのBOM削除し忘れかは不明 Unicodeと共に 、厄介だけどピンポイントでspam判定可能 U+FEFF が混入されている spam の From 文字列(U+FEFF以降の一部) Apple_サポート TS_CUBIC_CARD ANAカード InteractiveBrokers ANAマイレージクラブ事務局 ANA サポート 大和証券 大和証券セキュリティ管理部

PayPayで銀行からチャージしようとしたら「ご利用の銀行からチャージの承認がおりませんでした」

イメージ
 PayPayで長らく放置していたPayPay銀行(旧ジャパンネットバンク)を登録してチャージしようとしたら チャージできませんでした ご利用の銀行からチャージの承認がおりませんでした 詳しくは銀行へお問合せください たらい回しに合う感じ大、と思いながら銀行の問い合わせフォームから問い合わせた所 すぐに返事が来て(通常は翌営業日と書いてあった) 不審なログインの形跡を当社で検知したため、不正利⽤にあわないように⼝座の取引を停⽌させていただいた(略 残高や取引履歴を確認して問題がない旨を伝えると、すぐに制限は解除されました 昔シェアウェアの受取口座とかで公表してたから、アタックくらいは受けてたであろう...

PHPでパスを連結

PHPでパスを連結 echo path_combine(__DIR__, 'aaa', 'bbb/ccc'); function path_combine(...$paths){ $result = array(); foreach ($paths as $path){ $dirs = explode(DIRECTORY_SEPARATOR, rtrim($path, DIRECTORY_SEPARATOR)); $result = array_merge($result, $dirs); } return implode(DIRECTORY_SEPARATOR, $result); } ※末尾の区切り(/等)は削除されます ※2つ目以降の引数の先頭に区切りは使用できません

pushcode.jp の API で What(タイトル、本文)へ任意の文字列を投入

イメージ
Webプッシュサービス pushcode.jp の API を使用して通知を行っていて、タイトルと本文をAPI呼び出しで投入する方法に手間取ったのでメモ ※json を投げて通知可能な状態からの話です APIの説明 にある「変数」を使用するのですが、説明が分かりにくかった(有料との差別化?)のと What の API利用のチェックが新規作成時にしか保存されない(不具合?)のに引っかかった プッシュ 作成時に What のAPI利用にチェックを入れて、タイトルと本文に {{変数名}} を入れておく ※ここでは {{title}} と {{body}} としてます WhatのAPI利用がオフで json に what があると {"message":"API flag for 'what' is not set.","result":"error","status_code":469} というエラーを返されます API でpostする json の what -vars へ、先程の変数名: データ で投入 { "when": { "immediate": true }, "what": { "vars": { "title": "タイトル", "body": "本文" } } } こんな感じで、任意の文字列を送信可能になる pushcode.jp での通知、早くて30秒程度とけっこう時間がかかる Pushbullet(アプリ通知)と比べるとかなり遅い感じ、Webプッシュだからか、でもブラウザのGmailはすぐプッシュされてるしな...

Xbox.com 未成年アカウントの「プライバシーとオンラインの安心設定」を変更する

イメージ
 Xbox.com 未成年アカウントの「プライバシーとオンラインの安心設定」がグレー表示になって変更できない 未成年アカウントは直接変更できず、保護者用アカウント(非未成年)を紐づけて、そちらから変更を行う 必要なアカウント(マイクロソフトアカウント) 対象の未成年アカウント(登録されているメールアドレス) 保護者用アカウント 紐づけから「プライバシーとオンラインの安心設定」までの手順 保護者アカウントで Family Safety へログインして「家族のメンバーを追加」 メンバーを選択して、未成年アカウントのメールアドレスを入力する 未成年アカウントのメールアドレス へ認証メールが届くのでメール内のリンクから認証する 保護者アカウントの  Family Safety  を再度開くか再読み込みして、未成年アカウントが追加されているのを確認 保護者アカウントで Xbox.com の「 プライバシーとオンラインの安心設定 」を開く(ログインする) 未成年アカウントが表示されているはずなので、そちらを選択して各設定を行う ※一番下に送信ボタンあり

証券会社のフィッシング対策、認証コードに効果は無いのでは...

イメージ
証券会社やネットバンクのフィッシング対策に導入されている、多要素認証やデバイス認証 コードをe-mailやSMSで送ってくるのが多いが、これに意味はあるのだろうか この対策、デバイス認証必須にするから補償はしませんよ的な感じもする そもそも、フィッシングサイト経由の損失(ユーザー側の過失)を補償していたら、自作自演することで犯罪者は2度収益を上げることも可能になるわけで... 対策の本質は「 サイトのドメインを見ろ 」 一般的なコード送信 コード送信の場合、フィッシングサイトへ認証済みcookieが送られて、フィッシングサイト側のブラウザが新しいデバイスとして登録されてしまう PPAPのように同じルート上で入力(①, ④)を行うのでは、ひと手間多いだけ (ApplePay + イオンカード + iD の不正登録と同じ) 考えられる対策(Webのみを利用した場合) 認証コードの代わりにURLを送り、開いてもらう (メールのリンクをそのまま開くという時点でどうかとは思うが、1の前に既にそれをやっていると思われる) フィッシングサイトを経由している場合、ログイン時(ID, PW)のCookieと不一致になりブロック可能 認証URLを開くブラウザがログイン時と同じブラウザでなければならない フィッシングサイトが受信したURLをコピペしろ、となっていてそれに従うと無力

maildrop(.mailfilter)で拒否リストのメールに対して 550 user unknown を返す

イメージ
maildrop(.mailfilter)で拒否リストのメールに対して 550 user unknown を返す (さくらのレンタルサーバーで maildrop が使用されている) 注意 MTAに大きな負荷がかかる可能性があります 550 user unknown は return-path に返るので、差出人に返るとは限りません spam等が return-path でアカウントの存在をチェックしている場合、有効な処理である可能性があります maildrop(.mailfilter)の user unknown は EXITCODE=67 を用います EXITCODE 意味 SMTP ステータス 0 正常処理 250 64 コマンドライン使用エラー 554 65 データフォーマットエラー 554 67 ユーザー不明 550 69 サービス利用不可(ポリシー拒否など) 550/554 拒否リストにマッチした場合 user unknown を返す if ( /^From:\s*(.*)/ && lookup( $MATCH1, ".blockaddr" ) ) { EXITCODE=67 exit } 拒否リストにマッチした場合 user unknown を返して、ゴミ箱へ保存 if ( /^From:\s*(.*)/ && lookup( $MATCH1, ".blockaddr" ) ) { EXITCODE=67 to "maildir/.Trash/" } 送信元に下記のようなお決まりのメッセージが返る 5.1.1 なので宛先不明

WinSCP 6.5.0 あたりから日本語化ファイルが適用されない

WinSCP 6.5.0 あたりから日本語化ファイル(WinSCP.jp)が読み込まれない ※使用しているのはポータブル版ですが ini ファイルやレジストリの項目は同じだと思います WinSCPのアップデートがあったら、言語ファイルは下記から Japanese language をダウンロードして展開 https://winscp.net/eng/translations.php そのうち対応するだろうとそのままで使っていたが、それほど騒ぎになっていないのでオレ環かと調べることに (最近  フォーラム にも報告が上がってきていた) 試しに WinSCP.ini をリネームして素の状態で起動 → 何もせずに日本語化されてる~ (OS言語から自動適用なんだっけ?毎回選択していたような) ということは、継ぎ足し使っている WinSCP.ini に原因があるということか 新旧の ini ファイルをlanguage や locale で検索した結果 [Configuration\Interface] セクションの LocaleSafe に違いが 不具合の出る WinSCP.ini [Configuration\Interface] LocaleSafe=1033 不具合の出ない WinSCP.ini [Configuration\Interface] LocaleSafe=0 LocaleSafeの値を 0 にして、起動したらあっさり日本語化されました

iClacked の予約サイトでエラー

 iClacked の予約サイトで予約完了ボタンを押すと Technical Error occurred. Your Conversation Id XXXXXX のエラー (画面キャプチャし忘れた) サードパーティCookieがブロックされているとエラーになるらしい Cookieを許可した後、同じ画面から改めて予約完了が可能

Androidアプリのadsを新しくして、いつものドツボにはまる

イメージ
 更新しないとデベロッパーアカウントを閉鎖とか通達があり、Android9まで対応していたアプリをなんとか 16まで引き上げ、Google Pay Consoleへアップしたら、 Google Mobile Ads (GMA) SDK (com.google.android.gms:play-services-ads) により、バージョン 12.0.1 ... アプリをリリースしてから 90 ⽇が経過すると、... 製品版またはオープンテスト版としてリリースできなくなります。 新しいバージョン: 21.0.0+ とか警告 sdkを変更して // implementation 'com.google.android.gms:play-services:12.0.0' implementation 'com.google.android.gms:play-services-ads:24.2.0' マニフェストに権限とmeta-dataに AdMobの広告ユニットIDをコピペ <uses-permission android :name ="com.google.android.gms.permission.AD_ID" /> <meta-data android :name ="com.google.android.gms.ads.APPLICATION_ID" android :value ="ca-app-pub-0000000000000000/0000000000" /> とかやったら即座にアプリが落ちる 原因は meta-data へいれるのは、 アプリID であって、 広告ユニットID ではない という事、確かに APPLICATION_ID となっている アプリIDと広告ユニットID の違いは区切りがチルダかスラッシュ <meta-data android :name ="com.google.android.gms.ads.APPLICATION_ID" android :value ="ca-app-pub-0000000000000000~0000000000...

高齢者向けプラチナNISAは、分配金の種類がわかりにくくなり

65歳以上を対象とした高齢者向けプラチナNISAが始まるとか始まらないとか 毎月分配型の投資が非課税 証券会社の営業が、投資初心者の年寄に勧める毎月分配型のNISA版 毎月分配型といえば、基準価格を下回った場合、元本を取り崩す特別分配金で有名 (まぁ、運用がマイナスなのに分配金出す時点でおかしいわけで) 分配金額が変動(通常の分配金には課税されるが、特別分配金には課税されない)することで、タコ足に気づく人も多い が、このプラチナNISAの場合、通常の分配金に課税されないため分配金額が通常も特別も変わらなくなってしまい、タコ足がより気づきにくい 証券会社の営業には大きなメリットでしょうな

Android Studio で複数行コメントの警告を消す

イメージ
 Android Studio で複数行コメントがあると警告が表示される 方法1: 設定を変更 File → Settings (Preferences) → Editor → Inspections で comment out を検索して、チェックをオフ 方法2: コメントを /*/ で始める

Yahoo Japan および LINE から送られてくる おすすめ情報 解除サイト

 Yahoo Japan および LINE から送られてくる メルマガと言うか おすすめ情報 を解除するサイトのURL https://osusume.yahoo.co.jp/

Delphi TIdIPMCastClient および TIdIPMCastServer でのマルチキャスト送受信

Delphi TIdIPMCastClient と TIdIPMCastServer を利用したマルチキャスト送受信 最小コード サーバ(送信側) フォームへ IdIPMCastServer1, Edit1, Button1 を置く uses IdGlobal; procedure TMultiCastServerForm.Button1Click(Sender: TObject); begin IdIPMCastServer1.Send(Edit1.Text, IdGlobal.IndyTextEncoding_UTF8); end; procedure TMultiCastServerForm.FormCreate(Sender: TObject); begin IdIPMCastServer1.MulticastGroup := '224.0.0.1'; IdIPMCastServer1.Port := 5000; IdIPMCastServer1.Active := True; end; クライアント(受信側) フォームへ IdIPMCastClient1, Memo1 を置く uses IdGlobal; procedure TMulticastClientForm.FormCreate(Sender: TObject); begin IdIPMCastClient1.MulticastGroup := '224.0.0.1'; IdIPMCastClient1.DefaultPort := 5000; IdIPMCastClient1.Active := True; end; procedure TMulticastClientForm.IdIPMCastClient1IPMCastRead(Sender: TObject; const AData: TIdBytes; ABinding: TIdSocketHandle); begin Memo1.Lines.Add(IdGlobal.IndyTextEncoding_UTF8.GetString(AData)); end; 終了時(IdIPMCastClient1.Active := Fals...

古いOSでCyberPowerのUPSを利用する

イメージ
サポートが終了したOSで CyberPower の無停電装置を利用する 今回は「CP750PFCLCD JP」というUPSが対象、他のシリーズでもいけるかも 公式サイト で配布されている PowerPanel Personal は現時点で Windown 10以降, Windows Server 2016以降であり、古いバージョンの配布も行われていない様子 Windows 7 や Windows Server 2008 あたりに上記をインストールできるが、実行時に「api-ms-win-core-path-l1-1-0.dll」が見つからない、となって起動できない (Visual C++ 15 のライブラリとか入れてみたけど変化なし) 古いバージョンの PowerPanel Personal を探し回った所 ver.1.62 というのを下記に発見 https://www.cyberpowersystems.com/product/software/power-panel-personal/powerpanel-personal-edition-for-windows-v1/ UPSとの接続は、 シリアル接続では認識不可、USB接続で認識可 ver.1系統なので見た目は古いですが、インストール・実行可能、日本語にも対応 ステータス情報もUPS本体に表示されているものと連動しています 停電時の設定やバッテリーチェックも動作 スタンドアロンで古い機器を利用している場合も多いので、アプリケーションの配布は行ってほしいもんです

Unicode の U+2215(∕) や U+1D62D (𝘭) を用いたドメイン詐称

イメージ
Unicode の U+2215(∕) や U+1D62D (𝘭) を用いたドメイン詐称 送られてきたURLの例 https://ana.co.jp∕AAA∕BBB∕CCC@𝒅𝒊𝒋𝒒𝒓.cn?idtoken=DDD/ ※一部置き換え リンク先をテキストエディタで表示するとこんな感じ https:// より後のスラッシュに見える部分は U+2215(∕) ということ @より前はBasic認証のアカウント情報となるため https://𝒅𝒊𝒋𝒒𝒓.cn?idtoken=DDD/ へ  ana.co.jp∕AAA∕BBB∕CCC というIDで認証接続している事になる 試しに https://𝒅𝒊𝒋𝒒𝒓.cn へ接続すると https://svkfn.cn/ へ飛ばされて、下記が開かれる(もちろん偽物)

myHpCloud のデスクトップアプリを試してみた

イメージ
Amaryllo Cloud の再販で買い切りも用意されている myHpCloud デスクトップアプリ が提供されたようなので試してみた デスクトップアプリといっても、タスクトレイに常駐して、インターフェイスはWebサーバなので設定などの画面はブラウザが起動 指定したフォルダをクラウドへ定時バックアップ(手動も可)が設定できる バックアップタイミングの設定は、時刻と曜日のみ クラウド内表示はブラウザで、myHpCloud のマイクラウドへ飛ばされる 要するにタスクトレイに常駐して、クラウドに更新ファイルをアップロードするだけのアプリ フォルダやドライブを同期するような機能は一切ナシです で、指定したフォルダをクラウドへバックアップしてくれるのだが 対象フォルダ内のファイル(test.png)で 編集→バックアップ を繰り返した結果がコレ 同名で更新されたファイルは、(1), (2), (3)... とファイル名末尾に連番がつけられてバックアップされる 古いのはゴミ箱行きとかじゃないんかい!! もちろん、PC側のファイルを消した後、バックアップを行ってもクラウド側は残ったまま 元々、スマホのフォトアップロードみたいな、編集を伴わない想定なんでしょうけど PCでその仕様は... バックアップから復旧させるにも、どれが最新のデータかファイル毎に追っていかなくてはならないわけで、なんとも微妙な仕様にちょっとガッカリでした

Evernote を割引更新したら Personal を Professionalの割引なし価格で処理され、返金してもらった話

イメージ
Evernote のポイントを消化してして、更新日を過ぎたため 40%割引の広告が早くも表示された(課金期間終了の翌日) 表示されたのは Mac版のため、上記リンクから進むと Apple Store での課金となるので、別の端末(こちらも起動すれば表示される)からリンクをたどり Paypal (Evernoteにクレカ情報を渡すのはどうかと思ったので)で進んで、完了 あれ、77.99USDって何?金額的に Professional なんだけど、アカウント概要を確認すると Personal プランになっている Evernote Webの右上「サポートに連絡」のリンクがブッ壊れているので、Paypalから返金要求を行う(Evernoteに相談しろ云々が書いてはあった) その後、Evernoteへの問い合わせ方法が見つかる 同じ右上メニューの一つ上の「ヘルプ&参考情報」→ 「アカウント&支払請求」→ 「リクエスト送信」を開いて 項目を選択、請求番号はアカウントの請求情報にある INV で始まるもの これを申請したら、人が介在していないような速さで Paypalへ返金が行われた (人が介在してなきゃ不具合の報告も上がらず、修正もされないのでわ) で、改めて Evernoteを起動すると、Basicへ戻され 同じ40%OFF が表示されたので、今度は Paypalではなく、クレカを入力して40%OFFで処理が行われました 途中、マニュアルやネットの情報を確認すると、一部返金とかの柔軟性はなくて、一旦全額返金して、もう一度課金操作を行う必要があるんだとか もぅ、グダグダ

Symfony BrowserKit や HeadlessChrome をブロックする .htaccess

Webフォームへの広告(迷惑)書き込みのログを見ていたら、user-agent が "Symfony BrowserKit" だったので、サイト全域をブロック ※HeadlessChrome も同様にブロック可 ルートの .htaccess へ下記を追加 403 Forbidden とする場合 RewriteCond %{HTTP_USER_AGENT} "Symfony BrowserKit" [NC] RewriteRule ^.*$ - [F,L] 404 Not Found とする場合 RewriteCond %{HTTP_USER_AGENT} "Symfony BrowserKit" [NC] RewriteRule ^.*$ - [R=404,L] 後者は、ページが無くなったと認識してくれれば来なくなるかもね 他に javascript や cgi側 で URL(https:// 等)を含むメッセージ拒否を併用

PHP の CSV読み込み fgetcsv 疑問まとめ

イメージ
PHPで fgetcsv 使用時の疑問を確認したメモ $file = fopen($filepath, 'r'); while( $csv = fgetcsv($file) ){ print_r($csv); } fclose($file); 改行コード 改行コードは \r\n または \n 単独で存在する \r は通常の文字と同様に扱われる※混入注意 ダブルコーテーション内 戻り値(配列内)にダブルコーテーションは含まれない カンマ, \r\n, \n を含むデータを読み込むことが可能 ダブルコーテーションは、2つ連続で表現 例) "テスト""太郎""" → テスト"太郎" その他 ダブルコーテーションで括る必要がないデータを、括ってもよい ダブルコーテーションで括っていないダブルコーテーション(先頭以外)は、通常の文字として扱われる 例) 1,あいうえお,かき"くけこ → [2]=かき"くけこ スペースは区切りではない(ダブルコーテーションで括る必要なし) カンマ前後のスペースも文字列として取得される(trimされない) 備考 \r = CR(0x0D=13) \n = LF(0x0A=10) Excel の Alt+Enter で入力したセル内の改行は、csv保存で ダブルコーテーション括りの \n となる Excel の csv保存(utf-8)で作成されたファイルは、fgetcsv で読み込める(確認した限り) Excel の csv保存は utf-8とデフォルトエンコード(sjis)が存在するので注意が必要

Macで最小化したウィンドウを元のサイズに戻すショートカットキー

Macで最小化したウィンドウを元のサイズに戻すショートカットキー(ショートカットキーと呼んでいいのかは不明) Windowsの場合 Win+↓等で最小化したウィンドウは、Alt + Tab で選択後 Altを離せば元のサイズに戻るが Mac は command + M で最小化したウィンドウを command + Tab で選択後 command を離しても 最小化されたまま Option長押ししろとかいう記事がを見つけたが現行では反応なし 調べたら command + Tab で選択後、optionを更に押して(command + option)離すとかいう操作でウィンドウを元のサイズに戻せるらしい、が、書いてあるとおりはかなり難しい というか、そこに指がない いろいろ操作してみた結果、command と option は同時に押されていなくても大丈夫そうで command + Tab で選択後、commandに置いた指を隣の option へスライドして 離せ ばOK (操作的にも覚えやすい) キートップの印字が早く消えそうだけど :-)

Evernote10 のローカルDB(sqlite)の断片化を解消

イメージ
Evernote10 のローカルDB(sqlite)を最適化、断片化を解消してみたメモ 対象はデフォルトで下記の場所(エクスプローラへコピペ)の %APPDATA%\Evernote\conduit-storage\https%3A%2F%2Fwww.evernote.com 下記のファイル( 000000 の場所はユーザIDとなっている) UDB-User 000000 +RemoteGraph.sql この作業には sqlite3コマンドが使える環境が必要です 今回は DB Browser for SQLite を使用してますが、何でもよいです Evernote10を終了させ 、DB Browser for SQLite 等で 先程の UDB-User000000+RemoteGraph.sql を開きます まずは、断片化の状況を調べるため、下記のコマンドをそれぞれ実行して値を調べます(SQLを実行タブ) PRAGMA page_size PRAGMA page_count PRAGMA freelist_count 私の値 PRAGMA page_size =  4,096 PRAGMA page_count = 721,697 PRAGMA freelist_count = 565,701 各count にページサイズを掛ければ、実際の容量が得られます 721,697 *  4,096  = 2,956,070,912 (全体のサイズ) 565,701 *  4,096  = 2,317,111,296 (空きサイズ) 78% が空き(断片化?)ということになります ということでデータベースを圧縮(vacuum)します (下の方の最適化も可能ですが、私の環境ではほぼ変化なしでした) ※sql文を保存するか聞いてきますが破棄でよいです(さっきの PRAGMA文のコト) しばらくして(DBサイズやストレージの速度によります)、データベースを圧縮 ウィンドウが閉じられれば完了 私の場合、ファイルサイズが 2,956,070,912(2.9GB) → 610,885,632(610MB) となりました 結果、Evernote10 は、なんとなく速くなったような... ...