コンピュータ

ドキュメントスキャナーと裁断機を購入

ついにスキャナーと裁断機を購入した。

ScanSnap IX500 と 裁断機 Durodex 200DX

スキャナーは定番のScanSnap IX500という機種。TWAINに対応していないとか,気に入らないところもあるのだが,総合的にはまあこれだろうな,ということで。裁断機は縦置きで保管できて場所を取らない(比較の問題ですが)ということで,Durodexの200DXにした。

来週になったら少し暇になるから,ホントの自炊(今までは業者に依頼していたので)を始めてみようかな。

Ubuntu 13.04 にインストールしたものメモ(1)

[備忘録]
以前、Ubuntuを使っていたときは、8.04とかそんな頃だったと思う。あちこち変わっているので、自分の為にメモ。

開発関係のプログラムをインストールするために、Synaptic Package Manager を使おうと思ったのだが、見当たらない。UbuntuソフトウェアセンターというMac App Storeみたいなものが入っていて、一般的なアプリはここからインストール出来るようになっている。そこで、まずは、Synaptic Package Manager を探してインストール。次に、Cairo-Dockをインストール。これはMacライクなドックを提供するもの。デフォルトのドックが画面左端にあるのだが、あまり使い易くない。これだったら、以前のメニュー形式の方がましだったなあと。ということで、Cairo-Dockなのであるが、OpenGLをオンにすると挙動が少しおかしい気がする。OpenGLはオフにして使うことにした。特に反応が遅いということもないし。

それから、定番のTeX 一式をTeX Liveで入れる。2012版だけど。Dropboxはちょっと迷ったのだが、TeX入れるのであれば、仕事するかもだから。EvernoteはUbuntu Software Center で探した限りではなかった。あと、チェスプログラムとか適当に。

  • Synaptic Package Manager (グラフィカルなパッケージ管理ツール)
  • GLX-Dock(Cairo-Dock with OpenGL)
  • TeX Live 2012
  • Dropbox
  • PyChess (チェス・プログラム)
  • Shutter (スクリーンショットを撮るアプリ)

ソフトウェアセンターを終了させて、Synapticを起動する。ここから以下をインストール。

  • build-essential (GNU C コンパイラーを始めとする基本ツール類。これがないと始まらない。)
  • opencv関係 (python-opencvを含めて)
  • asymptote (MetaPostを拡張した描画ソフト)
  • nkf (ネットワーク漢字コード変換フィルター)
  • p7zip (=7zip) (7-zip アーカイバーのUNIXコマンドラインへの移植版)

とりあえず今回はこんなところ。

UbuntuアップデートしたらWindowsが起動できなくなった話

まあ,何とか解決したから良かったんだけど。備忘録として記録。

DellにUbuntu 13.04をインストールしてから2週間くらいだろうか。システムのアップデートの通知が来たので,ハアと思いつつもアップデートしたら,再起動が必要ですと。再起動すると,あれ?ブートメニュー(Grub)が増えてる。いや,増えてると同時に,Windows7が消えてる!(笑)

まあ,最悪でもインストールDVDからWindows7を起動してシステムの初期化をすればいいのだが,それはできれば避けたい。ということで,あれこれ検索。Ubuntu Windows7 MBR 修復,あたりで検索すると,ms-sys というUbuntu (Linux) のツールが見つかった。LINUX上でMBR(マスターブートレコード)にWindows(互換?)のブートレコードを書き込めるツールらしい。

安定版のms-sys-2.2.1をダウンロードして解凍。サイトの指示に従って,make, sudo make install してインストール完了。使い方は ms-sys –help で分かる。分かるのだが,デバイス名が分からないので,再び検索。ターミナルで parted -l とすれば表示される。/dev/sda だったので,sudo ms-sys -7 /dev/sda とする。これで,Windows7用のブートローダーがMBRに書き込まれたらしい。

さて,Ubuntuを終了して,電源を入れる。おお!メニューの最後に Windows7(/dev/sda2) (正確にはちょっと文言が違うかもだけど) のように表示されて,Windows7が起動できた。

やれやれ。しかし,どうしてアップデートくらいでこんなことになっちゃうのかなあ。いや,原因はアップデートじゃないのかもだけど。

Dell Inspiron 14z 5423 に Ubuntu 13.04 をインストール

ちょっと手こずったので、メモ。

