続・混沌の廃墟にて

雑記はどこまで行っても雑記なのだ。ちょっとIT寄りな話もあるかも。

Yahoo!知恵袋にたまに…いや、頻繁に回答を投稿しているのだが、「予備校に行った方がいいですか」とか、「添削を受けた方がいいですか」みたいな FAQ がある。実際、この種の質問は本人の能力や財力【謎】、ターゲットのレベル等によって最適解が変化するから、なかなか難しいことではあるけど、とにかくよく出てくる質問なのだ。

これに対して、私がたまに書く回答には、こんなのがある。「とりあえずやってみて、必要ないと思ったらやめたらいい」

この発想、普通はしないものなのだろうか。予備校みたいなサービスは年単位で支払う必要があるのかもしれないが、その昔、私が行ってた塾は月払いだったし、家庭教師をしていたときも月謝でお金をもらっていたような記憶がある。添削はZ会を受講していたのだが、これも月単位で支払っていたはずだ。だから、いつでも止めることができたのである。もちろん、入会費みたいなのは戻ってこないし、一括払いよりは月払いが少し高めのお値段になってしまうデメリットはある。

そう思って考えてみれば、「塾に行っているけど役に立っていないので、やめてもいいだろうか」という質問、これも多い。お金を払うのだから、当然、役に立たないのならやめた方がいい。なぜやめないのか、そこが理解できない。もちろん、本当に役に立っていないかどうかは分からない。塾に行っても成績が上がらないという人がいて、それが事実だったとしても、もしかしたら塾に行っているから現状維持できているのであって、やめると大惨事になってしまうかもしれない。

プログラムを書くときには、とりあえずやってみて、ダメそうだったら修正する、そのような進め方で開発することが案外よくある。いいかどうか分からないから、まずやってみるのだ。でないと、先にすすめないうちに納期になってしまう。

もしかしたら、そのような発想がプログラマー特有のもので、世間一般では、やるかどうかを確実に悩んでから決めるような石橋を叩くようなメソッドが普通なのかもしれない。

続・混沌の廃墟にて - 4 -
(C) Phinloda 2017

このブログの記事に自動的に footer を付加するプログラム、絶賛開発中【謎】なので今すぐ紹介したい、と書きたいところだがサクっとできそうなのに案外コーディングが終わらないのでもう少しかかります。すみません。ちなみに python と selenium でやろうとしているのだが、HTMLパーサーどれがいいんだとか、そういうレベルで迷ってるからお話にならない。

今日はYahoo!知恵袋のとある質問に投稿した回答について、微妙に気に入らないので、もう少し考えてみたい。

質問の趣旨はこういうこと。

「x-1≦0のとき、|x-1|はなぜ -(x-1) なのか」

数学が分かる人ほどこの質問の意図が分からないのではないかと思うのだが、実数の絶対値の定義は、高校ではこうなっている。

A≧0 のとき、|A| = A、A<0のとき、|A| = -A
(新課程チャート式数学1+A、第4刷 平成18年4月1日発行、p.64)

だから、x-1≦0なら、|x-1|は、

x-1=0 のとき x-1
x-1<0 のとき -(x-1)

このように場合分けしないといけないのではないか、と考えたらしい。

そこで、知恵袋の回答には、実は次のように考えてよい、ということを書いた。

A≧0 のとき、|A| = A、A≦0のとき、|A| = -A

だって A=0 のときは 0 = -0 だからね、ということで、ようやく本題に入るのだが、気に入らないというのは、ここは、

A>0 のとき、|A| = A、A≦0のとき、|A| = -A

このように書いた方が良かったのではないか、と悩んでいるのである。推敲ってこういうことなのか。どうでもいいような話に時間を使うこと、みたいな。冗談はおいといて、先に書いたような表現になったのは、後半の条件に単純にイコールを追加したからだ。思考の順序としては、そこから先に一歩進んだ方がよかったのかな、ということになる。回答道って、なかなか難しい。



数直線を1点で区切る場合のまさにその1点ってどうよ、と考えてみるとデデキントの切断も思いつくけど、プログラミング的な感覚でいえば、条件が重複するとどちらで処理されるのか考えたりして評価順序とかややこしい話が出てくるのもイヤだし、とりあえず基本的に重複は避けたい。

if (a >= 0) {
    // 正か0の場合の処理
} else if (a < 0) {
    // 負の場合の処理
}


あるいは、

if (a > 0) {
    // 正の場合の処理
} else if (a <= 0) {
    // 負か0の場合の処理
}

これならスッキリする。もっとも、この場合なら後半の else に条件を付けないで、

if (a >= 0) {
    // 正か0の場合の処理
} else {
    // それ以外
}

あるいは、

if (a > 0) {
    // 正の場合の処理
} else {
    // それ以外
}

こうした方がバグも避けられるし漏れが生じる余地もないからいい。プログラムとしては

if (a >= 0) {
    // 正か0の場合の処理
} else if (a <= 0) {
    // 負か0の場合の処理
}

としても何も間違ってはいないのだけど、何となく「あなたは一体何したいの?」的な違和感が残る。0のときに値が同じになるのならまだいいが、違ったりするととても悩ましい。



ちなみに、負から判定するというのはアリだろうか。

if (a < 0) {
    // 負の場合の処理
} else {
    // 正か0の場合の処理
}

