きっかけなんて些細なモンですよ。

はてなブログにプログラムのソースコードを載せる方法(はてな記法)

はてなブログにプログラムのソースコードを載せる方法です。

1.編集方法の変更

まず、「記事を書く」を選択します。
はてなブログの記事の編集方法は最初、「見たまま」モードに設定されています。これの変更が必要です。
下図、「編集 見たまま」の右にあるvをクリックします。
f:id:kirintt:20170915010429p:plain

すると、「見たまま」「はてな記法」「Markdown」の3つが表示されます。ここで「はてな記法」を選択します。
f:id:kirintt:20170915010425p:plain

すると、次のようなダイアログボックスが表示されます。「OK」を選択します。
f:id:kirintt:20170915010419p:plain

こんなことも聞いてくるかもしれませんが、「このページを離れる」でOKです。
f:id:kirintt:20170915010432p:plain

「編集」の横の文字が「見たまま」から「はてな記法」に変わりました。これで編集方法の変更ができました。
f:id:kirintt:20170915011625p:plain

2.はてな記法ソースコードを表示

2.1.とりあえずコードを載せる方法

はてな記法では、次のようにして本文中にプログラムのソースコードを載せることができます。

>||
(ここにプログラムのソースコードを貼ります)
||<  

>|| と ||< は必ず行の頭にする必要があります。忘れず改行しましょう。
例えば、次のようなコードをはてなブログに載せたいとします。

print "hello, hatena"

この場合、

>||
print "hello, hatena"
||<  

と書くことで、ブログには以下のように表示されます。

print "hello, hatena"

2.2.プログラム言語の構文によって色を付ける

2.1.ではとりあえずコードを載せる方法を書きましたが、ここではちょっとした応用として、言語ごとに構文などを色付けて表示させる方法を書きます。

例えば、pythonソースコードを色付きで表示したい場合は、以下のように書きます。

>|python|
print "hello, hatena"
||<  

始まりの >|| 部分の、|| の間に載せたい言語を書けば良いということです。
実際にやってみると、こんな感じで色が付きます。

print "hello, hatena"

色付け表示が可能な言語は以下から確認できます。
help.hatenablog.com

おまけ.はてな記法について

いままで見たままモードで編集していた人は、いきなりはてな記法を使うことに躊躇いを感じるかもしれませんが、意外となんとかなります。箇条書きや引用などは見たままモードと同じように使えます。プレビューでの確認作業も変わりません。
加えて言うと、はてな記法ではリアルタイムプレビューという機能があります。これは、編集中に常時更新されるプレビューで、編集画面のすぐ横に表示できます。最後にこれの使い方だけ紹介しておきます。

編集画面の本分右上、四角に囲まれた目のようなアイコンにカーソルを持っていくと、「リアルタイムプレビュー」と表示されます(下図)。これをクリックしましょう。
f:id:kirintt:20170915015138p:plain

すると、次のように右半分にリアルタイムプレビューが表示されます。
f:id:kirintt:20170915015258p:plain

画像や大文字、中文字などの簡単な確認はこちらでできます。プレビューをいちいち表示するのが面倒、という方には役立つ機能だと思います。

『ぐらんぶる』を読んでダイビング行ってきた。

ぐらんぶる、というマンガがある。原作は「バカとテストと召喚獣」の作者であり、アニメ「プリズマ☆イリヤ」で脚本を務める井上堅二。もうこの時点で面白くない可能性がほとんど消えてる。そして絵も良い。女性キャラはかわいいし、ちゃんと男性の身体は筋肉を描いている。

ぐらんぶる(1) (アフタヌーンコミックス)

知ったのはつい最近だけど、自分の中では大学生の男友達に勧めたいマンガランキング第一位の作品になってる。実際に、これを数人の友達に勧めたが、全員から非常に好評だった。

そこでふと思いついた。

そうだ、ダイビングに行こう。

というわけで9月某日、ダイビングへ行ってきた。今回はその体験レポートを残しておこうと思う。

体験ダイビング

ダイビングにはライセンスが必要なのでは?と思うかもしれない。それは確かにそう。だけど、体験ダイビングというライセンスなしでも楽しめるものがある。これに参加するには、水着とタオルだけあれば良い。ダイビングに必要な機材は全てお店が用意してくれる。優しい。

体験先は伊豆

ダイビングスポットとして有名な伊豆

