4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NPO TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介(3)第二回(2012)アプリケーション開発部門銀賞Natural Tiny Logger(NT-Logger) 中村晋一郎(個人)

Last updated at Posted at 2018-06-20

TOPPERS「活用アイデア」・「アプリケーション開発」コンテスト
は、2011年から毎年実施されています。
https://www.toppers.jp/contest.html

「アプケーション開発」は、ソースコードの公開を前提としています。
「活用アイデア」でも、その後実現したソースコードなどもある。探しながら紹介。

なお、この記事は、TOPPERSプロジェクトの公式見解ではなく、
小川清 の 技術者個人の考えに基づいています。

目的(purpose)

TOPPERS開発アイデア・アプリケーション開発コンテスト受賞作品には、良質な算譜、技術的に崇高な志向、目的を達成するための意思などが感じられる。広く、source codeを表示して紹介し、次の応募作品を促す。
#成果(outcome)

応募作品の算譜を眺めると、その技術者の得意分野や技法を感じることができる。応募作品のソースコードを使ってみようという気になる。自分も良い作品を作ろうという気になる。

TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介(3) 第二回アプリケーション開発部門(2012)銅賞

Natural Tiny Logger(NT-Logger) 中村晋一郎(個人)

応募資料(application material)等

ET2012発表資料
https://www.toppers.jp/docs/contest/2012/nakamura_presen_2012.pdf

組み込みシステムの全体挙動を簡単に確認できるロギングツール - Natural Tiny Logger (NT-Logger)
http://shinta-main-jp.blogspot.com/2012/07/natural-tiny-logger-nt-logger.html

Download

ntlogger-v0.1.0.tar.gz
https://www.cubeatsystems.com/firmware/ntlogger/ntlogger-v0.1.0.tar.gz

関連資料(related URL)

KOZOSのタスク間通信を可視化するツールを作ってみた (ipcrvt.sh : KOZOS IPC Relationship Visualization Tool)
http://shinta-main-jp.blogspot.com/2012/07/kozos-ipcrvtsh-kozos-ipc-relationship.html

NT-Loggerでお気楽デバッグ
https://www.cubeatsystems.com/firmware/ntlogger/ntlogger_ja.html

NT-Logger の使い方メモ
http://nsaito-nmiri.hateblo.jp/entry/2015/06/04/105945

SWEST14参加報告
http://shinta-main-jp.blogspot.com/2012/09/swest14.html

「ピュア・カーネルで本当に満足ですか?「Natural Tiny Shellでもっと
便利に開発ライフ!」 +「Natural Tiny Loggerでアプリケーション・
デバッグをもっと便利に!」」
中村 晋一郎
https://swest.toppers.jp/SWEST14/minutes/poster.txt (SWEST poster)

TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介(1) 第一回(2011)アプリケーション開発部門銀賞『Natural Tiny Shell Task』中村晋一郎
https://qiita.com/kaizen_nagoya/items/763209c213e3c0daee10

TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介(6)第三回アプリケーション開発部門銀賞 T TOPPERS Realtime System Sample(RSS)- LPCXpresso GPS Clock 中村 晋一郎(個人)
https://qiita.com/kaizen_nagoya/items/06744374c509bf46ebfb

算譜(source code)

ntlgen.c
/**
 * @file ntlgen.c
 * @author Shinichiro Nakamura
 * @brief Natural Tiny Logger (NT-Logger)のホスト側ジェネレータ。
 */

/*
 * ===============================================================
 *  Natural Tiny Logger (NT-Logger)
 * ===============================================================
 * Copyright (c) 2010-2012 Shinichiro Nakamura
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 * ===============================================================
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ntldef.h"
#include "optparse.h"
#include "fifo.h"

/**
 * @brief トラック数。
 */
#define TRACK_COUNT (16)

/**
 * @brief 1トラックあたりのイベント数。
 */
#define EVENT_COUNT (8)

/**
 * @brief 開始イベントを格納するFIFOの深さ。
 */