買ったばかりのWindowsマシンなのだが、せっかくなので(?) Ubuntu (Linuxの一種) をインストールすることにした。準備として既にハードディスクの領域を縮小させて、100GBほどを未使用領域にしていた。ここにUbuntuをインストールして、デュアル・ブートにしようというもの。

今回購入したのはWindows7がプレインストールされた機種なので、Windows8になってからのUEFIによるSecure Bootがらみのトラブルはなかった。その代わりというわけじゃないが、キャッシュ用32GBのmSATA SSDのRAIDによるトラブルを経験した。

まずは最新のUbuntu 13.04の日本語Remix版のISOファイルをダウンロード。Windows7では特別なプログラムを使わなくても、ISOファイルを右クリックすれば、ディスクに焼くというメニューが既にあるので、DVD-Rに焼く。このDVD-RからUbuntuを起動する。DVDから起動するには、F12を押しながら電源を入れればよい。

とりあえずUbuntuをお試しで使うというのを選択。無線LANもマウスも普通に使えた。そこで、インストールしようとするのだが、インストールの種類の選択肢がまったく出ずにブランクのまま。あれこれ調べると、どうも32GBのSSDとHDDがRAID0になっていて、それをUbuntuが認識できないらしい。

解決策は幾つかあるようだが、今回行ったのは、Windowsに戻ってIntel Smart Responce Technology (ISRT) というのをオフにすること。要するにRAIDを解除したわけだ。そうすると、普通にHDDが認識された。あとは手順通り。HDDのパーティションは、4Gほどをswap用にして、残りはext4でフォーマットしてマウント位置はルートの / に設定。あとはしばらく待つのみ。

再起動させると、ブートローダーのGrub2が起動。何もしないとUbuntuが起動する。これで、UbuntuとWindows7のデュアル・ブート環境が出来た。

さっそくUbuntu上のFirefoxでこれを書いているが、日本語の変換もまずまずだし、日本語と欧文の切り替えキーのカスタマイズなども自由にできて、快適である。

初めてのWindows PC

昨日、注文していたDellのノートPCが届いた。正確に言えば、初めて自分で自分用に買ったWindows PCということで、別にWindowsが初めてというわけでもない。それでも、Macとはあちこち違うので、戸惑うことが多い。とりあえず、今日の作業をメモ。

カメラロール-4062

カメラロール-4063

基本的に自宅用で持ち出す予定はないから、MacBook Airのように小型軽量でなくてもよいということで、14インチのInspiron 14z (Inspiron 5423) というのを選んだ。CPUはCeleronでも良かったのだが、欲が出て(?) Core i5 (と言ってもモバイル用の低電圧版だが) にした。OSはWindows7, メモリー4G, HDD 500GBと、ごく普通の構成。ちょっと変わっているのが、HDDのキャッシュとして32GのSSDがくっついているらしいこと。そのせいか、起動は速い。

カメラロール-4057

再インストール用OSのディスクは標準では付属しないので、オプションとして別途注文した。念には念をということでもないのだが、さらにリカバリー用のDVDを焼くことにした。これが最初の作業。けっこう時間が掛かる。

カメラロール-4073

続いて、約450GBほどを占めているCドライブを縮小した。100GBほど縮めて、未使用領域に。あとで Linux (Ubuntu) をインストールするつもりなので。それから、フリーソフトを幾つかインストール。何故かファイルの拡張子が表示されないので、少し調べて表示させるように変更。

タッチパッドの反応がいまひとつ、というのを除けば、とくに不満はない。Windowsのデザインは相変わらずで、いまいち洗練されてないという印象だが、まあ、そんなに悪くもない。

いずれにしても、用途限定のサブマシンなので、多少のことはいいのだ。

asymptoteで日本語TrueTypeフォントを使う

asymptoteでセプテンバーフォントを使おうとしたら,フォントが見つからないというエラーに遭遇した。あれこれ調べて,とりあえず解決したので,忘れないうちにメモ。

ログを見ると,latexはちゃんとdviファイルを生成している。これをdvipsが処理するのだが,ここで引っかかっていた。自分の環境では,問題点は2つあった。1つはdvipsが使うmapファイルで,もう1つはdvipsから呼び出されたGhostscriptがフォントを認識できないということ。

1つ目は,これは多分,自分だけの問題。TeX Live とかのパッケージじゃなくて,自分でちまちまビルドしてきたので,あちこち整合性が取れてなかったりしている可能性がある。特に,updmapあたりは以前にも問題生じたことあったし。今回,そこいらを一掃すべく,updmap (-sys) で生成された既存のmapファイルをすべて消去し,あらたに updmap-sys の方でmapを生成。それから,upTeX用のセプテンバーフォントの設定を,

