STEAM教育ならぬ、STEAMライフ Science + Technology + Engineering + Art + Mathematics
旧『“PLASSON”自作二足歩行ロボット Personal Low-tech ASSembly Of Nisokuhokou 』

2020年5月アーカイブ

「土日でわかるPythonプログラミング教室」
・金曜日:環境構築
・土曜日:Pythonプログラミング
・日曜日:Webプログラミング

*************************************************
■日曜日:Webプログラミング

<本の内容>
DockerのLinux環境からgit clone コマンドでWebアプリ版「人工知能?ななこ」のソースをもってくる。
 
・・・

前と同様、GitHubからソースを単純にダウンロードして、、、ターミナルから python manage.py runserver ・・・

なんか、たくさんエラーが出た(^^;
 
一度、まっさらなDjango
ーーーーーーーーーーーーーーーーーーーーーー
初めてのDjango開発
https://qiita.com/mas9612/items/d616a74f931babae4566
ーーーーーーーーーーーーーーーーーーーーーー
$ django-admin startproject mysite
$ python manage.py runserver

Starting development server at http://127.0.0.1:8000/

では、素直にサーバーが立ち上がりました。
環境がおかしいわけでないようです。

いろいろググってみると、例えば、以下の2つのような説明が。
ーーーーーーーーーーーーーーーーーーーーーー
Memo:[Django]バージョンによるurls.py内のincludeの仕様の違い
https://qiita.com/snuow/items/3350f2d2c713d55b8423
<エラー発生>
urlpatterns = [
  url(r'^testapp/', include('testapp.urls', namespace='testapp')),
]
<これでOK>
urlpatterns = [
  url(r'^testapp/', include(('testapp.urls', 'testapp'),)),
]
> 要するに、namespaceでapp_nameを指定するのではなく、2-タプルで渡してね。ってことみたい。
ーーーーーーーーーーーーーーーーーーーーーー
Djangoのincludeの仕様が変っていてハマったのでメモ
https://mocabrown.com/blog/archives/5346
<エラー発生>
urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^cms/', include('cms.urls', namespace='cms')),
]
<これでOK>
urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^cms/', include(('cms.urls','cms'),)),
]
> ポイントはnamespaceを使わないこと。それと、includeの一つ目の引数としてカッコでくくって渡すこと。
ーーーーーーーーーーーーーーーーーーーーーー