#define FIFO_DEPTH  (32)

/**
 * @brief オプションを初期化する。
 *
 * @param P オプション構造体へのポインタ。
 */
#define OPTION_INIT(P) \
    do { \
        (P)->optflag = 0; \
        strcpy((P)->input, ""); \
        strcpy((P)->output, ""); \
        strcpy((P)->description, ""); \
    } while (0)

#define OPTFLAG_INPUT       (1 << 0)    /**< 入力ファイル名。 */
#define OPTFLAG_OUTPUT      (1 << 1)    /**< 出力ファイル名。 */
#define OPTFLAG_DESCRIPTION (1 << 2)    /**< 詳細ファイル名。 */

/**
 * @brief オプション構造体。
 */
typedef struct {
    unsigned char optflag;      /**< オプション指定確認用フラグ。 */
    char input[BUFSIZ];         /**< 入力ファイル名。 */
    char output[BUFSIZ];        /**< 出力ファイル名。 */
    char description[BUFSIZ];   /**< 詳細ファイル名。 */
} option_t;

/**
 * @brief オプション分割装置用のコールバック関数。
 *
 * @param option オプション文字。
 * @param argument オプション文字に対する引数。
 * @param extobj 外部オブジェクト。
 *
 * @retval 0 解析継続。
 * @retval !0 解析中断。
 */
static int option_callback(
        const char option, const char *argument, void *extobj)
{
    option_t *opt = (option_t *)extobj;
    switch (option) {
        case 'i':
            strcpy(opt->input, argument);
            opt->optflag |= OPTFLAG_INPUT;
            break;
        case 'o':
            strcpy(opt->output, argument);
            opt->optflag |= OPTFLAG_OUTPUT;
            break;
        case 'd':
            strcpy(opt->description, argument);
            opt->optflag |= OPTFLAG_DESCRIPTION;
            break;
    }
    return 0;
}

static const char *html_pre =
    "<html>\n"
    "  <head>\n"
    "    <title>Natural Tiny Logger (NT-Logger)</title>\n"
    "\n"
    "    <script type=\"text/javascript\" src=\"http://www.google.com/jsapi\"></script>\n"
    "    <script type=\"text/javascript\" src=\"./timeline/timeline.js\"></script>\n"
    "    <link rel=\"stylesheet\" type=\"text/css\" href=\"./timeline/timeline.css\">\n"
    "\n"
    "    <style>\n"
    "      body {font: 10pt arial;}\n"
    "\n"
    "      div.timeline-frame {\n"
    "        border-color: gray;\n"
    "      }\n"
    "\n"
    "      div.timeline-axis {\n"
    "        border-color: gray;\n"
    "\n"
    "        background-color: gray;\n"
    "        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F9F9F9', endColorstr='#EEEFF1'); /* for IE */\n"
    "        background: -webkit-gradient(linear, left top, left bottom, from(#F9F9F9), to(#EEEFF1)); /* for webkit browsers */\n"
    "        background: -moz-linear-gradient(top,  #F9F9F9,  #EEEFF1); /* for firefox 3.6+ */\n"
    "      }\n"
    "\n"
    "      div.timeline-axis-text {\n"
    "        font: bold 12px arial;\n"
    "        color: black;\n"
    "      }\n"
    "\n"
    "      div.timeline-event {\n"
    "        border: none;\n"
    "        background-color: cornflowerblue;\n"
    "      }\n"
    "      div.timeline-event-selected {\n"
    "        background-color: mediumslateblue;\n"
    "      }\n"
    "      div.timeline-event-content {\n"
    "        margin: 0px;\n"
    "      }\n"
    "\n"
    "      div.timeline-groups-axis {\n"
    "        border-color: gray;\n"
    "      }\n"
    "      div.timeline-groups-text {\n"
    "        font: bold 12px arial;\n"
    "        color: black;\n"
    "      }\n"
    "\n"
    "      div.event {\n"
    "        border: 1px solid white;\n"
    "        border-radius: 2px;\n"
    "        -moz-border-radius: 2px;\n"
    "\n"
    "        font: bold 10px arial;\n"
    "        color: black;\n"
    "\n"
    "        padding: 2px;\n"
    "        margin: 1px;\n"
    "        overflow: hidden;\n"
    "      }\n"
    "\n"
    "    </style>\n"
    "\n"
    "    <script type=\"text/javascript\">\n"
    "      var timeline = null;\n"
    "\n"
    "      google.load(\"visualization\", \"1\");\n"
    "\n"
    "      // Set callback to run when API is loaded\n"
    "      google.setOnLoadCallback(drawVisualization);\n"
    "\n"
    "      // Called when the Visualization API is loaded.\n"
    "      function drawVisualization() {\n"
    "        // Create and populate a data table.\n"
    "        var data = new google.visualization.DataTable();\n"
    "        data.addColumn('datetime', 'start');\n"
    "        data.addColumn('datetime', 'end');\n"
    "        data.addColumn('string', 'content');\n"
    "        data.addColumn('string', 'group');\n"
    "\n";