今回、体験ダイビングをさせて頂いたのは静岡県伊豆半島八幡野ダイビングセンター。伊豆はダイビングスポットとして有名らしく、このお店はダイビング経験者の友人が勧めてくれた。ここでは体験ダイビングのほかにもスノーケリングや磯釣りなどが楽しめるので飽きないだろう、とのこと。体験ダイビングは1万円くらいだった。ちなみに、ぐらんぶるの舞台も伊豆。やったね。

アクセスが難しい

体験ダイビングのために、ぐらんぶるを読ませた友人3人と共に車で名古屋から伊豆へ向かった。ダイビングセンターまでの道のりはなかなかに大変だった。というのは、えげつない山道の存在。グーグルマップの案内に従って進んだけど、きついカーブは多いし見通しは悪いしで、経験者じゃないとすれ違い一つで苦労するような道だった。お金があるなら電車とタクシーを使うのが正解だと思う。名古屋からだと片道1万くらいで行けるっぽい。

体験!…の前に

まずはスーツと靴のサイズ合わせ。そのあと、ゴーグルとフィン(足につけるひれみたいなやつ)を選んだ。自分は目が悪いんだけど、ゴーグルには度入りのものもあって助かった。いったんここまで借りて、スノーケリング組に合流した。

体験ダイビングの前に、水に慣れることから始めましょう、ということでスノーケリングをした。スノーケリング組はライフジャケットをつけていたが、体験ダイビング組はライフジャケットなしでのスノーケリングだった。まあこの後潜るし当たり前か。

スノーケリングでは、フィンの存在感がなんとも言い難かった。気持ちとしては軽く動かした程度でも大きく動く。なかなか慣れない感覚だった。スノーケリングはほとんど海の表面から見ている状態だったものの、それでも比較的浅いところを泳いだからだろうか、底のほうで泳ぐ魚が見られた。これだけでも普通に楽しかった。

海中へ

機材

f:id:kirintt:20170914232858j:plain

(画像はPixabayより)

 

体験ダイビングでレンタルした機材は以下の通り。

  • ダイビングスーツ
  • ゴーグル(スノーケル付き)
  • フィン
  • ボンベ一式(ボンベ、それを背負う用のジャケット的なもの)
  • 重り

確かこのくらいだったと思う。

ボンベ一式と重りはスノーケル後に、インストラクターさんに手伝ってもらいながらなんとか装着。ボンベ重い。陸から海に移動するまでに体力持っていかれた。重りは沈むためにつけるんだと思う。たぶん。

説明

機材を装備しながらダイビング中の説明を受ける。水圧で耳が痛くなることを防ぐための耳抜きや、言葉を交わせない水中で重要なハンドサインなどを教えてもらった。この辺り、ぐらんぶるで読んだことが出て来て心の中でにやりとしていた。

実践

説明が終わるといよいよ本番。インストラクターさんたちと海へ入る。

思い出1:浮いた

ロープ伝いに海中へと潜っていくのだが、ここで問題が発生。ロープを離したら、海の底の岩などを掴むよう言われていたのだけど、それらを掴む前に浮いてしまった。クソ重いボンベを背負っているのにぐんぐん浮いた。これはまずい。もがいてみるがすぐさま海水面に戻ってしまった。しかしこういう客には慣れているのだろうか、インストラクターさんの一人が手を引っ張り海低まで連れて行ってくれた。ありがたや…。

思い出2:呼吸に一苦労

水中ではボンベから酸素を口で吸い込むことで呼吸をする。しかしこれまた難しい。確かに吸っているのに、息苦しさを感じてしまう。早々にリタイアが見えてきたが、ここで先導するインストラクターさんが携帯ボードに何か書き込み、こちらに見せてきた。

「息を吐くと沈みやすいです」

試しに全力で吐く。沈んだ。だがそれ以上に楽になった。あなたが神か。できれば潜る前に知りたかったけど。とにかくこの後は息苦しさも消え、俺水中で呼吸してる!すごい!!とハイテンションになった。

思い出3:体勢を保つことの難しさ

体験ダイビングはインストラクターさんについていく形で行われた。いきなり浮いてしまう程度には適応能力が低い自分は体勢の維持にも手間取った。海の中でも波があり、それでボンベが煽られると身体も傾いてしまう。後半は慣れてきたが、はじめのうちは体勢が崩れるだけで焦った。

思い出4:海の生き物を間近で

ここまで苦労した話が続いてしまったので、最後に楽しかった話をしておく。今回は体験ダイビングのため、潜ったといってもおそらく5m程度だった。しかし、間近で海の生き物を見られる点で、スノーケリングとは大きく違っていたように思う。魚が目の前を通り過ぎていくのを見た時、水族館とは違った感動があった。同じ空間を泳いでいるからこそなのかもしれない。ナマコも触った。気持ち悪かった。インストラクターさんが小さな魚(名前忘れた)の群れを手で誘導してこちらに向けたのはプロの技という感じがしてカッコよかった。

