Giter Site home page Giter Site logo

c2a-core's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

c2a-core's Issues

CMakeLists.txt を何とかする

概要

CMakeLists.txt を何とかする

詳細

全体的になんとかしたい.
非推奨表記などはなくしたい.

close条件

全体的に見直しが完了したら.

備考

NA

pythonで書かれたツール類に,フォーマッタ,リンタを入れる

概要

pythonで書かれたツール類に,フォーマッタ,リンタを入れる

詳細

c2a-coreのみならず, c2a-toolsも.
とはいえ,今まだtools類はもろもろ整ってないので,その後にやるべき.

入れるリスト

  • c2a-core/ ci script
  • c2a-core/ test
    • 残りは #195
  • enum loader
  • wings interface
  • c2a tlm cmd code generator

close条件

入ったら.

ビルドCIの結果を,エラー,ワーニングともにreviewdogで表示させ,ワーニング時はCIを落としたい

概要

ビルドCIの結果を,エラー,ワーニングともにreviewdogで表示させ,ワーニング時はCIを落としたい

詳細

C89のビルドCI (https://github.com/ut-issl/c2a-core/blob/114781a72a32161a9722fbb20d86def0bea9d981/.github/workflows/build_as_c89.yml) で

  • (エラーだけでなく)ワーニングが出たら,CIを落としたい
  • エラーもワーニングも,結果をreviewdogでPR上で表示したい

ただし,CIでビルドするとき,coreはuser配下でシンボリックリンクされているため,本来のリポジトリ上のパスとは違う場所のファイルを参照してしまっている.この状態でreviewdogに流し込むのは,なにか一工夫が必要そう?

close条件

できたら

BCLのdouble型引数を有効化して検証する

概要

BCLのdouble型引数を有効化して検証する

詳細

当時と若干仕様が変わっているので、ほかのxxx_prepare_paramに合わせて書き直し、SILSで検証を行う。

close条件

BCLでdoubleが扱えるようになったら

documentsを入れる

概要

documentsを入れる

詳細

C2Aとは,各種tips,パラメタの説明,コーディングルールなどをいれる.

どこにどのように入れるかも議論する.

close条件

いれたら

`src_core` をなんとかしたい

概要

src_core をなんとかしたい

詳細

src/
  src_core/
  src_user/

という構造が適切ではないので,なんとかしたい.

close条件

なんとかなったら

備考

NA

C2A単体ビルドできるようになったので,ワーニングを撲滅する

概要

S2E単体ビルドできるよになったので,ワーニングを撲滅する

詳細

  • #20 のつづき
  • ISSL内部のあるマイコン用の環境 (C89) ではワーニングは出ないが,Visual Studioでは結構ワーニングがでているので撲滅する
    • #pragma section とか
    • CだとOKなキャストがC++ビルドだとだめとか

close条件

ビルド結果がきれいになったら

備考

とりあえずこのIssueでは-Wallを倒す.倒し切ったら-Wextraを追加して別の撲滅Issueを立てる.

SLの抜本改修 (Sequential Item)

概要

SLの抜本改修 (Sequential Item)

詳細

現在,SLの登録のたびにSequential Itemが増えることを懸念してこれを廃止している(SL登録は普通のBCと同じようにしている).
このままでいいのか,SL登録時に何らかのラッパを噛ませる等で可読性を上げる改修を入れるのか?
現在のところ,鈴本にはアイデアはない.

close条件

なんとなくの方針が固まったら.

暫定的なREADMEを設定する

概要

暫定的なREADMEを設定する

詳細

詳細は後で記載するとして,最低限の情報を記載したものを作る

close条件

READMEを設定できたら

備考

NA

CCSDS周りのコードをcoreで管理する?

概要

CCSDS周りのコードをcoreで管理する?

詳細

TCPacketまわりを各種OBCで管理するのがだるくなってきたので.
2nd OBCなどは,ビルド対象に含めなければいいだけなので.

close条件

方針が決まったら

関連

CTCPの実体はどんなデータ構造でもよくする

概要

CTCPの実体はどんなデータ構造でもよくする

詳細

現在,CTCPの実体はCCSDSのTCPである.

C2A的には,C2Aを流れるCTCPの実体は何でもよく,TCP以外でも使えるように,ここを疎結合にしたい.
CTCPをインタフェースクラスっぽくし,必要なIFのみ定義し,中の実体はいかなるデータ構造でもよくする.

close条件

できたら

備考

C2A coreで,ちょいちょいCTCPではなくTCPを仮定したコードがあるんよなぁ...

WINGSと接続してテストを回すCIを,GitHub-hosted runners で動かす

概要

WINGSと接続してテストを回すCIを,GitHub-hosted runners で動かす

詳細

テストを動かすには,WINGSを立ち上げ,C2Aをビルドし,動かす必要があり,オンプレwindows上では自動化できつつあるが,
https://docs.github.com/ja/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
などにあるように,publicなリポジトリでは, self-hosted runners を使うべきではない.

そこで,テストCIを GitHub-hosted runners で動かすようにしたい.

close条件

できたら

備考

NA

Event Handlerの改善

概要

Event Handlerの改善

詳細

  • #49 でつくったEHの改善を行う
  • 具体的には次
    • activate, disactivate時にcounterをリセットしないと,累積発火がおかしくなりそう.
    • 同様に,counterクリアコマンドがほしそう
    • 多段イベント対応
    • 多段イベント時用に,多段EH_Ruleをまとめてactivate/inactivateできる仕組みを追加
    • EH対応時に,localをrule idにしたevent発行をすると,運用時にいちいちrespond logに張り付かなくて良くなって便利そう(だし,それをトリガーに別のイベントを発火できそう)
      • ただこれはlogを使うので,コマンドでdisableできるようにしたほうがいいかも
      • err level はLOW?
    • counterクリアだが,rule id指定以外に,evet指定でもできるようにしたいかも.
      • たとえば,xxx が発生したら yyyのイベントを発行,そうでなければ,yyyに紐づくrule counterをクリア,といった処理が組める
      • eventからrule idを引けるようにしてもいいかも?
    • 二分探索をbsearchで書き直す
    • 二分探索のところ,キャッシュ最適化してもいいかも
    • ここ,範囲外アクセスの可能性ありそう?

直近では難しそうだが,次のようなアイデアもある

  • EH対応時に,発火した Event の情報 (noteとかtimeとかerr_levelとか)を渡したい?
    • Err handlingにおいて,その情報があったほうがいい可能性があるので(特にnote)
    • EH_Ruleにて,Eventはgroup, localで特定されるが,その時の他の情報も見れると,なんとなく便利そう.
    • ただ,渡したとして,誰が使うのか問題?(結局発火する処理はBC deployなので.そこで展開されたCmdが実行される頃には,EHの状態がどうなってるか不明,という説もあり...)

追加ToDo

  • ドキュメントの整備
    • 使う前にactivateしておくといいよ(内部counterも0クリアされるし
    • 無限回引っかかって無限回EH対応してTLがいっぱいになるとこまるので,EHでBC展開されたらinactivateされるよ
      • 再度使いたい場合は,対処が終わったら or 展開BCの終盤にactivateを仕込むといいよ
  • 多段EH発火の説明の整備
    • #139 (comment)
    • あたりが理解を助ける説明になってるので,後でドキュメントかdoxygenに転記するべき
  • 無限再帰の防止
    • ルール登録時に,無限再帰ループになら内容にチェックするようにする
    • 多段の最大数を設定して,それ以上の段数もできなくしたほうが良さそう

close条件

だいたい落ち着いたら.

うるう秒対応

概要

うるう秒対応

詳細

  • #64 あたりで,UTC → TI の変換が必要になる(unixtimeならいらない)
  • 今後どうせ必要になる

close条件

対応したら

備考

つらすぎる...

打ち上げ後に追加のうるう秒決まるとかってありえるんか

文字コードをUTF-8にしたい

概要

文字コードをUTF-8にしたい

詳細

現在SJISの文字コードをUTF-8にしたい.
ただし,現在のISSLの環境がSJISを要求するので,できるのはそれが解消されてからか.

close条件

なったら

備考

様々なセキュリティリスクに気づきやすくする

概要

様々なセキュリティリスクに気づきやすくする

詳細

詳細未定.

依存ライブラリのセキュリティ通知とかに気付けるように,とか,バッファーオーバーフローを検知する(静的解析ツールをいれる),とか?

close条件

なんとなく方向性の議論ができたら

S2E側から呼び出すC2Aの初期化関数を,1つづつincludeして呼び出しているのはおかしい

概要

S2E側から呼び出すC2Aの初期化関数を,1つづつincludeして呼び出しているのはおかしい

詳細

void OBC_C2A::Initialize()

のなかに,各種initがいるのは良くなく,この中のinitはC2A側で持つべき.
C2A側でinit関数が変わったら,そのたびにS2E側も更新しないといけないのはおかしい.

close条件

きれいになったら

備考

c89のgcc Wextra Warningに対応すると,あるマイコンIDEにてWarningが出てしまう

概要

c89のgcc Wextra Warningに対応すると,あるマイコンIDEにてWarningが出てしまう

詳細

  • #73 にて, const uint32_t などの返り値を uint32_t などにした
    • warning: type qualifiers ignored on function return type [-Wignored-qualifiers] が発生
    • 右辺値にconstつけて返しても,値渡しなため意味がないから
  • 一方で,以下などでは,const構造体のメンバをconstなしで返している,として,あるマイコンIDEでは C0008 (W) Conversion in return を出してしまう.

close条件

どちらの環境でもWarningがでなくなったら

備考

どうしようか.とりあえず,上の例だと,意味はないんだけど (uint16_t) とキャストさせる?

テレメ,コマンドの UnixTime への対応

概要

テレメ,コマンドの UnixTime への対応

詳細

以下 UTC ≒ UnixTime として書く

  • MOBC の UTC 情報 を Tlm に入れる
  • UTCを引数としてTLC登録を受理出来るようにする → #64
  • TIのインクリメントと実時間の対応をGSから補正できるようにする

close条件

実装が終わったら

備考

NA

C2A間通信を実装したが,こみいっているのできちんとドキュメント化する

概要

C2A間通信を実装したが,こみいっているのできちんとドキュメント化する

詳細

2021/1月にC2A間通信を実装し,Ground Station→MOBC→2nd OBCというテレコマ疎通ができるようになった.
また,2nd OBCのTLをMOBCで持てたりするようになった.

機能が複雑なので,ドキュメント化する.

関連:

close条件

ドキュメント化できたら

CCP_EXEC_STS が負数なのを正数にしたい

概要

CCP_EXEC_STS が負数なのを正数にしたい

詳細

  • C2Aのenumは基本的には正数であるが, CCP_EXEC_STS においては負数である.
    • typedef enum
      {
      CCP_EXEC_PACKET_FMT_ERR = -6, //!< packet handler で用いる
      CCP_EXEC_ROUTING_FAILED = -5, //!< command router で用いる
      CCP_EXEC_CMD_NOT_DEFINED = -4, //!< cmdExec で用いる
      CCP_EXEC_ILLEGAL_CONTEXT = -3, //!< コマンド実行時のその他のエラー
      CCP_EXEC_ILLEGAL_PARAMETER = -2, //!< コマンド実行時のパラメタエラー
      CCP_EXEC_ILLEGAL_LENGTH = -1, //!< コマンド実行時のコマンド引数長エラー
      CCP_EXEC_SUCCESS = 0, /*!< コマンド実行成功
      なお,コマンドの実行の結果なので,その後の処理が失敗しても,コマンドが実行されていればこれを返す */
      CCP_EXEC_UNKNOWN //!< 内部処理用.使わない.
      } CCP_EXEC_STS;
  • これは,(鈴本の推測ではあるが,ほぼ高い確度で)C2A誕生当時は,コマンドの返り値として,負数は CCP_EXEC_STS と共通なものかつシステムで使われるものを割り当て,正数としてユーザー定義(cmdごと)値を定義していたものと推定される
  • 一方で,これがC2A上ではあまり見ない負数である影響がそれなりにあるので,直したい

影響範囲はきちんと調べること.

close条件

正数にしたら.

C2A単体をライブラリビルドできるようにする

概要

C2A単体をライブラリビルドできるようにする

詳細

  • #2 の話から派生
  • S2Eを用いてビルドすると,S2E側の大量のワーニングのせいで開発しにくい
    • ISSL内部では特定のハードウェアを対象にした環境で(=S2Eを使わないで) ビルドしているため,ワーニングを出ないように開発できているが,それはここでは使えない.
  • そこで,C2A単体をライブラリビルドできるようにすれば,C2A内部のみのワーニングを簡単に確認できる

close条件

できたら

testをいれる

概要

testをいれる

詳細

pytestで書かれたやつ.

どこにどのように入れるかも議論する.

close条件

いれたら

コンポ間通信部分をdocument化する

概要

コンポ間通信部分をdocument化する

詳細

C2A間,非C2A間のISSL標準をドキュメント化する.
DSとあわせて明記する.

関連

close条件

document化したら

Event Logger の軽微な性能向上

概要

Event Logger の軽微な性能向上

詳細

2021/09に C2Aの当初から存在した Anomaly Loggerの後継としてEvent Loggerを実装した.

2ヶ月ほど使い,多少の性能改善をしたくなったので,する.

具体的には,

  • log_orders の並び替えをforからmemmoveにしてパフォーマンスを上げる.
    • 他のforもなくしていく
    • EL_search_clog_ も途中でNULLになったら not foundを返すようにしていく

close条件

ELの改善が一段落したら

CoreとUserの分離,UserからCoreの利用のスキーマについて,改善を考える

概要

CoreとUserの分離,UserからCoreの利用のスキーマについて,改善を考える

詳細

2021年にそれまでOBCごとに1つのrepositoryで作業していたC2AをUserランドとCoreに分離し,すべてのOBCでCoreを共通化した.
一方で,あまり詳細を考えず,鈴本一人でがっと分離・実装してしまっているので,改善していきたい.

userとcoreでincludeが交錯しまくっているのとかもどうにかしたいし,パラメタ管理をもう少しいい感じにもしたい.

close条件

とりあえず議論から.議論してから考える

備考

#6 も関連しそう

UTCなどの絶対時刻でTLC (Time Line Command) が打てるようにする

概要

UTCなどの絶対時刻でTLC (Time Line Command) が打てるようにする

詳細

  • OBC_TL.Cmd_HOGE において,時刻引数をtiではなく,utcなどの絶対時刻にて打てるようにする.
    • 既存の OBC_TL.Cmd_HOGE は残すので,あらたに追加することになる.
      • 命名は? OBC_ATL (absolute tl)?,OBC_UTL (utc tl)?
  • これは,あくまでエイリアス的な機能であることに注意する
    • 現在, OBC_TL.Cmd_HOGE は TCP_CMD_EXEC_TYPE_TL のTCP_EXEC_TYPEとなり,それはCCP_EXEC_TYPE_TL0のCCP_EXEC_TYPEに対応し,TL0に展開される.
    • ここで作るものは,コマンド受信部  (
      static PH_ACK PH_analyze_cmd_(const CTCP* packet)
      ) では,別のTCP_EXEC_TYPEとして受理されるが,最終的にはCCP_EXEC_TYPE_TL0に変換されるべき(つまり,
      return PH_add_tl_cmd_(0, packet, (size_t)(TMGR_get_master_total_cycle()) );
      にルーティングされるべき)である.
    • つまり,引数はUTCなどであるが,それがPacketHandlerにて,TIへ変換され(これはObcTimeの関数で行う)た後に,TL0コマンドに変換され,TL0のキューに登録される.
  • それに応じて,TCP_CMD_EXEC_TYPE はこのCmd用のtypeを追加する必要がある.
    • TCP_CMD_EXEC_TYPE などは 別途資料 を参照
  • その他の注意
    • 新しい TCP_CMD_EXEC_TYPE の対応や,コマンドファイル対応などでWINGSの改修が必要.
      • これは早めにWINGSと調整すべき.C2Aの実装が終わる前にもWINGS側はリリースして問題ないはず.はやくリリースされたほうが,SILSなどでの検証が楽.
    • ObcTime (https://github.com/ut-issl/c2a-core/blob/31dbe6e8c347252b55b6fc63ef7c11016b75e9b5/System/TimeManager/obc_time.h) を一度整理してもいいかもしれない
      • 結構汚いコードが残ってるので
      • 型とか公開関数とか整理しても良いかも

close条件

実装ができたら

備考

  • #63 の娘issue

C2A初期化時に TMGR_get_master_clock を呼ぶと,時刻の連続性が失われる

概要

C2A初期化時に TMGR_get_master_clock を呼ぶと,時刻の連続性が失われる

詳細

現在,Appの初期化時刻を計測するため, C2A の最初期に 時刻の刻みをスタートし,その後,C2A初期化終了後にRTOSとして動き始める直前に再び TMGR_init にて master clock を 0 に戻している.

これによって,C2A初期化時にも時刻を使えるが,Driverや様々なAppなどの初期化に,時刻類を初期化する目的で呼ばれている TMGR_get_master_clock が0 ( {0, 0, 0} ) を返さない.

したがって,その後,diff等をとるさいに,時刻の連続性が失われ,バグを生むリスクがある.

したがって,通常利用においては,初期化中には 0 を返すようにしたい.

なお,初期化時に 0 ではなく,TMGR_get_master_clock を呼んでいるのは,App等の初期化はC2A起動時以外にもあり得るためである.そのような場合には,現在時刻を入れるほうが,都合がいい.
(例えば制御アプリで制御開始時に初期化し,実行ごとにdtを計算する場合など)

close条件

問題が解消されたら.

コマンドのパラメタ取得を定型化したい

概要

コマンドのパラメタ取得を定型化したい

詳細

uint8_tのパケットの,取得したいパラメタの位置を素でしていしてmemcpyして,enumの場合はtemp変数用意して,,,というのがつらい.

要件

  • 素で,offset指定して,memcpyしてるのをなくしたい
  • enumへの代入は,memcpyが使えず,temp変数使ってるのをなくしたい
  • できれば,安全にしたい(セグメンテーション違反を検出したい)

close条件

よしなになったら.

Doxyfile を入れる

概要

Doxyfile を入れる

詳細

Reference のリポジトリを作ったら.

close条件

入れたら

備考

NA

Coreの開発フローを考える

概要

Coreの開発フローを考える

詳細

forkしてPRを出す開発なので,結構しんどいことが発生しそう.

#1 でも述べたが,user側がないと,coreはビルドできないので,coreにPRをだしたら,対応する(core検証用の)userにもPRを出す必要がある.そのときに,userでbuild CIを回すが,build CIはPRのfork先の(PRのマージ元の)オーナーを知るすべがない?(ほんとか? もしかしたらActionsにあるかも)

また,coreを開発するuser側もめんどくさく,開発用userのsubmoduleとしてのcoreのremoteをforkのたびに変えないといけない.

close条件

開発フローが考えられ,実装できたら.

備考

NA

リポジトリの設定をきちんとする

概要

リポジトリの設定をきちんとする

詳細

  • dev, main にはpushできないように(管理時などは除く)
  • mergeは merge commit に限定するように
  • CIをどうするか真剣に考える. → #3 に移動
    • 現在,S2EやWINGSの可搬性が高くないこともあるので,一旦ISSL内部でオンプレでもつ?
    • user部をどうするか? 簡素なsampleをつくってS2Eでまわすか?
      • その時,coreのPRでマージ前は,orgがut-isslではなく,フォーク先なので,user側のsubmoduleのURLを書き換える必要がありそう

close条件

設定が完了したら.

備考

NA

HK発送が 0.5 Hz になっているので1Hz にしたい

概要

HK発送が 0.5 Hz になっているので1Hz にしたい

詳細

  • HKのデータがCCSDS発送の条件より短いのですぐに発送されず、1Hzより長くなっている
  • 適当なDummy Byte で埋めて長くすればOK

close条件

  • SILSでHKが1HzになればOK

関連

最低限S2Eでビルドする & 軽いチェックを行う CI を建てる

概要

最低限S2Eでビルドする & 軽いチェックを行う CI を建てる

詳細

ビルドと規約チェックぐらい?

  • S2E ビルド
  • エンコーディングチェック
  • 規約チェック
  • (できれば)テストCI

一旦HW依存ビルドは置いておく(coreなので)

#1 からの引き継ぎ内容

  • 現在,S2EやWINGSの可搬性が高くないこともあるので,一旦ISSL内部でオンプレでもつ?
    • オンプレでもつ問題は #16
  • user部をどうするか? 簡素なsampleをつくってS2Eでまわすか?
    • その時,coreのPRでマージ前は,orgがut-isslではなく,フォーク先なので,user側のsubmoduleのURLを書き換える必要
    • #2 で議論

close条件

CIがたったら

備考

NA

Anomaly Handlerの後継,Event Logger と組み合わせたEvent Handlerをつくる

概要

Anomaly Handlerの後継,Event Logger と組み合わせたEvent Handlerをつくる

詳細

Event Logger の誕生に伴い,Anomaly Logger が deprecated となった.

それに紐づく,Anomaly Handlerはバグや動かない機能がおおく,Event Handlerとして新たにより良いものを作り直す.

close条件

EHの初版が実装されたら

備考

AHのバグは,以下のようなものが知られている.

  • AH_CONTINUOUSが1 cycle中に複数種類のAnomalyが発行される時に対応できていない
  • accumulate機能が正常に動作しない
  • respond counter がAH clear で初期化されない

pytestのWINGSの認証情報を環境変数で渡せるようにする

概要

testのWINGSの認証情報を環境変数で渡せるようにする

詳細

jsonで渡すのが渋いので.

close条件

できたら

備考

Windowsでの環境変数の取り扱いがいまいちで,ぱっといい方法がわからない.

Linuxなら

HOGE=hoge pytest

でいいんだけど.

C2A間通信がわかるようなexampleを公開する

概要

C2A間通信がわかるようなexampleを公開する

詳細

ここ最近,C2Aを搭載したボード間通信(たとえばMOBC - AOBC)をサポートし始めたので,それがわかるuser example(sample mobc, sample aobcとか)を公開する.

close条件

公開したら.

既存のフォーマッタを導入したい

概要

既存のフォーマッタ,リンタを導入したい

詳細

現在, https://github.com/ut-issl/c2a-core/blob/feature/add_coding_rule_check_ci/.github/workflows/check_coding_rule.yml で,お手製コード規約チェックCIを動かしているが,お手製なので,既存のもの(clang-formatとか?)を動かせるようにしたい.

ただ,clang-formatの使い勝手が以下の点であってなく,問題になっている.

  • ルールを全部決めなくてはならず,一部ルールを無視する設定がない(まあフォーマッタなので妥当ではある)
  • すると,現C2Aのコードに合わせたルールが作れなかった
  • C言語なため,名前空間が切れず,変数名や識別子が長くなりがち
    • 1行の上限長さを設定した場合,小さい値だとめちゃくちゃ改行が発生してむしろ見ずらい
    • 長めに設定すると,改行してもいいようなif文などが全部1行になってしまい,それはそれで見ずらい
  • 細かい辛さ
    • if のワンライナーが改行されて規約違反( {} のない 複数行 if は禁止)になったり
    • defineは改行されたくない

などなど.

もはや上の細かいことは全て諦め,フォーマッタの出力を正義,とする考えもあり.

close条件

フォーマッタ,リンタまわりがなんとかなったら.

src_user/IfWrapper/Silsに.cなC++のソースファイルがあってよくない

概要

src_user/IfWrapper/Sils/*.c にC++のコードを置くことについて議論する

詳細

  • #35 でいろいろ話が出た
  • これらはCとしてもC++としてもビルドされる,というわけではなく,C++としてしかビルドされない(SILS専用)
  • それにも関わらず拡張子が.cになっており非常に分かりにくい
  • さらに,CMakeでビルドする上でも都合が悪そう

close条件

なんとなく今後の方向性が見えてきたら.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.