GitHub Pages はじめました

Web のお勉強もかねて、静的サイトを作った。理由とかはこのページに少し書いた。

まだ最低限のページ達とサイト内検索機能だけだけど、ブログページも作ったので、もうこっちのブログを使うことはないと思う。(概要付きリンクとかは便利だからこっちを使うかも。)

管理者権限が無い場所での環境構築 [GCC, Emacs, Python3]

Linux (CentOS) を想定しているが、たぶん UNIX 系ならほとんど変わらないはず(管理者権限の無い Mac というのも珍しいだろうが)。

インストール先 (/usr/local に対応するもの) はここでは $HOME/.local としている。

make -jResource temporarily unavailable エラーが出たら make -j8 のように並列数を明示する。

0. Autotools

wget https://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar xzvf autoconf-latest.tar.gz
cd autoconf-2.69
./configure --prefix=$HOME/.local
make -j && make check && make install -j
cd ..
wget https://ftp.gnu.org/gnu/automake/automake-1.16.tar.gz
tar xzvf automake-1.16.tar.gz
cd automake-1.16
./configure --prefix=$HOME/.local
make -j && make check && make install -j
cd ..
wget http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz
tar xzvf libtool-2.4.6.tar.gz
cd libtool-2.4.6
 ./configure --prefix=$HOME/.local
make -j && make check && make install -j
cd ..

1. GCC

何はともあれ GCC (?)。こいつを最初に入れておくとライブラリパスとかをさっさと移動できて便利。

まずは最初から与えられているライブラリパス等の呪縛から逃れる。これをしないと各種コンパイル中に様々なエラーが出る可能性が高い。

unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH LDFLAGS CFLAGS CPPFLAGS

次に ミラーサイト から GCC @ /software/gcc/releases および GCCコンパイルに必要な GMP, MPFR, MPC @ /software/gcc/infrastructure と、同じく必要な ELF @ http://www.mr511.de/software/ をダウンロードしてくる。

wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.4.0/gcc-7.4.0.tar.gz
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/gmp-6.1.0.tar.bz2
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/mpfr-3.1.4.tar.bz2
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/mpc-1.0.3.tar.gz
wget http://www.mr511.de/software/libelf-0.8.13.tar.gz

そしてこれらを依存関係順にインストールしていく。

bunzip2 gmp-6.1.0.tar.bz2
tar xvf gmp-6.1.0.tar
cd gmp-6.1.0
./configure --prefix=$HOME/.local --disable-shared --enable-static
make -j && make check -j && make install -j
cd ..
bunzip2 mpfr-3.1.4.tar.bz2
tar xvf mpfr-3.1.4.tar
cd mpfr-3.1.4
./configure --prefix=$HOME/.local --disable-shared --enable-static --with-gmp=$HOME/.local
make -j && make check -j && make install -j
cd ..
tar xzvf mpc-1.0.3.tar.gz
cd mpc-1.0.3
./configure --prefix=$HOME/.local --disable-shared --enable-static --with-gmp=$HOME/.local --with-mpfr=$HOME/.local
make -j && make check -j && make install -j
cd ..
tar xzvf libelf-0.8.13.tar.gz
cd libelf-0.8.13
./configure --prefix=$HOME/.local --disable-shared --enable-static
make -j && make check -j && make install -j
cd ..
tar xzvf gcc-7.4.0.tar.gz
cd gcc-7.4.0
mkdir build
cd build
../configure --prefix=$HOME/.local --enable-languages=c,c++ --disable-bootstrap --disable-multilib --with-gmp=$HOME/.local --with-mpfr=$HOME/.local --with-mpc=$HOME/.local --with-libelf=$HOME/.local
make -j && make check -k -j && make install -j

GCCmake check で出てくる autogen: Command not found というエラーは無視しても大丈夫(そのために -k オプションがついている)。これを解決しようとすると Autogen のための Guile のための libunistring と bdw-gc と、、、となり非常に厄介。

stackoverflow.com

インストールが終わったら $HOME/.bash_profile の末尾に以下を記述して新しいパスを通す。$PATH だけは元のパスも残しておかないといけない。他に使いたいライブラリやヘッダがあればそれらも追加する。最初の unset ....bash_profile の先頭に書いておいてよいかもしれない。

# Write in $HOME/.bash_profile

