金魚亭日常

読書,ガジェット,競技プログラミング

XPS13 9350 の SSD を交換

延命策第二弾ということで,SSD を交換しました.

もともと入っているものは,東芝のやつらしいです.

www.ark-pc.co.jp

交換先は,M.2 2280 の M タイプ ということで,Samsung 970 Evo Plus の 500GB を選びました.

SSD をクローン

外付けケースに装着してクローンします.

ケースは玄人志向の GWM.2NVMe-U3.1AC にしました.

Samsung の移行ツールはSSDSamsung のものだと認識されていないらしく,使えませんでした.

なので,今回は Ease US ToDo Backup のフリー版を使いました.

2回ぐらいクローンに失敗したので,再起動後に SSDに最適化 のオプションを指定せずにやると成功しました. 所要時間は30分ぐらいでした.

クローンしたSSDから起動

USBから起動するオプションがないので,まずは追加します. 下の記事はDVDドライブの場合ですが,USBの場合も同様に追加できます(File System List は USB と書いてるのを選ぶ)

www.dell.com

追加する起動できるようになりました. 無事に起動したので,交換作業に移ります.

SSD を交換

バッテリを交換したときと同様に,裏蓋を外し,SSDを交換します. 一度外しているので裏蓋はすぐに外れました.

起動,パーティションを拡張

交換後起動してみたら,未割当領域があったので,これをCドライブに統合します. Windows の機能からだと隣接した領域じゃないと拡張できなかったので, Ease US Partition Manager をつかって拡張しました.

よくわからないパーティションがあるのですが,とりあえず放置としました.

Samsung のツールはベンチマーク以外は対応外で使えなくて謎…

2019年10月 に読んだ本

ついに出た十二国記新刊

白銀の墟 玄の月 1巻,2巻

白銀の墟 玄の月 第一巻 十二国記 (新潮文庫)

白銀の墟 玄の月 第一巻 十二国記 (新潮文庫)

白銀の墟 玄の月 第二巻 十二国記 (新潮文庫)

白銀の墟 玄の月 第二巻 十二国記 (新潮文庫)

読み直さないとなー,と思いつつも読み直していないのであった.

いろいろ世界観とかがおぼろげで,魔術とかそういうのはありだったっけ,とか考えてしまった.

一息に全部読んだが,完全に途中で終わっているので,来月に4冊買うのがよかったのではないか,とも思った.

XPS13 9350 のバッテリを交換

3年ぐらい使って,Maz capacity が30%ぐらいしかない状態なので,一念発起して交換しました.

交換前は節約モードで3時間ぐらいだったのが,交換後は余裕で6時間はもつようになりました.

バッテリの入手

Dell のサポートに連絡します. どこでもいいと思いますが,今回はテクニカルサポートにお問い合わせをしました. すぐにメールで返事が返ってきて,指示されたとおりにシステムテストをしました. 結果は,バッテリが劣化していますがこのまま使いますか,みたいなエラーが出ていて,それを伝えると見積書が発行されました. 価格は,正規品のバッテリーを扱っている店の値段に往復送料と部品回収費を足したぐらいでした.

注文は電話で,メールにある番号に電話すると,そのまま購入できます. 支払いは振り込みかクレジットカードです. ちなみに,クレジットカードを選択した場合,カード番号・期限・セキュリティ番号を電話で伝えます.

1週間ぐらいでバッテリが届きました.

バッテリの交換

Dell のマニュアルと,iFixit のマニュアルを参考に交換しました.

www.dell.com

jp.ifixit.com

裏蓋を外すとこと,バッテリケーブルを外すとこが難関でした. あと,ネジを一つだめにしてしまい,バッテリを回してネジを外すということをするしかなくなって大変でした.

一応,作業前には回復ドライブを作り,ホームディレクトリ以下をバックアップしました. ちなみに,回復ドライブは,スリープを無効にして,デバイスマネージャーから省電力設定を無効にしないと失敗します.

交換したバッテリの回収

部品を受け取ってから2日後ぐらいに回収業者がやってくるので渡します. サポートに電話するといつ来るのか教えてくれます. 日付指定もできるらしいんですが,うまく伝わってなくて,日付指定前の人と指定後の人が二人回収に現れてしまいました.

道具類

iFixit のツール

