めも

メモ.

エキスパートPythonプログラミングを読んで(2)

各章を読み進める上で調べた内容

各章を読みながら、そこに出てきた内容や気になったことを調べた際に参照したリンクと書き留めです。本に記載してあるリンク以外のみ貼ります。全14章です。

前回:エキスパートPythonプログラミングを読んで(1) - めも

第6章

AWSなどへの開発したアプリケーションのデプロイの仕方・パッケージの管理・ベンダリング等についてコードを引用しながら紹介する章。

Twelve-Factor App methodology

ソフトウェア・アプリケーションをサービスとして提供する場合の、その開発・構築の仕方についての一般的な方法論。

The Twelve-Factor App (日本語訳)

www.slideshare.net

ポートバインディング

The Twelve-Factor App (日本語訳)

サーバ単位でサービスを提供するのではなくポート単位でサービスを提供・公開できる状態にすることで、環境ごとにサーバ設定を指定する必要性をなくす。

DevOps技術

DevOps 技術: デプロイの自動化  |  Google Cloud

他Web上に資料が多くあるので、それらと併せて本書を読む。

Fabric

python製のデプロイ自動化ツール、リモートホストの操作を自動で行うために使用される。Fabricが主にpython2、fabric2がpython3.4+を対象にしている。本書では主にFabricを対象にした説明が行われていた。

概要とチュートリアル — Fabric ドキュメント

コマンドライン 経由で 任意の Python 関数 を実行するツールです。(低レベルライブラリの上に構築された)サブルーチンのライブラリで、SSH経由で 簡単に かつ Python風に シェルコマンドを実行します。

これまで使用したことはないが、以下によるとバージョンアップした時の互換性に注意する必要があるようなので心に留めておきたい。

https://heartbeats.jp/hbblog/2018/11/fabric2-01.html:embe

Django

本書ではDjangoの説明ではなく、 Djangoで作成したアプリケーションのデプロイが話題の中心になる。一度自分で動くものを作って理解しなければならない。

Home - Django REST framework

