スタンフォードの自分を変える教室

書籍情報

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言語)

参考

  • Linux技術者のためのC言語入門

    ISBN-13 978-4777520657

  • 12ステップで作る組込みOS自作入門

    ISBN-13 978-4877832391

関数

  • 関数プロトタイプ宣言 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のレジスタは構造体で定義して表す

#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

プリプロセッサ

キーワード 説明
# 何もしない
#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言語のプログラムの始まりと終わり

参考リンク1 参考リンク2

  • 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:エンディアン

    値のLSB側を低位アドレス側に格納するもの
    x86, windowsなど

    値の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
    予期せぬ電源断やメディア抜去などでファイルシステムに不整合が生じても復旧できます。

ビジネス

  • BC
  • OP:Operating Profit
    営業利益 = GP - 販売費及び一般管理費
  • GP:Gross Profit
    粗利益、売上総利益 = 売上高 - 売上原価
  • SGA:Selling, General and Administrative Expense
    販売間接費及び一般管理費

dB

オームの法則

{\displaystyle
V=RI, R=\frac{V}{I}, I=\frac{V}{R}
}

{\displaystyle
P=VI=V(\frac{V}{R})=\frac{V^{2}}{R}
}

{\displaystyle
P=RII=RI^{2}
}

log

{\displaystyle
a^{x}=b
}

{\displaystyle
x=\log_{a}b
}

dB・電力の定義・単位

{\displaystyle
B=100\log(\frac{P_2}{P_1})
}

{\displaystyle
dB=\frac{B}{10}=\frac{100}{10}log(\frac{P_2}{P_1})
}

{\displaystyle
dB=10log(\frac{V2I2}{V1I1})=10log\frac {\frac{V2^{2}}{R2}} {\frac{V1^{2}}{R1}}
}

{\displaystyle
R2=R1の場合
}

{\displaystyle
=10log\frac {V2^{2}} {V1^{2}}=10log(\frac {V2} {V1})^{2}=20log(\frac {V2} {V1})
}

対数 数値
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とした単位

{\displaystyle
dBm=10log\frac{P}{1mW}
}

{\displaystyle
P=10^{\frac{dBm}{10}}\times10^{-3}
}

{\displaystyle
P=VI=\frac{V^{2}}{R}
}

{\displaystyle
V=\sqrt{PR}=\sqrt{10^{\frac{dBm}{10}}\times10^{-3}\times{R}}
}

600Ω系の場合 0dBm=0.775V

その他

{\displaystyle
0dBV=1Vrms=2.21dBm
}

{\displaystyle
0dBv=0.775Vrms=0dBm
}

相対レベル:Relative level

基準点を決め、そこからの相対レベルを表す。
ある地点Aを+6dBrとした場合、下記のブラックボックスでは6

基準点 方向 ブラックボックス 方向 地点A
0dBr +6dB +6dBr
0dBr -6dB -6dBr
0dBr +6dB -6dBr
0dBr -6dB +6dBr

dBrn

ノイズのような微笑な電力を表すのに便利

{\displaystyle
dBrn=dBm+90dB
}

例えば

{\displaystyle
30dBrn=-60dBm
}