r_up-sept-m-jis  UniJIS-UTF16-H  SeptM.ttf

とした。今まで

r_up-sept-m-jis  UniJIS-UTF16-H  :0:SeptM.ttf

としていたのだが,どうも :0: のせいで,dvips用Mapが生成されていなかった模様。

2つ目は,Ghostscriptがフォントを見つけられないという問題。使っているgsのバージョンは7.07.1なのであるが,どういう経緯でインストールしたものなのか記憶がない(汗)という状態。とりあえず,/usr/local/bin/ にgsはあり,設定ファイルなどは,/usr/local/share/ghostscript/7.07/lib/ 以下にあるようだった。ここに,CIDFnmapなるファイルがあって,ここに記載されているCIDフォントをgsは認識できる仕組みらしかった。

CIDFnmapをエディターで開いてみると,

(CIDFnmap.OSX) .runlibfile 

というような記述があり,ここから更に CIDFnmap.OSX を読んでいた。そこで,この CIDFnmap.OSX を開いてみると,次のような感じでフォントを読み込む設定が書かれている。

% Adobe-Japan1
%
%/MS-Gothic              (/usr/local/share/ghostscript/Resource/CIDFont/msgothic.ttf)        ;
%/MS-PGothic             (/usr/local/share/ghostscript/Resource/CIDFont/mspgothic.ttf)       ;
%/MS-Mincho              (/usr/local/share/ghostscript/Resource/CIDFont/msmincho.ttf)        ;
%/MS-PMincho             (/usr/local/share/ghostscript/Resource/CIDFont/mspmincho.ttf)       ;
/HiraKakuPro-W3         (/usr/local/share/ghostscript/Resource/CIDFont/HiraKakuPro-W3.otf)  ;
/HiraKakuPro-W6         (/usr/local/share/ghostscript/Resource/CIDFont/HiraKakuPro-W6.otf)  ;
/HiraKakuStd-W8         (/usr/local/share/ghostscript/Resource/CIDFont/HiraKakuStd-W8.otf)  ;
/HiraMaruPro-W4         (/usr/local/share/ghostscript/Resource/CIDFont/HiraMaruPro-W4.otf)  ;
/HiraMinPro-W3          (/usr/local/share/ghostscript/Resource/CIDFont/HiraMinPro-W3.otf)   ;
/HiraMinPro-W6          (/usr/local/share/ghostscript/Resource/CIDFont/HiraMinPro-W6.otf)   ;

ここで,行の先頭が%のものは,TeXと同様にコメントアウトされている。そのフォントを使いたい場合はコメントアウトをはずせばよいということだろう。そこで,ここにセプテンバーフォントの実体ファイルへの絶対パスを書き込んでみた。

/SeptM            (/Users/hoge/mytexhome/texmf/fonts/truetype/tashotai/SeptM.ttf)     ;

以上で設定は終了。これで,ちゃんとasymptoteからも,というかghostscriptでセプテンバーフォントが使えるようになった。分かってみると実は簡単なことであったが,なんだかんだで数時間を費やしてしまった。

センター試験・数学IA 第3問

twitterのTLで今年のセンター試験・数学IAが難しくなってる,傾向が今までと違う,等々あったので,検索して問題をDLしてみた。いままでのセンターの問題とかほとんど見たことないので,どこがどう違うのかは分からないものの,第3問の幾何がちょっと面白そうだったので,図を描いてみた。

2013センター試験・数学IA第3問(全部入り)

図が描いてあれば易しい問題だと思う。文章をちゃんと読んで,正しい図を描くことが存外難しいということなのであろう。

$\angle PAO=\theta$ とおけば,$\tan\theta=\frac{1}{3}$であるから,$\tan 2\theta=\frac{3}{4}$ となる。よって,三角形ABCは3辺の長さの比が$3:4:5$の直角三角形である。$AB=6$であるから,$AC=\frac{24}{5}$ となる。

三角形ABCの内接円の半径$r$は,この場合は直角三角形であるから,次のように相似を利用して簡単に求められる。
\[ AN:NC=AN:NQ=AD:DP=3:1 \]
であるから,
\[ r=\frac{1}{4}AC=\frac{6}{5} \]
これから,三角形ADPと三角形ANQの相似比は$5:6$と分かるから,
\[ PQ=\frac{1}{5}AP=\frac{\sqrt{10}}{5} \]