体験ダイビングの後に

体験ダイビングで実際に潜っていたのは、はっきりとはわからないが1時間に満たなかったと思う。それでも、陸に上がったときの満足感は十二分にあった。友人たちも楽しんでいたようで、みんなであれが難しかった、あれはすごかった、などと素人なりに盛り上がった。まだ体験時間は残っており、インストラクターさんから時間までスノーケリングをしていて良いと言われた。友人たちは元気にスノーケリングへ向かったが、自分はトイレに行きたかったのでそのままスーツなどを脱いで返却した。ちなみに着るときよりも脱ぐときのほうが苦労した。スーツは水で濡れていてずしりと重かった。

一人だけ先に終わってしまって暇を持て余すかも、と思ったけど、案外そんなことはなかった。むしろ一人で良かったかもしれない。ダイビングセンターのベンチでタバコを吸いながらぼんやりと海を見ていた。良く晴れていたけど、日陰は適度に涼しい。適度の疲労もあってか、さっきまであそこで潜っていたのか、と余韻に浸っていた。気付けば友人たちも海から上がっていて、全員で海沿いを散策した。

感想

体験ダイビングのレポートは以上。今回の感想は「クソ楽しかった!!」の一言に尽きる。ぐらんぶるを読んで興味を持ち、ノリと勢いで行ったダイビングだったけど、はじまってみるとぐらんぶる関係なく楽しんでいた。インストラクターさんも丁寧に教えてくれたので安心して潜れた。行って良かった。

NEW GAME!を観ました。プログラミング始めます。(13)

f:id:kirintt:20170914223122p:plain
ねねっちのこと、嫌いにならないでくれ…(9話を観て)。

nagoyanofes.hatenadiary.jp

※基本的に、愛知大学の有澤先生がプログラミングの講義で使用しているテキスト「Pythonによるプログラミング入門」に沿って進めています。

Python 2.7.13を使用しています。

 

 

サンプルプログラム

1か月分のカレンダーを表示するプログラム(引用元:Pythonによるプログラミング入門, p. 13)。

# coding: shift-jis
wday=("sun","mon","tue","wed","thu","fri","sat")
def cal0(n,m):
    # cal0(n,m) は 1 つの月のカレンダーを作成する。
    # n は月の開始日の曜日を表す数字 (0 から 6) であり、
    # 0 は日曜日を意味する。
    # m はその月の日数である。例えば 1 月は m=31 である。
    # 従って 2000 年 1 月のカレンダーは cal0(6,31) で表示される。
    for x in wday: print " ",x,
    print
    for x in range(0, n): print " ---",
    for x in range(1, m+1):
        print "%5d"%x,
        if (x+n)%7==0 : print
    print
cal0(6,31)

プログラムの詳細が知りたい人は有澤先生のテキストを読んでね。

今日のキーワード

閏年の判定

閏(うるう)年については以下を参照。
d.hatena.ne.jp
www.nao.ac.jp


例10)

西暦年号を与えてその年が閏年であれば 1 を、閏年でなければ 0 を返す関数を定義しなさい。(この関数の名前を leap としましょう。英語では閏年の事を leap year と言います) そして、その関数が正しく働いていることを 1996 年、1999 年、1900 年、2000 年 の 4 つの年について確認しなさい。
(引用元:Pythonによるプログラミング入門, p. 31)

プログラム(譜 3.9)

def leap(x):
    if x%400 == 0: return 1
    if x%100 == 0: return 0
    if x%4 == 0: return 1
    return 0
print 1996, leap(1996)
print 1999, leap(1999)
print 1900, leap(1900)
print 2000, leap(2000)

(引用元:Pythonによるプログラミング入門, p. 31)

結果

1996 1
1999 0
1900 0
2000 1

閏年は次の規則で判定される:
a. 4 で割り切れる年は閏年である。
b. 100 で割り切れる年は閏年でない。
c. 400 で割り切れる年は閏年である。
判定の優先順位は c, b, a の順である。
(引用元:Pythonによるプログラミング入門, p. 31)

  • 関数の名前はアルファベットと数字からなる。
  • 関数名の頭文字は必ずアルファベット。
  • 以上は変数の名前についても同じ。
  • 関数leapでは、 if x%400 == 0: return 1 において、xが400で割り切れるとき return 1 が実行される。
  • このとき、leap中の残りの if x%100 == 0: return 0 などは実行されない。
  • if x%400 == 0: return 1 において、xが400で割り切れないとき、次の行の if x%100 == 0: return 0 が実行される(以下同様)。
  • print 1996, leap(1996) と書くことで、結果が何年のものか一目でわかる。
