にゃんころりん について

人生の大半はノーカメラ、ノーフォトグラフィーで生きてきました。 黒歴史? いえいえ、撮りもしなければ、写りもしない「自由な」時代でした。 まともに写真を撮り始めたのは3年前からです。 写真でもがきはじめる時代の始まりです。 残りの人生を過ごすには、ちょうどよい具合です。

勝手に注釈「Python プログラミングのツボとコツがゼッタイにわかる本」

 この本「最初からそう教えてくれればいいのに!Pythonプログラミングのツボとコツがゼッタイにわかる本」は、私が受講したハロートレーニングの授業でPythonの基礎学習に使っていた書籍です。学校ではオンラインテキストで提供されていましたが、受講修了後は使えなくなるということで、自費で紙媒体のものを購入しました。古い本だということもあり、アマゾンの古本で100円+送料でした(笑)。授業ではこの本の2章までしか使っておらず、3章以降のWebプログラミングのところは、別途Django入門書を使って学習しました。折角購入したのに使い切らないのは気になるということもあり、3章以降も独習してみたので、その際に気になったことや躓いたところを勝手に注釈しちゃいます。学習書としては、参考書よりは教科書タイプの本なので、以下の点を踏まえて最新のソフトウェア環境で使えば、まだまだ利用価値のある本だと思います。ちょっと昔のPython本ということで発行数も多かったのかもしれませんが、きれいな古本がワンコインで手に入るのも魅力です。

 この本は2016年12月の発行ということもあり、対象としているソフトウェアのバージョンが以下のように古いです。

  • Python 3.5.2
  • Django 1.10

 Pythonの方はバージョン3なので問題なかったですが、Djangoは、この本で対象としているかなり古いバージョンの1.10をあえて指定して入れないと、うまく動作しないかと思います。私はというと、いまさらそんな古いバージョンを入れるのは気に入らないので、これも修行ということで、Djangoは現時点での最新バージョンである4.1.7でトライしてみました。そして案の定、そのままでは不都合なところがありました=^_^;=。ネットで調べたりドキュメントにあたってみたりして、なんとか3章と4章の学習を終えることができたので、その際に手を加えたり修正したりしたところを書いておこうと思います。

 この本では、2章まででPythonの基礎を学びながら、カードゲームの「ブラックジャック」を作っていく流れになっています。といっても、コンソール上で動作する味気ないものですが、基本のロジック部分はここで出来上がりです。続いて3章以降で、これをWeb上で動くように、Web開発フレームワークであるDjangoを使って組み上げていくことになります。2章までに作ったロジック部分は、そのまま関数として組み込んで使います。(※つまり、クラスではなく関数ベースでの構築となります。)このあたりは学習に無駄がなくていいです。まずは、Web上でといいながらも文字ベースで動作するものを作り、さらに進んでグラフィックを使ったものに差し替えるという流れです。最後は、見栄えもいいものが出来上がりました。まぁ、Djangoの説明部分はボリュームも限られていますので、DjangoはDjangoで別の専門の入門書を紐解いた方がいいかと思います。しかしながら、Djangoは別の本で学習した前提での話ですが、この本で扱うDjangoの部分も面白かったです。

 前述のとおりこの本のDjangoでは、処理のところは関数で書かれていて、クラスとかは使われていません。でも、そのせいでわかりやすいです。また、ロジック部分は、2章までで完成しているので、3章以降の関数は、主にWeb上で動作させるためのものが説明されており、理解しやすいと思いました。それと、モデルのところも、よく使われるSQLiteとかのデータベースは使われておらず、簡略なしくみのRedisというものが使われています。このRedisに興味をもったのも、私が3章以降にもトライしようと思った一因でした。一般のDjango本はデータベースで動かす前提で書かれているものが多いのではないでしょうか。このRedisは、キーバリュー型のインメモリでデータを保持する仕組みで、機敏に動くのではないかと思います。あくまで初心者の感想ですが、RDBと使い分けるのも面白いし、知っておいて損はないと思います。で、私が修正追加した事項は以下のとおりです。

  1. url.pyの記述書式が古いので書き換え
  2. setting.pyのredis関連の記述の追加
  3. プログラムリストの記述に間違いがあるので修正

バージョンの関係で、url.pyがurl形式で書かれていてエラーになったので、path形式に書き直しました。書き直したurl.pyの内容は以下のとおりです。

firstDjango配下のurl.py

from django.contrib import admin
from django.urls import path
from django.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('firstApp/', include('firstApp.urls')),
    path('BJ/', include('BJGame.urls')),
]

firstApp配下のurl.py

from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.hello),
    path('cards/', views.cards),
    path('random_cards/', views.random_cards),
    path('welcome/', views.welcome),
    path('form_test/', views.form_test),
    path('form_card/', views.form_card),
    path('login/', views.login),

