TIM Labs

2017年8月アーカイブ

Haskell は純粋であるだとか、参照透過性を満たしているだとかよく話題になる。参照透過性を満たしているということは、同じ関数に同じ引数を渡せば、いつ、誰が簡約しても結果が変わらないということを意味している。いつ簡約しても結果が変わらないということは、並列に簡約しても良いわけだし、逆順に簡約してもいいわけだし、コンパイル時に簡約したっていいわけだ。じゃあ、以下のコードが、常に HELLOWORLD を出力し、 WORLDHELLO となることはない理由は何なのか? putStr "WORLD"putStr "HELLO" よりも先に簡約したって良いのでは?

do
  putStr "HELLO"
  putStr "WORLD"

実際のところ、「IO モナドってのは特別なんだ」とかそういう理解であっても、とりあえずモノを作るにはそんなに困らない。だいたいそう動くし、そういうもんだと思っていれば十分である。

でも、どういう仕組みなのかやっぱり気になるよね? そんな人のために、ちょっと大変だけど、このプログラムを手で簡約してみたいと思う。自分で簡約し、ついでに実行もして、実際に HELLOWORLD が出力できれば、ある程度の納得を得られるはずだ。

10月7日、8日2日間連続で行われるMATH POWER 2017 で出題される巨大パズルの準備をしている。
巨大パズルと言うのも色々考えられるが、MATH POWERということで、MATHな問題でなければいけない。
MATHというと、すぐに計算を考えるかもしれないが、いわゆる計算とは違う分野があり、そのようなパズルもある。
ということで、制約充足問題にした。

こういう説明では分かり難いな。
パズルの多くは、制約充足問題なのだ。
ルールという制約があり、問題が与えられ、全ての空欄を、ルール違反せず埋めるのが制約充足問題である。