[https://qiita.com/init/items/f5a5a64a05541fcda713:title]

プロセス監視ツール

10.2 プロセス監視ツールの作成(WMIを使用したプロセス監視) (サイバーセキュリティプログラミング Pythonで学ぶハッカーの思考) - Engineering Note

GitHub - giampaolo/psutil: Cross-platform lib for process and system monitoring in Python

Circus: A Process & Socket Manager — Circus 0.15.0 documentation

【Python】Supervisorによるスクリプトのデーモン化 | Hbk project

第7章

Python以外の言語で拡張APIを記述し、それらをPythonから実行する手順について説明。

GitHub - pybind/pybind11: Seamless operability between C++11 and Python

Basic Tutorial — Cython 3.0a5 documentation

1. C や C++ による Python の拡張 — Python 3.8.3 ドキュメント

第8章

大人数が参加するプロジェクトでのバージョン・コード管理についての説明が為されている章。

バージョン管理

gitflow = 「A successful Git branching model」を基にしたgitを用いた開発のワークフロー

CI・継続的インテグレーション

githubやbitbucketなどのgitソリューション上にソースコードをコミット→指定したステップでビルド・テスト処理を自動で実行する。Travis CI(https://travis-ci.org/)はpublicなリポジトリでは無料で実行できるので、一度使用してみる。すべてにおいて最良となるツールはないので、実行環境に合わせて選択する。オンプレミスで実行する必要があるならばjenkins, githubのオープンなプロジェクトならTravisCI...など。

第9章

プロジェクトのドキュメント作成について、技術書を書くための基本的なルールとそれらを行うためのツールの紹介をする章。

技術文書の書き方

必要なことは全て記述し、必要でないことは記述しない。新しく導入する概念が存在する場合は、同時に複数の導入を行わない。フォーマット・表記は全体で統一させる。つねに一人のペルソナを想定し、その人に向けてわかる文章を記述する。

エキスパートPythonプログラミングを読んで(1)

各章を読み進める上で調べた内容

各章を読みながら、そこに出てきた内容や気になったことを調べた際に参照したリンクと書き留めです。本に記載してあるリンク以外のみ貼ります。全14章です。

第1章

Pythonの基本、環境、2と3の違いについての章。

PEP

www.slideshare.net

Lesson 13 旧バージョン2環境への対応、標準ライブラリ ― Python言語の文法(応用編):機械学習&ディープラーニング入門(Python編) - @IT

デバッグ

www.slideshare.net

VS CodeでPythonコードのデバッグも楽々!! (1/4):Visual Studio Codeで始めるPythonプログラミング - @IT

第2章

イテレータ・ジェネレータなどの構文の紹介とそれらの使い方について。

Unicode

www.slideshare.net

www.slideshare.net

mutable/immutable

オブジェクトによっては 値 を変更することが可能です。値を変更できるオブジェクトのことを mutable と呼びます。生成後に値を変更できないオブジェクトのことを immutable と呼びます。 引用元:3. データモデル — Python 3.8.3 ドキュメント

immutableなコンテナであっても、コンテナがどのオブジェクトを格納しているのかさえ変化しなければ、コンテナのもつmutableなオブジェクトの値は変更できる。到達不能 (unreachable) な状態になれば自動的にガベージコレクションの処理が行われる。ただしファイルは必ず明示的に閉じるべき。

Pythonの組み込みデータ型の分類表(ミュータブル等) | ガンマソフト株式会社

Literal String Interpolation

stringの中で{}で囲まれた部分を式として評価して出力する。

PEP 498 -- Literal String Interpolation | Python.org

collection

list, dictなどのコレクションの機能と選び方について。

collections --- コンテナデータ型 — Python 3.8.3 ドキュメント

組み込み型 — Python 3.8.3 ドキュメント

exception KeyError(KeyError):キーの集合内に指定したキーが存在しない時のエラー

itertools

itertools --- 効率的なループ実行のためのイテレータ生成関数 — Python 3.8.3 ドキュメント

無限イテレータ、最短のシーケンスによって止まるイテレータ(ドキュメントでの「Iterators terminating on the shortest input sequence」)、組合せイテレータが存在する。

Itertools in Python 3, By Example – Real Python

filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8

zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-

他気になったこと

  • len()について。

www.slideshare.net

  • decoratorについて

Python のデコレータについて理解した話 | レコチョクのエンジニアブログ

Python decorator

第3章

クラス関係のベストプラクティスと使い方について。

9. クラス — Python 3.8.3 ドキュメント

Lazy initialization(遅延初期化)

特定のオブジェクトの作成のコストが大きい割に実際に使用されるかどうかわからない状態の時、初期化のタイミングを使用される直前まで遅らせる、といった実装をすることがある。

限定的な初期化 | Microsoft Docs

.net - What is lazy initialization and why is it useful? - Stack Overflow

_metaclass_

Python の メタプログラミング (__metaclass__, メタクラス) を理解する | yunabe.jp

3. Data model — Python 3.8.3 documentation

第4章

コーディング規約や変数名の付け方について。リーダブルコードなどの文献も参考になる。

VSCode拡張

settings.jsonの記述

Command(Ctrl) + , で設定を開く。

Settings Reference for Python

Using Python Environments in Visual Studio Code

その他

www.slideshare.net

www.slideshare.net

第5章

パッケージの作り方とパッケージをリリースをするまでの工程・PyPIについての説明。

パッケージとは

パッケージ (package) は、Python のモジュール名前空間を "ドット付きモジュール名" を使って構造化する手段です。(引用元: 6. モジュール — Python 3.8.3 ドキュメント)

[Python入門]パッケージ (1/2):Python入門 - @IT

6. モジュール — Python 3.8.3 ドキュメント

インポート失敗時の例外=ImportError、ModuleNotFoundError(組み込み例外 — Python 3.8.3 ドキュメント

www.slideshare.net

pythonスクリプトのexeファイル化

各ツールの使用例とデコンパイルを困難にするための手法について本書で説明されています。

難読化コード - Wikipedia

耐タンパー性(タンパーレジスタンス)とは - IT用語辞典 e-Words

他のサイトの感想

購入を判断するために読んだ感想や他の方の記事です。

【感想・ネタバレ】エキスパートPythonプログラミング 改訂2版のレビュー - 漫画・無料試し読みなら、電子書籍ストア BookLive!

『エキスパートPythonプログラミング』|感想・レビュー - 読書メーター

『エキスパートPythonプログラミング 改訂2版』を読んだ - Tsukasa OMOTO - Medium

データベーススペシャリストに関する情報のメモ(2)

概要

次回の試験予定は未定。

IPA 独立行政法人 情報処理推進機構:制度の概要:データベーススペシャリスト試験

データベーススペシャリストに関する情報のメモ(1) - めも

メモ

正規化理論

正規化のメリット - 冗長性の排除 - データ更新をしやすくする

ただし、データの更新が必要ない場合は正規化を行わなくても良い場合がある。

更新時異状

第一・第二・第三正規が行われていない時に発生する可能性がある。

  • タプル挿入時異常
  • タプル更新時異常
  • タプル削除時異常

参考文献

「正規化理論」を理解する (1/2):「データベーススペシャリスト試験」戦略的学習のススメ(9) - @IT

データベースの正規化の説明 | Microsoft Docs

関係の正規化 - Wikipedia

正規化手順

各ステップ

  • 導出属性(他の属性から計算できる値)の削除、計算コストが高い場合など状況によって残す場合もある
  • 繰り返しの削除
  • 従属関係となっているデータの分離=主キーが決まれば自動的に決めることができる値を分離する
  • 推移的関数従属の分離
  • ボイスコッド正規形
    • 主キー以外のカラムが全て主キーに完全関数従属となっている状態
  • 第4・第5正規形:3つ以上の主キーからなるテーブルに対して分離する操作を行う

参考文献

【DB概論】正規化の手順 (1/2):できるエンジニアになる! ちょい上DB術・基礎編(7) - @IT

関係代数

  • union: R∪S: 属性名が一致している関係表を縦の方向に結合する
  • subtraction: R-S: 属性名が一致している関係表のうちSに含まれるものを取り除く
  • cartesian product: RxS: 二つの関係表の組み合わせのタプルを作成する
  • projection: πA11, Ai2, …, Aik (R) : 属性を選択
  • selection: σρ(R)[A1, A2, …, Am] : 行を選択
  • intersection: R∩S: 共通集合の選択
  • quotient: (R÷S): R末尾に含まれる属性からSに含まれるものを取り除く
  • θ-join: 二つの関係表の属性間の間に特定の条件が成り立つ場合のみ結合する
  • natural join: R|X|S: 属性が同じ値をもつ箇所のみ結合する

  • 内部結合:一致する箇所のみ残す結合

  • 外部結合:一致する箇所がない場合も属性を結合しNULLを埋める

参考文献

データベース設計

  • 業務分析
  • 概念設計・エンティティの抽出
  • 論理設計
    • エンティティの定義
    • ER図の作成
    • 属性の洗い出し
    • 正規化
  • 物理設計

を行う。アプローチの仕方によって順番は異なる。例えば

  • トップダウン:ER図作成→属性の洗い出し→正規化
  • ボトムアップ:属性の洗い出し→正規化→ER図作成

など。

設計の原理

  • 直行設計の原理: 同一の関係を表現するために複数の関係を用いない
  • 正規化の原理

変更履歴を管理するテーブルの設計

試験の範囲ではないように思うが、気になったので調べてみた。

AWSのデータベース

AWSの各種データベースサービスになど、どのようなケースでどれを使用するかについて、後ほど詳細確認したい。

www.youtube.com

参考文献

データベーススペシャリストに関する情報のメモ(1)

試験概要

春の試験がなくなってしまい、今後のスケジュールがわからないものの次に受けたいものの勉強を始めてもいいかと思いました。 つまり、試験日は

www.jitec.ipa.go.jp

メモ

データベースの基本

データモデル

  • 概念データモデル:ユーザーの要求に基づいて、必要なデータなどを大まかにまとめたモデル
  • 論理データモデル:システム上必要な属性を決めて、実装可能な状態で定義したモデル
  • 物理データモデル:実装上最適な形で属性の型やデータベースの物理的な配置を定めたモデル

エンティティの決定

実際の業務の内容の調査やヒアリングを通して、業務上でシステム化する範囲・何をエンティティとすべきかを決定する。

  • 例:
    • XXXする→イベント系エンティティの候補
    • 単語→リソース系エンティティの候補

www.slideshare.net

論理データモデルの種類

  • 階層型データベース

データ群を木構造を木構造で表現。下層のデータが交わる子tがない。

  • ネットワーク型

上記と異なり下層のデータ間に関係をつけることもできるが、自由度が高い分設計が複雑になる。

  • 関係

データ間を外部キーの関係で表現する。データベース=関係の集まりと捉えたモデル。

  • オブジェクト指向

参考文献

【初級】ゼロから学ぶDOA 最終回 | 日経クロステック(xTECH)

II-16-4. ORマッピングの仕組み | 日本OSS推進フォーラム

データベース | ITの基礎知識|ITパスポート・基本情報

関係代数

「関係代数」を理解する (1/3):「データベーススペシャリスト試験」戦略的学習のススメ(11) - @IT

www.slideshare.net

三値論理:True・False・NULLの3つの値で状態を表現

試験範囲ではないだろうが、True・Falseによるフラグ+NULLをどのような状況で利用すべき・利用すべきでないかは知っておきたい。またNULLが値に含まれる可能性がある論理演算では意図しない結果に注意すること。集計時のNULLの扱いにも注意。

NULL はデータの欠落をあらわす、任意の値や別の NULL と等号や不等号は成立しない。

連結演算子は一方だけが NULL である場合は結果は NULL とならない。 2つのオペランドが NULL の場合には NULL となる。(下記サイトより引用)

参考文献

www.slideshare.net

システム開発

  • プロセス中心

データフロー図や状態遷移図を用いてデータの流れを表現して、必要な機能を決定する。プロセスを速く動かすことが優先された設計になる。データが冗長になっている箇所が発生すると、ファイル変更時にその影響範囲を確認する必要がある。

  • オブジェクト指向

シーケンス図やUML・データ・メソッドを一体化したクラスを用いて業務上のシステムを表現する。

  • データ中心

一つのデータは一箇所にしか存在しないようにして、データの一貫性・整合性を保つように設計する。


上記の方針はデータベースの設計のみを対象にしているが、さらにユーザー要件を踏まえてつつ最終的な設計を行う。

  • システム構成
  • バックアップ・リカバリーの仕方
  • ネットワーク上の制限

など。

CRUD分析

C(Create)、R(Reference)、U(Update)、D(Delete)を用いて表データに対する処理を表現し、データベース設計時の整合性や運用(データの保存期間やリカバリーポイントの決定)の分析を行う。

参考文献

【DB概論】データベース設計の重要性とデータ中心アプローチ (1/2):できるエンジニアになる! ちょい上DB術・基礎編(5) - @IT

CRUD分析 – データベース研究室

データ独立と3層スキーマ

外部スキーマ

データベースの構造について理解する必要がないユーザー・アプリケーションに提供されるデータベースの記述。例:ビュー

概念スキーマ 外部スキーマと内部スキーマの中間の存在。エンティティやテーブルの関連を表現する。例:テーブル

内部スキーマ 概念スキーマをコンピュータ上に実装するための記述。例:インデックス

参考文献

「ANSI/SPARC 3層スキーマアーキテクチャ」を理解する:「データベーススペシャリスト試験」戦略的学習のススメ(4) - @IT

Mac OS XにてDiscordアップデート時に「A fatal javascript error occured」

現象

  • OS:MacOSMojave, Macbook Pro
  • 日時:2020/06/01

この時点てのDiscord最新版を起動しようとして「A fatal javascript error occured」となる。

Error: cannot find module 'User/..../Application Support/discord/0.0.257/modules/discord_desktop_core/index.js'. Please verify that the package.json has a valid "main" entry...

といったエラーメッセージが出ている。

解決までの手順

エラーメッセージで検索したところ、ネットワークエラーのため正常にアプリがダウンロードされていない・一時ファイルが破損するなどして正常に起動できないパターンなどの時にこのエラーが発生する。

はじめ、最近ネットの接続を変えたためネットワークエラーを疑い、DNSの設定なども確認したがこちらの設定は正しかった。

エラーメッセージで検索すると、Windowsで同様のエラーが出る場合があることがわかり、一時ファイルを削除して再インストールしたら解決したという。参考:

それに倣って、

  • Discordをアンインストール
  • Finderを開く
  • [移動]を開く

f:id:misos:20200601200124p:plain

  • 移動を開いた状態で「Option」キーを押し続ける
  • [ライブラリ]の項目が表示されるのでライブラリを選択
  • [Application Support]のフォルダ以下へ移動
  • [discord]のフォルダを削除
  • discordの最新版を再インストール

としたらインストールが完了した。

Helltakerを遊んだ

f:id:misos:20200528090402p:plain

決まったターンで障害物を動かしながら進むパズルゲーム。ヒントを見ると色々なキャラクターの会話を見ることができる、時にはヒントじゃなかったりも。

1時間程度でクリアできたけど、最後だけは反射神経と集中力が必要。

日本語化バッチも用意された方がいらっしゃるようです。今度は日本語でやってみよう。

Helltakerほんやく後記|陽炎01型|note