static const char *html_post =
    "\n"
    "        // specify options\n"
    "        var options = {\n"
    "          width: \"100%\",\n"
    "          height: \"auto\",\n"
    "          layout: \"box\",\n"
    "          editable: false,\n"
    "          eventMargin: 5,  // minimal margin between events\n"
    "          eventMarginAxis: 0, // minimal margin beteen events and the axis\n"
    "          showMajorLabels: true,\n"
    "          axisOnTop: true,\n"
    "          groupsChangeable : true,\n"
    "          groupsOnRight: false\n"
    "        };\n"
    "\n"
    "        // Instantiate our timeline object.\n"
    "        timeline = new links.Timeline(document.getElementById('mytimeline'));\n"
    "\n"
    "        // Draw our timeline with the created data and options\n"
    "        timeline.draw(data, options);\n"
    "      }\n"
    "   </script>\n"
    "  </head>\n"
    "\n"
    "  <body>\n"
    "    <h1>Natural Tiny Logger (NT-Logger)</h1>\n"
    "    <div id=\"mytimeline\"></div>\n"
    "  </body>\n"
    "\n"
    "</html>\n"
    "\n";

/**
 * @brief イベント時間。
 */
typedef struct {
    int year;   /**< 年。 */
    int month;  /**< 月。 */
    int day;    /**< 日。 */
    int hour;   /**< 時。 */
    int min;    /**< 分。 */
    int sec;    /**< 秒。 */
    int usec;   /**< マイクロ秒。 */
} event_time_t;

/**
 * @brief イベント構造体。
 */
typedef struct {
    char name[BUFSIZ];  /**< イベント名。 */
    int count;          /**< イベント数。 */
    FIFO *start;        /**< 開始イベントを格納するFIFO。 */
} event_t;

/**
 * @brief トラック構造体。
 */
typedef struct {
    char name[BUFSIZ];          /**< トラック名。 */
    event_t event[EVENT_COUNT]; /**< イベント情報。 */
} track_t;

/**
 * @brief ターゲット構造体。
 */
typedef struct {
    int linecnt;                /**< イベントファイルの行数。 */
    int eventcnt;               /**< イベントファイルに含まれるイベント数。 */
    track_t track[TRACK_COUNT]; /**< トラック情報。 */
} target_t;

/**
 * @brief 詳細情報をファイルから読み込む。
 *
 * @param filename ファイル名。
 * @param t ターゲット構造体。
 */
void read_description(const char *filename, target_t *t)
{
    char line[BUFSIZ];
    FILE *fp = fopen(filename, "r");
    if (fp == NULL) {
        return;
    }
    printf("[Descriptions]\n");
    while (fgets(line, sizeof(line), fp) != NULL) {
        int track, event;
        char track_name[BUFSIZ];
        char event_name[BUFSIZ];
        if (sscanf(line, "%i %i %s %s", &track, &event, track_name, event_name) == 4) {
            strcpy(t->track[track].name, track_name);
            strcpy(t->track[track].event[event].name, event_name);
            printf("\t%d:%d:%s:%s\n", track, event, track_name, event_name);
        }
    }
    fclose(fp);
    return;
}

