気が付いたら自作ライブラリが世界中で使われていた件
OSS文化良く分からん
こんにちは、北神です。
なんかこの頃、国内OSSは海外で見向きもされないって話が出てたので、なんか知らんが世界中で使われた事例も乗っけて置こうかと思いました。
北神について
基本的には、電子機器や組込み開発を多くやってます。
どのライブラリの話?
自分はGithub文化が好きで、何でもGithubで公開すると言った形で、クソソースも沢山上げてます。
空プロジェクトだって色々あったりします。日記だってあります。
一番流行ったライブラリはこちら
MCP2221Aと言うUSB-I2Cのチップがありまして、Microchipから販売されています。
元々、MCP2221AはMicrochip社がプロトコルを制定してますので、公式のソフトもあります。
また、C言語のライブラリも勿論ありました。
今回、自分がI2Cをもっと身近に操作できるように、Python化しよう。と思ったのがスタートでした。
当時はまだRaspberryPiも出始めで、Pythonとハードウェアを繋げる話はとても少なかったです。
Pythonとハードウェアとの連携は、以下のYoutubeで語ってます
その為、MCP2221Aとハードウェアを繋ぐ事例も少なく、C言語ライブラリがあってもPythonでは無かった所にリリースが出来たと思って居ます。やっぱり誰もやっていないニッチライブラリは楽しいですね。(正直流行るとは思ってなかった)
ファーストコンタクト
USBtoI2CをPythonで連携したって話、そんな盛り上がらんだろ、自分用だ自分用と思って居たのですが、海外文化に知見がある友人 @K4zuki https://github.com/K4zuki 氏にプルリク等色々頂き、海外水準のレベルに達した点が大変良き経験でした。大変感謝しております。
自信が付くと広めたくなる
@K4zuki 氏に手直しを入れてもらい、色々細かく調整していくと、もっと広めても良いんじゃないかって思うようになりました。
んで、最初に取った手が・・・Googleサーチに検索できるようにURLを通達するようにしました。
今でも出来るか分かりませんが、Githubは無駄情報が多く、Googleのサーチでは普通はノーヒットになってると思います。そこで、Googleサーチに検索してもらえるように色々尽くした記憶があります。
また、Pypiにも登録しました。pipでインストール出来ると自分も助かるので。
その辺が、世界中で使われるようになった経緯かもしれません
結果どうなったか
まぁ、やや受け。でもissuesはあったので、利用者が居る事は分かった。
段々issuesを受けると、思想が強いユーザーも増えて来た。
最初の自分の構想は、分かりやすいコード、データーシートとリンクする命名規則、編集が安易な圧縮しない構文だったんですが、徐々に簡略化と省略化の波に押され、段々自分が読めないソースに改変されて行きました。
正直、人の書いたソースを読んで、それがこの先正しいか、考えるはとても大変ですね。
しかも、今のままでも動くのに、なんで思想を受け入れないといけないんだと言う奮闘も少しありました。Githubに多数決の仕組みがあると良いですね、その選択は正しいのか正直分からない。
MITライセンスだし、このまま放置しても良いかな・・・滝汗
その後の話
久しぶりにライブラリ見に行ったら、なんかEasyMCP2221からリンクで飛んできているみたいで、おや?ライセンス違反か?と思ったんですが・・・
当初は Yuta KItagami による PyMCP2221A ライブラリ (https://github.com/nonNoise/PyMCP2221A) に基づいていました。
ちゃんと継承して別プロジェクトを進めてくださっていたみたいです。
よかったよかった。
思う事
流行らせようと思ってOSSに参加しない方が良い
正直、issuesをいくつか熟すと見えてくるのが、自分の利益しか考えない人たちが多すぎる。
これは国も超えてあったので、Githubに居るユーザーがそうかもしれませんね。
自分が使いやすい形にしてくれ、自分が分かるように教えてくれ。そんなのばっかり。
メーカーの資料もデーターシートもあるんだから、ソースだけじゃなくそう言うのも読んでくれ
あんたのプロジェクトを助ける為にことライブラリがあるんじゃない。
不満は沢山あります。
それでも、やっぱり使ってくれると嬉しい
これは思想の話なんですが、自分は流行らせよう、目立とう、自慢しようと言ったタイプじゃないんですよ。本当に。
本来は、誰かの為になりたい、誰かの助けになりたい、誰かの便利になりたいそう言ったタイプです。
なので、誰かの何かの一部になる事は大変嬉しいですし、有難い事です。
なので、OSSで活動する際は、機械仕掛けのネジになる気持ちでやるのが良いかなぁと思います。
ソースは簡潔に、ベタ書きの方が良い時がある
これも思想の話ですが、自分はソースをべた書きするのがとても好きです。
@K4zuki 氏や他の方に修正されて出来た形ですが、それでもベタベタのベタ。
何をどう操作しているのか、1行づつ書いてあり、なんかダサい。
今回、継承して別のライブラリとなったEasyMCP2221から似た構文を読むと
綺麗ですね。
ここで何が良いたいかと言いますと・・・
継承しやすいって事は、読みやすいコードだったんだよ
ベタはダサいので誰も使わないし流行らない。もっとカッコいいソースを書いた方が良い。
それが逆に、流行らないライブラリになるのかもしれません。
勿論、機能的な問題や、利用者全員が喜ぶ修正は喜んで改善しますが、そもそもOSSはソースが読めますので、文句があれば作れば良い文化です。
なので、読みやすいソースが絶対正義であることは変わり有りません。
その為、ベタが並んでダサいソースも、読める人が多いとヒットすると言った感触も感じました。
誰もがプログラムを理解している訳じゃない
この辺もびっくりしました、ベタで書いたので読みやすいと思って居たんですが、それでも救えないユーザーもいます。この数値は何かと聞かれたりします。データーシートに書かれたアドレスだとなっても、難しい人には難しいかもしれません。なので、もっとベタに書くべきだなとも思いました。データーシートのページ数を書く案も面白いなって思いつつ。
OSSに参加する人、気取りすぎて無い?
今回たまたま、世界中で使われたので天狗になって記事を書きましたが、自分は本来は誰かの為になりたい精神ですので、特に流行ろうが流行らないがあまり気にしません。
勿論、国内ではRubyの様なシンデレラも居ますし、それに追いつけ追い越せでシンデレラストーリーが流行るのも分かりますが、OSSって昔から、もっとこう地味な作業が多くある分野だと思っています。
今回自分が作ったMCP2221Aも、ネジの一つであり、継承したプロジェクトを見ると大きなプロジェクトの1つのネジとして使っている様です。
ネジになる事に喜びを感じない物は、オープンソースでするべきではない
勝手に広がった物もある
Githubで自分の名前で検索すると、色々見つかったりします。
なんか知らないが、勝手にGrovePiの一部に含まれてました。
正直えっ?!って思いました。
GrovePiはRaspberryPiに繋げるボードです。
海外では結構有名です。
そんなGrovePiに、何故か自分の名前とURLが含まれていました。
これもそう、読みやすかったから継承したよって感じした。
きっと読みやすかったんだ。
読みやすいコードはダサいが流行る。
多分これが真理かもしれない。
とは言え、流行った先が問題ではある。継承されて別名で流行る事もあるかもですが汗
とは言え、自分もOSSの文化良く分かりません。MITライセンスにしたら勝手に広がって勝手に継承されて勝手に名前が広がってしまった感触です。
また、仕事でも同じ現象が起きるんですよ。
凄い人のソースって若手が後継者が継承出来ない
これは本当に良く起こるバグです。
凄い人のソースって、読みにくいんですよね。
自分は逆で、若手が元気でる読みやすさなんですよ。
まぁ若い頃から変わってないかもしれませんが、熟年度が反転してるんですよ。
分かりやすいコードで書くので、若手も改修出来るし、後継者も容易に改善していく。
まぁ、それで出来たからってデカい顔されるのも癪ですが、読めたよって声は嬉しいですね
世界中でも読めないくらい高度なソースで自分の地位を確立するタイプの人が居ますが、それは前途の通り自分の事しか考えていないタイプですので、少し改めるのが良いかなと思います。勿論、世界中でプログラマーの就活争いが凄いですからね。自分の明日と取引するなら他人を蹴落とす気持ちも分からなくもない。別にそれを否定している訳じゃないです。ただ流行りたいならもっと文化的に理解したほうが良いと思う時もあります。
ヤバい、メンドクサイ人になってる
って事で、締めのオチが思いつかづ、ついつい真面目に語ってしまいましたが、
自分のスタンスは、誰かの為になりたい精神ですのでね。
ただの目立ちたがり屋ではありませんのでね、悪しからず。
今日もネジを一つ一つ作って日々を過ごす、そんな自分をよろしくお願いいたします。
それでは、またどこかで
ArtifactNoise合同会社 北神雄太
追記
OSSでもう一つ思った事があった。
自分のライブラリやプログラム、基本動く状態でリリースしちゃんだ。
リリースするにあたって、色んなOSや色んなPCで確認しちゃう。
なので、改良する部分が無いってのが継続的な発展にならないなぁって言うね。
直すところが無いので、更新情報も止まってしまうと言うね。
何と言うか、そう言う点も、なんか寂しいなぁと思いました。(とは言え更新多いのも悩ましいが)
もっと複雑なライブラリ作って、何度も更新すれば良いって案もあるが、まぁそれは今後のお楽しみって事で・・・汗
これが一番難しいかもしれないなぁ・・・
Discussion