なお,図版は asymptote で描いた。備忘録的にソースを書いておく。

import fontsize;

defaultpen(fontsize(11));
dotfactor=6;
//pen dashed=linetype("6 6");
// pen dashed=linetype("3 3");
pen dashed=linetype("4 4");
pen thick=linewidth(0.6bp); // 太線用のペンを定義する。
pen hairline=linewidth(0.3pt);

defaultpen(linewidth(0.4bp)); // 線の太さを0.4ポイントに設定

// usepackage("amsmath");
usepackage("MinionPro");

import geometry;

/* 2点A, Bを結ぶ弧 */
path ConnectTwo(pair A, pair B, real OffSet) {
  pair M=(A+B)/2+OffSet*unit(B-A)*I;
  return A..M..B;
}


size(8cm,0);

point pO=(0,0), pP=(0,1);
circle cO=circle(pO,3), cP=circle(pP,1);

line T1=tangent(cP,pO-pP);
point[] pAB=intersectionpoints(T1,cO);
point pA=pAB[0], pB=pAB[1];

line tgs[]=tangents(cP,pA);
line T2=tgs[1];
point pD=intersectionpoints(T2,cP)[0];
point pC=intersectionpoints(T2,cO)[1];

point pE=2*pO-pC;

circle icABC=incircle(pA,pB,pC);
circle icCEA=incircle(pC,pE,pA);
point pQ=icABC.C, pR=icCEA.C;

point pT1=intersectionpoints(icABC,pA--pC)[0];
point pT2=intersectionpoints(icABC,pB--pC)[0];

point pM=intersectionpoints(pA--pP,pO--pD)[0];


real dist=0.15;
draw(Label(scale(0.9)*"\kern -0.5em\raise 1ex\hbox{$\frac{24}{5}-r$}", align=Center,filltype=UnFill), ConnectTwo(pA,pT1,3.7dist), hairline+dashed);

draw(Label(scale(0.9)*"$3$", align=Center,filltype=UnFill), ConnectTwo(pA,pD,1.5dist), hairline+dashed);
draw(Label(scale(0.9)*"$3$", align=Center,filltype=UnFill), ConnectTwo(pA,pO,-1.2dist), hairline+dashed);
draw(Label(scale(0.9)*"$3$", align=Center,filltype=UnFill), ConnectTwo(pO,pB,-1.2dist), hairline+dashed);
draw(Label(scale(0.9)*"$1$", align=Center,filltype=UnFill), ConnectTwo(pD,pP,dist), hairline+dashed);
draw(Label(scale(0.9)*"$1$", align=Center,filltype=UnFill), ConnectTwo(pO,pP,-dist), hairline+dashed);
draw(Label(scale(0.9)*"$r$", align=Center,filltype=UnFill), ConnectTwo(pT1,pQ,dist), hairline+dashed);
draw(Label(scale(0.9)*"$r$", align=Center,filltype=UnFill), ConnectTwo(pT1,pC,dist), hairline+dashed);


draw(cO);
draw(cP);
dot("A",pA, dir(pO--pA));
dot("B",pB,dir(pO--pB));
dot("O",pO,dir(pD--pP));
dot("D",pD,0.7dir(pQ--pD));
dot("C",pC,dir(pO--pC));
dot("P",pP,dir(pO--pQ));
dot("E",pE,dir(pO--pE));
dot("Q",pQ,dir(pP--pO));
dot("R",pR,dir(pP--pO));
dot("N",pT1,dir(pQ--pT1));
dot(pT2);

draw(pP--pO);
draw(pP--pD);
draw(pA--pB);
draw(pA--pC--pB);
draw(pC--pE--pA);
draw(icABC);
draw(icCEA);
draw(pQ--pT1);
draw(pQ--pT2);

draw(pO--pD,dashed);
draw(pA--pQ,dashed);

dot("M",pM,N);

markrightangle(pP,pO,pA,1.5mm);
markrightangle(pA,pD,pP,1.5mm);
markrightangle(pA,pC,pB,1.5mm);
markrightangle(pE,pA,pC,1.5mm);
markrightangle(pA,pM,pO,1.5mm);
markrightangle(pA,pT1,pQ,1.5mm);
markrightangle(pC,pT2,pQ,1.5mm);

markangle(scale(0.9)*Label("$\theta$"),radius=8mm,n=2,space=0.6mm, pO,pA,pP);
markangle(scale(0.9)*Label("$\theta$"),radius=8mm,n=2,space=0.6mm, pP,pA,pC);