/**
 * @brief ターゲット情報を初期化する。
 *
 * @param target ターゲット。
 */
void init_target(target_t *target)
{
    int i, j;
    target->linecnt = 0;
    target->eventcnt = 0;
    for (i = 0; i < TRACK_COUNT; i++) {
        strcpy(target->track[i].name, "Undefined");
        for (j = 0; j < EVENT_COUNT; j++) {
            target->track[i].event[j].count = 0;
            target->track[i].event[j].start = fifo_open(FIFO_DEPTH);
            strcpy(target->track[i].event[j].name, "Undefined");
        }
    }
}

/**
 * @brief ターゲット情報を初期化する。
 *
 * @param target ターゲット。
 */
void fini_target(target_t *target)
{
    int i, j;
    target->linecnt = 0;
    target->eventcnt = 0;
    for (i = 0; i < TRACK_COUNT; i++) {
        for (j = 0; j < EVENT_COUNT; j++) {
            int cnt = 0;
            event_time_t *start;
            while (fifo_pull(target->track[i].event[j].start, (void **)&start)) {
                cnt++;
                free(start);
            }
            if (target->track[i].event[j].count > 0) {
                printf("---------------------------------------------------\n");
                printf("| %02d:%-16.16s | %8d events. |\n", i, target->track[i].name, target->track[i].event[j].count);
                printf("| %02d:%-16.16s | %8d failed. |\n", j, target->track[i].event[j].name, cnt);
            }
            fifo_close(target->track[i].event[j].start);
        }
    }
}

/**
 * @brief エントリポイント。
 *
 * @param argc 引数の数。
 * @param argv 引数。
 *
 * @return シェルに返す値。
 */