問1

譜 3.9 では 4 で割り切れない場合の判定が最後に回されている。閏年でないケースが大半なのだからこの判定を最初に行う方が実行効率が良いと考えられる。この考えのもとにプログラム 3 の関数 leap(x) を書き直してみなさい。
注: この問題は難しい。そのような難しいプログラムの書き方を推奨しているのではない。
(引用元:Pythonによるプログラミング入門, p. 33)  

プログラム

def leap(x):
    if x%4 == 0:
        if x%100 == 0:
            if x%400 != 0:
                return 0
        return 1
    return 0
print 1996, leap(1996)
print 1999, leap(1999)
print 1900, leap(1900)
print 2000, leap(2000)

結果

1996 1
1999 0
1900 0
2000 1
  • 自分なりに短くしたつもり。
  • if の中に if が入るだけでややこしさが増したように感じる。
問2

現在の暦 (グレゴリオ暦) は 1582 年 10 月 15 日から開始された。つまり、現在の閏年の規則はこの時に制定された。この日は何曜日かを求めよ。(プログラムで解く事を要求していない)
ヒント: グレゴリオ暦は 1 年を 365 . 2425( = 365 + 1 / 4 − 1 / 100 + 1 / 400) 日と定義したことになる。従って 400 年間で [ ] 日になり、この日数は丁度 7 で割り切れる。従って 1600 年のカレンダーは 2000 年のカレンダーと同じである。
(引用元:Pythonによるプログラミング入門, p. 33)

プログラム

y = 365+1.0/4-1.0/100+1.0/400
print "y", y
print "400*y", 400*y
print "400*y%7", 400*y%7

結果

y 365.2425
400*y 146097.0
400*y%7 0.0
  • ヒントに書かれたことを確かめるためのプログラム。
  • 結果を見ると、確かに400年は7で割り切れた。
  • よって、1年目と401年目の曜日は同じであることがわかった。
  • これより、1952年10月15日の曜日は400年後の1982年10月15日と同じであるとわかる。
  • 1982年10月15日は金曜日である(windowsのカレンダー機能より)。
  • したがって、1952年10月15日は金曜日である。

f:id:kirintt:20170914211807p:plain

問3

閏年を判定する関数 leap(x) を if 文を使わないで書くことが可能であると言えば驚きではないだろうか?
ヒント: 西暦 x 年までに発生した閏年の回数と x − 1 年までに発生した閏年の回数の差を計算します。(差だけが問題なので、グレゴリオ暦が実際にいつから始まったかを気にする必要はありません)
(引用元:Pythonによるプログラミング入門, p. 33)

  • 全くわからん!
  • x年までに発生したうるう年の回数ってどう計算するんだ?

今日のミス

閏年の判定

問1

ミスしたけど、そのプログラムに上書きしちゃったからどんなミスだったかわからない。てへぺろ
ちゃんと失敗したものは失敗したものとして記録に残しておくよう気を付けよう。


以上。
問3手も足も出なかったけど、答えがないのよね…オラモヤモヤすっぞ!

NEW GAME!を観ました。プログラミング始めます。(12)

ねねっちが左利きとは知りませんでした。にわかでごめんなさい。

f:id:kirintt:20170907203958p:plain 

今日は練習問題がないのでお勉強感強め。

☟前回の記事 

nagoyanofes.hatenadiary.jp※基本的に、愛知大学の有澤先生がプログラミングの講義で使用しているテキスト「Pythonによるプログラミング入門」に沿って進めています。

Python 2.7.13を使用しています。

 

 

サンプルプログラム

1か月分のカレンダーを表示するプログラム(「Pythonによるプログラミング入門」p. 13)。

f:id:kirintt:20170826201139p:plain

 

今日のキーワード

大域 (global) 変数

関数定義の外で代入された変数を大域変数と呼ぶ。

 

例1)大域変数

f:id:kirintt:20170907193259p:plain

(引用元:Pythonによるプログラミング入門, p. 28)

  • wdayが大域変数。
  • 関数cal0内で使用されている。
  • データを変数に入れるメリットの 1 つは、変数に適切な名前をつける事によって、そこに代入されているデータの性質が分かることにある。

    (引用元:Pythonによるプログラミング入門, p. 29)

  • 例2)ローカル変数

f:id:kirintt:20170907193744p:plain