BJGame配下のurl.py

from django.urls import path
from . import views

urlpatterns = [
    path('game/', views.game, name='game'),
    path('howto/', views.howto),
]

 redisについては、最初エラー(「no such tabledjango_session」) が出た内容でググると、migrateしろと出てきたのですが、それではredisではなく普通にSQLiteとかのデータベースを使っちゃうことになるんじゃないかと思い、さらに調べて以下の内容をsetting.pyに付け加えたところ、使えるようになりました。動かすだけなら、「python manage.py migrate」でSQLiteを使うのでもいいでしょうけど、redisを使うなら以下の方法をお薦めします。とはいえ、ここは私もよくわかってないので、ネットにあったものをそのまま流用してます=^^;=。それと、django-redis 5.3.0というパッケージをpipで追加インストールしています。

setting.pyに以下を追加

# Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    }
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'

SESSION_EXPIRE_AT_BROWSER_CLOSE = True

 あと、P272に記載のあるソースコードの抜粋リスト6に誤植があります。「if ending :」の行のインデントがずれています。まぁ、Pythonあるあるで普通ならわかるのですが、この行の上が抜粋で端折られているので気づけなかったです。P287に改めて完成版のソースコード全体が記載されていて、こちらは合っていますのでこちらを参照されるといいかと思います。

 さて、一通り学習を終えた後の感想ですが、ブラックジャックという簡単なカードゲームのプログラム作りを軸として、Pythonの基礎からWebフレームワークでの実装まで無駄のない流れで説明されていて、教科書タイプの学習書としてよくできた本だと思います。後の章で、それ以前の章で扱った内容が必要となって混乱するってことがないので、とてもスムーズで学びやすいです。もちろん、この本だけでは学べる知識は限られていて、他の参考書的な本で補足して学ぶことは必須になります。しかし、初学者には挫折することなくたのしく学べて、学習プロセスと学習対象自体の見通しが良いことも必要だと思います。私は良書だと思いますが、この本の改訂版が出てないのが残念ですね。

定年後の音楽ライブ~新生BABYMETAL~

 定年後となったからといって、基本的に定年前と聴きにいくライブが変わるわけではなく、今年の予定もBAND MAIDとBABYMETAL、そしてフェスです。定年後のいいところは、スケジュールの制約が緩くなったことです。フルタイム勤務だと、仕事で行けないやら、この日程で遠征はムリ、とかでてきちゃいますが、定年後は行きたいライブ中心で決めてしまうので楽。一方、最近問題化してきたのは、体調管理というか健康面ですかね。ぎっくり腰になってライブ行けねぇ~、とかあり得る状態になってきてるから怖い。それ以前に、ジャンプがキツイ(笑)今の状態だと、サークルピットで走り回る自信なし、です。

続きを読む

定年退職後のハロートレーニング

 公的な職業訓練を総称してハロートレーニングというそうで、私が受講したのは、求職者支援訓練になります。「主に雇用保険を受給できない方」対象の部類のようですが、ハローワークが認めれば受給者でも受講できるようで、私もそのケースでした。正直、公共職業訓練と求職者支援訓練の違いがよくわからないです。提供されるコース内容を見た限りでは、公共職業訓練の方ががっつり系っぽい感じはしましたが。

倒木#161228
続きを読む

定年退職後のハローワーク

坂道#158332

 60歳で定年退職し、働かずともなんとかぼちぼち生活していける目途はあったので、必死に職探しする必要はなかったのですが、離職票が送られてきたのでハローワークへ行ってみることにしました。もらえるものなら、失業給付金もいただきたいし。あと、一度もお世話になったことがない故の好奇心と生活のメリハリになる面白そうな仕事があればという、まぁ能天気な動機もあって。それと、できれば職業訓練でプログラミングを学習して、関連する仕事があればラッキーという気持ちも。とはいえ、きちんとした職業訓練は申し込んでも受からないのではないかと思っていました。というのも、定年前に、定年後にハローワーク行って失業給付金もらった人のブログを覗いていたりしてて、その中に職業訓練の話が出てきてたのですが、若い人優先で申し込めなかったと書かれていましたから。ただ、そのブログは私が見た時点でもすでに内容が古くて、求職活動認定が緩かった過去の話とともに、現在は大きく変わっておりました。

続きを読む

gmail 届かない問題

以前にも個人で使っているメアドや会社のメアドからgmail宛のメールが届かないことがあったのですが、何度か送ったら届いたりしてたので、そのうち設定状況を見てみようと思いつつほっておいたわけですが、ここ最近で完全に届かない状態となってしまって、使用しているメールサービスと独自ドメイン設定を慌てて見直して解決したので、対応内容を忘れないうちにメモします。

続きを読む