2019年9月 に読んだ本

8月はマンガすら読んでなかった

めしにしましょう (8)

めしにしましょう(8) (イブニングKC)

めしにしましょう(8) (イブニングKC)

魔法使いの嫁 (12)

もののがたり (10)

もののがたり 10 (ヤングジャンプコミックス)

もののがたり 10 (ヤングジャンプコミックス)

ダンジョン飯 (8)

ダンジョン飯 8巻 (ハルタコミックス)

ダンジョン飯 8巻 (ハルタコミックス)

Imagemagick でハーフサイズの写真をいい感じに分割する

こういうやつを,

元画像

まず左右に分割して,

magick '*.jpg' -quality 100 -compress Lossless -crop 2x1@ +repage separated_%03d.jpg
分割後

分割したやつの片側(分割前に真ん中だった部分)を消す

  • -gravity West で左,East で右
  • -fuzz は同色判定の許容範囲
  • 今回はやらなかったが,本当は偶数奇数で分けて処理するのが良い
  • そもそもきちんとしたカメラならこの操作はいらないかもしれない
magick 'separated_%03d.jpg[0-55]' -gravity West -fuzz 20% -trim +repage trimmed_%03d.jpg

あとは個別に fuzz の値を増やすか,

magick separated.jpg -gravity West -fuzz 50% -trim +repage trimmed.jpg

最終手段として,何ピクセル削るかを決め打ちでやる

magick separated.jpg -gravity West -chop 30x0 trimmed.jpg
トリム後

仕上げに,Exif のサムネイルを更新した方がいいが,今回はやらなかった.

ARC#001 B. リモコン

chokudaiさんが毎日一問問題を選んでくれる #chokudai今日の一問

4日目は

ARC#001 B. リモコン

解答. 前回はRubyで解いていた.

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <sstream>
#include <string>

using namespace std;

static int A, B;
typedef pair<int, int> P;

int bfs() {
  queue<P> que;
  que.push(P(A, 0));
  P p;
  while (!que.empty()) {
    p = que.front();
    que.pop();
    if (p.first == B) {
      break;
    }
    for (int d : {-1, 1, -5, 5, -10, 10}) {
      if (abs(p.first + d - B) < abs(p.first - B)) {
        que.push(P(p.first + d, p.second + 1));
      }
    }
  }
  return p.second;
}

void solve() { cout << bfs() << endl; }

int main() {
  cin >> A >> B;
  solve();
  return 0;
}

https://atcoder.jp/contests/arc001/submissions/7087376

ABC#112 C. Pyramid

#chokudai今日の一問

3日目は,

ABC#112 C. Pyramid

C - Pyramid

X, Y が 0から100までなので,全探索すればよさそう.

hi が全部0のときが注意,なのか? とか思ったけど,解説読むとそれはないのか.

とりあえず,hi が 0ではない組をどれか選んでおいて,そこを基準にする,という感じ.

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <sstream>
#include <string>

using namespace std;

static int N;
static vector<int> X;
static vector<int> Y;
static vector<long long> H;

void solve(int x0, int y0, long long h0) {
  for (int cx = 0; cx <= 100; cx++) {
    for (int cy = 0; cy <= 100; cy++) {
      long long ch = h0 + abs(x0 - cx) + abs(y0 - cy);
      bool flag = true;
      for (int i = 0; i < N; i++) {
        long long temp = ch - (abs(X[i] - cx) + abs(Y[i] - cy));
        if (temp < 0) {
          temp = 0;
        }
        if (temp != H[i]) {
          flag = false;
          break;
        }
      }
      if (flag) {
        printf("%d %d %lld\n", cx, cy, ch);
        return;
      }
    }
  }
}

int main() {
  cin >> N;
  X.resize(N);
  Y.resize(N);
  H.resize(N);
  int x0 = 0;
  int y0 = 0;
  long long h0 = 0;
  for (int i = 0; i < N; i++) {
    int x, y;
    long long h;
    cin >> x >> y >> h;
    X[i] = x;
    Y[i] = y;
    H[i] = h;
    if (h > 0) {
      x0 = x;
      y0 = y;
      h0 = h;
    }
  }
  solve(x0, y0, h0);
  return 0;
}

https://atcoder.jp/contests/abc112/submissions/7088885