(引用元:Pythonによるプログラミング入門, p. 29)

  • 上のプログラムにおける"wday"のように、関数内で定義される変数をローカル変数という。
  • ローカル変数は、定義されている関数の中でのみ参照できる。 

    (引用元:Pythonによるプログラミング入門, p. 29) 

  • ローカル変数においても、複数の箇所で利用される可能性はある。
  • 変数の利用箇所を把握しておかなければ、大数変数であれ、ローカル変数であれ、修正時に問題が生じるかもしれない。

例3)変数を使わないプログラム

f:id:kirintt:20170907194758p:plain

(引用元:Pythonによるプログラミング入門, p. 29) 

  • 以上より、変数は極力使わないほうが良いらしい。

 

コメント

コメントはプログラムの処理内容には影響しないが、人がプログラムを読むときにコメントがあるとわかりやすくなるかも。

例1)サンプルプログラムのコメント

f:id:kirintt:20170907195651p:plain

 (引用元:Pythonによるプログラミング入門, p. 29) 

  • サンプルプログラムで書かれていたコメント。
  • #は、以降の文はプログラムに関係ないですよ、ということを意味する(コメントアウト)。
  • 公式配布されている Python のプログラムでは次のようにコメントが入っている。

    f:id:kirintt:20170907195929p:plain

     (引用元:Pythonによるプログラミング入門, p. 30) 

  • ["""]は文字列を表す。
  • 行をまたがって使えるところが[']["]とは異なる。
  • 上のプログラムでは、["""]で挟まれた部分の文章は文字列として定義されているが、プログラムの処理には使用されてない。(コメントとして代用)

 

好ましいプログラムスタイル

プログラムの作成では、首尾一貫した書き方を守ろう、という話。

  •  pythonのプログラムは、インデントによって論理構造が表現される。
  • 範囲を示さなくてはならない命令の後には、コロン (:) が続く。例えば

    f:id:kirintt:20170907202318p:plain

    などである。

    (引用元:Pythonによるプログラミング入門, p. 30) 

     

例)if の書き方

f:id:kirintt:20170907201935p:plain

 (引用元:Pythonによるプログラミング入門, p. 30) 

  •  どちらでもプログラムは動くが、右の書き方をしたほうが良いらしい。
  • プログラムを見やすく、首尾一貫した書き方にするには、コロンで改行し、インデントで範囲を示す書き方に統一すべきである。

    (引用元:Pythonによるプログラミング入門, p. 30) 

 

以上。

ちなみに、pythonを使用しているグーグルでは、その使い方について社内規則を設けているらしい。(Pythonによるプログラミング入門, p. 31 より)

Google Python スタイルガイド — PyGuide - 2.29

おすすめの完結済ライトノベルを紹介する。

個人的におすすめの完結済みライトノベルを紹介します。完結済みということで、新しくはないですが、古過ぎることもない…と思いたい…。少なくとも、イラストで抵抗感を抱くようなことはないラインナップにしたつもりです。

異世界転生モノとか学園ハーレムモノに飽きちゃった人に気分転換として読んでもらえればと思う作品が並びました。

 

 

