積読をなくす、本気でなくす

読書の記録にしていきます

きれいなpython プログラミング

1章エラーの取り扱いと質問の仕方
ここから始まるのかという印象、構成が面白い。でも独学しようとすると意外とこういうところが一番大事かもしれない。Pythonのエラーメッセージの出方って独特だからちゃんと読まないとよくわからないというのはほんとうにそう。
- トレースバックを読め
- エラーメッセージで検索しろ
- リンターを使え
- リントって言葉の由来知らなかった
- 掲示板で質問しろ
- ただし質問するときは必要最低限のお作法は守ろう

2章環境設定とコマンドライン
これもPythonというよりOSの理解の章。ただここを理解してないときついのでしっかり教えてくれるのはありがたい。
2-1ファイルシステム
- 本書のルートフォルダはC:\ (Linuxの場合は/に読み替え)
- 追加ボリュームはD:¥、E:¥(Linuxの場合は/mnt)
- pathlibでOSの違いを吸収する
- ホームディレクトリはC:\Users(Linuxの場合は/home)
- 作業ディレクトリ(cwd)
-
from pathlib import Path import os Path.cwd()
-
- 絶対パス
- 常にルートフォルダから始まる
- 相対パス
- cwdからのパス
- . はこのフォルダ
- .. は親フォルダ

2-2プログラムとプロセス
- ソフトウェアアプリケーション⇒プログラム
- 実行中のプログラム⇒プロセス
- プロセスは互いに独立

2-3コマンドライン
- CLI:コマンドラインインターフェース
- GUI:グラフィカルユーザーインターフェース
- シェル:コマンドラインプログラム /bin/bash

2-3-1ターミナルウィンドウを開く
- Linuxでの開き方
- Winキーを押してDashを表示し、Terminalと入力してエンター
- CTRL+ALT+T
- 開くとシェルプロンプトが表示される
- 基本 $

Think Python 2

FreeRTOS

マルチタスクオペレーティングシステム
オペレーティングシステムには、単一タスク型(例: MS-DOS)とマルチタスク型があります。単一タスク型は一度に1つのアプリケーションしか実行できず、限られた機能を提供します。一方、マルチタスク型は複数のプログラムを並行して実行可能であり、プロセッサの時間を切り替えることで、ユーザーに同時実行しているような錯覚を与えます。
1つのコアしかない場合は厳密には並列実行されませんが、複数のコアやプロセッサがあれば実際に並列処理が可能です。ただし、すべてのプログラムが完全に同時に実行されるわけではありません。

タスクの概念
freeRTOSのタスクはコンピュータプログラムに相当し、典型的なC/C++プログラムのmain()関数内の無限ループに似ています。
この無限ループでは、ユーザーからの選択肢に応じたコードを実行し、再びループに戻るという単調な処理が行われます。
マイクロコントローラでは、ピンを入力や出力に設定し、シリアル通信を有効化した後、入力状態を確認して送信するコードをループ内で繰り返す形でプログラムが構成されます。
Arduinoではmain()関数にアクセスできず、代わりにsetup()とloop()関数を使用して操作を簡略化しています。これにより、プラットフォームの低レベルの詳細を意識せずにプログラムを作成できます。

Listing 1 - Example of a C monotask application for microcontroller
void main(void) {
//Sets pin 13 as output (LED) and pin 1 as input
pinMode(13, OUTPUT);
pinMode(1, INPUT);
//Starts the serial with 9600 bps
Serial.begin(9600);
//main loop
for(;;) {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
//Sends the state of the input key on pin 1
if(digitalRead(1) == HIGH) {
Serial.println("Key on!");
} else {
Serial.println("Key off!");
}
}

プログラムの主な機能は
- LED(ポート13)の点滅
- ボタンの状態(オン/オフ)の送信
このコードは1つのプログラム内で2つのタスクが処理されています。
12〜15行目と18〜22行目のコードを分け、それぞれを関数化することで整理されたコードにすることができます。
2つのタスクを独立した関数に分割し、より構造的なコードに改善します。

技術英語ライティングの基礎

doughnut

doughnutってなに?
doughnut は、ソフトウェア開発のためのドメイン駆動設計(DDD)を支援するフレームワークです。特に、エンタープライズ向けアプリケーションをクリーンアーキテクチャで構築することを目的としていて、バックエンドとフロントエンドがしっかり分離されています。
GitHub上のプロジェクトを見た限りでは、主に**Java(Spring Boot)+TypeScript(React)**を使っていて、開発を効率的に行うためのツール類やテスト環境が整っています。

Nixってなに?
Nix は「パッケージマネージャ」で、最大の特徴は「完全に再現可能な開発環境を構築できる」こと。
普通のパッケージマネージャ(aptやbrew)と違って、依存関係をすべて明示的に記述して、他人の環境でも完全に同じ状態を再現できる。
Dockerみたいな仮想環境とは違って、OSの上で直接動作するけど汚さない。
ソフトウェアのバージョンや設定を"immutable"に保つのが強み。
たとえば:
「Nodeのバージョンは18.x、Javaは17、pnpmは…」みたいな環境を全部コードで定義できて、それを使って即座に開発環境を立ち上げられる!