工学じじいの縁側日記

工学じじいの縁側日記

引退間際の工学じじいがきままに、プログラミングやデバイス、工学について呟きます。

応用情報技術者試験 最新問題のテクノロジ系をまったり解く 問06~問10【令和元年度秋試験】

R01 応用情報技術者試験 秋期試験に挑戦 問6~問10

f:id:gomta777:20191203143701p:plain


前回に引き続き、あまり乗り気じゃないけれど(笑)
解いていきます。今回は問06~問10です。



令和元年度秋期 応用情報技術者試験 問06~問10 解説

f:id:gomta777:20191203144205p:plain

問6(テクノロジ系:アルゴリズムとプログラミング:データ構造)

先頭ポインタと末尾ポインタを持ち、多くのデータがポインタでつながった単方向の線形リストの処理のうち、先頭ポインタ又は各データのポインタをたどる回数が最も多いものはどれか。ここで、単方向のリストは先頭ポインタからつながっているものとし、追加するデータはポインタをたどらなくても参照できるものとする。

先頭にデータを追加する処理
先頭のデータを削除する処理
末尾にデータ追加する処理
末尾のデータを削除する処理




問6 解答

リスト構造の問題です。
リスト構造は、データ構造の基本的なものの一つです。アルゴリズムとデータ構造を勉強すると必ず出てきます。実装はC言語などのような、アドレスでデータを参照する言語仕様で説明されていることが多いです。今回の問題も、ポインタにアドレスを格納してデータを繋いでいく仕様です。

リスト構造では、データ部とアドレス部(ポインタ)を持つデータ個体を作ります(下図(左))
ここのデータは別々に動的に作るので、その都度空いているところの適当なアドレスを持っています(連続して作ったからといって、配列の様にアドレスが連続しているわけではない)。
なので、配列などの連続したアドレスのデータの様に、次のアドレスを見れば次のデータが入っているわけではありません。
そこで、下図(右)のように、ポインタ(アドレス部)に次につなぎたいデータのアドレスを保存していきます。

図 リスト構造の接続前の個々のデータ(左) データを接続(右)

これを次々行うことで、一連のポインタでつながれた連続したデータ構造ができます。

図 接続されたリスト構造

あとは、先頭のアドレスから順に、次のデータを示すポインタをたどっていけばデータを参照できます。
最後はポインタがどこにもつながっていない(NULL)データを見つけた時です。
ただし、データをたどるためには一番初めのアドレスを保存しておかなければならないので、先頭を保存しておくポインタ(Headポインタ)が必ず必要です。

図 headポインタ

これで、headからすべてのデータをたどることができるようになります。また、今回は次のデータを表すポインタだけ(たん方向リスト)でしたが、前のデータを示すポインタを作ることにより、双方向に接続することや、もっと複雑な構造も可能になります。
。。。までが、リスト構造の基本です。

さて、問題に戻ると、「先頭ポインタと末尾ポインタをもち」とあります。先頭ポインタは先ほどのheadポインタのことです。そのほかに末尾ポインタ(最後のデータを指すポインタ)を持っています。

図 末尾ポインタ


この状態に、ア~エの操作を加えることを考えます。

先頭にデータを追加する処理

①用意した追加データのポインタ(アドレス部)に現在のheadに格納されているアドレスを代入
②headに追加データのアドレスを格納

図 先頭にデータを追加する手順

図 完成したリスト

追加するデータはポインタをたどることなくアクセスできるという条件ですので、ポインタをたどる回数は0回です。

先頭のデータを削除する処理

図 先頭データを削除

先頭データを削除するには、
①先頭データのポインタに格納されているアドレスを、headに代入

図 headに2番目のデータのアドレスを代入

することで、headから、2つ目のデータにアドレスが接続されます。あとは、先頭データ自体を別口の処理で削除すればいいですが、放っておいても特に問題ないといえばないです。(語弊はあります)

ポインタをたどる回数は、先頭データのポインタを取ってこなければならないので、head→先頭データのポインタ、と辿りますので1回です。

図 イの結果

末尾にデータ追加する処理

末尾にデータを追加するには、tailポインタがないと大変ですが、今回はtailポインタ=末尾のデータのアドレスがあるのでラクチンです。

図 末尾にデータを追加する操作

①tailポインタの指すデータの「ポインタ部」に追加データのアドレスを代入する(末尾なので、元はNULL)。
②tailポインタに追加データのアドレスを代入

図 末尾にデータを追加

ポインタをたどる回数は、tail→tailの指すデータのアドレス部で1回です。