狼と香辛料支倉凍砂(イラスト:文倉十

狼と香辛料 (電撃文庫)

中世ヨーロッパ風の世界で、行商人ロレンスと狼の化身ホロが織りなす旅物語。

あらすじ

主人公のロレンスは村から村へ、街から街へと旅をする行商人です。彼がとある村に訪れた際、ホロという娘が勝手に荷台に乗り込んでいたのを見つけます。しかも、その娘は狼の耳を持っており、真の姿は巨大な狼でした。ホロの目的は、生まれ育った故郷へと帰ること。紆余曲折あり、ロレンスはホロを故郷へと案内することになりました。こうして、独りぼっちの行商人と、独りぼっちの狼の、二人旅が始まりました…。

ここが推せる

この作品は経済ファンタジーという異色のジャンルで、今でも数あるライトノベルの中で特殊な立ち位置にあると思います。剣と魔法でバトル!という話ではありません。主人公は商人であり、商人は金勘定で物事を考えます。登場人物も、毎回のように商人が出てきます。駆け引きとか、頭を使って相手を出し抜く感じがカッコイイんです。

また、異世界転生モノをはじめ、中世ヨーロッパ風の世界が舞台の作品は現在でも多く見られますが、本作は並のライトノベルに比べて日常風景の描写が非常に丁寧である点が特徴的です。地の文が多めで、読み応え抜群。想像力を掻き立てられます。

あと、ヒロインのホロがかわいい。ケモミミに目覚めました。ついでに主人公のロレンスがホロに一途なのもポイント高いです。ハーレム苦手なんで。ただし、この二人は隙あらばいちゃつくので、読んでいる最中に気持ち悪い笑みを浮かべてしまわないよう注意が必要です。

 

狼と香辛料シリーズは全17巻で完結…したのですが、10周年記念ということで、2016年に新シリーズが始まりました。本記事作成時点では新シリーズの既刊数もまだ少ないので、未読の方にはこれを機に是非読んでほしいです。

 

 

 

東雲侑子シリーズ森橋ビンゴ(イラスト:Nardack)

東雲侑子シリーズセット(全3巻) [文庫] by 森橋ビンゴ; Nardack [文庫] by 森橋ビンゴ; Nardack [文庫] by 森橋ビンゴ;... [文庫] [Jan 01, 2011] 森橋ビンゴ; Nardack [文庫] [Jan 01, 2011] 森橋ビンゴ; Nardack

不器用な高校生カップルの甘く苦い恋愛ストーリー。

あらすじ

主人公である三並英太はひょんなことからクラスメイトで同じ図書委員の東雲侑子が小説家であることを知ります。ちょっとしたいたずら心で彼女にサインを求める英太でしたが、その代わりとして一つのお願い事をされます。それは、侑子と付き合うこと。といっても彼女は恋愛小説を書くためのネタを集めることが目的で、つまりはカップルの真似事です。英太はそれを理解した上で承諾するのですが、次第に侑子に惹かれていき…。

ここが推せる

まずヒロインの東雲侑子がかわいい。ただ、特に一巻では彼女が何を考えているのかわからないんですよね。ま、読み進めていくと悶えるんですが。

本作は主人公の英太視点で展開されます。作者のあとがきによると、ヒロインである東雲侑子が何を考えているのかわからない状態で読んでほしいという思いがあってのことみたいです。それで英太くんは終始悶々とするんですが、読者にも同じ気持ちを味わわせようということですかね。読み返すとここではこんなこと考えてたのかな~なんていう楽しみ方もあって二度おいしい作品です。

本作は全3巻とライトノベルとしては非常に控えめな構成です。それぞれで1年が経過しており、高校1年から卒業後まで描かれています。この時間の経過の中で、東雲侑子と三並英太、そして二人の関係が変化していく様子には一種の感動すら覚えました。

自分の高校生活が灰色だっただけに一層この物語は眩しいのですが、それでも未だに読み返しているのはやっぱり抗えない魅力があるからなんだろうなぁと思います。

 

ちなみに、作者である森橋ビンゴ東雲侑子シリーズ完結後に新たなシリーズ、この恋と、その未来をスタートさせました。こちらも既に完結しているのですが、なんと東雲侑子や三並英太も登場しているのです。東雲侑子シリーズのファン大歓喜ですよ。イラストの担当もそのままで本当に良かった…ありがとう…。

 

 

ビブリア古書堂の事件手帖三上延(イラスト:越島はぐ)

ビブリア古書堂の事件手帖―栞子さんと奇妙な客人たち (メディアワークス文庫)

古書店店主の栞子さんと、従業員の五浦大輔が遭遇する、古書を巡るミステリー。

あらすじ

古書を専門に取り扱うビブリア古書堂。そこで店主を務めるのは篠川栞子という美しい女性でした。普段はいわゆるコミュ症のような彼女ですが、本の知識や推理力はずば抜けています。一方、とある事情から彼女のお店で働くことになった五浦大輔は本が読めない体質です。そんな彼ですが、栞子さんがする本の話は好きでした。二人は古書を巡るミステリーや苦難に何度も遭遇しますが、そのたびに二人はそれを乗り越え、絆はより強くなっていくのでした。

ここが推せる

正直、これは入れるか迷いました。本編中に挿絵はないですし、レーベル的にも微妙なものがあるため、そもそもラノベと言えるのか?って話になりかねないんですよね…。まぁ、良い作品は分野問わず紹介したいという私のオタク心が出てしまったということでご勘弁を。

さて、ビブリアシリーズは全7巻です。挿絵ないと嫌だ!という人もいるかもですが、表紙と先頭ページの挿絵だけでも全然いけるんじゃないかと思います。ミステリーということもあり、盛り上がるシーンもキャラの動きというよりは会話メインになりがちです。そういうわけで、基本的なキャラクターの顔とか特徴がわかっていれば、楽しく読むことができるはずです。古書についての知識も深まるので、なんとなく賢くなった気分になれます。

ミステリーが主ではありますが、五浦大輔と篠川栞子の信頼関係が築かれていく過程もまた見どころです。巻数を重ねる毎にどんどん栞子さんがかわいくなっていくんですよね~…。大輔も決めるときはビシッ!と決める男なので、カッコイイです。

 

完結作品のススメ

ライトノベルは毎月たくさんのタイトルが発売されています。まだ見ぬ名作を探しての新刊チェックは宝探しみたいでわくわくします。その一方で、過去に完結したラノベというのはなかなか知る機会がないように感じます。今回は私の趣味嗜好が全面に押し出ちゃった感が否めませんが、この記事を読んで少しでも過去の完結作品に興味を持ってもらえると嬉しいです。

NEW GAME!を観ました。プログラミング始めます。(11)

正直めんどくさくて今日までサボってました。

f:id:kirintt:20170906030734p:plain

今回はちょっと苦労したえ…。

☟前回の記事 

nagoyanofes.hatenadiary.jp

※基本的に、愛知大学の有澤先生がプログラミングの講義で使用しているテキスト「Pythonによるプログラミング入門」に沿って進めています。

Python 2.7.13を使用しています。

 

 

サンプルプログラム

1か月分のカレンダーを表示するプログラム(「Pythonによるプログラミング入門」p. 13)。

f:id:kirintt:20170826201139p:plain

今日のキーワード

関数を作る (1) def cal0(n,m):

"def 関数名(使用する変数):"で関数を作成する。長々とした処理を何度も行う時には、予め関数にしておくと便利そう。

例8)