int main(int argc, char **argv)
{
    option_t opt;
    target_t target;
    FILE *fpin;
    FILE *fpout;
    char line[BUFSIZ];

    /*
     * オプションを取得する。
     */
    OPTION_INIT(&opt);
    optparse_char(argc, argv, &opt, option_callback);
    if (opt.optflag !=
            (OPTFLAG_INPUT | OPTFLAG_OUTPUT | OPTFLAG_DESCRIPTION)) {
        printf("ntlgen -i <input> -o <output> -d <description>\n");
        return 1;
    }

    /*
     * ターゲット情報を初期化する。
     */
    init_target(&target);

    /*
     * 詳細情報を読み込む。
     */
    read_description(opt.description, &target);

    /*
     * 入力ファイルを開く。
     */
    fpin = fopen(opt.input, "r");
    if (fpin == NULL) {
        printf("File open failed.\n");
        return 1;
    }

    /*
     * 出力ファイルを開く。
     */
    fpout = fopen(opt.output, "w");
    if (fpout == NULL) {
        printf("File open failed.\n");
        return 1;
    }

    /*
     * HTMLプリ情報出力。
     */
    fprintf(fpout, "%s", html_pre);

    /*
     * イベント情報を読み込みながらHTMLに変換する。
     */
    while (fgets(line, sizeof(line), fpin) != NULL) {
        int year, month, day;
        int hour, min, sec, usec;
        int pkt;
        target.linecnt++;
        if (sscanf(line, "%04d/%02d/%02d %02d:%02d:%02d.%06d %02X",
                &year, &month, &day,
                &hour, &min, &sec, &usec,
                &pkt) == 8) {
            int track = NTLDEF_NTL_TRACK(pkt);
            int event = NTLDEF_NTL_EVENT(pkt);
            int type = NTLDEF_NTL_TYPE(pkt);
            target.eventcnt++;
            switch (type) {
                case NTLDEF_TYPE_START:
                    {
                        event_time_t *start = (event_time_t *)malloc(sizeof(event_time_t));
                        start->year  = year;
                        start->month = month;
                        start->day   = day;
                        start->hour  = hour;
                        start->min   = min;
                        start->sec   = sec;
                        start->usec  = usec;
                        target.track[track].event[event].count++;
                        if (!fifo_push(target.track[track].event[event].start, start)) {
                            printf("Warning: FIFO is full.\n");
                        }
                    }
                    break;
                case NTLDEF_TYPE_END:
                    {
                        event_time_t *start = NULL;
                        if (fifo_pull(target.track[track].event[event].start, (void **)&start)) {
                            fprintf(fpout, "        var start = new Date(%d, %d, %d, %d, %d, %d);\n",
                                    start->year,
                                    start->month,
                                    start->day,
                                    start->hour,
                                    start->min,
                                    start->sec);
                            fprintf(fpout, "        var end = new Date(%d, %d, %d, %d, %d, %d);\n",
                                    year, month, day, hour, min, sec);
                            fprintf(fpout, "        data.addRow([\n");
                            fprintf(fpout, "            new Date(start.getTime() + %.3f),\n", (double)start->usec / 1000.0);
                            fprintf(fpout, "            new Date(end.getTime() + %.3f),\n", (double)usec / 1000.0);
                            fprintf(fpout, "            \"<div title='No.%d (%02d:%02d:%02d.%06d) - (%02d:%02d:%02d.%06d)' class='event' style='height:40px'>No.%d<br />%02d:%02d:%02d.%06d<br />%02d:%02d:%02d.%06d</div>\",\n",
                                    target.track[track].event[event].count,
                                    start->hour,
                                    start->min,
                                    start->sec,
                                    start->usec,
                                    hour,
                                    min,
                                    sec,
                                    usec,
                                    target.track[track].event[event].count,
                                    start->hour,
                                    start->min,
                                    start->sec,
                                    start->usec,
                                    hour,
                                    min,
                                    sec,
                                    usec);
                            fprintf(fpout, "            \"%02d:%s<br />%02d:%s\"\n",
                                    track, target.track[track].name,
                                    event, target.track[track].event[event].name);
                            fprintf(fpout, "        ]);\n");
                            free(start);
                        } else {
                            printf("Warning: No start point found. (Line=%d)\n", target.linecnt);
                        }
                    }
                    break;
            }
        }
    }

    /*
     * HTMLポスト情報出力。
     */
    fprintf(fpout, "%s", html_post);

    printf("%d lines. %d events.\n", target.linecnt, target.eventcnt);

    /*
     * 出力ファイルを閉じる。
     */
    fclose(fpout);

    /*
     * 入力ファイルを閉じる。
     */
    fclose(fpin);

    /*
     * ターゲット情報を破棄する。
     */
    fini_target(&target);

    return 0;
}

ntlgen.c以外のソースコードは順次追記予定。
https://www.cubeatsystems.com/firmware/ntlogger/ntlogger-v0.1.0.tar.gz

参考資料(reference)

「TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介」まとめ
https://qiita.com/kaizen_nagoya/items/72b882d96b2841f25faf

TOPPERS活用アイデア・アプリケーション開発コンテストを振り返る
https://researchmap.jp/joxkbxlck-1778110/
「応募すると何が嬉しい」TOPPERS活用アイデア・ アプリケーション開発コンテスト
https://www.slideshare.net/kaizenjapan/ss-78528931
「TOPPERS活用アイデア・アプリケーション開発コンテスト」への道
https://researchmap.jp/jovr40j3b-1778110/?block_id=1778110&active_action=journal_view_main_detail&post_id=38687&comment_flag=1

<この項は書きかけです。順次追記します。>
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

仮説(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.10 初稿 20180621
ver. 0.11 成果追記 20180622
ver. 0.12 関連・参考文献追記 20180623

最後までおよみいただきありがとうございました。

いいね 💚、フォローをお願いします。

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.

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?