スタンフォードの自分を変える教室
書籍情報
ISBN-13 : 978-4479305583
ケリー・マクゴニガル
第1章 やる力、やらない力、望む力
――潜在能力を引き出す3つの力
- やるべきことに対して、できない理由を特定する
- 選択した瞬間、失敗した瞬間に気づく
- 5分間の瞑想が自己コントロールを高める
第2章 意志力の本能
――あなたの体はチーズケーキを拒むようにできている
- ゆっくり呼吸をする
- 6時間以上よく眠る
- 5分運動をする
- 抑制すべき内的な衝動を明らかにする
- ストレスが自己コントロールに与える影響を意識する
第3章 疲れていると抵抗できない
――自制心が筋肉に似ている理由
- どんな時に意思が強いか、どんな時に誘惑に負けるか観察
- 疲労を気にしない。疲労を感じた時に、もう一踏ん張りできるか試す。
- ナッツ を食べる
- 目標に関係のある強化法を試す。
- 望む力を作り出す。
- チャレンジに成功したらどんないいことがあるか
- ほかの誰の利益になるか。
- チャレンジは大変でも続けるうちに楽になっていくと想像する
- やらない力を強化する
- やる力を強化する。毎日継続する
第4章 罪のライセンス
――よいことをすれば悪いことをしたくなる
- 自分の言い訳を知る
- あとで取り返せると思わない
- なぜ良いことをしたのか考える。
- あなたは目標を達成するために、どれくらい真剣に努力していますか。
- 自分がやりたいことだから、頑張った。
第5章 脳が大きなウソをつく
――なぜ欲求を幸せと勘ちがいするのか
- 自分が報酬への期待をかき立てるものを知る。
- やる力とドーパミンを結びつける。先延ばしにしているもの
- 誘惑にわざと負けてどう感じるかを考える。
第6章 もうやけくそだ
――気分の落ち込みが挫折につながる
第7章 将来を売りとばす
――手軽な快楽の経済学
- 10分我慢する
第8章 感染した!
――意志力はうつる
- 努力するのを普通にする。
- 鉄の意志を持つ人のことを考える。
第9章 この章は読まないで
――「やらない力」の限界
第10章 おわりに
――自分自身をじっと見つめる
ネットワーク
クラス
- クラスA
先頭ビット0
8bit:ネットワークアドレスx 0~127
24bitホストアドレスy
0xxx xxxx yyyy yyyy yyyy yyyy yyyy yyyy - クラスB
先頭ビット10
16bit:ネットワークアドレスx 128~191
16bitホストアドレスy
10xx xxxx xxxx xxxx yyyy yyyy yyyy yyyy - クラスC
先頭ビット110
24bit:ネットワークアドレスx 192~223
8bitホストアドレスy
110x xxxx xxxx xxxx xxxx xxxx yyyy yyyy - クラスD
先頭4bit:1110 224~239
マルチキャスト用アドレスy
1110 yyyy yyyy yyyy yyyy yyyy yyyy yyyy - ネットワークアドレス
ネットワーク自体をさす
ホスト部アドレスが全て0 - ブロードキャストアドレス ホスト部アドレスが全て1
- ループバックアドレス
自分自身をさすアドレス
127.0.0.1 - プライベートIPアドレス
クラスA:10.0.0.0~10.255.255.255
IPアドレス数224
クラスB:172.16.0.0~172.31.255.255
IPアドレス数:221
クラスC:192.168.0.0~192.168.255.255
IPアドレス数:216
サブネットマスク
クラス以外にネットワークアドレス部とホストアドレス部を分ける
- 例
IPアドレス | 192.168. 10.166 | 1100 0000 1010 1000 0000 1010 1010 0110 |
---|---|---|
サブネットマスク | 255.255.255.240 | 1111 1111 1111 1111 1111 1111 1111 0000 |
ネットワークアドレス | 192.168.19.160 | 1100 0000 1010 1000 0000 1010 1010 0000 |
xxxx xxxx xxxx xxxx xxxx xxxx xxxx yyyy |
- プレフィックス
ネットワークアドレス部とホストアドレスぶの区切りをネットワークアドレス部の桁数で示す方法
ネットワークアドレス部が29桁の場合`233.xxx.255.0/29
コーディング(C言語)
参考
関数
関数プロトタイプ宣言 function prototype declaration 戻り値の型 関数名(引数の型 仮引数名, 引数の型 仮引数名, ...)
int test_func(int test1, int test2) { int sum; sum = test1 + test2; return sum; }
int main() { int goukei; goukei = test_func(1, 2); /*1, 2 は実引数 */ return 0; }
型
- 1byte = 8bit(0x00-0xFF)
CPUのbitと型 コンパイラの定義による
型 16bit 32bit 64bit char 1byte 1byte 1byte short 2byte 2byte 2byte int 2byte 4byte 4byte long 4byte 4byte 8byte long long 8byte 8byte 8byte pointer 2byte 4byte 8byte
構造体
ICのレジスタは構造体で定義して表す
-
レジスタ名 アドレス サイズ SMR 0xff ffb8 1byte BRR 0xff ffb9 1byte SCR 0xff ffba 1byte TDR 0xff ffbb 1byte SSR 0xff ffbc 1byte RDR 0xff ffbd 1byte ソースの書き方
#define SERIAL_SCI_NUM 3 #define H8_3069F_SCI0 ((volatile struct h8_3069f_sci *)0xffffb0) #define H8_3069F_SCI1 ((volatile struct h8_3069f_sci *)0xffffb8) #define H8_3069F_SCI2 ((volatile struct h8_3069f_sci *)0xffffc0) struct h8_3069f_sci { volatile uint8 smr; volatile uint8 brr; volatile uint8 scr; volatile uint8 tdr; volatile uint8 ssr; volatile uint8 rdr; volatile uint8 scmr; }; static struct { volatile struct h8_3069f_sci *sci; } regs[SERIAL_SCI_NUM] = { { H8_3069F_SCI0 }, { H8_3069F_SCI1 }, { H8_3069F_SCI2 }, };
属性
__attribute__((__packed__))
この属性が付いた構造体は詰め物が外され,純粋に構造体のメンバ変数だけで構成されるようになります
構造体のメンバは、メンバの先頭アドレスがバイト境界になるようにパディングが入れられる。
構造体にpackedの属性を追加するとパディングがなくなる。
struct sample_st { char c; // 1byte int n; // 4byte void *p; // 8byte }; struct sample_st_packed { char c; // 1byte int n; // 4byte void *p; // 8byte } __attribute__ ((packed)); struct sample_st_nopad { char c; // 1byte unsigned char pad1[3]; int n; // 4byte void *p; // 8byte };
sample_st
address data memo 0 C cは1byte. Cとn合わせて4byteになるように
3byteがパディングされている4 n 8 p sample_st_packed
address data memo 0 c 1 n cとnのメンバの間がパディングされていない 5 p sample_st_nopad
address data memo 0 c 1 pad cとpad[3]で4byteになるように手動でパディング追加 4 n 8 p
共用体
union sample_un { unsigned char reg; struct bits { unsigned char bit0:1; unsigned char bit1:1; unsigned char bit2:1; unsigned char bit3:1; unsigned char bit4:1; unsigned char bit5:1; unsigned char bit6:1; unsigned char bit7:1; } regbit; };
同じアドレスに配置される
ICのレジスタで1byteのアドレスのbit毎に機能が付加されている場合などに使用できる- 例 ポートデータレジスタ
マイコンのGPIOのデータを制御するレジスタ
bit毎にportの出力データを設定できる
GPIO P17 pinをHighにしたい場合は、
address0の7bit目を1に設定reg.bi7 = 0x1;
もしくは、reg = reg & 0x80;
address bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 0 P17 P16 P15 P14 P13 P12 P11 P10 - 例 ポートデータレジスタ
マイコンのGPIOのデータを制御するレジスタ
プリプロセッサ
キーワード | 説明 | 例 |
---|---|---|
# | 何もしない | |
#if, #ifdef | 条件分として使う | |
#ifndef,#elif | 条件分として使う | |
#else, #endif | 条件分として使う | |
#include | ヘッダファイルを取り込む | |
#define | マクロを定義する | |
#undef | マクロの定義を無効化する | |
## | 前後の文字を連結する | #define ___concat(a, b) a ## b |
__DATE__ | コンパイルの日にち | |
__TIME__ | コンパイル時の時刻 | |
__FILE__ | ソースファイル名 | printf("%s %s \n", __func__, __FILE__); |
__LINE__ | 行番号 |
- ##の例
/* components/firmware/uboot/arch/arc/include/asm/io.h */ #define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set) #define clrsetbits(type, addr, clear, set) \ out_##type((addr), (in_##type(addr) & ~(clear)) | (set)) #define out_le32(a, v)» out_arch(l, le32, a, v) #define out_arch(type, endian, a, v) __raw_write##type(cpu_to_##endian(v), a) #define __raw_writel(v, c) ({ __iowmb(); __arch_putl(v, c); }) /* マクロが続く */
C言語のプログラムの始まりと終わり
- GCCプロジェクトで変数や関数を指定のセクションに配置する方法
変数や関数の宣言文に、attributeキーワードで配置先のセクション名を指定すると、指定されたセクションに変数や関数が配置されます。
たとえば変数myVar[ ]を .mydata セクションに配置するには以下のように記述します。
char myVar[32] __attribute__ ((section (".mydata"))) = { ...
同様に、宣言にattributeを付けることで、関数のコードを指定のセクションに置くことができます。
また、1つのソースファイル内のデータ/コードセクションを一括して特定のセクションに配置する方法もあります。
#include <stdio.h> #include <stdlib.h> int count = 0; void init1() { count++; printf("ctors test. (init1)\n"); } void init2() { count++; count++; printf("ctors test. (init2)\n"); } void fini1() { printf("dtors test. (fini1)\n"); } void fini2() { printf("dtors test. (fini2)\n"); } void fini3() { printf("atexit test. (fini3)\n"); } void (*fp1) (void) __attribute__((section(".ctors"))) = init1; void (*fp2) (void) __attribute__((section(".ctors"))) = init2; void (*fp3) (void) __attribute__((section(".dtors"))) = fini1; void (*fp4) (void) __attribute__((section(".dtors"))) = fini2; int main() { atexit(fini3); printf("%d\n", count); exit (0); printf("never\n"); }
$ clang ctors.c $ ./a.out ctors test. (init2) ctors test. (init1) 3 atexit test. (fini3) dtors test. (fini1) dtors test. (fini2)
ctorsはconstructors、dtorsはdestructors
.ctors C++用グローバルコンストラクタテーブルのセクション
.dtors C++用グローバルデストラクタテーブルのセクション
RTOS
参考
12ステップで作る組込みOS自作入門
ISBN-13 978-4877832391
リアルタイム組込みOS基礎講座
ISBN-13 978-4798110042
用語
排他
ある資源にアクセスしている最中に他の処理がアクセスしないように保証すること。
ある処理がアクセスしている間は他の処理はアクセスできない。
セマフォ
複数のスレッドで共通利用する資源について、使用中に他のスレッドが使用しないように排他制御をかける仕組み。
資源を操作する前にロック処理(セマフォを獲得する)を行う。
他のスレッドがその資源を操作する際には、ロック解除(セマフォが開放)されるまでスリープ状態に入り待つ。
メッセージ
タスク間の通信。
メッセージの送信側は、メッセージ送信ようのシステムコールを呼び出す。
呼び出しの際は、メッセージIDを指定する。
メッセージIDのメッセージボックスにメッセージを送信する。
メッセージの受信側は、メッセージIDを指定してメッセージ受信用のシステムコールを呼び出す。
メッセージIDのメールボックスからメッセージを受信する。
メッセージはキューで管理される。
キュー
タスク間のデータ通信のためにメッセージ交換を行う。
メッセージキューは、バッファににたオブジェクト。タスクやISR(割込み)がデータのやりとりをする。
メッセージキューの生成時に下記を生成する。
キューコントロールブロック(QCB)、メッセージキュー名、ID、メモリバッファ、キュー長、最大メッセージ長、タスクの待ちリスト
割込み・タスク
優先度 | 処理 | 実行順の制御 |
---|---|---|
高 | 割込み:マスク不可 | Hardware |
割込み:マスク可能 優先度高 | Hardware | |
割込み:マスク可能 優先度低 | Hardware | |
タスク :優先度高 | Karnel | |
低 | タスク :優先度低 | Karnel |
___ ISR(高) ___| |___ ISR(低) ___| |___ task ___| |___
task1()とtask2の優先順位が同じ場合、タイムスライス機能がある場合交互に処理が切り替わる?
用語
用語
一般
- BSP(Board Support Package)
評価ボードなどのシステム全体を評価するために必要となる様々な構成要素をパッケージ化したものです。
- OS porting
ある環境からプログラムを修正して他の環境に移行すること。
OSなどの変更での修正等。
- ラッパ関数
処理を移植したいときなどで流用元と先で
同じような機能の関数名が異なる場合
処理が微妙に異なる場合
などにラッパ関数を作りその中で移植が必要な処理を入れておく。
- hook関数
プログラム中の特定の箇所に、利用者が独自の処理を追加できるようにする仕組みである
参考:wikipedia
MSB:Most Significant Bit
最上位ビット:ビット列で一番左にあるビット。左側が大きな位。
LSB:Least Significant Bit
最下位ビット:ビット列で一番右にあるビット。右側が小さな位。
bit * * * * MSB LSB endhian:エンディアン
- Little endian
値のLSB側を低位アドレス側に格納するもの
x86, windowsなど- Big endian
値のMSB側を低位アドレス側に格納するもの
mac等- 例
4byteの0x12345678のデータをarray[]に格納する場合
MSB側 LSB側 値 0x12 0x34 0x56 0x78 エンディアン アドレス +0 array[0] +1 array[1] +2 array[2] +3 array[3] リトルエンディアン データ 0x78 0x56 0x34 0x12 ビッグエンディアン データ 0x12 0x34 0x56 0x78 #include<stdio.h> #include<stdint.h> int main(void){ uint16_t num = 0x1234; uint8_t i; uint8_t array[2]; *(uint16_t *)array = num; for(i = 0; i < 2; i++){ printf("array[i]=%x \n", array[i]); } }
;little endian array[0]=34 array[1]=12 ;big endian array[0]=12 array[1]=34
セキュリティ
- PEM(Privacy-Enhanced Mail)ファイル
デジタル証明書や暗号鍵などをBase64形式で文字列に変換して記録したテキストファイル - X.400
Message Handling System(MHS、メッセージ通信処理システム)は、電子メールについての標準を定めたものである。
インターネットの電子メールの標準として採用されることはなかった - X.509証明書(X.509 Certificate)
公開鍵証明書の標準フォーマット - X.509 v2証明書失効リスト(CRL:Certificate Revocation List)
証明書の内容の変更や秘密鍵の漏えい、証明書の誤発行などの理由により、公開鍵証明書を通常の有効期限内で無効にするために使われる。 - BIO (Basic IO)
OpenSSL の BIO は、 I/O の抽象化を行います。
アプリケーションから I/O の詳細を隠蔽します。
BIO を用いて、I/O を行うことにより、透過的にSSL コネクションの操作することができます。 - RSA
RSAは発明した3人の名前「R. L. Rivest、A. Shamir、L. Adleman」が由来
RSA 暗号方式の使用者は、2 つの大きな素数の積を計算して、補助値と一緒に公開し、これが公開鍵になります。
素因数は秘密にしておく必要があります。
誰でも公開鍵を使ってメッセージを暗号化できますが、素因数について知っているユーザーのみがメッセージ復号化できます。 - AitM(Adversary-in-the-Middle)
AitM攻撃は、Adversary-in-the-Middle攻撃の略です。中間者攻撃とも表記します。
攻撃者は機器同士のネットワークの中間に入り込み、標的の通信が攻撃者の保有するシステムを通過するように操作します。
このようにして、攻撃者は標的の通信を窃取することができます。 プロキシサーバを利用し、ユーザーとWebサイト間のセッション情報を窃取し、多要素認証を迂回する等の事例が確認されています。 - CVE(Common Vulnerabilities and Exposures)
情報セキュリティにおける脆弱性やインシデントについて、それぞれ固有の名前や番号を付与し、 リスト化した事典です。 - BDSA(Black Duck Security Advisories)
Synopsys Cybersecurity Research Center(CyRC)が作成した詳細なオープンソース脆弱性の記録です。 - CWE(Common Weakness Enumeration)
共通脆弱性タイプ一覧。
ソフトウェアにおけるセキュリティ上の弱点(脆弱性)の種類を識別するための共通の基準を目指しています。 - CVSS(Common Vulnerability Scoring System)
共通脆弱性評価システム。
情報システムの脆弱性に対するオープンで汎用的な評価手法、および指標を指します。
License
デュアルライセンス
1つのソフトウェアに対して、複数のライセンスを適用する方式のことです。
例えば、オープンソースライセンスと商用ライセンスの2つのライセンスを適用することで、オープンソースコミュニティーに貢献する一方で商用利用も可能になるというメリットがあります。マルチライセンス
1つのソフトウェアに対して、複数のライセンスの中から利用者が選択することができる方式のことです。
利用者が必要に応じて、商用ライセンスやオープンソースライセンスなどのライセンスを選択することができます。
ファイルシステム
fat
fat safe
予期せぬ電源断やメディア抜去などでファイルシステムに不整合が生じても復旧できます。
ビジネス
dB
オームの法則
log
dB・電力の定義・単位
対数 | 数値 |
---|---|
log2 | 0.301 |
log3 | 0.477 |
log7 | 0.845 |
dB | 電力比 | 電圧比 |
---|---|---|
-20 | 0.01 | 0.1 |
-6 | 0.25 | 0.5 |
0 | 1 | 1 |
3 | 2 | 1.41 |
6 | 4 | 2 |
10 | 10 | 3.16 |
20 | 100 | 10 |
dBm
dBm=1mWを0dBmとした単位
600Ω系の場合 0dBm=0.775V
その他
相対レベル:Relative level
基準点を決め、そこからの相対レベルを表す。
ある地点Aを+6dBrとした場合、下記のブラックボックスでは6
基準点 | 方向 | ブラックボックス | 方向 | 地点A |
---|---|---|---|---|
0dBr | → | +6dB | → | +6dBr |
0dBr | → | -6dB | → | -6dBr |
0dBr | ← | +6dB | ← | -6dBr |
0dBr | ← | -6dB | ← | +6dBr |
dBrn
ノイズのような微笑な電力を表すのに便利
例えば