1 つの月のカレンダーを表示する関数 cal0(n,m) を作成しなさい。ここに n は月の最初の日の曜日を表す数字で、日曜日を 0、月曜日を 1、· · ·、土曜日を 6 とする。m はその月の日数である。また、cal0(n,m) を使って、木曜日から始まり、31 日で終わるカレンダーを表示しなさい。

(引用元:Pythonによるプログラミング入門, p. 26)

f:id:kirintt:20170906031543p:plain

  • テキストに載っていたものをそのままコピペしたのだが、おかしな結果に…。
  • 曜日の表示、"---"の表示と日付の改行は問題ない。
  • 日付がすべて4になっている。
  • 日付のforがうまく行っていない?

f:id:kirintt:20170906031910p:plain

  • 3つ目のfor(日付の表示に関する部分)で、
  • print "%5d"%n → print "%5d"%x
  • 成功。
  • 日付に当たるxを使用するべきところがn(開始曜日を指定する変数)となっていたために先に示した結果となっていた。
  • 以下、先のプログラムの説明をテキストより引用。
  • f:id:kirintt:20170906032545p:plain

    (引用元:, p. 27)

問1

次のプログラムの出力を予測しなさい。

f:id:kirintt:20170906032853p:plain

ヒント: 最後に出力された None は、この関数の値である。

(引用元:, p. 27)

予測:35

f:id:kirintt:20170906040406p:plain

  • 15忘れてた。言い訳すら出来ない。
  • "None"て何?どっから湧いた??

f:id:kirintt:20170906033117p:plain

  • 関数が生成する値は return で指定される。return で明示的に値を指定されない場合には None が関数の値になる

    (引用元:, p. 27)

  • "None"は関数の返す値がないときに出ちゃうってことか?
  • 今のプログラム、f(2,3)だけのときにはNoneが出ないが、上の図のようにprint f(2,5)だけのときにはNoneが出た。
  • この書き方だとprintが重複しているが、関数f(x,y)内のprintをreturn(後述)にしとけばOKっぽい。
  • でもNoneの前に一応f(2,5)の計算結果は出てるんだよな…そこが謎。

関数を作る (2) def f (x,y):

ここでは、通常の関数についての話。

通常の関数は値を生成する。生成する値は return で指定される。

(引用元:, p. 27)

例9)

f (x , y) = (x + y) × y
となる関数 f (x , y) を定義し、 f (2 , 3) と f (2 , 5) の値を表示しなさい。

(引用元:, p. 27)

f:id:kirintt:20170906035154p:plain

  • テキストに載っていた解答。
  • 関数内のreturnで指定された部分がprintで表示されている。

f:id:kirintt:20170906035350p:plain

  • ちゃんと説明を読まずに、returnを使わず書いたやつ。
  • 結果は同じだった。
問1

f:id:kirintt:20170906035727p:plain

となる関数 f (x) を定義し、 f (2) と f (3) の値を表示しなさい。

ヒント: 実数の割り算にしておかないと、頭の中が???? となる

(引用元:, p. 28)

f:id:kirintt:20170906035943p:plain

  • ちょっとミスった(後述)。
問2