「2-タプルで渡してね。」とか「includeの一つ目の引数として」とか、まだよくわからんけど(^^;、僕の場合は

<現状エラー発生>
urlpatterns = [
  url(r'^admin/', admin.site.urls), #テキストでは使用しません。
  url(r'^api/', include('api.urls', namespace='api')),
  url(r'^', include('talk.urls', namespace='talk')),
]
なので、
<これでOKか?>
urlpatterns = [
  url(r'^admin/', admin.site.urls), #テキストでは使用しません。
  url(r'^api/', include(('api.urls', 'api'),)),
  url(r'^', include(('talk.urls', 'talk'),)),
]

・・・OKでした。Webサーバーが立ち上がりました。
会話をしようとテキスト入力すると、またエラーが・・・あ、そうか、前回のチャットボット同様、,encoding="utf-8_sig" を追記せねば。

結果、こんな感じです。

20200517_AInanako02.jpg

本では、どういう流れでこれが動いているかの解説が続きます。HTTP、JSON、MVCとMVT、Djangoのルーティング、Djangoでのリクエストとレスポンスの扱い方、JavaScript、jQuery、Ajax、、、Web開発のキーワード目白押し。
少ないスペースでポイントがギュッと詰まった感じで書いてあります。まぁ、大まかな把握レベルではあるのですが、目の前で動いているソースなので、説得力というか臨場感というか。

ちゃんと読めてませんが(^^;、Webまわりは、きっとそのうちやるでしょう。
「土日でわかるPythonプログラミング教室」はこれで終了です。

 

次は、スクレイピングの予定。数年前に日経ソフトウェアの付録でさわりをやりましたが、あらためて。どうなりますやら。



朝、PCを立ち上げようとしたら、なんか出た(笑)

20200511DSC_0571.jpg

何度か起動し直すと立ち上がったり、これが出たりで、起動SSDやブートレコードが壊れたとかではなさそう。

USBキーボードを引っ張り出してきて(日ごろ使っているBluetoothキーボードではできない)、BIOS画面を立ち上げてみると、、、

あー、起動用SSDが認識されてなくて、起動順に本来のSSDが入ってないや(笑)

起動用SSDはM.2 なので、ケーブルが抜けかかっているとかいうことはないだろうし、下手すればメインボードがいかれた可能性も。

いちおう、内蔵ボタン電池(2~3年使ったかな)を交換。差し替えに時間を取ってCMOSもクリア。

BIOS設定を確認して、しばらく様子を見ることにします。



「土日でわかるPythonプログラミング教室」
・金曜日:環境構築
・土曜日:Pythonプログラミング
・日曜日:Webプログラミング

*************************************************
■日曜日:Webプログラミング

・・・のはずだったのですが、PCの調子の悪さに、Windowsクリーンインストール実施(^^;;;

20200510kaifuku.jpg

以前は、上の「この PC を初期状態に戻す」を選んで、データファイルを残すかどうか選択して・・・という手順だけでしたが、いつの間にか、下のほうに「その他の回復オプション」としてWindowsのクリーンインストール(データは残る)というのができていました。

「この PC を初期状態に戻す」はクリーンインストールじゃなかったのかいな?

新しくできたほうのクリーンインストールを実施しました。

1~2年に1回くらいやってる気がしますが、アプリのインストールやらなんやら、けっこう手間がかかるんですよねぇ。

復旧作業しながら「ロード・エルメロイⅡ世の事件簿」全話(アニメ)、見ちゃったよ・・・。



「土日でわかるPythonプログラミング教室」
・金曜日:環境構築
・土曜日:Pythonプログラミング
・日曜日:Webプログラミング

*************************************************
■土曜日:Pythonプログラミング
 
<本の内容(1)>
FizzBuzzプログラムを作ってみる。
 1.1から100まで出力
 2.3の倍数の時には数字ではなくFizzと表示
 3.5の倍数の時には数字ではなくBuzzと表示
 4.3と5の倍数の時には数字ではなくFizzBuzzと表示
 
・・・
 
とりあえず、この本は見ずに、日経ソフトウェア2020年5月号の付録「Pythonチートシート」を見ながら、書いてみました。

ーーーーーーーーーーーーー
for i in range(100):
  j=i+1
  if j%15 == 0:
   print("FizzBuzz")
  elif j%3 == 0:
   print("Fizz")
  elif j%5 == 0:
   print("Buzz")
  else:
   print(j)
ーーーーーーーーーーーーー

ちょっと中身を読んで改造
ーーーーーーーーーーーーー
for i in range(1,101):
  if i%3 == 0 and i%5 == 0:
   print("FizzBuzz")
  elif i%3 == 0:
   print("Fizz")
  elif i%5 == 0:
   print("Buzz")
  else:
   print(i)
ーーーーーーーーーーーーー

rangeは少し戸惑いました。
  for i in range(a,b):
って書いた時は、ついBASICの
  for i = a to b
だと思ってしまいます。。。実際には、
  for i = a to b-1
です。
正しくは
  for i in range(a,b):

  a ≦ i < b
です。
ということは、
  for i in range(b):
って書いたときも、iは0からb-1までb回まわる、と思ってしまっては間違いで、あくまでも
  0 ≦ i < b
なのだな。
 
本では、ここからしばらくPythonの基本文法(変数、演算子、if文、for文等)分の説明が続きます。
昨日の「金曜日:環境構築」は少々敷居が高い感じがしましたが、このあたりの説明はとても丁寧です。

 
<本の内容(2)>
DockerのLinux環境からgit clone コマンドでチャットボットプログラムのソースをもってくる。
 
・・・
 
うーむ。Windows10+Anaconda+Pycharmだとどうすればいいのかな・・・カミさんに聞いて、GitHubからソースを単純にダウンロードすることにしました。
GitやGitHubについては、また別の機会に確認することにします。

コピーしたソースを走らせるとエラーが発生・・・えぇと、一連のエラーの発端は、
UnicodeDecodeError: 'cp932' codec can't decode byte 0x87 in position 61: illegal multibyte sequence
ってやつだな。
DockerのLinux環境で動くソースだからutf-8が前提と思われるところ、WindowsのShift-JISではエラーになるってことかな。
そこでググって
ーーーーーーーーーーーーーーーーーーーーーー
WindowsでCP932(Shift-JIS)エンコード以外のファイルを開くのに苦労した話
https://qiita.com/Yuu94/items/9ffdfcb2c26d6b33792e
ーーーーーーーーーーーーーーーーーーーーーー
を参考に、ファイルをオープンしているところに
「,encoding="utf-8_sig"」
を追加。
動いた!(^o^)/ しかし、文章を覚えさせるほうでも同じ原因のエラーが(^^;。そこも修正。
 

20200508_AInanako01.jpg

 
本では、チャットボットのソースを解析しながらの説明(import、fromと__init__.py、ユーザー定義関数、while/continue/break文、オブジェクト指向、ファイル入出力、形態素解析、乱数、辞書型/タプル型、文字列操作、マルコフ連鎖等)が続きます。
 
 
この本のAmazonの書評はかんばしくありません。ソースをダウンロードして眺めるだけの本、という評もあります。
確かに、本を読んで書けるようになるための説明というよりは、チャットボットの仕組みをどんな風に実現しているか、という内容だと思います。でも、初心者向けのごまかし説明ではなく、けっこう真正面から説明していて、会話タイプの人工知能への最初のアプローチとしては、なかなかの本ではないかと思います。
少なくとも僕は、今はわからないところもあるけれど、後日、戻ってきて読み返したい、という気持ちになりました。
 
さて、明日は Django です。



以前に購入した「土日でわかるPythonプログラミング教室」を引っ張り出してきました。

形態素解析を使ったチャットボットプログラムが取り上げられている本です。一から組み立てるのではなく、Pythonのコードをダウンロードして動かしてみる、という内容です。

Pythonを学ぶというよりは、こんなこともできるのねー、ということを感じる本・・・かな。

土日で、とありますが、
・金曜日:環境構築
・土曜日:Pythonプログラミング
・日曜日:Webプログラミング
となっています。

 
 
*************************************************
■金曜日:環境構築
 
<本の内容>
「Docker Toolbox」と「Atom」をインストール。Atomを日本語化する。「Docker Toolbox」の「Kitematic」でコンテナを作る。
コンテナ内に同梱されている主要なもの:
 ・Python
 ・MeCab(形態素解析エンジン)
 ・Django(Webアプリケーションフレームワーク)
コンテナ内でターミナル使ったディレクトリの確認とDjangoの起動を行う。
 
・・・
 
説明は丁寧ですし、トラブらなければ難しくはないと思います。しかし、"土日でわかる"の前に金曜日でつまづく人が多数出そうではあります(笑)。

僕は、この先、Dockerが必要となりそうな予定はないし、今のWindows10+Anaconda+Pycharmに慣れたいところです。なので、Anaconda navigatorでDjango入れた仮想環境を作って、Pycharmでsの仮想環境を指定する方法でやってみようと思いました。
違いは、DockerがPC内に別の仮想PCを用意する(この場合、WindowsPC内にLinuxのPCを作る)ものであるのに対して、Anaconda navigatorは同じPC内でプログラミングを行う仮想環境(Pythonのバージョンが違うものを使うとか、必要なライブラリが異なるとか)を用意するもの、ということになります。

たぶん(笑)

こうした違いを乗り越えること自体が、とても良い経験になります。
 
さっそく、Anaconda navigatorで仮想環境を・・・あれ?今までの仮想環境とは別のディレクトリにできてしまいました。
これまでは、たまたま、Pycharmからconda指定して仮想環境を構築してばかりだったので気づかなかった(^^;
仮想環境をAnaconda navigatorで作る場合でも、Pycharmで作る場合と同じディレクトリはにしておくことにしました。
ここでググって
ーーーーーーーーーーーーーーーーーーーーーー
開発メモ その127 Anaconda navigatorの仮想環境のディレクトリを変更する
https://taktak.jp/2018/07/21/3094
ーーーーーーーーーーーーーーーーーーーーーー
を参考に
1).condarc を開く。
2)下記の記述を追記する。
envs_dirs:
- /Users/nolan/newpath(←ここはディレクトリを書く)

これで、Anaconda navigatorでもPycharmででも同じディレクトリに仮想環境ができるようになりました。
 
次は、MeCabです。
これもググって
ーーーーーーーーーーーーーーーーーーーーーー
Windows環境のPython3でMeCabを使ってみよう
https://www.gis-py.com/entry/mecab
ーーーーーーーーーーーーーーーーーーーーーー
を参考に
1)Windows環境にMeCabをインストール
2) 先ほどのAnaconda navigatorで作った環境でPycharmでプレジェクトを作る
3) PycharmのTerminalで
pip install ipykernel

pip install mecab-python-windows
を実行する。
4) (MeCabのインストール先)/bin
にある"libmecab.dll"というファイルを
(Pyhthonのインストール先)/Lib/site-packages
にコピーする。
5)サンプルプログラムで動作確認

これで、僕のPCでMeCabが使えるようになりました。
上記の参考サイトのほか、
PythonでMeCabを利用する方法を現役エンジニアが解説【初心者向け】
https://techacademy.jp/magazine/22052

MeCabで遊んでみる。すぐ使えるコードあり。
https://note.com/yuhyuh/n/ne6819dcfad0e
などが参考になると思います。
 
これで「金曜日:環境構築」は終了しました。

 



日経ソフトウェアの付録「5日でできる!Pythonでゲーム作成入門」の最後の章、「シューティングゲーム」が完成しました。これまた、ちょっとだけ、改造しています(^^;

Pygame Zero というゲーム用ライブラリの入門ではありましたが、ちょっとしたアクションゲームなら、こんなに気軽に作れるんだなぁという驚きがありました。
Pythonそのものの学習にはならなかったかもですが、なかなか楽しかったです。

 

さて、次は、何を使ってみようかな。



このアーカイブについて

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

前のアーカイブは2020年4月です。

次のアーカイブは2020年8月です。

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