OSS

概要

OSS(Open Source Software)はオープンなライセンスのもとで自由に開発されるソフトウェアのこと。

RubyPythonRustTypeScript…メジャーなプログラミング言語のほとんど(すべてか)はOSSである。

Memo

Tasks

Reference

How to be a successful contributor :: Fedora Docs

fedoraプロジェクトに貢献する方法。

TODO Ruby everywhere

Matzのスライド。Rubyの導入例について。

Ruby開発が教えてくれたこと

Matzのスライド。

Feeding the sharks

Matzのスライド。OSSとしてのRubyについて。

OSSエンジニアを1年やってみた所感 - knqyf263’s blog

謎に包まれたOSSメンテナーの生態。 文章が読みやすい。

Archives

DONE Code Reading プレミアムブックス版 オープンソースから学ぶソフトウェア開発技法   Read

プログラムの読み解き方の本。

  • 読む目的を明確にする
  • ドキュメントから読む
  • 動かして試せるように環境構築する
  • 小さく簡単なものから理解する
  • 些事でなくアーキテクチャを理解する
  • 制御構造をブラックボックスに見立てて検証する。たとえばトップレベルのwhileだけ見る、とか
  • コードを読む目的をはっきりさせる、フォーカスする
  • 他人の書いた良質なコードを読むことを習慣化する
  • コードを読むときは、目標を決めて重点的に読む。新しいパターンやコーディングスタイルを学ぶのか。何かの要件を満たす方法を知りたいのか。
  • システムに新しい機能を追加するときに最初にすべきことは、類似した機能の実装を見付け、それをこれから実装する機能のテンプレートとして利用することです
  • ソフトウェアシステムのレビューを行うときは、実行可能ステートメント以外にも確認すべき要素があることを忘れないでください。ファイルおよびディレクトリ構造、ビルドと設定のプロセス、ユーザーインターフェイス、システムドキュメントなども調査しなければなりません。
  • プログラムのある種の機能については、ソースコードを読むよりも現実にプログラムを実行したほうが理解しやすい場合がある。
  • 本格的なプログラムを調査するときは、プログラムの主な構成要素を確認することから始めるとよい
  • ライブラリ関数に出会ったときにオンラインドキュメントを読むことを習慣化すれば、コードを読むスキルと、コードを書くスキルの両方が向上します。
  • コードを読むときは、ボトムアップとトップダウンからの調査、発見的な問題解決、コメントや外部ドキュメントの見直しなど、問題に即して可能な戦略は何でも試してみることが大切
  • コメントを付ける、空白を挿入する、変数、関数、クラスの名前をうまく決めるなど、プログラムの動作に直接影響しない項目を変更して可読性を改善できる可能性がある
  • ループの性質に関して推論を考えるとき、バリアントとインバリアントという概念を中心に抽象化を行うと有効な場合がある
  • 意味を残しつつ変形してコードを再編成することで、コードの理論を簡単にする
  • 言語の構成要素の働きがわかれば、それを使用しているコードについての理解がより深まる
  • ポインタにどんな使い方があるかを分類できるようになれば共通のコーディングパターンが見えてくる
  • Cプログラムのポインタには次の用法がある
    • リンクデータ構造を作る
    • 動的に割り当てられたデータ構造を参照する
    • 参照呼び出しを実装する
    • 一連のデータ要素にアクセスする
    • 配列を引数として渡す
    • 関数を参照する
    • 別名で参照する
    • 文字列を表現する
    • システムメモリに直接アクセスする
  • 構造体と共用体の両方で使われている背後の理由を理解し、分類する
  • Cプログラムの構造体には次の用法がある
    • まとめて操作されるデータ要素をグループ化する
    • 関数から複数のデータ要素を返す
    • リンクデータ構造を作る
    • 各種の装置やネットワークリンク
    • 記憶媒体などのデータ構造をマッピングする
    • 抽象データ型を実装する
    • プログラムをオブジェクト指向のスタイルで作成する
  • Cプログラムの共用体には次の用法がある
    • 記憶域を効率的に使用する
    • 多態を実装する
    • データをさまざまな内部表現で操作する
  • 配列はプログラム内で実装された抽象マシン、仮想マシンで使われるデータやコードを格納することにより、プログラムの動作を制御できる
  • 自身へのnextおよびprevのポインタを持つ構造体は、たいていダブル連結リストのノード
  • アプリケーションのソースコードツリーは、たいていそのアプリケーションの展開構造を反映している
  • 巨大なソースコード集合にひるまない。こうしたコードはその場限りのものよりうまく編成されていることが多い
  • 大きなプロジェクトに取り組むのがはじめてなら、そのディレクトリツリー構造がどうなっているか、少し時間をかけて眺める
  • プロジェクトのソースツリーには、仕様書、エンドユーザや開発者のドキュメント、テストスクリプト、マルチメディアリソース、ビルドツール、例、ローカリゼーションファイル、改定履歴、インストール手順、ライセンス情報なども含まれる
  • 大きなプロジェクトでは、設定ステップのあとでMakefileが動的に生成されることがよくある
  • Cプリプロセッサを使う
  • コンパイラがあるコードをどう扱うかを完全に理解するには、生成されたアセンブラコードを見る
  • 関連するオブジェクトファイルのシンボルを調べることで、ソースファイルのインポートとエクスポートのリストがはっきりわかる