だから、パズルで、今回は巨大なパズルになった。
で、選択したパズルは、ナンプレである。もとを辿ると、数学者レオンハルト・オイラーが考えたラテン方陣にたどり着くのだが、アメリカの建築家ハワード・ガーンズが考えたもので、1979年にアメリカのデル・マガジン社からNumber Placeという名称で出題された。(詳細は、ウィキペディアを参照のこと
同じパズルが、とくに日本では多数の名称で呼ばれていて混乱もしているが、ここでは日本国内で最も一般的な「ナンプレ」という呼び方をする。

heart-2709.png
ナンプレのルール

どの縦列にも、1から9の数字が1つ入る。
どの横列にも、1から9の数字が1つ入る。
どの3×3のブロックにも、1から9の数字がはいる。

数字の入っていない空白マス全てに、上記のルールに従って数字を記入せよ。

とても単純な、もろに排他性を利用したパズルである。
とくに計算は何も無い。9種の異なるものなら何でも良い。
「一二三四五六七八九」でもよい。
「鯵鯛鰹鮹鰯鱈鰆鯖鰻」でも構わないのだが、非常にやり難いだろう。

さて、9×9のサイズの問題では、とても巨大とはいえない。
この問題をたくさん出題しても、巨大ではなく、たくさんでしかない。
どうしたら巨大になるだろうか。
9×9ではなく、16x16、25×25、36×36、、、、、81×81、100×100くらいまでいけば巨大かもしれないが、そもそも、そういう問題は作り難い上に、楽しく解いてくれる人がいないのだ。

それで、こんな風にして巨大なパズルにすることにした。
改行は Windows上ではCR LF(0D,0A)であり、Unix/LinuxなどではLF(0A)となっており、改行が異なった実装になっている。
CR は carriage return, LFはline feed (または NL new line)のことである。

そして、この改行コードの違いが、色々な問題を引き起こす。
よくある例は、Unixのサーバで作られたテキストデータファイルを受け取って、Windowsのアプリに読みこもうとすると読み込んでくれない。
テキストを見る限り、正しいはずなのだが。。。。。。と悩んだりすることが多々ある。

こういうとき、テキストの16進数ダンプを利用しないといけない。
Windows上では、こういう基本的なことが次第にやりにくくなっているので、説明はUnix/Ubuntu の場合について行う。

テキストエディタで簡単なテキストファイルをつくり、ダンプしてみた。

$ cat HelloNL.txt
Hello
NL

$ od -ctx1 HelloNL.txt
0000000   H   e   l   l   o  \n   N   L  \n  \n
         48  65  6c  6c  6f  0a  4e  4c  0a  0a
改行は、 \n(0a) になっており、このままでは Windows側では正しく改行を処理できない可能性があり、改行コードを変換しないといけない。

こういうとき様々な方法が可能なのだが、わかりやすい方法だけを紹介しよう。

以上は、 Unix上での改行変換だが、unixタイプの改行をwindowsタイプにする簡単な方法がある。

> more < HelloNL.txt > HelloCRLF.txt
ほとんどコロンブスの卵みたいな方法(トリック)である。
Windows上で、Unixタイプの改行コードにする単純な方法は知らないのだが、そのような改行変換はUnix側でやったほうが楽なので、無くてもよいかもしれない。

少し前までは Haskell はインストールが非常に手間がかかる上に、ライブラリ類のバージョン整合性をとるのが非常に困難なのが大きな欠点だったのだが、 Stack なるビルドツールが現れてからはその点が一気に解消されて大変便利になった。コンパイル時に様々な問題を一気に洗い出してくれる Haskell は、書いている自分でも驚くほど正しく動くし、変更にも強い。言語の選択はもちろん適材適所なので一概には言えないが、堅牢なプログラムを素早く書くという観点ではお勧めできる言語だ。

しかし一方で、Haskell で書かれたプログラムにはパフォーマンスバグ(時間、空間、あるいはその両方)が含まれていることも多い。ビルドさえできればたいてい「正しく動く」が、意図したパフォーマンスが得られなかったり、余計なメモリを消費し続けたりといったことでは片手落ちである。

今回は、そんななかでも並列プログラミングを行う場合に遅延評価が問題となる例とその解決法を紹介する。

群論おもしろい (415x600).jpg
数学のかんどころ 16

群論, これはおもしろい
トランプで学ぶ群

著者    飯高 茂
ISBN         978-4-320-01996-6
判型          A5 
ページ数    176ページ
発行年月    2013年01月
発行     共立出版 
本体価格    1,500円



数学というと、まずは微積分に線形代数と思っている人も多いし、実際大学の初年度で教える数学がそうなっていることが多い。
しかし、それはあくまでも近代数学の考えで、現代数学の考えではないと思う。

数学というと、代数学、現代代数学の勉強をしなければならない。
情報科学の基礎として、代数学、もうちょっと限定した分野として『群・環・体』あたりを知っておきたいものである。

情報工学科では、このあたりはそれほどやっていないかも知れないが、情報科学科ではかなり勉強しているのではないかと思う。
情報も、プログラミングだけでなく、その基礎となる数学部分をしっかりやっておこうと思うと必要なはずだ。

しかし、代数学を勉強しようとして挫折した人は非常に多いと思う。
線形代数や微積分と違って、ひじょうに抽象的な世界になってしまうのがその原因だろう。
『群・環・体』あたりを、入門者向きに書いたと主張している本は何冊かあるようだ。
ページ数の制限や、どのレベルまで書くか、どのくらい丁寧に書くかがあるが、全部を満足することは不可能で、多くの本は内容が薄いか、読んでも分からない場合が多い。

ということで、群だけを説明した初心者向けの本を読んでみた。
副題が「トランプで学ぶ群」となっており、置換をトランプを例に説明していた。

群といえば、なんといってもガロア群が有名であるが、そんなところは対象にしていない。
内容は、以下のようになっている。

第1章 トランプと群
第2章 置換とサイクル
第3章 群の一般論
第4章 いろいろな群

とあるのだが、これでは第3章、第4章に何が書かれているか分からないだろう。
詳しくは、共立出版のサイトに目次があるので参照されたい。

置換群、商群、準同型、同型、、、、、とありSylowの定理に至る。

第3章までと、第4章のペースが全然違って、第4章はハイペースになっていて、きちんと理解できた自信がない。

代数学になると、特殊な記号を定義して使うことがよくあるのだが、それをきちんと記憶しておくことは難しい。
また、用語の定義もチョコチョコと出てくるが忘れるので、索引などで定義ページ、解説ページを探すことが多い。
本書の索引には、用語はのっているのだが、記号が入っていないので、記号については、自分で索引に書き加えるなどしていかないと、とても困ることになってしまった。
数学をやるためには、記号くらいはちゃんと記憶しないといけないのだろうか。これはとてもハードルが高い。


10月7日正午から8日の深夜まで、1日半かけて数学の祭典 MATH POWER が六本木のイベント会場ニコファーレで開催される。
今回、このイベントで延々と解く問題を提供することになった。

去年は円周率を1日半かけて手計算で延々と計算してどこまで解けるかをやったのであるが、19桁目で間違えてしまった。
ラマヌジャンの円周率の公式はいくつかあるのだが、以下を使ったようだ。

PI_Ramanujan.png左辺を見ると、都合が悪いことに、円周率が分母に存在するので、Σを計算した後で逆数計算が必要になるので、一般的な円周率の公式よりも手計算はやり難いかもしれない。
そういうこともあってか、19桁目で間違ってしまったらしい。

昨年のMATH POWERについては、35時間連続の数学イベントMATH POWER 2016 報告レポートが詳しくかつ雰囲気が伝わると思うので、参照して欲しい。

mathpower2017.png MATH POWERのページも2017年版が用意され、イベントに関する情報が徐々に追加されている状態だ。

公式なニコニコ生放送として、ぶっ通し(昨年は34時間25分)でイベントの状況は流され、視聴者からのコメントが流れ、さらに会場からコメントにも対応(反応)することになる。ネットを利用した数学の双方向イベントなのだ。

     


さて、今回は、複数人で30時間たっぷりかかるような巨大なパズルを提供したいということで相談を受けて、つい引き受けてしまった。
巨大な問題に対応するためには、今まで使っていたパズル問題作成システムそのままでは無理なので、いろいろ手を入れた。でも、プログラムの修正は難しくなく、ただの作業だ。でも、ちょっとした確認でも非常に時間がかかるようになる。

巨大さと、難易度、面倒臭さ、さらには驚き、仕掛け、早合点などもあり、これらをどう問題に反映させるかが悩ましい。
要するに、どれだけ楽しんでもられるか、苦しみながら喜んでもらえるか、それに尽きる。


プログラミングに数学はどのくらい必要か と言うのをちょっと前に書いた。
今回は、その物理版を書こうと思う。

 しかし、物理と数学ではプログラミングとの関係はあまりにも違う。
プログラミングで数学能力はとても重要で、数学的能力の方が大切になることさえある。

それに比較すると、物理は知らなくても、ほとんどの場合は困らない。
 最近は物理エンジンというものも普及していて、物体の運動などは適当に計算してくれるので、計算結果の利用のしかたを知っているだけで困らないことが多い。

・・・なんてことを書くと、物理など勉強しないでも大丈夫ということになるし、実際に物理など高校までで終っているというプログラマも多いだろう。
 となると、書くことがなくなるのだが、実際にコンピュータを使って物体を動かす、制御するなどの場合は、物理の原則を知らないダメである。

物理をうまく利用すれば、ちいさなモータでちゃんと動かせたりするし、走行ルートを上手に取ったりできるわけである。
ロボットなどの制御には知っていた方が良い。
さらに、コンピュータでシミュレーションをやるときにはとても物理は重要になる。

実際に物、装置を作る前に、コンピュータ上で入念にシミュレーションをしてから設計制作に入ることも多い。
こういうときには、物理も数式レベルまで分かっていないといけない。 何をやるかによって違うが、力学、電磁気学と数学、それも行列、微積分、フーリエ解析などを必要とすることが多い。
たとえ大学レベルでも、物理をきっちり勉強しようとすると、かなり大変になる。
 でも、とりあえず、理工系の2年までに習う物理の基礎部分くらいはプログラマなら習得していても損はない。
ということで、自習用としてお手ごろな本を紹介しよう。

DSCN0694 (600x450).jpg
mathema-physics-chart.jpg数学のときと同じ、マセマのキャンパス・ゼミである。
全6巻であり、各巻の関係は右図のようになっている。

実は、それぞれの分野で必要になる数学があり、数学的に詳しいことはマセマの数学の本を見るようにとの指示で説明が終っていることも多い。

もちろん、マセマなので、説明、計算はかなり丁寧に書かれており、計算しながら読んでいけば、ほぼ理解できるのではないかと思う。
このあたりは、数学シリーズとまったく同じ感覚だと思えばよいだろう。

ただし、もちろん基礎を丁寧に書いてはいるが、そんなに分厚くなく、範囲はかなり限定されている。量子力学が、たった1冊で終っているのだが、1次元の簡単な場合の説明に限っているからである。

このマセマの物理に限ったことではないのだが、最近の物理学のテキストは、実験のこと、実際の物質、物体を具体的に示したり、写真を使ったりしての説明がものすごく減っている気がする。
個人的には「これで物理の本?」と思うのが多い。

物理を理解するというより、なんだか試験対策みたいな気がするのだ。
マセマのシリーズには、常に「単位なんて楽に取れる!」と書いているのだから、まあ偽りはない。

WEBで動くアプリなどを作っている限りは、物理学は不要かも知れない。
数学と物理がプログラミングでいっぱい必要になるのは、物理シミュレーションであろう。
そういう世界では、まだまだFORTRANは現役で、スパコンで普通に使われている。
流体、天体、気象、、、、など色々あるのだが、そこまでやる人は少ないか。

今年の春、FORTRANで書かれた電磁波工学のシミュレーションプログラムに手を入れた。
それは、狭い領域のシミュレーションだったのだが、もう1本、広域でのシミュレーションが残っている。
必要な主な知識は、電磁気学(電磁波)、フーリエ解析、FORTRAN、3次元立体幾何学程度なのだが、誰か代わりにやってくれる人はいないものだろうか。

ちょっと前、調布の電通大キャンパス内のセブンイレブンで、電子パーツなどを24時間販売していることを書いた。

ネットでは、この程度で話題になっているが、その先があるのだ。
セブンイレブンは甲州街道に沿ったビルの1階にある。

ビルの名称はUECアライアンスセンター。
入り口には管理人室があるのだが、その前を通りぬけて2階に上がってみると、marutsuの看板が廊下に出ているのだ。

DSCN0474 (600x450).jpg DSCN0382 (600x450).jpg 

中に入ると、部品が入っている小さな箱がずらっと並んでいて、まるで秋葉原の部品屋なのだ。
それもそのはず、秋葉原に本店がある、電子部品屋の マルツの西東京営業所が、大学(UECとは電通大のこと)の中にあったのだ。
さすがは電子工学というか、無線工学で有名な大学ならではである。

DSCN0383 (600x450).jpg DSCN0689 (600x450).jpg
電子部品だけでなく、入門者向けのキットなども置いてあるのだ。
もちろん、ビニール袋に必要な部品を入れたお安いキットも色々置いてあった。

多種多様は電子部品はもちろんだが、ケーブル、工具、ケース、測定器なども置いてあった。
つい手を出してしまうとはまってしまいそうだ。


DSCN0686 (600x450).jpg DSCN0685 (600x450).jpg

入り口の近くには、最近はやっているチビ・コンピュータの類が色々置いてあった。
Raspberry Pi, IchigoJam, Arduino とか色々あると思ってみていたら、ちょっと違った。
Arduino ではなく Marduino であった。

DSCN0687 (450x600).jpg  

ここに売っているものだけではなく、頼めば色々なものも作ってくれるとのこと。
うーーーむ、つい電子工作に走ってしまいそうだ。
Ubuntuを使ったり、Windowsを使ったり、あるいは同時に使いたくなることがある。
それも離れた場所にある異なるOSのマシンを使いたくなる、あるいは操作しなければいけないことがある。

Windowsの場合、リモートデスクトップがあり、使う人は使っていると思う。
これを使えば、オフィスのマシンを外出先や家から操作することができるし、その逆もできる。

ということで、こんなことをしてみた。

remina-view.png
全体の背景、左のアイコンはUbuntuである。その中に、リモートのWindowsマシンの画面を1つのウィンドウの中に表示して、その中でWindows上で動く K-Shogi という将棋ソフトを動かしてみた。

まあ、たったこれだけであるが、マウスやキーボードによる入力も不自由なくできるので、遊びでも仕事でも何でもできる。

Windows上でのリモートデスクトップについては、いまさら紹介するまでもないと思うのと、書くのが面倒なので省略する。

同様のことができるのが、Ubuntuにもある。
実際、こういうリモートデスクトップ用のソフトはいくつも存在するようであるが、ここではUbuntuに初めから入っているデフォルトのリモートデスクトップである Remmina を使ってみた。
Remmina という名称を知っている必要さえない。
プログラム検索をするときに、「リモート」と入力すると、

remina-remote.pngたったこれだけで、Remminaが呼び出せるので、あとは指示にしたがって、つなぐ相手のマシンのIPアドレスを教えれば繋いでくれる。

調布のオフィスのUbuntuから、新宿の方にあるWindowsマシンを動かしている。
さすがに画像転送がやたらに多い場合はカクカクするが、通常の操作なら全然問題ない。

Remminaについて詳しく知りたければ、 本家のホームページ https://www.remmina.org/ へ行くのが良いが、実はそこはほとんど見ていない。
実際簡単だし、日本語での説明も色々ネット上にあるようなので、存在することだけをお知らせして終えることにする。


キーボードは、プログラマなら、相当の使い込んでいるはずだ。
そして、手に十分なじんだものでないと、使うのが嫌になるはずだ。
また、巷にあふれている日本独特のJIS規格に従ったのを使いたくない人も多いだろう。
世界的には、やはりASCII配列が普通であり、JISキーボードは結局ガラパゴスキーボードなのだ。

キーボードの値段は、下は数百円から上は数万円まで、かなり幅がある。
キーボードの値段をケチって指を壊したほうが治療費がかかる上に、とても不便になりかねない。
キーボードはプログラマにとっては身体の一部のようなものなので、しっかり手入れをしよう。

私は、諸般の事情、大人の事情などから、JISキーボードとASCIIキーボードの両方を使っている。
そして、JISキーボードに関しては、あまりプログラムを作ったり、延々と記事を書くときなどには使わないので、購入したときについてきたもの、あるいは余っているキーボードを使うことが多い。
なので、何年も使い続けることは珍しいのだが、そもそもそういうキーボードのキートップの文字はシールが張ってあるだけだったりして、まともに使い続けるとシールが剥がれたり、色々問題が起こってくる。

Linux(Ubuntu)で使うキーボードは、通常ASCIIキーボードを使っている。
また、数字キーをそんなに押すこともないので、メインのキー以外の右のほうにある余分なキーがあるよりも、右側を切り捨てたコンパクトバージョンの方が良い。
キーボードがコンパクトになれば、その分机を広く使える、つまり机の上にいっぱい物が置ける。

そういうことで、ASCIIキーボードは延々と使っていることが多いが、諸般の事情で取り外して本棚の隅に保管していたキーボードを取り出したのだが、きちんと掃除しないまましまっていたら、汚れが酷く、少々こすったくらいでは落ちなくなっていた。

それで、キートップを外して、誰もが行うように、洗濯することにした。
これが洗濯前のキートップで、すでに外したものを並べてみた。
キートップの側面にかなり汚れたこびりついているのが分かるだろう。

DSCN0634 (600x449).jpg
プログラミングするのに数学の知識はあるに越したことはない。
でも、どのくらいあったら良いかの判断は難しい。
プログラミング言語の知識や、用意されているツール・ライブラリ等を使って、まあ少し勉強すれば出来ることをやるだけだったら、高等学校の数学すら不要と思う。
しかし、それでは、理屈は理解しないままプログラムをしているプログラマ程度で終ってしまう。
特に、AIに関するプログラムを書こうと思ってディープラーニングの本を開いたとたん、訳のわからないことだらけになる筈だ。

まず、理工系大学や高専で普通に教わる数学の共通部分程度の話にはついていけないと、非常に困る。
ということで、大学生向けに数学全般を扱ったシリーズ本を紹介しよう。
この分野、昔からピンからキリまで色々出ているのだが、あまりにも本格的になると大変だ。
数学専攻ならともかく、そうでない数学を道具として使いたい立場だと、やや軽めで、広く浅く、でもきちんとマスターすべきだ。

それで、今回は、このマセマシリーズを紹介しよう。

   DSCN0609 (467x600).jpg     DSCN0604 (500x600).jpg

理工系大学の生協書籍部や大手書店の数学コーナーに行くと平積みされていることが多い本である。
帯には、東大・京大・東工大・早大・慶応大・・・ 大学生が一番読んでいる「キャンパスゼミ」シリーズです とある。

説明の仕方は、従来の大学の教科書とは大幅に違い、高校数学の受験参考書といった感じだ。
とにかく丁寧に書いていることは間違いない。
このシリーズで読むのが困難と言われたら困るのだが、文系の人でも大丈夫なように「大学基礎数学」があり、さらに高校数学レベルのシリーズもあるので、そのあたりからやれば誰でも大丈夫かな。

もちろん、いくつかの問題がある。
mathema-map.jpg
これは、あくまで入門参考書なので、レベルの高い部分はバサバサと切り捨てられている。
初めからもっと高度な本を読んでもよいし、これで基礎を固めてから、本来読むべき本格的な本に行っても良い。
他のシリーズでもだいたい同様なのだが、マセマでは右図のような順番で勉強することを推奨しているようだ。
この「偏微分方程式」まで分かれば、ディープラーニングの原理もすっと分かるのではないかと思う。
AIをやるのだったら、確率・統計関係はもっとしっかり勉強しないとダメだろう。

もう1つ大きな問題は、本シリーズは大学理系共通で従来教えていた数学の範囲になっていて、情報系で必要とされている数学分野の多くが抜けていることだ。
思いついたままいい加減に並べてみると、整数論、離散数学、グラフ理論、代数学、数理論理学、、、、など色々あるし、さらに目指す分野によって違ってくる。
大学の情報系のシラバスを見ていると、これらはアルゴリズムの中に含まれていることが多いというか、アルゴリズムの中にあまりにも色々な分野が突っ込まれている感じがする。
この分野は、対象者が理工学全般に比べるとずっと少ないためか、シリーズというようなものはあまりないようだ。(あるのかな?)

ただの使い捨てプログラマなら数学は不要かも知れないが、エンジニアになるには数学は必須、知ってて当然だし、そうでないと深い理解が出来ず、効率的なプログラムなど書けない。

大学教養程度(1、2年)の数学は、参考書も多数あるし、ネットに転がっている無料コンテンツで勉強することも容易だ。
さらに、大学、先生によっては、講義ビデオが全部公開されていることも多いので、大いに利用しよう。

いや、それだけでなく、意欲ある高校生が高校の数学に嫌気がさして、大学の数学をかじってみるのもよい。

日本では、JISキーボードというとてもガラパゴスなキーボードが一般的だが、世界標準であるASCIIキーボードとはキー配列が異なる。
さすがにAからZまでは同じなのだが、記号が色々異なっている。
プログラミングしたり、システムをいじっていると、どうしても記号を入力することが多いのだが、場所が違うと非常に困るのだ。

ということで以前は、ASCII配列でかつコンパクトな、少なくとも周囲ではよく使われている Happy Hacking Keyboard(HHKB) を使っていた。
しかし、次第にコンピュータを買うとついてくる無駄に幅の広いJISキーボードが席巻するようになり、やむなくJISを使うように飼いならされてしまった。
エンジニアとして敗北である。
そして、HHKBは、本箱の隅の方に追いやられていた。

今回、オフィスも変わったということで、少なくとも Ubuntu/Linux ではHHKBを使うことにしたのだ。
HHKBでも、これは安いタイプだ。

HHK-1.jpg
今まで、JISキーボードをつなげてUbuntuも動かしていたのだがHHKBを使うにはちょっと変更が必要になる。

ということで、ネットで探すと Ubuntu 16.04で英語キーボードを使えるようにする方法 を発見。 さっそく試してみた。

sudo dpkg-reconfigure keyboard-configuration

とても簡単に設定できたので、安心して動作確認したら、記号がJIS配列のままだった。
なにか間違いを犯したらしいのだが、何も特別な設定をする個所などなかった。

ということで、この意味不明な現象をネットで探したら、UbuntuでHHKB を使う が見つかり、HHKBを指定したにもかかわらずJIS配列のままになるという珍現象の説明があり、ちょっと安心。
解決方法の説明があったのだが、設定ファイルの中身を直接いじっていて、ちょっとやり過ぎ。
もっと普通の方法を探すことにした。

そして、UbuntuのmozcでUSキーボード入力/JISキーボード入力を簡単に切り替える方法 を発見した。

sudo apt-get install fcitx fcitx-mozc

これで、fcitxがインストールできたら、「fcitx設定」を動かして、細かい設定をするだけである。 設定ファイルの中身を直接いじるなどの反則行為をしなくても、普通にASCII配列が使えるようになる。

いろいろ
想定外の部分で勉強になった。

このアーカイブについて

このページには、2017年8月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2017年7月です。

次のアーカイブは2017年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。