CERT C
CERT Cを道具としてうまく使いこなせるようになるまでの道を記述します。
CERT C
https://wiki.sei.cmu.edu/confluence/display/c/SEI+CERT+C+Coding+Standard
は、Security用のC言語コーディング標準です。
MISRA Cなどのコーディング標準、道具類、規格類をまとめて、実践的に対応しています。
CERT Cは、頻繁に構造が変わることがあリます。ここに記載したURLは、2018年3月22日(水)現在のものです。URLが繋がらなければ、見出しの文字で検索してください。
現在、17分類です。QiitaのURLは現在作業しているものdす。
Rule 01. Preprocessor (PRE)
https://qiita.com/kaizen_nagoya/items/8d2cb4158ed53d5a0a28
Rule 02. Declarations and Initialization (DCL)
https://qiita.com/kaizen_nagoya/items/8db2bf294bb66344d6df
Rule 03. Expressions (EXP)
Rule 04. Integers (INT)
Rule 05. Floating Point (FLP)
Rule 06. Arrays (ARR)
Rule 07. Characters and Strings (STR)
Rule 08. Memory Management (MEM)
Rule 09. Input Output (FIO)
Rule 10. Environment (ENV)
Rule 11. Signals (SIG)
Rule 12. Error Handling (ERR)
Rule 13. Application Programming Interfaces (API)
Rule 14. Concurrency (CON)
Rule 48. Miscellaneous (MSC)
Rule 50. POSIX (POS)
Rule 51. Microsoft Windows (WIN)
人生で影響を受けた本100冊。
CERT Cの利点
随時変更
最新の課題へ対応するように随時変更している。
コード
コンパイル可能そうなコードの断片を示している。
各種コーディング標準
関係を示している。
道具類
対応状況を示している。
CodeSonar
LDRA tool suite
Polyspace Bug Finder
... 規則によって対応できる道具の違いを示している。
文献
ISO/IEC 10646-2003
ISO/IEC 9899:2011
始め各種。
課題
構造の変化
Webで随時変更しており、時々構造を変更している。
どう追従するのがよいか思案中
コンパイル・実行による確認。
出力可能なコードになっておらず動作による確認のための作業が必要な場合がある。
参考文献のリンク切れ
重要度が低いと考えられているか、参考文献がリンク切れになっていたことがある。
https://wiki.sei.cmu.edu/confluence/display/c/AA.+Bibliography
2015年の時点のリンクの張りなおしは小川清が担当。
Rule 01. Preprocessor (PRE)
PRE30-C. Do not create a universal character name through concatenation
コンパイル
コンパイラ
LLVM
$ cc -v
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin17.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
gcc6
$ gcc-6 --version
gcc-6 (Homebrew GCC 6.4.0_1) 6.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Rule 01. Preprocessor (PRE)
PRE30-C Do not create a universal character name through concatenation
funcをmainに変更。実行するため。
pre30非適合例
#define assign(uc1, uc2, val) uc1##uc2 = val
int main(void) {
int \u0401;
/* ... */
assign(\u04, 01, 4);
/* ... */
return \u0401;
}
$ cc pre30n.c
noncompliant.c:3:1: warning: return type of 'main' is not 'int'
[-Wmain-return-type]
void main(void) {
^
noncompliant.c:3:1: note: change return type to 'int'
void main(void) {
^~~~
int
noncompliant.c:6:10: warning: incomplete universal character name; treating as
'\' followed by identifier [-Wunicode]
assign(\u04, 01, 4);
^
noncompliant.c:6:10: error: expected expression
2 warnings and 1 error generated.
$記号は入力促進記号(prompt)です。$の文字を入れる必要はありません。
main関数の引数、戻り値を調整。
#include <stdio.h>
#define assign(uc1, uc2, val) uc1##uc2 = val
int main(int argc, char** argv) {
int \u0401;
/* ... */
assign(\u04, 01, 4);
/* ... */
printf("%d \n",\u401);
return argc;
}
./cert.sh pre30n
clang pre30n.c
pre30n.c:7:10: warning: incomplete universal character name; treating as '\' followed by identifier [-Wunicode]
assign(\u04, 01, 4);
^
pre30n.c:7:10: error: expected expression
pre30n.c:9:18: warning: incomplete universal character name; treating as '\' followed by identifier [-Wunicode]
printf("%d \n",\u401);
^
pre30n.c:9:18: error: expected expression
2 warnings and 2 errors generated.
./cert.sh: line 4: ./pre30nl: No such file or directory
gcc-6 pre30n.c
pre30n.c: In function 'main':
pre30n.c:7:10: error: stray '\' in program
assign(\u04, 01, 4);
^
pre30n.c:2:31: note: in definition of macro 'assign'
#define assign(uc1, uc2, val) uc1##uc2 = val
^~~
pre30n.c:7:11: error: 'u0401' undeclared (first use in this function)
assign(\u04, 01, 4);
^
pre30n.c:2:31: note: in definition of macro 'assign'
#define assign(uc1, uc2, val) uc1##uc2 = val
^~~
pre30n.c:7:11: note: each undeclared identifier is reported only once for each function it appears in
assign(\u04, 01, 4);
^
pre30n.c:2:31: note: in definition of macro 'assign'
#define assign(uc1, uc2, val) uc1##uc2 = val
^~~
pre30n.c:9:18: error: stray '\' in program
printf("%d \n",\u401);
^
pre30n.c:9:19: error: 'u401' undeclared (first use in this function)
printf("%d \n",\u401);
^~~~
pre30適合例
#define assign(ucn, val) ucn = val
void main(void) {
int \u0401;
/* ... */
assign(\u0401, 4);
/* ... */
}
$ cc pre30c.c
compliant.c:3:1: note: change return type to 'int'
void main(void) {
^~~~
int
1 warning generated.
main関数の引数、戻り値を調整。
#include <stdio.h>
#define assign(ucn, val) ucn = val
int main(int argc, char **argv) {
int \u0401;
/* ... */
assign(\u0401, 4);
/* ... */
printf("%d \n", \u0401);
return argc;
}
./cert.sh pre30c
clang pre30c.c
4
gcc-6 pre30c.c
4
PRE31-C. Avoid side effects in arguments to unsafe macros
#include <stdio.h>
#define ABS(x) (((x) < 0) ? -(x) : (x))
int main(int n, char** argv) {
/* Validate that n is within the desired range */
int m = ABS(++n);
/* ... */
printf("%d %d\n", m,n);
return n;
}
$ cc pre31n.c
$./a.out
3 3
$ rm a.out
$ gcc-6 pre31n.c
$./a.out
3 3
pre31適合例
#include <stdio.h>
#define ABS(x) (((x) < 0) ? -(x) : (x))
int main(int n, char** argv) {
/* Validate that n is within the desired range */
int m = ABS(++n);
/* ... */
printf("%d %d\n", m,n);
return n;
}
$ ./cert.sh pre31c
clang pre31c.c
2 2
gcc-6 pre31c.c
2 2
pre31適合例2
#include <stdio.h>
#include <complex.h>
#include <math.h>
static inline int iabs(int x) {
return (((x) < 0) ? -(x) : (x));
}
void func(int n) {
/* Validate that n is within the desired range */
int m = iabs(++n);
printf("%d \n",m);
/* ... */
}
int main(int argc, char** argv){
func(argc);
return argc;
}
$ ./cert.sh pre31c2
clang pre31c2.c
2
gcc-6 pre31c2.c
2
$ ./cert.sh pre31c2 new
clang pre31c2.c
3
gcc-6 pre31c2.c
3
pre31適合例3
#include <stdio.h>
#include <complex.h>
#include <math.h>
static inline long long llabs(long long v) {
return v < 0 ? -v : v;
}
static inline long labs(long v) {
return v < 0 ? -v : v;
}
static inline int iabs(int v) {
return v < 0 ? -v : v;
}
static inline int sabs(short v) {
return v < 0 ? -v : v;
}
static inline int scabs(signed char v) {
return v < 0 ? -v : v;
}
#define ABS(v) _Generic(v, signed char : scabs, \
short : sabs, \
int : iabs, \
long : labs, \
long long : llabs, \
float : fabsf, \
double : fabs, \
long double : fabsl, \
double complex : cabs, \
float complex : cabsf, \
long double complex : cabsl)(v)
void func(int n) {
/* Validate that n is within the desired range */
int m = ABS(++n);
/* ... */
printf("%d \n",m);
/* ... */
}
int main(int argc, char** argv){
func(argc);
return argc;
}
./cert.sh pre31c3
clang pre31c3.c
2
gcc-6 pre31c3.c
2
pre31適合例4
#include <stdio.h>
#include <complex.h>
#include <math.h>
#define ABS(x) __extension__ ({ __typeof (x) tmp = x; \
tmp < 0 ? -tmp : tmp; })
void func(int n) {
/* Validate that n is within the desired range */
int m = ABS(++n);
/* ... */
printf("%d \n",m);
/* ... */
}
int main(int argc, char** argv){
func(argc);
return argc;
}
$ ./cert.sh pre31c4
clang pre31c4.c
2
gcc-6 pre31c4.c
2
pre31非適合例2
#include <stdio.h>
#include <assert.h>
#include <stddef.h>
void process(size_t index) {
assert(index++ > 0); /* Side effect */
/* ... */
printf("%d\n", index);
}
int main(int n, char** argv) {
process(sizeof(argv));
/* ... */
return n;
}
./cert.sh pre31n2
clang pre31n2.c
pre31n2.c:8:18: warning: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat]
printf("%d\n", index);
~~ ^~~~~
%zu
1 warning generated.
9
gcc-6 pre31n2.c
9
本題とは関係ないがllvm/clangとgccで、既定値で警告を出す、出さないの違い。
pre31適合例5
#include <stdio.h>
#include <assert.h>
#include <stddef.h>
void process(size_t index) {
assert(index > 0); /* No side effect */
++index;
/* ... */
printf("%d\n", (int)index);
}
int main(int n, char** argv) {
process(sizeof(argv));
/* ... */
return n;
}
警告が出ないようにcast。
$ ./cert.sh pre31c5
clang pre31c5.c
9
gcc-6 pre31c5.c
9
##PRE32-C. Do not use preprocessor directives in invocations of function-like macros
https://wiki.sei.cmu.edu/confluence/display/c/PRE32-C.+Do+not+use+preprocessor+directives+in+invocations+of+function-like+macros
pre32非適合例
#include <stdio.h>
#include <string.h>
void func(const char *src) {
/* Validate the source string; calculate size */
char *dest;
/* malloc() destination string */
memcpy(dest, src,
#ifdef PLATFORM1
12
#else
24
#endif
);
/* ... */
}
int main(int n, char** argv) {
func(argv[1] );
printf("%s \n",argv[1]);
return n;
}
mallocしていない。コンパイルして実行すると。
./cert.sh pre32n hello
clang pre32n.c
./cert.sh: line 4: 86208 Bus error: 10 ./$1l $2
gcc-6 pre32n.c
./cert.sh: line 7: 86217 Segmentation fault: 11 ./$1g $2
LLVM/clangとgccとでエラーになる行数が違うところに注目。
実行エラーにならないように書き換え。
#include <stdio.h>
#include <string.h>
void func(const char *src) {
/* Validate the source string; calculate size */
char *dest[24];
/* malloc() destination string */
memcpy(dest, src,
#ifdef PLATFORM1
12
#else
24
#endif
);
/* ... */
}
int main(int n, char** argv) {
func(argv[1] );
printf("%s \n",argv[1]);
return n;
}
実行
./cert.sh pre32n helloworld20180322wednesday
clang pre32n.c
helloworld20180322wednesday
gcc-6 pre32n.c
helloworld20180322wednesday
なお、shellは下記のように第二引数を渡す書き換え
#!/bin/sh
echo "clang $1.c"
cc $1.c -o $1l
./$1l $2
echo "gcc-6 $1.c"
gcc-6 $1.c -o $1g
./$1g $2
pre32適合例
#include <stdio.h>
#include <string.h>
void func(const char *src) {
/* Validate the source string; calculate size */
char *dest;
/* malloc() destination string */
#ifdef PLATFORM1
memcpy(dest, src, 12);
#else
memcpy(dest, src, 24);
#endif
/* ... */
}
int main(int n, char ** argv) {
func(argv[1]);
printf("%s\n", argv[1]);
return n;
}
同様に実行時エラー。下記のように書き換え。
#include <stdio.h>
#include <string.h>
void func(const char *src) {
/* Validate the source string; calculate size */
char dest[24];
/* malloc() destination string */
#ifdef PLATFORM1
memcpy(dest, src, 12);
#else
memcpy(dest, src, 24);
#endif
/* ... */
}
int main(int n, char ** argv) {
func(argv[1]);
printf("%s\n", argv[1]);
return n;
}
./cert.sh pre32c helloworld20180322wednesday
clang pre32c.c
helloworld20180322wednesday
gcc-6 pre32c.c
helloworld20180322wednesday
これらの処理の自動化は
コンパイル用shell script
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da
<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words and/or centences in order.
Este artículo no está completo. Agregaré algunas palabras en orden.
知人資料
' @kazuo_reve 私が効果を確認した「小川メソッド」
https://qiita.com/kazuo_reve/items/a3ea1d9171deeccc04da
' @kazuo_reve 新人の方によく展開している有益な情報
https://qiita.com/kazuo_reve/items/d1a3f0ee48e24bba38f1
' @kazuo_reve Vモデルについて勘違いしていたと思ったこと
https://qiita.com/kazuo_reve/items/46fddb094563bd9b2e1e
自己記事一覧
Qiitaで逆リンクを表示しなくなったような気がする。時々、スマフォで表示するとあらわることがあり、完全に削除したのではなさそう。2024年4月以降、せっせとリンクリストを作り、統計を取って確率を説明しようとしている。2025年2月末を目標にしていた。
一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39
views 20,000越え自己記事一覧
https://qiita.com/kaizen_nagoya/items/58e8bd6450957cdecd81
Views1万越え、もうすぐ1万記事一覧 最近いいねをいただいた216記事
https://qiita.com/kaizen_nagoya/items/d2b805717a92459ce853
仮説(0)一覧(目標100現在40)
https://qiita.com/kaizen_nagoya/items/f000506fe1837b3590df
Qiita(0)Qiita関連記事一覧(自分)
https://qiita.com/kaizen_nagoya/items/58db5fbf036b28e9dfa6
Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8
C++ Support(0)
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514
Coding(0) Rules, C, Secure, MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0
Ethernet 記事一覧 Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794
Wireshark 一覧 wireshark(0)、Ethernet(48)
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0
線網(Wi-Fi)空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001
なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2
プログラムちょい替え(0)一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394
言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4
Python(0)記事をまとめたい。
https://qiita.com/kaizen_nagoya/items/088c57d70ab6904ebb53
安全(0)安全工学シンポジウムに向けて: 21
https://qiita.com/kaizen_nagoya/items/c5d78f3def8195cb2409
プログラマによる、プログラマのための、統計(0)と確率のプログラミングとその後
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909
転職(0)一覧
https://qiita.com/kaizen_nagoya/items/f77520d378d33451d6fe
技術士(0)一覧
https://qiita.com/kaizen_nagoya/items/ce4ccf4eb9c5600b89ea
Reserchmap(0) 一覧
https://qiita.com/kaizen_nagoya/items/506c79e562f406c4257e
物理記事 上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff
量子(0) 計算機, 量子力学
https://qiita.com/kaizen_nagoya/items/1cd954cb0eed92879fd4
数学関連記事100
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d
coq(0) 一覧
https://qiita.com/kaizen_nagoya/items/d22f9995cf2173bc3b13
統計(0)一覧
https://qiita.com/kaizen_nagoya/items/80d3b221807e53e88aba
図(0) state, sequence and timing. UML and お絵描き
https://qiita.com/kaizen_nagoya/items/60440a882146aeee9e8f
色(0) 記事100書く切り口
https://qiita.com/kaizen_nagoya/items/22331c0335ed34326b9b
品質一覧
https://qiita.com/kaizen_nagoya/items/2b99b8e9db6d94b2e971
言語・文学記事 100
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6
医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82
水の資料集(0) 方針と成果
https://qiita.com/kaizen_nagoya/items/f5dbb30087ea732b52aa
自動車 記事 100
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5
通信記事100
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7
日本語(0)一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68
英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d
音楽 一覧(0)
https://qiita.com/kaizen_nagoya/items/b6e5f42bbfe3bbe40f5d
「@kazuo_reve 新人の方によく展開している有益な情報」確認一覧
https://qiita.com/kaizen_nagoya/items/b9380888d1e5a042646b
鉄道(0)鉄道のシステム考察はてっちゃんがてつだってくれる
https://qiita.com/kaizen_nagoya/items/faa4ea03d91d901a618a
OSEK OS設計の基礎 OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3
coding (101) 一覧を作成し始めた。omake:最近のQiitaで表示しない5つの事象
https://qiita.com/kaizen_nagoya/items/20667f09f19598aedb68
官公庁・学校・公的団体(NPOを含む)システムの課題、官(0)
https://qiita.com/kaizen_nagoya/items/04ee6eaf7ec13d3af4c3
「はじめての」シリーズ ベクタージャパン
https://qiita.com/kaizen_nagoya/items/2e41634f6e21a3cf74eb
AUTOSAR(0)Qiita記事一覧, OSEK(75)
https://qiita.com/kaizen_nagoya/items/89c07961b59a8754c869
プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945
LaTeX(0) 一覧
https://qiita.com/kaizen_nagoya/items/e3f7dafacab58c499792
自動制御、制御工学一覧(0)
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b
Rust(0) 一覧
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927
programの本質は計画だ。programは設計だ。
https://qiita.com/kaizen_nagoya/items/c8545a769c246a458c27
登壇直後版 色使い(JIS安全色) Qiita Engineer Festa 2023〜私しか得しないニッチな技術でLT〜 スライド編 0.15
https://qiita.com/kaizen_nagoya/items/f0d3070d839f4f735b2b
プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945
逆も真:社会人が最初に確かめるとよいこと。OSEK(69)、Ethernet(59)
https://qiita.com/kaizen_nagoya/items/39afe4a728a31b903ddc
統計の嘘。仮説(127)
https://qiita.com/kaizen_nagoya/items/63b48ecf258a3471c51b
自分の言葉だけで論理展開できるのが天才なら、文章の引用だけで論理展開できるのが秀才だ。仮説(136)
https://qiita.com/kaizen_nagoya/items/97cf07b9e24f860624dd
参考文献駆動執筆(references driven writing)・デンソークリエイト編
https://qiita.com/kaizen_nagoya/items/b27b3f58b8bf265a5cd1
「何を」よりも「誰を」。10年後のために今見習いたい人たち
https://qiita.com/kaizen_nagoya/items/8045978b16eb49d572b2
Qiitaの記事に3段階または5段階で到達するための方法
https://qiita.com/kaizen_nagoya/items/6e9298296852325adc5e
出力(output)と呼ばないで。これは状態(state)です。
https://qiita.com/kaizen_nagoya/items/80b8b5913b2748867840
祝休日・謹賀新年 2025年の目標
https://qiita.com/kaizen_nagoya/items/dfa34827932f99c59bbc
Qiita 1年間をまとめた「振り返りページ」@2024
https://qiita.com/kaizen_nagoya/items/ed6be239119c99b15828
2024 参加・主催Calendarと投稿記事一覧 Qiita(248)
https://qiita.com/kaizen_nagoya/items/d80b8fbac2496df7827f
主催Calendar2024分析 Qiita(254)
https://qiita.com/kaizen_nagoya/items/15807336d583076f70bc
Calendar 統計
https://qiita.com/kaizen_nagoya/items/e315558dcea8ee3fe43e
LLM 関連 Calendar 2024
https://qiita.com/kaizen_nagoya/items/c36033cf66862d5496fa
Large Language Model Related Calendar
https://qiita.com/kaizen_nagoya/items/3beb0bc3fb71e3ae6d66
博士論文 Calendar 2024 を開催します。
https://qiita.com/kaizen_nagoya/items/51601357efbcaf1057d0
博士論文(0)関連記事一覧
https://qiita.com/kaizen_nagoya/items/8f223a760e607b705e78
coding (101) 一覧を作成し始めた。omake:最近のQiitaで表示しない5つの事象
https://qiita.com/kaizen_nagoya/items/20667f09f19598aedb68
あなたは「勘違いまとめ」から、勘違いだと言っていることが勘違いだといくつ見つけられますか。人間の間違い(human error(125))の種類と対策
https://qiita.com/kaizen_nagoya/items/ae391b77fffb098b8fb4
プログラマの「プログラムが書ける」思い込みは強みだ。3つの理由。仮説(168)統計と確率(17) , OSEK(79)
https://qiita.com/kaizen_nagoya/items/bc5dd86e414de402ec29
出力(output)と呼ばないで。これは状態(state)です。
https://qiita.com/kaizen_nagoya/items/80b8b5913b2748867840
これからの情報伝達手段の在り方について考えてみよう。炎上と便乗。
https://qiita.com/kaizen_nagoya/items/71a09077ac195214f0db
ISO/IEC JTC1 SC7 Software and System Engineering
https://qiita.com/kaizen_nagoya/items/48b43f0f6976a078d907
アクセシビリティの知見を発信しよう!(再び)
https://qiita.com/kaizen_nagoya/items/03457eb9ee74105ee618
統計論及確率論輪講(再び)
https://qiita.com/kaizen_nagoya/items/590874ccfca988e85ea3
読者の心をグッと惹き寄せる7つの魔法
https://qiita.com/kaizen_nagoya/items/b1b5e89bd5c0a211d862
「@kazuo_reve 新人の方によく展開している有益な情報」確認一覧
https://qiita.com/kaizen_nagoya/items/b9380888d1e5a042646b
ソースコードで議論しよう。日本語で議論するの止めましょう(あるプログラミング技術の議論報告)
https://qiita.com/kaizen_nagoya/items/8b9811c80f3338c6c0b0
脳内コンパイラの3つの危険
https://qiita.com/kaizen_nagoya/items/7025cf2d7bd9f276e382
心理学の本を読むよりはコンパイラ書いた方がよくね。仮説(34)
https://qiita.com/kaizen_nagoya/items/fa715732cc148e48880e
NASAを超えるつもりがあれば読んでください。
https://qiita.com/kaizen_nagoya/items/e81669f9cb53109157f6
データサイエンティストの気づき!「勉強して仕事に役立てない人。大嫌い!!」『それ自分かも?』ってなった!!!
https://qiita.com/kaizen_nagoya/items/d85830d58d8dd7f71d07
「ぼくの好きな先生」「人がやらないことをやれ」プログラマになるまで。仮説(37)
https://qiita.com/kaizen_nagoya/items/53e4bded9fe5f724b3c4
なぜ経済学徒を辞め、計算機屋になったか(経済学部入学前・入学後・卒業後対応) 転職(1)
https://qiita.com/kaizen_nagoya/items/06335a1d24c099733f64
プログラミング言語教育のXYZ。 仮説(52)
https://qiita.com/kaizen_nagoya/items/1950c5810fb5c0b07be4
【24卒向け】9ヶ月後に年収1000万円を目指す。二つの関門と三つの道。
https://qiita.com/kaizen_nagoya/items/fb5bff147193f726ad25
「【25卒向け】Qiita Career Meetup for STUDENT」予習の勧め
https://qiita.com/kaizen_nagoya/items/00eadb8a6e738cb6336f
大学入試不合格でも筆記試験のない大学に入って卒業できる。卒業しなくても博士になれる。
https://qiita.com/kaizen_nagoya/items/74adec99f396d64b5fd5
全世界の不登校の子供たち「博士論文」を書こう。世界子供博士論文遠隔実践中心 安全(99)
https://qiita.com/kaizen_nagoya/items/912d69032c012bcc84f2
日本のプログラマが世界で戦える16分野。仮説(53),統計と確率(25) 転職(32)、Ethernet(58)
https://qiita.com/kaizen_nagoya/items/a7e634a996cdd02bc53b
小川メソッド 覚え(書きかけ)
https://qiita.com/kaizen_nagoya/items/3593d72eca551742df68
DoCAP(ドゥーキャップ)って何ですか?
https://qiita.com/kaizen_nagoya/items/47e0e6509ab792c43327
views 20,000越え自己記事一覧
https://qiita.com/kaizen_nagoya/items/58e8bd6450957cdecd81
Views1万越え、もうすぐ1万記事一覧 最近いいねをいただいた213記事
https://qiita.com/kaizen_nagoya/items/d2b805717a92459ce853
amazon 殿堂入りNo1レビュアになるまで。仮説(102)
https://qiita.com/kaizen_nagoya/items/83259d18921ce75a91f4
100以上いいねをいただいた記事16選
https://qiita.com/kaizen_nagoya/items/f8d958d9084ffbd15d2a
水道局10年(1976,4-1986,3)を振り返る
https://qiita.com/kaizen_nagoya/items/707fcf6fae230dd349bf
小川清最終講義、最終講義(再)計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
This article is an individual impression based on my individual experience. It has nothing to do with the organization or business to which I currently belong.
Este artículo es una impresión personal basada en mi experiencia personal. No tiene nada que ver con la organización o empresa a la que pertenezco actualmente.
文書履歴(document history)
ver. 0.01 初稿 20180321
ver. 0.02 ありがとう追記 20230513
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.
Muchas gracias por leer hasta la última oración.
Por favor, haz clic en el ícono Me gusta 💚 y sígueme para tener una vida feliz.