export PATH="$HOME/.local/bin:$PATH"
export LD_LIBRARY_PATH="$HOME/.local/lib/:$HOME/.local/lib64"
export LD_RUN_PATH="$HOME/.local/lib/:/$HOME/.local/lib64"
export C_INCLUDE_PATH="$HOME/.local/include"
export CPLUS_INCLUDE_PATH="$HOME/.local/include"
source $HOME/.bash_profile

2. Python3

OpenSSL @ https://www.openssl.org/source/sqlite @ https://www.sqlite.org/download.html と libffi @ https://sourceware.org/libffi/ をインストールしておく必要がある。

wget https://www.openssl.org/source/openssl-1.1.0j.tar.gz
tar xzvf openssl-1.1.0j.tar.gz
cd openssl-1.1.0j
./config --prefix=$HOME/.local
make -j8 && make install -j
cd ..
wget https://www.sqlite.org/2019/sqlite-autoconf-3270100.tar.gz
tar xzvf sqlite-autoconf-3270100.tar.gz
cd sqlite-autoconf-3270100
./configure --prefix=$HOME/.local
make -j && make install -j
cd ..
wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz
tar xzvf libffi-3.2.1.tar.gz
cd libffi-3.2.1
./configure --prefix=$HOME/.local
make -j && make check -j && make install -j
cd ..

Python は一般的なダウンロードリンクではなく cpython @ https://github.com/python/cpython を使う。OpenSSL をデフォルトパス以外にインストールした場合は特に環境変数の指定に気をつけなければならない。

git clone -b 3.7 https://github.com/python/cpython
cd cpython
export LDFLAGS="-L$HOME/.local/lib/ -L/$HOME/.local/lib64/"
export LD_LIBRARY_PATH="$HOME/.local/lib/:$HOME/.local/lib64/"
export CPPFLAGS="-I$HOME/.local/include -I$HOME/.local/include/openssl"
./configure --prefix=$HOME/.local
make -j && make install -j

元からある python バイナリを変えずにインストールしたい場合は make altinstall を使う。

superuser.com

終わったら python, pip コマンドを Python3 に変えておく。alias で済ませるよりもちゃんとシンボリックリンクを作る方が良い。

cd $HOME/.local/bin
ln -sf python3 python

3. Emacs

ImageMagick @ https://imagemagick.org/script/install-source.php が必要。liblcms2 とかも求められたら適宜入れる。

wget https://imagemagick.org/download/ImageMagick.tar.gz
tar xvzf ImageMagick.tar.gz
cd ImageMagick-7.0.8-28
./configure --prefix=$HOME/.local
make -j && make check -j && make install -j
cd ..
git clone -b emacs -26 https://github.com/emacs-mirror/emacs
cd emacs
./autogen.sh
./configure --prefix=$HOME/.local --with-gif=no --with-gnutls=no
make -j8 && make check -j && make install -j

終わったら Emacs 起動時にウィンドウを開かないようにコマンドを変えておく。

# Write in $HOME/.bash_profile

alias emacs='emacs -nw'

4. Emacs の init.el

まずは外見に関するパラメタを変更する。