末尾のデータを削除する処理

図 末尾データの削除

末尾のデータを削除するには、
①末尾の1個手前のデータのアドレス(tailポインタの1個前)を得る
②tailポインタに末尾の1個前のデータのアドレスを代入

図 末尾データの削除操作

図 末尾データの削除結果

ここで、末尾の1個前のデータのアドレスを得るには、ちょっと大変な操作が必要です。
①作業用のポインタ変数を用意(tmpとする)
②headから、以下の条件を満たすまでデータをたどる
条件:現在のデータのアドレス部 == tailのアドレス
③条件を満たさない時は、tmp=現在のデータのアドレス部

条件を満たしたときにtmpに残っているのが、tailの1個前のデータである。
問ことで(データ数-1)回のアドレス走査が必要ですので、
エが正解です。


問7(テクノロジ系:アルゴリズムとプログラミング:ハッシュアルゴリズム



自然数をキーとするデータを、ハッシュ表を用いて管理する。キーxハッシュ関数h(x)
h(x)=x \bmod n
とすると、人気のキーabが衝突する条件はどれか。ここでnはハッシュ表の大きさであり、x \bmod nxnで割った余りを表す。

a+bnの倍数 a-bnの倍数
na+bの倍数 na-bの倍数



問2 解答

ハッシュ関数が、ハッシュ表上の同じインデックスを返してしまうことを衝突(collision)といいます。
今回はハッシュ関数が、

x \bmod n

です。
あるキー値abがあり、このハッシュ値x_{1}x_{2}だったとして考えてみます。
この場合、x_{1}x_{2}はそれぞれ、nabで割った余りですので、以下のように表されます。

\begin{eqnarray}
x_{1} &=& a\bmod n \\
x_{2} &=& b\bmod n
\end{eqnarray}

ですので、abnで割った商をそれぞれmlとすると、
\begin{eqnarray}
a &=& nm+x_{1} \\
b &=& nl+x_{2}
\end{eqnarray}
と表されます。

\begin{eqnarray}
x_{1} &=& a - nm \\
x_{2} &=& b - nl
\end{eqnarray}

ここで、ハッシュ値が同じになるときはx_{1} = x_{2}となるので、

a-nm = b - nl
 a-b = nm-nl
a-b = n(m-l)

が導かれます。
m,lは、a,bnで割った商で整数です。
よって、m-lも整数となります。
この式は、x_{1}=x_{2}となるときは、「a-bnの倍数であるとき」であることを示しています。
したがって、答えは、「イ」a-bnの倍数 、が正解となります。



問8(テクノロジ系:アルゴリズムとプログラミング:ソーティングアルゴリズム


分割統治を利用した整列法はどれか。


基数ソート クイックソート
選択ソート 挿入ソート


問8 解答

ソーティングのアルゴリズムに関する知識を問う問題です。
分割統治法とは、大きな問題を小さな問題に分割して、小さな問題を順次解いていくことで結果的に大きな問題を解く手法です。
分割統治法を使ったよく見る処理として以下のようなものがあります。

この時点で、答えは「イ」のクイックソートです。
が、クイックソート以外のアルゴリズムについては、過去記事で解説があります(動画付きのものもあります)ので、一度ご覧ください。(一番肝心なクイックソートの解説をしていない(笑))

ko-gaku-jiji.hatenablog.jp
ko-gaku-jiji.hatenablog.jp
ko-gaku-jiji.hatenablog.jp


問9 (テクノロジ系:コンピュータの構成要素:CPUアーキテクチャ


CPUのプログラムレジスタ(プログラムカウンタ)の役割はどれか。


演算を行うために、メモリから読みだしたデータを保持する。
条件付き分岐命令を実行するために、演算結果の状態を保持する。
命令のでコードを行うために、メモリから読みだした命令を保持する
命令を読みだすために、次の命令が格納されたアドレスを保持する。



問9 解答

CPUの基本的な機能に関する問です。一昔前は、午後問題にアセンブラがあったので、プログラムカウンタなどは当然の知識だったのですが、最近は情報系の学校でもアセンブラやCPUアーキテクチャをそこまで詳しくやらなくなってきている気もします。(私の世代は、Z80アセンブラを書いて、外部機器をいろいろ制御する実験が定番だった気がします)

CPUは基本的に、データの複製、数値演算、論理演算、値の比較程度のことしかできません。逆にこれらの単純なことを高速に行うことで大きな仕事をしています。
その時に、CPUの持つ一番小さく高速な記憶装置として働くのがレジスタです。
レジスタは、その役割によって、

  • 専門的な役割が割り当てられている
  • 役割が決まっておらずいろいろ使いまわせる

に分類されます。
専用レジスタには、

など様々なものがあります。
この中でプログラムレジスタは、次に実行されるべき命令のアドレスを保持しているレジスタです。
次の命令のアドレスを逐次保持するので、プログラムカウンタとも呼ばれます。

正解はわかったと思いますが、選択肢を見ていくと、

演算を行うために、メモリから読みだしたデータを保持する。

様々な演算を行うために、メモリからデータを読みだして演算されるまで保持するのが、汎用レジスタです。

条件付き分岐命令を実行するために、演算結果の状態を保持する。

条件分岐命令のためのレジスタなので、フラグレジスタの説明です。

命令のデコードを行うために、メモリから読みだした命令を保持する

プログラムカウンタの値を参照して、メインメモリから命令を読みだして保持します。
保持した命令は、デコーダに渡されて、その内容が解釈されます。
命令レジスタ(Instruction register)の説明です。

命令を読みだすために、次の命令が格納されたアドレスを保持する。

メインメモリ中の、次に実行される命令の格納されているアドレスを保持しているレジスタです。
これが、プログラムレジスタの役割です。



問10(テクノロジ系:コンピュータの構成要素:メモリアクセス)


容量がaMバイトでアクセス時間xナノ秒の命令キャッシュと、容量がbM
バイトでアクセス時間yナノ秒の主記憶を持つシステムにおいて、CPUからみた、主記憶と命令キャッシュとを合わせた平均アクセス時間を表す式はどれか。ここで、読み込みたい命令コードがキャッシュに存在しない確率rとし、キャッシュ管理に関するオーバーヘッドは無視できるものとする。


\displaystyle \frac{(1-r)\cdot a}{a+b}\cdot x + \frac{r\cdot b}{a+b}\cdot y \displaystyle (1-r)\cdot x + r \cdot y
\displaystyle \frac{r\cdot a}{a+b}\cdot x + \frac{(1-r)\cdot b}{a+b}\cdot y \displaystyle r\cdot x + (1-r)\cdot y



問5 解答

結構よく見る問題ですね。なんか、全く同じ問題が過去に出ていた気もします。
(後で、調べてみます)

キャッシュメモリときたら、以下の2つのキーワードを忘れないでください。

  • ヒット率:目的のデータや命令がキャッシュメモリに存在する確率
  • NFP(Not Found Probability):キャッシュに目的のデータや命令がない確率(主記憶にはある)

ここで、
ヒット率+NFP=1
平均アクセス時間=ヒット率×キャッシュのアクセス時間+NFP×メインメモリのアクセス時間
が成り立ちます。

ここで気づいたと思いますが、平均アクセス時間にはメモリの容量は関係しません。
式にメモリサイズが入っている「ア」「ウ」は脱落です。

先ほどの平均アクセス時間の式に、出てきた記号を割り当てていくと、
\displaystyle ヒット率+NFP=1より
\displaystyle ヒット率=1-NFP=1-r

キャッシュのアクセス時間x
主記憶のアクセス時間y
\displaystyle
\begin{eqnarray}
平均アクセス時間 &=& ヒット率\timesキャッシュのアクセス時間+NFP\timesメインメモリのアクセス時間 \\
&=& (1-r)\cdot x + r\cdot y
\end{eqnarray}

「イ」が正解ですね。


所感

まったり5問解いてみました。
今回の5問は、基本情報と大差ない難易度でした(実際基本情報に同じ問題が出て要るっぽい)。
テクノロジ系はあんまりFE,APの差ってないのかもしれないですね。

なにか、間違いや突っ込みどころなどありましたら、気軽にコメントください。




良かったら、押してください!↓↓↓
にほんブログ村 科学ブログ コンピュータサイエンスへ
にほんブログ村

【パズル No 2】じじいの謎解き No 2 単語埋めパズル 解答編

パズルの時間 No 2

  • パズルの時間 No 2
    • じじいの謎解き No 2 単語埋めパズル
  • 問題
    • ?に入る漢字は?
  • 解答編
じじいの謎解き No 2 単語埋めパズル

突然ですがパズルを考えてみたので解いてみてください。
答えは言わないでね(笑)

の解答編です。まだ考えたいなって人は見ないでください(笑)

問題

?に入る漢字は?

ずらっと感じが並んでいます。
法則を見抜いて?に入る漢字を考えてください。

f:id:gomta777:20191123000648p:plain
図 ?に入る漢字は?


続きを読む

応用情報技術者試験 最新問題のテクノロジ系をまったり解く 問01~05【令和元年度秋試験】

R01 応用情報技術者試験 秋期試験に挑戦

f:id:gomta777:20191203143701p:plain


あまり乗り気じゃないけれど、応用情報のテクノロジ系の問題を解いていきます。ほかのサイトより優しく解いていきたいと思います。
良かったら活用してください!



令和元年度秋期 応用情報技術者試験 問1~問5 解説

f:id:gomta777:20191203144205p:plain

問1(テクノロジ系:離散数学:基数)

あるホテルでは客室を,1,000部屋もち、部屋番号は、数字4と9を使用しないで0001か順に数字4桁の番号としている。部屋番号が0330の部屋は、何番目の部屋か。

204 210 216 218



問1 解答

離散数学か情報数学?の問題でしょうか?
解く方法は何種類かあると思います。
まずは、力づく!
0~9までに4と9は2つあります。
40台と90台は10個ずつです。

 0~ 9→2
10~19→2
20~29→2
30~39→2
40~49→10
50~59→2
60~59→2
70~79→2
80~89→2
90~99→10

0~99室までに、2x8+10x2=36個の4と9があります。
100番台、200番台。。。も同様に進んでいきます。
400番台が出てくると大変なのですが、問題の部屋番号は0330です。


4と9のつく部屋数は
  0~ 99まで36
100~199まで36
200~299まで36
300~330まで6
となり、全330室から36x3+6=114を引いて
330-114=216番目

なので、「ウ」が正解です。

別解
解き方としては、こちらのほうがスマートなのかもしれません。、
以前のネタで基数の話をしました。


ko-gaku-jiji.hatenablog.jp

一般的に、n進数は0~(n-1)のn種類の数字で表される。
というのを書きました。
この部屋番号の割り当て方は、
0,1,2,3,5,6,7,8の8種類の数字を使って、数を表しています。
この記数法で表された、数字は一般的な8進数に変換することができます。
例えば、
567は通常の8進数では456になります。
数字と数字なのでわかりづらいですが、後は、変換した数を10進数に直すだけの作業になります。

なので0330は


変換表

で数値を通常の8進数に変換できます。
なので、0330はそのまま330になります。

 0\times8^{3}+3\times8^{2}+8\times8^{1}+0\times8^{0}=216

で、「ウ」が導かれます。

問2(テクノロジ系:離散数学:集合、ベン図)


全体集合S内に異なる部分集合AとBがあるとき,\overlineA\cap\overlineBに等しいものはどれか。ここで,A\cupBはAとBの和集合,A\capBはAとBの積集合,\overlineAはSにおけるAの補集合,A-BはAからBを除いた差集合を表す。

\overlineA-B (\overlineA\cup\overlineB)-(A\capB)
(S-A)\cup(S-B) S-(A\capB)


問2 解答

ベン図を書いていくとわかります。
まず
\overlineA\cap\overlineB
を、ベン図で表してみます。

\cap

こうなります。
あとは選択肢を1個ずつ見ていきます。

\overlineA-B
-
\overlineA - B \overlineA-B

答えが出てしまいましたが、次も見てみます。

(\overlineA\cup\overlineB)-(A\capB)
\cup
\overlineA \overlineB (\overlineA\cup\overlineB)

んで、

-
(\overlineA\cup\overlineB) - (A\capB) (\overlineA\cup\overlineB)-(A\capB)

次、

(S-A)\cup(S-B)

これは
(S-A)=\overlineA, (S-B)=\overlineBなので、\overlineA\cup\overlineBになります。

\overlineA\cup\overlineB

最後ですが、

S-(A\capB)

これも変形します。

S-(A\capB)=\overline{A\capB}=\overlineA\cup\overlineB

途中、ド・モルガンしてます。

ベン図は、良いですよね(笑)

問3(テクノロジ系:応用数学待ち行列


通信回線を使用したデータ伝送システムにM/M/1の待ち行列モデルを適用すると、平均回線待ち時間、平均伝送時間、回線利用率の関係は、次の式で表すことができる。
\displaystyle{平均回線待ち時間}={平均伝送時間}\times\frac{回線利用率}{1-回線利用率}
回線利用率が0から徐々に増加していく場合、平均回線待ち時間が平均伝送時間よりも最初に長くなるのは、回線利用率が幾つを超えたときか。


0.4 0.5 0.6 0.7


問3 解答

待ち行列のモデルがどうのとありますが、日本語の問題です。
モデルで表される、平均回線待ち時間と平均伝送時間の関係は式で示されています。
そのうえで、

平均回線待ち時間\geq平均伝送時間になる回線利用率を求めるという問題になります。
すなわち、\displaystyle \frac{平均回線待ち時間}{平均伝送時間}\geq{1}

元の式を変形して、
\displaystyle \frac{平均回線待ち時間}{平均伝送時間}=\frac{回線利用率}{1-回線利用率}\geq{1}

図 回線利用率をxとしたときのグラフ

あとは代入してみればいいのですが、グラフを書いてみると0.5の時に1を超えるようです。
答えは「イ」です。

問4 (テクノロジ系:情報に関する理論:AI(人工知能


AIの機械学習における教師なし学習で用いられる手法として、最も適切なものはどれか。


いくつかのグループに分かれている既存データ間に分離境界を定め、新たなデータがどのグループに属するかはその分類境界によって判別するパターン認識手法
数式で解を求めることが難しい場合に、乱数を使って疑似データを作り、数値計算することで解を推定するモンテカルロ法
データ同士の類似度を定義し、その定義した類似度に従って似た者同士は同じグループに入るようにデータをグループ化するクラスタリング
プロットされた時系列データに対して、曲線のあてはめを行い、得られた近似曲線によってデータの補完や未来予測を行う回帰分析


問4 解答

機械学習における、教師あり学習と、教師なし学習の違いを理解しているかという問題です。

学習手法 入力データ 分野
教師あり学習 問題データと、正解データ 識別、回帰
教師なし学習 問題データ クラスタ分析

大雑把にはこのように分類されます。

いくつかのグループに分かれている既存データ間に分離境界を定め、新たなデータがどのグループに属するかはその分類境界によって判別するパターン認識手法

「ア」は既存データがすでに分類されており(正解データ)、未知のデータに対しその分類のどこに当てはまるかを求めていますので、教師ありに分類されます。

数式で解を求めることが難しい場合に、乱数を使って疑似データを作り、数値計算することで解を推定するモンテカルロ法

「イ」のモンテカルロシミュレーションは、教師ありにも、教師なしにも分類されない手法です。
Q学習と呼ばれる手法に分類され、強化学習の手法に含まれます。

データ同士の類似度を定義し、その定義した類似度に従って似た者同士は同じグループに入るようにデータをグループ化するクラスタリング

「ウ」では、キーワードとしてクラスタリングという単語が出てきており、文章からも正解データが入力されていないのがわかります。これが正答です。

プロットされた時系列データに対して、曲線のあてはめを行い、得られた近似曲線によってデータの補完や未来予測を行う回帰分析

「エ」は曲線あてはめ、回帰というキーワードが出てきていますので、教師ありに分類される手法です。


問5(テクノロジ系:計測・制御に関する理論:リアルタイムシステム


組込みシステムにおけるリアルタイムシステムにおいて、システムへの入力に対する応答のうち、最も適切なものはどれか。


OSを使用しないで応答する。
定められた制限時間内に応答する。
入力された順番を守って応答する。
入力時刻を記録して応答する。


問5 解答

リアルタイムシステムに関する知識を問う問題です。
いまいちIPAのシラバスのどこに属するのかわかりませんでした。
なんとなく順番で出てきてるかなというので、計測・制御に関する理論、に分類しました。

リアルタイムシステムとは、ミリ秒やマイクロ秒オーダでの厳密な時間管理が要求されるシステムのことです。

また、リアルタイムシステムは、要求ジョブを決められた時間内(デッドライン)で終われなかったときの影響によって3つに分類されます。

  • ハードリアルタイムシステム
    • デッドラインを守れないとシステムに致命的なダメージがあるとき
  • ファームリアルタイムシステム
    • システムのサービスが低下だけで、致命的な影響まではない
  • ソフトリアルタイムシステム
    • デッドラインを守れなかったときに、致命的な影響はないが、デッドラインを守れなかったジョブの処理価値は0となる。

こちらの分類もたまに問題としてお目にかかるので要チェックかと思います。

ということで、正解は

定められた制限時間内に応答する。

です。

所感

ついに、応用情報に手を出してしまいました。自分でも未知の領域なところもあるので、一緒に勉強していきましょう!
なにか、間違いや突っ込みどころなどありましたら、気軽にコメントください。




良かったら、押してください!↓↓↓
にほんブログ村 科学ブログ コンピュータサイエンスへ
にほんブログ村

【日記】今日の珈琲 チャフのスマトラマンデリン スマトラ式を調べてレア感に浸る【コーヒー部】

今日の珈琲 今日の珈琲 チャフスマトラマンデリン飲んでみる


こんにちは!
今日は、一関市のチャフのコロンビアを、いつも通りカリタの手回しミルで細~中挽きにして、ハリオのV60でドリップしました。

お豆

一関にあるチャフスマトラマンデリンです。
200gで1000円です。

パッケージはこんな感じ

f:id:gomta777:20191203115220j:plainf:id:gomta777:20191203115555j:plain
図 チャフスマトラマンデリン

マンデリンは、インドネシアスマトラ島で生産されている高級銘柄です。
ロブスタ種がポピュラーなこの国のコーヒー生産の中、スマトラ島のマンデリンはアラビカ種となります。
レア感がある珈琲豆ですね。

f:id:gomta777:20191203110631j:plain
図 チャフスマトラマンデリン

  • 焙煎の基本8段階
  1. ライトロースト(Light roast)
  2. シナモンロースト(Cinnamon roast)
  3. ミディアムロースト(Medium roast)
  4. ハイロースト(High roast)
  5. シティロースト(City roast)
  6. フルシティロースト(Fullcity roast)
  7. フレンチロースト(French roast)
  8. イタリアンロースト(Italian roast)

焙煎は前のキリマンジャロと同様5~6ぐらいでしょうか。

スマトラ式精製法

珈琲の精製過程は様々あるのは過去記事で書きましたが、中でも珍しいスマトラ式というのがあります。

ko-gaku-jiji.hatenablog.jp

詳しくはこちらの南蛮屋さんのページが詳しいです。

生豆のまま乾燥させるので、乾燥期間を短縮することができるそうです。またそれによって、独特の苦みとコクが生まれる。。。らしい。

グラインディング

カリタの手回しミルで細~中挽きにしました。


カリタの手回しミルについては、以下の通りです。
過去記事からの引用です。

【日記】今日の珈琲 一関チャフのキリマンジャロを入れたら部屋がいい香り過ぎた - 工学じじいの縁側日記

カリタ Kalita コーヒーミル 手挽き ドームミル #42033

カリタの手挽きミルかわいいですよね。
挽き具合の調整がねじ式なので一回ちょっとした分解をしなければならないのですが、かわいさでカバーしてます。

欠点があるとすれば、一回に挽ける量(引き出しに入る量)とドームに収まる豆の量がマッチしてない(引き出しを収めた状態で中であふれていることがある)のかな、というのと、これはちょっと辛いのですが、冬場になると静電気で引き出しを開けた瞬間粉がふわーっと飛び散ってしまいます。

対策としては、

  • ちょっと待ってから開ける
  • 加湿器を使う
  • アルミテープを貼る
  • 静電気除去ブラシで掃除する

などがありますが、効果はどうでしょうね?(笑)

ちなみに、ニトリのミル
ニトリのコーヒーミル買ってみた - 工学じじいの縁側日記
は、カリタのドーム型のものと違い豆を収める部分に蓋(屋根?)がないので、引いてる最中に薄部分に挟まった豆がお外に飛び散りまくります。(ので、いったん箱でお休みしてもらっています) 

リッピング

図 ドリッピング

以前も紹介したハリオのV60でハンドドリップしました。
ドリップカップはもちろん、お気に入りのニトリのやつ!

図 ニトリのドリップカップ
図 ニトリのドリップカップ

じわーっと膨らんだ時にすでに、コクのある香りがします。
良く膨らみます。30秒蒸らしたのですが、その間に中から、ボコっボコってガスが噴き出してきます。(そのたびに何とも言えないアロマが(^^♪)

ちなみにハリオのV60も前回の記事から引用しておきます。
安価で、おいしいコーヒーが淹れられ良アイテムだと思います。

HARIO (ハリオ) V60 透過 コーヒードリッパー 02 クリア コーヒードリップ 1~4杯用 VD-02T

ハリオ(HARIO)のV60は陶器製のものに比べて軽くて安くて扱いやすいです。伝統的な、陶器製のものと比べると、

  • 円錐型
    • 形状が円錐形をしており、お湯がコーヒー豆を通過する時間を長くできる
  • 複雑なリブ
    • 近年の加工技術でリブ(空気やお湯の通り道の溝)が複雑で効果的
  • 丸穴
    • 底に大きな丸穴一つだけなので、お湯の流れを妨げない
    • ハンドドリップ時のお湯の量のコントロールが容易

という特徴があります。リブの効果などについてはいろいろ議論はありますが、円錐型と丸穴の効果は高いように思えます。(某社の一つ穴で目詰まりを起こしてクッソえぐいコーヒーになったりするようなことはないです(笑))

出来上がり


スマトラマンデリンとニトリのドリップカップスマトラマンデリン出来上がり!
図 スマトラマンデリン出来上がり

挽き具合はちょうどよかった気がします。もう少し粗くてもよかったかもしれません。

  • 香り
    • 挽いたときはそれほど感じませんでしたが、ドリップの蒸らし中のコクの深い香りは素晴らしかったです。
  • 酸味
    • 酸味は極めて弱く、どちらかというとコクと苦み側に味が向いています。
    • スマトラマンデリンは、浅煎りで味わうともう少しスパイシーなクセと、フルーティな後味になるらしいですが、チャフの焙煎はそれほど癖がなく飲みやすいです。
  • コク
    • 後味は、深く少し甘みの残る感じです。
  • バランス
    • 苦みと、コクが強く、酸味はほとんど感じられませんでした。少し冷めても味があまり変化せずおいしく頂けました。

また、苦みとコクの強さから、ミルクやカフェオレとして飲んでもおいしいと思います。(マキネッタで入れるのも試してみたい)

最近チャフのコーヒー豆は、一関市内のスーパーなどでも購入できますので、もし立ち寄ることがあれば買ってみてください。
(値段設定は謎です)


チャフの場所はここです

ブログ村のボタン良かったら押してほしいです。
よろしくお願いいたします。

【python】pythonでゲームを作るって有りなのか真面目に考えた結果の選択肢

pythonでゲームを作るって有りなのか真面目に考えた結果の選択肢

f:id:gomta777:20191203004356j:plain

pythonで使えるゲームライブラリ

最近のゲーム界隈のプログラミングの流行として、ゲームエンジンてのがあります。有名なものだと、Unityとか、UnrealEngineとかですね。こいつらは、ライブラリというよりは、ゲーム向けの統合開発環境のようなイメージですね。昔は、フレームワークって言ったりもしたけど、とりあえずゲームフレームワークゲームエンジンってそんな明確な分類はしていないようです。
それに対して、ゲームに必要な画像の読み込みや表示、制御などのAPIを提供するのみのものを、ゲームライブラリと呼んでるっぽいですね。
python界隈ではゲームを作ろうとすると、フレームワークというよりはライブラリと呼ばれる分類のものを利用することになりそうです。


pythonで使えるゲームライブラリ

あちこちのページに書いてはありますがpythonで使えるゲームライブラリは主に以下のものがあります。



pygame

f:id:gomta777:20191202230350p:plain

ちょっと有名なゲームライブラリにSDLってやつがありまして、そいつをpythonでラッピングしたのがpygameってことになります。
XNAとか、enchant.jsとかよりは、優しくないですが、SDL自体はとてもメジャーなライブラリということになりますので、pythonでゲーム作ろうと思ったら、とりあえず一番手に上がってくるのではないでしょうか?

現在絶賛とん挫中のうちのテトリス作ってみた企画もpygameです。


初心者がpythonとpygameでテトリス風ゲームを作ってみた #03

youtubeを見るとサンプルが何個かあります。


Helicopter shoot em' up game made with Python and PyGame

ただ、なんだかんだ「ちゃんと」ゲームの形に仕上げて、1個のまとまったゲームとして使えそうだな?と納得するサンプルには出会えないなという印象です。

また、ほかの言語界隈では、SDL2が現在の主流のため、SDLベースのpygameはソフトウェアレンダリングだし、なんか処理が遅いなぁって感じのようです。

もう少しで、SDL2に対応した新バージョンが出るようです。
期待して待ちましょう。

公式サイト:
https://www.pygame.org/

日本語ドキュメント:
westplain.sakuraweb.com

インストール:

pip install pygame

PySDL2

f:id:gomta777:20191202230650p:plain

一時期pygameのテンションが下がりまくって、SDL2対応も見送りされて、これからはpySDL2がpygameの後継になるでしょって言われていたライブラリです。
python用に作られたゲームライブラリというよりは、pythonによるAPIラッパーという感じなので、必要なものは自分で作る意気込みが必要そうです。

これでちゃんとゲーム作ったよっていう記事がそんなにみあたりません。。。これぐらいですかね?

lukems.github.io


公式サイト:
pysdl2.readthedocs.io

インストール:

pip install pysdl2

pyglet

f:id:gomta777:20191202230845p:plain

ディ〇ニーのピンクの豚さんではないです。
マルチプラットフォームのウィンドウイング、マルチメディアライブラリです。ゲームにとどまらず、リッチなUIのアプリケーションの開発もターゲットにしており、フルスクリーンのアプリ製作も可能です。
 ウィンドウ制御、イベントハンドリング、OpenGLグラフィックス、画像と動画の読み込み、サウンドと音楽の再生をサポートしています。画像や、音楽のサポート形式も豊富で、様々な形式のものを読み込むことができます。
また、依存ライブラリがなく単独で動作するという特徴があります。

pygletで作ったminecraftクローンです。

www.youtube.com


公式ページ:
pyglet.readthedocs.io


インストール

pip install pyglet

panda3D

https://camo.githubusercontent.com/db79e6ff5d67eb944e41a5629f9cd9c43cc701c7/687474703a2f2f692e696d6775722e636f6d2f664438385a4d552e706e67

3Dでゲームを作るなら、これが本命でしょうか?
ゲームライブラリというよりは、冒頭に話したゲームフレームワークに属するようです。というのも、
「THE OPEN SOURCE FRAMEWORK FOR 3D RENDERING AND GAMES」
と、公式でうたってますもんね。そして、ゲームのみならず3DCGレンダリングフレームワークとしても機能するので、3DCGシーンの構築などにも役に立ちそうです。UnityやUE4にならぶとまでは言わないまでも、python環境でのフレームワークといえばpanda3Dになるのではないでしょうか?

Panda3Dサンプル:
www.youtube.com

公式ページ:
www.panda3d.org

インストール

pip install Panda3D

kivy

f:id:gomta777:20191202235100p:plain

pythonでゲーム作れないかな?ということで検索すると必ず出てくるのがkivyです。
kivy自体はゲームライブラリではありません。
NUI(Natural User Interface)構築のためのUIライブラリという位置づけで開発されています。マルチタッチイベントに対応しており、マウス、キーボード、TUIO、OS固有の広範な入力をサポートしています。OpenGL ES 2のVertext Buffer Objectとshadersを使用したグラフィックライブラリ、マルチタッチ対応のさまざまなウィジェット
、カスタムウィジェットを容易にデザインするための中間言語Kvを持つ、などの特徴があります。
pythonでアプリにGUIを導入しようと思うとコレって感じですかね?
そういう感じなので、日本語の資料も多く公式のドキュメントもほとんど日本語化されています。

pyky.github.io

ユーザーによる解説ページも非常に豊富ですので使いやすいかと思います。

描画や画像読み込みなどの機能も豊富で、それらkivyの持つ様々な機能を使ってゲームを作ることも可能です。

kivyゲームサンプル:
www.youtube.com

公式ページ:
kivy.org

インストール:

  • 最新のpipとwheelを持っていることを確認します:
python -m pip install --upgrade pip wheel setuptools
  • 依存関係をインストールします(gstreamer(120MB)が必要ない場合はスキップできます、 Kivy’s dependencies(Kivyの依存関係) を参照してください)
python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
python -m pip install kivy.deps.gstreamer
  • Python 3.5の場合には、glewの代わりに使用できるangleを追加でインストールできます:
python -m pip install kivy.deps.angle
  • Kivyをインストールします:
python -m pip install kivy

Pyxel

f:id:gomta777:20191203000604p:plain

何気に、今回一押しのライブラリです。

Pyxel (ピクセル) はPython向けのレトロゲームエンジンです。

使える色は16色のみ、同時に再生できる音は4音までなど、レトロゲーム機を意識したシンプルな仕様で、Pythonでドット絵スタイルのゲームづくりが気軽に楽しめます。

ファミコン世代にはたまらんこだわりを感じるゲームライブラリです。
ファンタジーコンソールを参考に作られており、昔の8ビット機のようなゲームの製作をターゲットにしています。

製作者が日本人なことと、じわじわ人気が出てきているので資料も増え続けています。
そして、ゲーム制作時に無駄に高機能なものを突き付けられ途方に暮れることもないです。まずは、このライブラリでじっくり本来の「ゲーム」ってなんだ?というところを学んでみるのに最適ではないでしょうか?

公式ページ:
pyxel/README.ja.md at master · kitao/pyxel · GitHub

インストール:

pip install -U pyxel

所感

足りないものは、何でも作ればいいじゃん、って人はSDL系のものを使うのもいいですが、やっぱり、初心者だし簡単にちょっと〇〇してみたいなぁみたいなときに使えるライブラリがなくて困ってましたが、これからはちょっと規定できるのかなって思います。
やたら、pygameおすすめされてますが、そのページをよく見てみてください。ゲーム作ってないんで(笑)
~してみた、で終わってるページ多くないですか?