これは、aが負の場合が圧倒的に多いのであればいいと思う。正、負の順の方が readability という視点では自然かもしれないが、頻繁に行われる処理が先、という基準も一理あるのだ。そのような条件がないのなら、やはりちょっと違和感があるかもしれない。

続・混沌の廃墟にて -4-
(C) Phinloda 2017

余談はさておき、今回実行したブログのデータ移動の手順を書いておく。わざわざ書くほどの内容でもなく、常識的な操作をすれば普通に移動できる。その前になぜ移動する羽目になったか説明しておくと、livedoor Blog は1つのIDで複数ブログが作れるのに、その機能を活用しないで元からあったブログに投稿してしまったのが原因なのである。その時点で新しいブログを作っていたら、面倒な作業をせずに済んだのだから、かなり間抜けな話である。

ちなみに2つ目のブログを作るのは、ブログの管理ページの下の方にある「新しいブログを作る」をクリックすればいいだけだ。

では、ブログのデータを移行するにはどうすればいいか。ざっくりいえば、次の3つのステップで済む。

元のブログの投稿を export する
新しいブログに、このデータを importする
元のブログの投稿を削除する

具体的にやったことを振り返ってみる。まず export から。

管理ページのトップ画面で、元のブログの「ブログ設定」をクリックすると、使える機能の一覧画面になる。機能は「基本設定」「デザイン / ブログパーツ設定」「メニューバー設定」「メール設定」「その他」にカテゴライズされていて、「その他」のところに、ブログの引越し(インポート)、バックアップ(エクスポート)というアイコンがある。

export するには、「バックアップ(エクスポート)」を実行すればいい。

いろいろオプションが指定できるようだが、基本的に今回は期間以外は特に何も考えずにデフォルトのまま「ブログのデータを書き出す」というボタンを押した。新しいブログを作るのだから、何か失敗したら削除してやり直せばいいという安易な発想に基づいている。

ただし、移動するデータは最近のものだけでいいので、期間は2017年1月~2017年4月を指定した。更新を長期間怠っていたので、これで最近の投稿だけを確実に選択できる。

ちょっと考えたのは、改行のところで、「改行を<br>タグに変換」と「改行をそのまま出力」の3つがあったのだが、よく分からないのでそのまま(改行を<br>タグに変換)にした。

実行すると、次のように画面に表示された。

一定時間が経過したら こちらのリンクをクリック してください。

データを生成する時間がかかるらしい。「数分程度時間がかることがある」というのだが、数件の投稿でそれはないだろうと予想したので、数秒で躊躇無く「こちらのリンク」をクリックしたら、ダウンロードボタンがある画面に遷移した。そこでダウンロードボタンを押すと、ブラウザがどうするか確認を求めてきたので、ファイルに保存するよう指定して、この作業はまず完了。

続いて「ブログの引越し(インポート)」を実行する。

アイコンをクリックすると、実行画面になる。現状で、Movable Type(MT)形式、WordPress(WXR)形式に対応しているらしいので、この形式なら他のサイトのデータも読み込めるのだろう。画面には移行元のブログを指定するセレクタが表示されている。今回は livedoor Blog を指定したのだが、大手のブログの名前が並んでいる。ブログによって制限があるようだが、できるだけ元のブログの内容を引き継ごうとするようだ。今回は livedoor Blog 内のコピーなので、画像までちゃんとコピーしてくれる。

インポートするファイルは約8MBまで、という制限がある。これを超えた場合は複数に分割すれば出来るのだろう。

実行したら、インポートした投稿は、元のブログの投稿時刻で取り込まれていた。新しいブログで最初に投稿した内容はそのまま残っている。当たり前といえば当たり前なのだが、インポートしたら元の投稿は消えてしまうのではないだろうかとか、日付が変わるのではないだろうかとか、いろいろ心配してしまうのはプログラミングを作る側の目線で想像するからかもしれない。この機能にはこういうトラブルが有り得るだろう、というところで余計な想定をしてしまうのだ。

最後に、移動した投稿を削除した。これはちょっとミスったというか、考えが足りなかったのだが、既に投稿してあった記事が Google 等に出てしまっているので、投稿は残して新しい URL へのリンクを付けておけばよかったのである。まあそれほど気にするような投稿でもないので、気にしないことにした。ただし、もし移動先の記事にリンクを作るとしたら、これを手作業でやるのは面倒である。プログラムで一気にやりたいところだが、今回はもう移動してしまったのでやれない。と言い訳してみるが、実際はプログラムを書くのだって大変だから、どっちも大変で困ったものだ。ということで結果的には最適な行動を選択したような気がしないでもない。



ところで、今回から最後に番号を書くことにした。書いているうちに何個目か分からなくなるだろうと思ったからである。このブログを作ってからの投稿はこれが3つ目なので、-3- とすべきだろうか。その前に14個の投稿がある。実は1個だけ下書きのものがあるので、それも含めると今このブログには18個の記事が入っている。他で書いているとあるブログのように、何千も投稿が溜まったらたまったものではないが、今なら1で初めて連番を振っても間に合う。

結論としては、違う名前のブログで書いたものをそのままこちらの投稿として数えるのは違和感があるので、ブログの名前が確定してから後の投稿だけを1から数えることにした。その前の投稿は0、-1、-2…という番号を振る予定である。最初の投稿は - -13 - というよく分からない番号が付く予定だ。これをプログラムで一気にやってみたいので、どうすればいいか今考えている。

--

続・混沌の廃墟にて - 3 -
(C) Phinloda 2017

↑このページのトップヘ