私のオープンソースバイク

「戦士はgiveめません。」

マスターシフ、M.F。 カンフーパンダ



このトピックは技術的なものではなく、芸術的なものと考えることができます。 コード、クラス図、その他のナンセンスな部分はありません。 私が約1年間開発している1つのJavaオープンソースプロジェクトの物語があります。



開始する



それはすべて、私がロシアの地方の大学で4年生のときに始まりました。 私の専門分野に伝説があった学期から、グラフィックス、コンパイラー、計算数学(以降VM)の55回目の研究室での「キラー学期」について。



学期の初めに、来るべき大きな退屈な(そして大学では原則としてすべてが退屈な)仕事について考えるとき、あなたの手はしばしばあきらめ始めます。 幸いなことに、私はすでに「果てしない愛好主義」の定番のレシピを持っていました。 その意味は「未知の無限の知識」でした(c)Strugatsky、月曜日は土曜日に始まります 。 簡単に言えば、標準的な教育プロセスを少なくとも何らかの形で歪ませようとするたびに、少なくとも少し面白くなります。 多数の方法が試されました-稼働中のマシン上のLinux(ATIのドライバーを使用)、大学のサークルで人気のない言語(C#およびC ++ではありません)および開発環境(VS2008ではありません)、タスク用のバグトラッカー、ラボ用のローカルコードリポジトリなど



次に、オープンソースプロジェクトの作成を開始することにしました。これは、Javaプログラマー向けの透過的で馴染みのあるAPIを備えたJavaライブラリの形式で、VMコースでのラボ作業の集合です。



Google Codeでプロジェクトを作成し、ライブラリの名前を思いつき、作業を開始しました。 VMコースの次の各ラボは、ライブラリリポジトリへのコミットのバンドルでした。 それは私にとって新しいものであり、コース全体で私の熱意を維持するのに役立ちました。



コースの終わりに、 la4j (Java用の線形代数)はバージョン0.0.7に成長し、ベクトルと行列の操作方法、6つの異なる方法で線形方程式システムを解き、固有値と行列ベクトルを見つける方法を既に知っています。



半ば



VMコースを完了した後、私はほとんどプロジェクトを行わず、コースは終了しました-私の熱意は尽きました。 新しいコースが始まったときにすべてが変更されました-デザインパターン。



このコースは私にとって非常に興味深く、Habrahabrでそれに関する一連の記事を書き始めました。 しかし、ここでの主なことは、la4jでかつて犯したすべての間違いに気付いたことです。 これに耐えられず、便利なEclipseリファクタリングツールを装備して、コードを細断し始めました。 そのため、バージョン0.1.0になりました。 誰にでも見せるためにもう恥ずかしくなかったバージョン。 優れたOOPデザイン、小さいながらも十分な機能を備えていました。 そして最も重要なこと-それは私が満足を感じたのは非常に多くの仕事の結果でした。



この段階まで、la4jをオープンソースプロジェクトとして位置付けたとは言えません。 私はこれを私の趣味として、知識とスキルを磨くためのプラットフォームとして認識しました。 ただ楽しみのためにやっただけです。



それからしばらくの間、私は再びla4jを忘れて、勉強と仕事を組み合わせて仕事で一生懸命働き始めました。 運命によって、私は仕事でJavaプラットフォームのパフォーマンスに取り組み始めました。この事実から、la4j内の計算アルゴリズムを再確認しました。



la4jで得られたパフォーマンス分析と最適化の経験を適用しようとしました。 そこで、 「1つの最適化の歴史」という記事が誕生し、私のプロジェクトのユーザーの間で大きな関心を呼びました。 その瞬間、私は非常に多くのレビューを受けました。そして最も重要なこと-助けの申し出。 何人かの人々は、私がプロジェクトをさらに発展させるのを助けたいと願っています。



そして、今ではすべてが変化するように思えました。 人々はコードを書き始め、たくさんのコミットが私のリポジトリに飛びます。 しかし、これは起こりませんでした。



私は少なくとも数人の人々をプロジェクトに追加し、将来の計画について話し、おおよそのタスクでそれぞれの問題を投稿しました。 私自身、新しい参加者の反応を楽しみにしていました。 残念ながら、私は待たなかった。 人々はいなくなって、私はプロジェクトを無期限に凍結することにしました。



その後、大学を卒業し、正社員になりました。 勉強よりも仕事が好きだったとしか言えません。 5年間、卒業証書とマラソンを守ることから休憩を取ろうとして無駄になった多くの自由時間がありました。



9月に、すべての生徒が勉強を始め、条件付けられた反射神経がパブロフの犬のように私のために働きました。実験室のものを書いたり、機能分析を学ぶ必要があります。 それから私はla4jを思い出し、それを終わらせることに決めました。 「LUシステムの解決は私たちの時代の非常に重要かつ緊急の問題である」ためではなく、単に私がそれを始めたとき、そしてそれを終えなかったからです。



私が最初にしたことは、プロジェクトをMavenに変換し、TDD方法論を使用することを決定するテストの作成を開始したことです。 結局のところ、私の選択は成功しました。まず、進行状況を確認できます。次に、製品のリリース準備が整ったときに感じることができます。



アーキテクチャ全体を完全に再定義し、多くのコードを書き直して、新しいコードを作成しました。 追加された機能(スパース行列、分解、 入力/出力など)。 ユニットテストなしでは気付かなかったいくつかのバグを修正しました。



そして...



ほぼ終わり



数日前、バージョン0.2.0で作業を終了しました 。 多くの作業が行われ、多くの技術的およびそれほどではない決定が行われ、55のクラスが設計および実装され、6,700行のコードと約80のjUnitテストが作成されました。 私の仕事が無駄にならないことを望み、java-developerのポートフォリオのもう1つの便利なツールになることを願っています。



終わり



読者にお願いします。 コメントを書く前に、既成の質問と回答のリストに注意してください。



Q:「Javaでは、誰も計算を書かない、埋める!」

O:「彼らは書いている。 さらに、ネイティブプラットフォームにバインドされているため、BLASのラッパーを使用することは望んでいません。」



Q:「JAMAがあります。なぜ別の自転車ですか?」

A:a)彼は自分のものだから。 b)JAMAはスパース行列をサポートしていません。 c)JAMAは入力/出力をサポートしていません。 c)JAMAにはひどいAPIがあります。 d)JAMAのパフォーマンスはひどいです。



資源





UPD :最近、 バージョン0.4.0が利用可能になりました(2013年6月3日)



UPD :静かに静かにリリースされたバージョン0.4.5 (10/02/2013)



All Articles