(custom-set-faces
 '(default ((t (:background "black" :foreground "#55FF55"))))
 '(cursor ((((class color) (background dark)) (:background "#00AA00")) (((class color) (background light)) (:background "#999999")) (t nil))))

(setq inhibit-startup-message t)
(setq make-backup-files nil)
(setq auto-save-default nil)
(setq auto-save-list-file-name nil)
(setq auto-save-list-file-prefix nil)
(show-paren-mode 1)
(setq show-paren-style 'mixed)
(set-face-background 'show-paren-match "grey")
(set-face-foreground 'show-paren-match "black")
(setq cursor-in-non-selected-windows nil)
(global-font-lock-mode t)
(column-number-mode t)
(line-number-mode t)
(setq fill-column 80)
(setq-default auto-fill-mode t)
(setq default-tab-width 4)
(setq scroll-step 1)
(setq backup-inhibited t)
(setq-default tab-width 4 indent-tabs-mode nil)
(define-coding-system-alias 'UTF-8 'utf-8)
(global-set-key "\M-n" (lambda () (interactive) (scroll-up 1)))
(global-set-key "\M-p" (lambda () (interactive) (scroll-down 1)))

次に MELPA を基本的に https://melpa.org/#/getting-started に従いインストールする。具体的には、以下を init.el に追記し(た後開き直し?)てから M-x package-refresh-contents を実行する。

環境によっては https://melpa.org/packages/ だと通信できないことがあるので http にしてある。

;; MELPA
(require 'package)
(add-to-list 'package-archives
             '("melpa" . "http://melpa.org/packages/") t)
(package-initialize)

あとは好きなパッケージを M-x package-install RET <package_name> もしくは M-x list-packages RET -> I -> X でインストールしていく。(GNU が提供するものは後者でないとインストールできない?)

4-1. company

;; company
(global-company-mode)
(setq company-idle-delay 0)
(setq company-minimum-prefix-length 2)
(setq company-selection-wrap-around t)

4-2. company-jedi

;; company-jedi
(defun my/python-mode-hook ()
  (add-to-list 'company-backends 'company-jedi))
(add-hook 'python-mode-hook 'my/python-mode-hook)

4-3. flymake

  • M-x list-packages RET -> C-s flymake -> I -> X でインストール
  • flymake を C, C++ で使う場合は init.el に以下を追記
(require 'flymake)
(defun flymake-cc-init ()
  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
         (local-file  (file-relative-name
                       temp-file
                       (file-name-directory buffer-file-name))))
    (list "g++" (list "-std=c++11" "-Wall" "-Wextra" "-fsyntax-only" local-file))))
(push '("\\.cpp$" flymake-cc-init) flymake-allowed-file-name-masks)
(push '("\\.cc$" flymake-cc-init) flymake-allowed-file-name-masks)
(push '("\\.h$" flymake-cc-init) flymake-allowed-file-name-masks)
(push '("\\.hpp$" flymake-cc-init) flymake-allowed-file-name-masks)
(add-hook 'c++-mode-hook
          '(lambda ()
             (flymake-mode t)))
(defun flymake-c-init ()
  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
          (local-file (file-relative-name
                       temp-file
                       (file-name-directory buffer-file-name))))
    (list "gcc" (list "-std=c99" "-Wall" "-Wextra" "-Wno-trigraphs" "-fsyntax-only" local-file))))
(push '("\\.c$" flymake-c-init) flymake-allowed-file-name-masks)
(add-hook 'c-mode-hook
          '(lambda ()
             (flymake-mode t)))

;; change indent size
(add-hook 'c-mode-common-hook
          '(lambda ()
             (c-set-style "k&r")
             (setq c-basic-offset 4)
             (setq indent-tabs-mode 4)
             (setq tab-width 4)))

4-4. flymake-python-pyflakes

  • pyflakesシンタックスチェッカーとして flymake を Python で使う
  • あらかじめ $ pip install pyflakes しておく
  • M-x package-install RET flymake-python-pyflakes でインストール
  • init.el に以下を追記
(add-hook 'python-mode-hook 'flymake-python-pyflakes-load)

4-5. flymake-cursor

cd $HOME/.emacs.d/elpa
git clone https://github.com/akash-akya/emacs-flymake-cursor
cd emacs-flymake-cursor
  • flymake-cursor.el 中の (format "compile error, problem on line %s" msg) だと minibuffer の表示が無駄に長いので、 (format msg) に編集しておく
  • 以下を init.el に記述
;; Need for Emacs >= 26 to show messages in minibuffer
(add-to-list 'load-path "~/.emacs.d/elpa/emacs-flymake-cursor")
(require 'flymake-cursor)
(custom-set-variables
 '(flymake-cursor-error-display-delay 0)
 '(flymake-cursor-number-of-errors-to-display 5)
 '(help-at-pt-display-when-idle '(flymake-overlay)))

ローカルにインストールしたバイナリ・ライブラリにどうパスを通すか

ある /program/path/ ディレクトリで誰かのプログラムをコンパイル・ビルドした(つまり、直下に bin/lib/include が作成されている)とする。

このパスをグローバルに通すと言うと、おそらく .bash_profile (もしくは .bashrc) に次のように記述するのが一般的ではないだろうか。

export PATH=/program/path/bin:"$PATH"
export LD_LIBRARY_PATH=/program/path/lib:"$LD_LIBRARY_PATH"

あるいは(パスを通すとは少し違うが)、すでにパスが通っているディレクトリにコピーまたはリンクを貼ることもあるだろうか。

$ cp /program/path/bin/* /usr/local/bin/
$ cp /program/path/lib/* /usr/local/lib/

しかし、上のようなやり方では(少なくとも自分にとっては)以下のような不満があった。

  1. export だとインストールしたプログラムが増えると $PATH の中身も肥大化してしまう。また、ディレクトリを移動させた場合に対応できない。
  2. コピーだと実体と切り離されるため、例えば元のソースコードやインストール時のオプションが分からなくなってしまう。リンクだと頑張れば辿れるが、元のディレクトリからはどこにリンクが貼られたか分からないし、export と同じくディレクトリ移動に対応できない。

ところが最近ふと「virtualenv を使えば良いのでは?」と思った。つまり、

$ virtualenv /program/path

でビルドしたディレクトリ自体を1つの virtualenv にしてやって、プログラムを使いたい時は

$ source /program/path/bin/activate

でパスを通す。このやり方のメリットは、

  1. 何をどうやってインストールしたか実体が分かりやすい
  2. ディレクトリを移動しても使える
  3. 環境変数が汚染されない

などがある。しかし当然デメリットもあって、一度に1つの virtualenv にしか入れないため、

  1. ディレクトリ構成が virtualenv と親和性の良いもの(=bin/, lib/, include/ など)でなければならない
  2. 依存関係があるプログラム群は1つのディレクトリにまとめてインストールしなければならない(複数の virtualenv に同時に入ることはできないため)
  3. (2. と関連して) プログラム・ライブラリの再利用性が低い

などがある。1. と 2. はまあ自分でインストール時に調整すれば良いとしても、3. はどうしようもない。

これを解決するには、

汎用性の高い(=依存先が多いと思われる)プログラムやライブラリは従来通り export やコピーで対応して、そうでないほとんど独立したプログラム(群)は virtualenv で1つの環境として切り離す、

もしくは、

妥協して1つの"マスタールートディレクトリ"を作り(例えば ~/software/)、プログラムのディレクトリは全てその下に(~/software/softwareA/)配置して、インストール先は ~/software/bin/ にして、~/software ディレクトリだけを virtualenv 化する、

とかだろうか。後者だともはや従来のコピー手法とほとんど変わらないように思う。。

pythonのmultiprocessingでクラスメソッドを並列実行しようとしてはいけない

大災厄がもたらされるであろう(訳:並列化されないうえ、クラスをシリアライズしているためかすごく遅い)。

setuptoolsでレポジトリ指定のパッケージがインストールできない

具体的な状況は、

  1. 自前のpythonパッケージhogeGitHubのレポジトリに作っていて、それに依存する別のパッケージを作りたい
  2. 以下のようなsetup.cfgを書いた
install_requires =
  hoge==0.0.1
dependency_links =
  git+ssh://git@github.com/username/hoge.git#egg=hoge

このとき、$ python setup.py installを実行すると、setuptoolsはdependency_links に書いた自前のGitHubレポジトリではなく、PyPIhogeパッケージを探しに行ってしまう。PyPIに登録していない場合は当然エラーとなる。

原因はinstall_requiresではバージョン指定しているのに、dependency_linksではバージョン指定していないこと。

install_requires =
  hoge
dependency_links =
  git+ssh://git@github.com/username/hoge.git#egg=hoge

のように前者のバージョン指定を消すか、

install_requires =
  hoge==0.0.1
dependency_links =
  git+ssh://git@github.com/username/hoge.git#egg=hoge-0.0.1

のように後者のバージョン指定を与えると、正しくGitHubレポジトリを探しにいくようになる。

自作ゲーミングPC(+周辺)構成

プライムデーの安売りもあって。コンセプトは中級AMDマシン(Ryzen+Radeon)的な。

この構成にあたって↓の記事を大いに参考にさせてもらいました。感謝。

chimolog.co

0. モニター(ディスプレイ)

そもそも今回の事の発端(?)というか一番最初に選んだのがモニターだったこともあり、個人的にPC選びにも重要な役割を果たすと思うので記載。

今回の基準というかフィルターの条件(価格以外)は最終的に

  • 24 or 24.5インチ
  • リフレッシュレート144Hz (+それに自明で付随する応答速度~1msやDisplayPort)
  • FreeSyncあり

で、プライムデーのセール価格(23,840円)が後押ししてAcerの↓にした。

(実は最初は特にAMDマシンにするつもりは無かったので、FreeSyncは後付けというか、「FreeSyncありのモニターにしたからRadeonを選んだ」というのが正しい)

最後まで残った対抗馬はBenQの↓だった(FreeSyncなし)。ちょうど30,000円くらい。

上の条件を満たすものは他にASUSの↓とかもあったがちょっと高かった。これは40,000円ちょい。

今回はグラボがハイエンドではないこともあって144Hzのモニターにしたが、いつかは240Hzにも手を出したい。

1. CPU

候補は第二世代Ryzen

で、無印とXの価格差(どちらも~5000円)は比較的小さいかったので、まずは無印を候補から消した。今回求めているのはハイエンドモデルではないので、2600Xを採用↓。プライムデー10%引きで22,723円。

AMD CPU Ryzen 5 2600X with Wraith Spire cooler YD260XBCAFBOX

AMD CPU Ryzen 5 2600X with Wraith Spire cooler YD260XBCAFBOX

2. CPUクーラー

どうやらRyzen CPUの付属クーラーはオーバークロックしなければ実用に十分耐えうる性能らしく、今回はそれを信じることにする。のでコスト0円。

3. RAM (メモリ)

条件は

  • DDR4
  • 16GB (8GB x2)
  • クロック数~2000MHz以上(Ryzenはクロック数の高いRAMと相性が良いらしい)

で、ちょうど安売りしていたTeamの↓を購入。価格はプライムデーセール込みでたしか16,000円ちょい。高い。一番安かった頃は6,000円くらいまでいっていたみたいなので、プラス約10,000円で買ったことになる。緩やかに下がってきている感じもするので半年後くらいには落ち着いているかもしれないが、6,000円は当分無理だろう。

4. マザーボード

必須のAMD X470チップセット搭載のもののうちMSIのやつ↓を選択。これは割引無しで、16,178円。

これに付いているRealtek製のLANの品質がとても悪いという評判がネットのそこかしこで散見されるが、最近はマシになってきたとのことで採用。

(仕様詳細: https://jp.msi.com/Motherboard/X470-GAMING-PRO/Specification)

ちなみに↑は2018年7月7日発売なのだが、実は2018年4月19日発売(第二世代Ryzenと同じ)の↓と完全に同じ仕様。価格も現在の市場価格ではほぼ同じ。デザインが少しだけ違うのと、ひょっとしたら微妙な最適化が施されているのかも?せっかくなら新しいものを、ということで↑にした。

(仕様詳細: https://jp.msi.com/Motherboard/X470-GAMING-PLUS/Specification)

対抗馬はASRockの↓。価格は少しだけ高めの~19,000円だが、Intel製LANなどを求めるならこちらか。規格的にはこちらだけNVIDIA SLIに対応している(AMD CrossFireはどちらも対応)が、今回はAMDマシンだし、GPU二枚ほどのスペックを求めていないので実質同等か。

ASRock AMD X470チップセット搭載 ATXマザーボード X470 MASTER SLI

ASRock AMD X470チップセット搭載 ATXマザーボード X470 MASTER SLI

(仕様詳細: https://www.asrock.com/MB/AMD/X470%20Master%20SLI/index.jp.asp#Specification)

なおオーディオはいずれもRealtek ALC892 Codecで7.1ch HDにも対応しているので、とりあえずサウンドカードは買わない。

5. GPU (グラフィックスカード)

コスパが良いと言われているNVIDIA GeForce GTX 1060とよく並べられるAMD Radeon RX 580を採用。問題はメーカーだが、今回は主に価格の観点からASUSにした。セール無し34,800円。マイニング特需も終わり、これからもう少し下がるかも?

ASUS  AMD RX580搭載ビデオカード  DUAL-RX580-O8G

ASUS AMD RX580搭載ビデオカード DUAL-RX580-O8G

...と思ったのだが、もう少しだけ値段が下がるのを待っているうちに逆に値上がりしてしまったので(FXなんて向いてないことを再確認できた)、代わりにPowerColorの↓を選択。33,758円。正直DEVILの文字は好きになれないが、調べてみると冷却性能がかなり優秀みたいでだいぶ良さげだったので好印象。ただし占有拡張スロットの違い(↑2、↓3)や出力端子の違い(↑DisplayPort x2, HDMI2.0 x2, DVI-D x1、↓DisplayPort x3, HDMI2.0 x1, DVI-D x1)に注意。今回採用したケースだと(たぶん)2スロット分までのカードなら縦置き設置できるみたいなので、外見を気にする場合は調整する。

PowerColor ビデオカード AMD RADEON RX580搭載 AXRX580 8GBD5-3DHG/OC

PowerColor ビデオカード AMD RADEON RX580搭載 AXRX580 8GBD5-3DHG/OC

15インチMacBook Proを2台持っているので、外付けGPUがもっと安くなればParallelsとか使ってゲーミングMacにするのもありかも...とか一瞬思ったが、Macはリフレッシュレート60Hzだし、そもそも仮想マシン上で重いゲーム動かせるのか非常に怪しそう。

6. SSD

PS4換装のレビューがすごく多いCrucialの500GBにした↓。条件は

で、プライムデーセール込みで~11,000円と比較的有名なメーカーのうちでは最安かと。

7. 電源

電源は大事、とのことで80PLUS GOLDのものにした。容量は迷ったが、先にメーカーを比較的評判の高いCyonicに決めて、その中から十分足りるであろう650Wを選んだ↓。セール無し9,448円。

Cyonic PC電源 80PLUS GOLD プラグイン 650W ATX電源 5年保証 AU-650X

Cyonic PC電源 80PLUS GOLD プラグイン 650W ATX電源 5年保証 AU-650X

8. ケース

優柔不断なので好みによるところが大きいPCケースもかなり悩んだ。ミドルタワーにすることはすぐに決めたが、その後YouTubeやレビューサイトを見て回り、最終的にThermaltakeの↓にした。セール無し8,617円。

対抗馬はCoolerMasterの↓。価格は少し高い~12,000円。ベストセラーではあるものの発売年が2013年と古く、せっかくだから新しいものを選ぼうと思い今回はやめておいた。

ちなみにアマゾンでベストセラー1位だったThermaltakeの↓も4,300円と非常に安く候補に上がっていたが、YouTubeで動画を見て「横のアクリル板の隙間からホコリ入りまくりじゃない?」としか思えなくなってやめた(真偽のほどは分からない)。

なお光学ドライブを付けたい場合は5.25インチベイの有無を確認が必要。上記3つのうち今回買わなかった下2つには付いているが、一番上の買ったやつには付いていない。実は最初のうちは欲しいと思っていたが、最近のトレンドではないことを知ってまあいいかと思うようになった。必要になったら外付けを買うと思う。

9. OS

定番の。プライムデー価格で~11,000円。

各所で売ってる謎の激安版は怖くて手を出さなかった。正当な技術には正当な対価をということで。

(番外) キーボード、マウス、マウスパッド、ヘッドセット

【国内正規品】SteelSeries QCK heavy マウスパッド 63008

【国内正規品】SteelSeries QCK heavy マウスパッド 63008

上から9,396円、4,761円、3,182円、12,697円(購入時)。キーボードは正直見ただけでは分からないので、各自実際に触って確かめるしかないのではと。個人的に昔からずっとノートPCのペタペタしたキーボードばかり触ってきたので、ストロークは浅めの方が好きだったりする。

お値段合計

PC本体(OS込み) ~128,000円

モニター ~24,000円

キーボード、マウス、マウスパッド、ヘッドセット ~30,000円

合計 ~182,000円

周辺機器はともかく、本体のパーツであとケチれるのはケースとせいぜいRAMとギリギリCPUくらい、という気分。RAMが高すぎるのが悪い。

引っ越し

これまで何回か引っ越しをしてきて分かってきた、引っ越し料金について。

  1. 引っ越し(見積もり)料金は最低限度価格みたいなものは決まってはいる(教えてはくれない)が、基本的に言い値(!)。紹介で「XX%オフ」 みたいなことを言ってても結局そんなの関係ない。だって言い値だもの。

  2. 料金は基本的に必要なトラックの台数およびその中身を占める面積(1/5ごとに等、段階的に上がっていく)で決まる。そしてその面積は基本的に家具の種類と数だけで決まる。つまり、このとき段ボールの数はほとんど関係ない(!)。なぜなら段ボールは高効率に積み込めるから。

これらを踏まえた対策(?)としては、

  1. 見積もりする前に相場を知っておく(業者によっては最初に相場の倍とか普通にふっかけてくる)。もしくは見積もりする業者を増やせば増やすほど(正確には見積もりの際に「すでにX社に見積もってもらっている」とか言うと)基本的に値段は下がっていく。ただし単身1Kとかでもない限り最近は家まで上がり込んでくる見積もり方法が多いので、何社も見積もりを頼むと一日潰れることもあるため注意。一回やったが交渉も各社ごとにしないといけないし精神的に疲れる。

  2. 分解して段ボールに梱包できるような小型家具(小さな机や椅子、ステンレスラックなど)は分解しておいて、「段ボールに入れる」と伝える(もしくは入れておく)。ただしこれが効くのは限られた条件下のみ(規定量をギリギリ超えてるとか)なので、特に他の大型家具がたくさんある場合などはあまり期待できないかもしれない。もしくは見積もり後から「これ分解するんで〜」とか言って値下げ交渉の材料に使うのもありかもしれない。