ThinkPad X250 SSD換装

このページ をみながらやった.

裏蓋を開けるのが大変だと書いてあったが,わりとスムーズにいった.
工具等不要で,素手で開けることができた.
個体差があるのだろう.

起動するところで手間取った.Acronis True Image 2016 で,起動ディスクを作っており,それでブートし,
HDDのバックアップから復元しようとしたのだが,復元先リストにSSDが出てこない.

どうも,「ツールとユーティリティ」にある「ディスクの追加」で,SSDを追加する必要がある模様.
その際にパーティションの作成を要求されるのだが,細かく指定しても後で上書きされてしまうので,
適当に1つ作っておけば良い.

なお,HDDのバックアップを作成するときには,パーティションごとのバックアップではなく,
コンピュータ全体をバックアップするのがよい.
そうすれば,パーティションやその属性も合わせて復元してくれる.ディスクサイズが異なる場合には,(使用量を見ながら?)
適当にパーティションサイズを決めてくれるようだ.

windows10へのアップグレード抑制,通知領域のアイコン表示抑制

マイクロソフト自身が情報を公開していた.要約すると以下のようになる.

アイコン表示の抑制

以下のレジストリを設定

  • キー : HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Gwx
  • 名前 : DisableGwx
  • 種類 : REG_DWORD
  • 値 : 1

コマンドの場合は,管理者権限で,
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Gwx /v "DisableGwx" /t REG_DWORD /d 00000001 /f
.詳細は
マイクロソフトの情報ページ
に.

アイコン表示の抑制

以下のレジストリを設定

  • キー : HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
  • 名前 : DisableOSUpgrade
  • 種類 : REG_DWORD
  • 値 : 1

コマンドの場合は,管理者権限で,
reg add HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate /v "DisableOSUpgrade" /t REG_DWORD /d 00000001 /f
.詳細は
マイクロソフトの情報ページ
に.

Cygwin で ghci

Haskell Platform for Windows をインストールした.
Cygwin で ghci は動いているように見えるのだが,Control-C を入力するとハングアップしてしまう.

winpty を使うととりあえず回避できる.インストール方法:

git clone https://github.com/rprichard/winpty.git
cd winpty
./configure
make
make install

これで,console というコマンドがインストールされるので,console ghci
とすればよい.

残念ながら,emacs の shell-mode では動かない模様

Algorithm::SVM の インストール

perl で SVMを使ってみようと思って,CPAN から Algorithm::SVM をインストールしようと
思ったら,コンパイルエラーになる. malloc の定義がない,とか.
検索してみると,次のようにすれば良いとあった.そのとおりにやったらできた.
どうも,gcc の下方非互換とか
そんな話らしい.

  1. ふつうにインストールしようとしてみる.コンパイルエラーで失敗
  2. cpan プロンプトで,look Algorithm::SVM とすると,サブシェルが開く.
  3. そのディレクトリにある bindings.h を このページにあるように編集
  4. サブシェルを抜ける
  5. clean Algorithm::SVM
  6. install Algorithm::SVM

perl PAR packager (ppコマンド) と Encode モジュール

Encode モジュールを使って書いた perl script を (Windows用に) executable にしようと思って pp コマンドを使ったのだが,うまく動かない.
さんざん悩んでなんとか動くようになったと思ってからウェブを調べてみると,
みんな同じところで苦労している.馬鹿みたいであった.
でも,ウェブには載っていない (ように見える) 話もあった.

pp は,script が動作するのに必要なライブラリファイルたちを集めてパッケージングし,
できあがったexecutableは,そのパッケージをほどいて実行する,という,まあ乱暴と言えば
乱暴なコンセプトで動いているらしい.
そのため,「必要なライブラリたち」をかき集めるのだが,Encode モジュールでは,
動的にrequire するようなことをしているので,漏れが起こりやすい,ということのようだ.

みんな口を揃えて言っているのが,script では必要なくても use Encode::JP;
やっておけ,ということ.
(これを読んでおけばもっとずっと早く終わったろうに…)

でも,今回の場合はそれだけではだめであった.utf8_heavy.pl というのがパッケージされず,
次のエラーになって動かない.

Can't locate utf8_heavy.pl in @INC (@INC contains: ...(略)...

この utf8_heavy.pl がパッケージに入らない,というトラブルは2010年頃にも報告されていて,
それは直ったそうなのだが,また違う場所なのだろう.
ともあれ,以下のコマンドを実行することで動作するものが作成できた.

pp -a "c:/pkg/strawberry/perl/lib/utf8_heavy.pl;lib/utf8_heavy.pl" -o foo.exe foo

moodle 課題のダウンロード

更新版あり (2018/02/22)

moodle で,全提出課題を zip ファイルでダウンロード (「すべての提出をダウンロード」) できるが,各提出者のファイル名に,氏名は入っているのだけれど,usernameが入っていない.download_submission 関数を次のように変更すれば入れられる:

--- locallib.php-orig   2016-10-22 11:16:13.891650622 +0900
+++ locallib.php        2016-10-22 11:42:00.129553030 +0900
@@ -2686,7 +2686,7 @@
                     $prefix = clean_filename($prefix . '_' . $this->get_uniqueid_for_user($userid) . '_');
                 } else {
                     $prefix = str_replace('_', ' ', $groupname . fullname($student));
-                    $prefix = clean_filename($prefix . '_' . $this->get_uniqueid_for_user($userid) . '_');
+                    $prefix = clean_filename($student->username . '_' . $prefix . '_' . $this->get_uniqueid_for_user($userid) . '_');
                 }

                 if ($submission) {

perl 改行コード 文字コード

perlの改行コードと文字コードの指定

Layer の crlf というものを使うと,print "\n" で,CR + LF を書いてくれる.
また,読む時には,CR + LF が "\n" になる.
読む時には都合の良いことに単なる LF も "\n" として読んでくれるようだ.

Layer は,並べて書けるらしい.
open(F, ">:crlf:encoding(shiftjis)", $file)
とか,
open(F, "<:crlf:encoding(shiftjis)", $file>
とか書ける.