addMargins(2mm,2mm);

カスタムタクソノミーのリンク表示

[備忘録]
WordPressでカスタム投稿タイプとそれに付随するカスタムタクソノミー(custom taxonomy カスタム分類)を導入したのだが,それらを各記事のところに表示する方法。

get_the_term_list という関数を用いると,リンク付きの文字列が得られる。使用中のテーマは,WordPress3.5付属のTwenty Twelve というもの。functions.php を修正するのだが,直接変更せずに,Child Theme (子テーマ) を作って,そちらに functions.php を作って,修正する。具体的には,twentytwelve_entry_meta() の中で,次のような記述をすればよい。

echo '分野:' . get_the_term_list($post->ID,'math_cat','',', ');

もっとも,これは単純すぎるので,実際にはカスタム分類があるときに限って表示するようなif文にするのだが。

これで,デフォルトの「投稿」と同じ形式で記事の末尾などに,カスタム分類の項目と,そのアーカイブへのリンクを出力することが出来た。

WordPressでカテゴリー一括登録を手動で行う実験

カテゴリーを一括登録するプラグインもいくつか使ってみたが,その場で登録するものばかりで,事前に用意されたテキストファイルなどを読み込んで,一括して登録するものは見当たらなかった。そこで,見よう見まねで自作することにした。

利用するのは,wp_create_category() という WordPress の内部関数。これを使うためには,これが定義されているファイルをインクルードしなくてはならないらしい。

改行で区切った文字列をヒアドキュメントで定義して,これを改行で分割して配列にする。そして,配列の各々の文字列に対して,カテゴリーとして登録するというもの。

// カテゴリーを手動で登録する実験
function create_my_categories() {
$cat_str =
<<<CATDATA
初等数論
可換環論
ガロア理論
代数曲線論
複素多様体
代数的数論
解析的数論
CATDATA;

	include_once(ABSPATH . 'wp-load.php');
	include_once(ABSPATH . 'wp-admin/includes/taxonomy.php');

	$cat_array = explode("\n", $cat_str);
	foreach($cat_array as $value) {
		wp_create_category($value);
	}
}

とりあえず,実験は成功。自家用としては,これを functions.php に追加して,

add_action('init', 'create_my_categories');

とかすれば良い。汎用性を考えるならファイルから読み込むようにしてプラグインとして動作させるのが良いのだろう。プラグインの作り方,すっかり忘れてしまったが・・・。

Advanced Custom Fields を使ってみる

相変わらず MAMP でローカルにWordPressでのデータベース構築実験,続行中。

標準のカテゴリーだけで処理することも可能かもだが,将来的なことも考えて,Advanced Custom Fields (ACF) というプラグインを試してみることにした。かなり意欲的なプラグインであり,独自APIまでいろいろと準備されている。

オフィシャルサイトのDocumentationとかサンプルを少し読んで,とりあえず自分で作成したフィールドを記事に表示させることが出来たので,忘れないようにメモ。使うのは,get_field, the_field という関数(API)たち。

直にHTMLというかPHPを書き込んでも良いのだが,これも将来的なことを考えて,関数にしてみた。オフィシャルの the_category() という関数のソースを参考にして,適当に自分の関数を定義してみる。例えば名前を show_my_fields() としてみよう。これを,使っているテーマ付属の functions.php の末尾にでも追加する。PHPはまるっきりの初心者で,文字列結合の演算子とかも知らないものだから,思いっきり冗長なベタ書きコードになっているが,まあ,とりあえず動作したということで。

<?php

function show_my_fields( $post_id=false ) {
	if ( get_field('shutten')) {
		echo '<span class="metacat">';
		echo "出典: ";
		echo get_field('shutten');
		if ( get_field('opt')) {
			echo get_field('opt');
		}
		echo "</span>";
	}
}

?>

そして,これをフィールドを表示させたいところに,

 show_my_fields() 

と書けばよい。これで,独自フィールドの表示は成功。

次は,標準のカテゴリー表示のように,特定のフィールドに合致するエントリーをアーカイブとして表示させたいのだが,まだどうしてよいか分からない状態。フィールドに一致するエントリー全体の配列かなにかを返してくれる関数(API)があるはずだとは思うのだが。

あと,PHPの文法も少し勉強しなくては。というか,PHPって,コードとHTMLが同時に混ざっているって,どういう仕様なんだ〜 😯 とか思うのだが。不思議な言語ではある 😉 。