f:id:kirintt:20170906041653p:plain

で求められる。これを求める関数を V(r) とし、V(2) とV(3) の値を表示しなさい。
ヒント: 円周率 π は数学モジュール math に pi として含まれている。math の中の pi を使うには
from math import pi
を最初に実行しておけばよい。

(引用元:, p. 28)

f:id:kirintt:20170906041800p:plain

  • 会話モードでお世話になった"pi"が再登場。
  • こういう面倒な計算も毎回式を書く必要なくサクッとやってくれる。便利だ…。

今日のミス

関数を作る (2) def f (x,y):

問1

f:id:kirintt:20170906040516p:plain

  • 累乗の演算子を間違えた。
  • エクエルとかだと"^"だけど、pythonでは"**"を使う。すっかり忘れてた。
問2

f:id:kirintt:20170906040735p:plain

  • なんか値が本来より小さい。
  • piを疑って3.14にしてみたり、()を付けて式を要素で分けてみたりしたけど結果は変わらず…なぜ??
  • 原因は4/3を実数値にしていなかったから。
  • 4/3 → 4.0/3 とすることで解決。
  • 問1のヒントに書いてあったことにここで引っかかるとは…ウカツ!

 

以上。

今回は3.9問2でけっこう時間食われた。こんな短いプログラムで苦労したが、企業で働くプログラマーは膨大な量を書いてるんだよなぁ。ストレスで頭がおかしくなってしまうんじゃないかと心配になる。

NEW GAME!を観ました。プログラミング始めます。(10)

得意げなねねっち!すきだ!!!!!!!!!!

f:id:kirintt:20170831192509p:plain

今回は、これまでの内容を改良する方法を考えます!

☟前回の記事 

nagoyanofes.hatenadiary.jp

※基本的に、愛知大学の有澤先生がプログラミングの講義で使用しているテキスト「Pythonによるプログラミング入門」に沿って進めています。

Python 2.7.13を使用しています。

 

 

サンプルプログラム

1か月分のカレンダーを表示するプログラム(「Pythonによるプログラミング入門」p. 13)。

f:id:kirintt:20170826201139p:plain

今日のキーワード

バグ(Bug)

プログラムの中の欠陥をバグ (Bug = 虫) と言う。

(引用元:Pythonによるプログラミング入門, p. 25)

 

例)

次の出力

f:id:kirintt:20170831193345p:plain

はプログラム

 

f:id:kirintt:20170831193417p:plain

によって得られる。このプログラムでは木曜日から始まるカレンダーに変更する時に、2 カ所の変更が必要になる。一カ所の変更で済むようにプログラムを改良しなさい。

(引用元:, p. 24)

f:id:kirintt:20170831193517p:plain

  • "---"の数と改行する位置"x%7"の和が7であることを利用。
  • nはカレンダーの1日目の曜日に対応する。n=0が日曜、n=1が月曜、…n=6が土曜となる。
  • たとえば、上のプログラムではn=3だが、このとき、
  • 1つ目のfor...range(0, 3)となり、"---"は3回表示される。
  • 2つ目のfor...if x%7 == (7-3)となり、7-3=4であるから、xを7で割った余りが4のとき改行される。
  • しかし、このプログラムではn=0(日曜)の結果だけがおかしくなる。

f:id:kirintt:20170831194514p:plain

  • n=0のとき、if x%7 == (7-0)となり、7-0=7であるから、xを7で割った余りが7のとき改行される。
  • ある数を7で割った余りが7となることは有り得ない。そのため、改行が1度も実行されなかった。
  • このように、特定の条件でのみバグが発生することがある。
  • この例でもそうであるが、処理すべき数値が、ある範囲にある時、バグは端で発生しやすい。

    (引用元:, p. 25)

 

問1

 n=0 の場合にも正しく動くようにプログラムを修正しなさい。

ヒント: 初等的な解決法を 2 つ挙げる。(1) 2 つ目の for 文の前に、n==0 場合に n=7 となるような命令を追加する。(2) (7-n) を (7-n)%7 に置き換える。

(引用元:Pythonによるプログラミング入門, p. 25)

f:id:kirintt:20170831195514p:plain

  • ヒントで示された1つ目の解法。
  • 1つ目のforの前にif n == 0:を入れると、"---"が7つ表示されてしまうので注意。
  • ちなみに、このプログラムはn = 1~6でも正しく結果が表示された(下図参照)。

f:id:kirintt:20170831195836p:plain

 

今日のミス

特になし!やったね!! 

 

以上。

ある条件のときだけ発生するバグ…普通に見落としそうだなぁ。