- 1. めざせコントリビューター【完全攻略本】
- 2. 駆け出しOSSコントリビューターが失敗から学んだ 大規模OSS開発のイロハ
- 3. Laraveファイルライブラリをアップデートしました!!
- 4. OSS開発でforkしたリポジトリ側の同期方法のメモ
- 5. 4つ目のPRでようやく Next.js にコントリビュートできた話
- 6. 【Python】`comtypes==1.3.1`から`GetModule`で生成されるモジュールに静的型ヒントが導入
- 7. OSS HCI ソリューション Proxmoxの国内コミュニティを作った話
- 8. 初めてOSSにコントリビュートしました
- 9. Atom の作者達が作った Rust 製エディタ Zed (OSS)
- 10. Typoだっていい!OSSにコミットするチャンスだ!
- 11. SQLBuilderの仕様を考える DELETE仕様検討編
- 12. SQLBuilderの仕様を考える UPDATE仕様検討編
- 13. React に プルリクを送ったけど、マージされなかった話
- 14. 英語エラーメッセージ探訪
- 15. SQLBuilderの仕様を考える INSERT仕様検討編
- 16. ライブラリ自体のバグに遭遇したときにとるべき行動
- 17. SQLBuilderの仕様を考える SELECT仕様検討編
- 18. OSSなSNSの開発事情を調べてみた
- 19. SkillCred への 道 〜 Linux Foundation SkillCred (Vim, Bash, Git編)〜
- 20. 分散RedisロックとJedisクライアント
めざせコントリビューター【完全攻略本】
> ああ あこがれの コントリビューターに
> なりたいな ならなきゃ
> ゼッタイなってやるーッ!「はじめまして! プログラミングの せかいへ ようこそ!」
「わたしの なまえは ヤマダ」
「ひごろは [Yamada UI](https://github.com/yamada-ui/yamada-ui) [Next.js](https://github.com/vercel/next.js) [Chakra UI](https://github.com/chakra-ui/chakra-ui) [Mantine](https://github.com/mantinedev/mantine) [Refine](https://github.com/refinedev/refine) のコントリビューターをして おるよ」改めまして、『まだマサラタウンにいるプログラマーのみなさん』こんにちは。プログラマーを始めて3年目の山田です。
今回は、みんなが憧れるOSSのコントリビューターになる、『1番道路』へ踏み入れるための完全攻略本です。そして、日本で大注目されている(はず)の[Yam
駆け出しOSSコントリビューターが失敗から学んだ 大規模OSS開発のイロハ
## 今熱い!OSSコントリビュート
突然ですが、あなたは OSS活動 やっていますか?
去年ではありますが OSSを積極的に推奨する企業も出てきて、今 OSS にコントリビュートは熱い分野の1つになっています!https://productpr.timee.co.jp/n/n8e2182f46334
そんな OSS ですが、自分も、去年の10月に初めて nue.js というプロジェクトにコントリビュートしてから、去年の12月から Next.js を読み始めて つい先週 Next.js への PR がマージされました。
https://qiita.com/YmBIgo/items/e4600a44a446033afa1b
https://qiita.com/YmBIgo/items/45c8c3dfbc83e6fb57d7
しかし、普段はOSSの恩恵を受けているだけの開発者の自分は、大規模OSS開発というOSSを使う側と比べると何倍も規模が違う開発のイロハをわきまえず、開発をしてしまい、失敗してしまった経験があります。
自分と同じような過ちはおかしてほしくないという希望を
Laraveファイルライブラリをアップデートしました!!
## はじめに
こんにちは,ご覧いただきありがとうございます。
前回,Laravel用のファイルライブラリを作成しました。https://qiita.com/ikepu-tp/items/69c445a4de47f52ce6d7
前回提示していた目標は以下のとおりでした。
1. 機能感はWordPressのメディアライブラリに近い
2. 特に設定をしなくても使える
1. アップロードしたファイルの一覧等をデフォルトで表示できる
2. ファイルのアップロードフォームをデフォルトで使用できる
3. ファイルのアップロードや情報の取得,編集をAPIを通じて行うことができる
4. ファイルのアップロードや情報の取得,編集をインスタンスで行うことができるこれらのうち,1,2の目標を達成しています。
そこで今回は残りの2つの目標を達成するためにアップデートを行いました。## アップデート内容
– API対応
– ファイルのアップロード処理のインスタンス化
– ダウンロードリンクの追加の3点です。
### API対応
API対応について,以下のリソースでAPI
OSS開発でforkしたリポジトリ側の同期方法のメモ
# はじめに
OSS開発時に、upstream(OSS本家)のGitリポジトリ側が進んだ場合の同期方法に関するメモです。自分のPRがマージされた時にも実行します。本手順を実行すると、forkしたGitリポジトリ側のPRも自動でクローズされます。
# 手順
“`
git checkout maingit fetch upstream
git merge upstream/main –ff-only
git push origin main -u
“`
4つ目のPRでようやく Next.js にコントリビュートできた話
## 短くまとめると
Next.js で Server Action の redirect のバグがあったから直したよ。## 教訓
・テストやリントを通さないとPR は通りにくい
・PR を送る時はバッチなだけではなくて、バグの原因も書くといいかもしれない
・ある程度腕に自信があるなら、good first issue ではなくて、普通にissue からバグの調査をしよう## 経緯
#### 普段してたこと
去年の12月からNext.js のコードを読むようになり、年初と2月の初めにパッチとしてPR を合計3つ出していました。
good first issue は他の人が取り組んでいるものばっかりだったので、issue を一から調査する形でパッチを作っていました。
ただテストやリントを通すことを、この記事を見るまでしてなかったので、あまり芳しくない結果でした。
ただ issue の調査を通して、Nextjsへの解像度を上げてはいたと思います。#### Serve
【Python】`comtypes==1.3.1`から`GetModule`で生成されるモジュールに静的型ヒントが導入
## 初めに
[2023年11月30日に行われたGuido van Rossum氏インタラクティブ記念講演会(#guidomeetup)](https://pyconjp.connpass.com/event/301716/)で[発表した`comtypes`へのコントリビュートについてのプレゼンテーション](https://docs.google.com/presentation/d/1sZ_tAlDRtgWb6JBG9Oumleu8wG45oGFx1_dRg2WnN7U/edit?pli=1#slide=id.p)内容を`main`ブランチに取り組み[`comtypes==1.3.1`](https://pypi.org/project/comtypes/1.3.1/)としてリリースしたので、その機能のご紹介です。## 概要
これまで`comtypes.client.GetModule`によって`comtypes.gen`以下に生成されるモジュールにあるCOMインターフェースにはPythonフレンドリーな静的型情報がなく、モダンなPython開発に比べてコーディング体験が低い状態
OSS HCI ソリューション Proxmoxの国内コミュニティを作った話
## TL;DR
– 国内コミュニティは突然に…
– 名前・アイコンなど悩みどころは多い…
– とりあえず勉強会でもやっちゃうか!## 概要
OSS の HCI ソリューション群 Proxmox の日本国内向けユーザーコミュニティを作成しました!https://jpmoxs.connpass.com/
というわけで、OSSの国内コミュニティを作った体験記です。
## きっかけ
### 始まりはアーリーアダプターとの打ち合わせアーリーアダプターなお客さんとの打ち合わせ時に「UG(ユーザーグループ)とかあるといいですよね」という話で盛り上がるシーンがありました。
そうおっしゃっていたのはUGに見識があり、自身も他のUG参加している方でした。自身もそのうち…ぐらいでは考えていたのですが、想像以上にニーズがあるというか、取り急ぎあったほうがいい、という感覚がなかったのでなるほどと思いました。
### 突如できる LINE OpneChat
とりあえず作ってみた
オープンチャット「Japan Proxmox VE User Group」https://t.co/zxjyBE55Pz
— nesk (@XI_nesk) February 4, 2024
上記の通り、
初めてOSSにコントリビュートしました
# はじめに
私はエンジニア3年目ですが、新卒でエンジニアになったときからいつかはOSSにコントリビュートしてみたいという目標がありました。そしてついに、普段お世話になっているリポジトリや機能に対してコントリビュートできたので、その背景をまとめたいと思います。
# コントリビュートの内容
マージされたPRは、以下です。https://github.com/composer/composer/pull/11816
リポジトリは、[Composer](https://getcomposer.org/)です。
PHPを使っている方ならお馴染みの、パッケージ管理ツールです。モダンなPHP開発では、ほぼ必ず用いられるツールです。
筆者も業務でPHPとLaravelを使って開発をしていますが、毎日当たり前のようにComposerを使っています。コントリビュートの内容は、テストコードの追加です。
self-updateコマンドという、Composer自身のバージョン管理を行えるコマンドがあるのですが、そのコマンドのテストケースをなにもない状態から作成しました。カバレッジは、4
Atom の作者達が作った Rust 製エディタ Zed (OSS)
## 1. 概要
2024年の1月24日に[ZedがOpen source化](https://zed.dev/blog/zed-is-now-open-source)しました! ということで、Zedとは何か、実際に使ってみてどうだったかというのを簡単にご紹介できればと思います。## 2. Zed とは何か?
AtomとTree-sitterのクリエイターによる、Rust製のコードエディターで、OSS (オープンソースソフトウェア) であり、 Githubのリポジトリ [こちら](https://github.com/zed-industries/zed?tab=readme-ov-file)で公開されています。公式サイトから一部抜粋すると下記のような特徴があるようです。
### 2.1 パフォーマンスを重視した設計
– ![スクリーンショット 2024-02-20 17.33.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210923/79c6a788-43c7-0ed3-23a0-7
Typoだっていい!OSSにコミットするチャンスだ!
# こんな重箱の隅を突くようなコミットに価値があるのか…?
(最近やっていないのですが)私は競技プログラミングを趣味としており、コード作成・テスト・提出に[online-judge-tools](https://github.com/online-judge-tools/oj)を利用しています。
そこで、個人的に新機能を作成したいと思いコードを読んでいた所、思う所があり[Pull Requestを出しApproveを頂きました](https://github.com/online-judge-tools/oj/pull/921)。
まだmergeされてはいませんが、クリティカルな部分ではないですし、問題はありません。何のPRを上げたでしょうか?そう、**Typo**です。
# これじゃ、俺…コードやコメントを書けなくなっちまうよ
Typo(タイプミス)はプログラムを書く上で一定の確率で起こり、実行時またはコンパイル時にエラーが引き起こされます。
最近は静的解析ツールなどが優秀なので、キーワードや予約語、変数等のハイライトやインデント等で開発者が間違いに気づきやすくな
SQLBuilderの仕様を考える DELETE仕様検討編
# 目的
GolangのSQLBuilerを作ってみたくて、仕様を考える。
今回はDELETE文の仕様を考える。また、TRUNCATEも併せて考える。# 目指す形
ここではusersというTableに対応したUserというTableモデル構造体がある場合とする。
宣言としては、
“`
CREATE TABLE users (
id int,
name varchar(10)
)CREATE TABLE tokens (
id int,
user_id int REFERENCES users.id,
token varchar(10)
)
“`
を想定する## DELETE
パッケージ名は仮でpkとして
“`go
pk.DELETE(pk.Table(“users”))// DELETE FROM users
“`とすることを考えている。
WHERE句の利用は
“`go
pk.DELETE(pk.Table(“users”)).WHERE(pk.Eq(“users.id”), 1)// DELETE FROM users W
SQLBuilderの仕様を考える UPDATE仕様検討編
# 目的
GolangのSQLBuilerを作ってみたくて、仕様を考える。
今回はUPDATE文の仕様を考える。# 目指す形
ここではusersというTableに対応したUserというTableモデル構造体がある場合とする。
宣言としては、
“`
CREATE TABLE users (
id int,
name varchar(10)
)CREATE TABLE tokens (
id int,
user_id int REFERENCES users.id,
token varchar(10)
)
“`
を想定する## Update
パッケージ名は仮でpkとして
“`go
pk.Update(pk.Table(“users”)).Set(“name”, “test”)// UPDATE users set name = ‘test’
“`とすることを考えている。
複数カラムに関しては
“`go
pk.Update(pk.Table(“users”)).Set(“id”, 2).Set(“name”, “test”)//
React に プルリクを送ったけど、マージされなかった話
## 短くまとめると
[React](https://github.com/facebook/react) に PR を送ったら、メンテナからの反応が渋そうだったので萎えていたら、メンテナが自分でブランチ切って修正してマージしていた。
## 教訓
1. OSS ではメンテナの言葉に一喜一憂しない鋼の心が必要
2. OSS では調査に時間がかかっても、できるだけすぐレスする
3. OSS で PR を送る前に テストとリント(と React の場合はタイプチェック, Flow)を通す## PR を送る前からメンテナがマージするまでの流れ
#### 普段自分がしていたこと
去年の12月になって、1年間業務で使っている Next.js の内部構造を知らないのも変だなと思い Next.js のソースコードを読むようになりました。その過程で、server とちょっと build と client が分かるようになったので、今年の 1月から issue を探して、そのバグ修正を行うようになりました。
#### ことの発端
今回のことの発端は、この issue でした。
htt
英語エラーメッセージ探訪
# 序
英語でそれっぽいエラーメッセージを書けるようになりたいので、OSSのソースを読むとき、ついでにいろんなエラーメッセージやコメントを収集しています。自分が書くときの参考用に、今までに集めたものから記事を書いてみることにしました。
– 英語が得意じゃないにしても、それなりに伝わるようにメッセージを書けるようになりたいという意図です
– 引用してるものと、私がそれっぽく書いたものが混在しています
– 誤りを見つけたら、ぜひ編集リクエストをください。よろしくお願いします– 主にJavaScript/TypeScript製のフレームワークやライブラリから拾っています
:::note warn
以下には「よく見る」、「あまり見ない」、「多い」など頻度についての言及がありますが、あくまでも私の主観に基づく記述であり、統計など具体的な根拠に基づくものではありません。
:::## エラーが発生しました系
– エラーが発生したことを示したい時に
– 具体的な対応策を追加で提示することが望ましいでしょう
– 異常系が雑に作られてるとトラブル対応で死に
SQLBuilderの仕様を考える INSERT仕様検討編
# 目的
GolangのSQLBuilerを作ってみたくて、仕様を考える。
今回はINSERT文の仕様を考えるが、SELECT+INSERTまで考えると複雑になるので
一旦保留にする# 目指す形
ここではusersというTableに対応したUserというTableモデル構造体がある場合とする。
宣言としては、
“`
CREATE TABLE users (
id int,
name varchar(10)
)CREATE TABLE tokens (
id int,
user_id int REFERENCES users.id,
token varchar(10)
)
“`
を想定する## Insert
パッケージ名は仮でpkとして
“`go
pk.Insert().Into(pk.Table(“users”)).Value(1, “test”)// INSERT INTO users VALUES(1, ‘test’)
“`とすることを考えている。
カラムを限定する場合は
“`go
pk.Insert(“id”).Into(
ライブラリ自体のバグに遭遇したときにとるべき行動
https://qiita.com/laineus/items/00edd8a7abdb336cde3f
—
「ライブラリ自体がバグってるなら俺にはもうどうすることもできん!」
「OSS活動なんてごく一部のつよつよエンジニアだけができるんでしょ?」って思っている方も、諦めるのは早いです。
ライブラリ側起因の問題でも解決できるかもしれませんし、もしかしたらライブラリに貢献できるかもしれません。
# 1. 調査
:::note info
まずは問題をよく調査することが重要です。
問題の原因が詳しく理解できているほど、このあとにとれる手段も広がっていきます。
:::## ライブラリのバグなのか見極める
発生している問題が本当にライブラリのバグによるものなのか、自分のコードに問題があるのかを見極める必要があります。
そのためには、自分のプロジェクトのコードをひたすら削っていきながら、**最小限の再現コードを作成**します。
この最小限の再現コードは後で色々と役に立ちます。
## ライブラリのバージョンを変えてみる
ライブラリのあるバージョンから発生した不具合の可
SQLBuilderの仕様を考える SELECT仕様検討編
## 目的
GolangのSQLBuilerを作ってみたくて、仕様を考える。
今回はSELECT文の仕様を考えるが、サブクエリまで考えると複雑になるので
一旦保留にする## 目指す形
ここではusersというTableに対応したUserというTableモデル構造体がある場合とする。
宣言としては、“`sql
CREATE TABLE users (
id int,
name varchar(10)
)CREATE TABLE tokens (
id int,
user_id int REFERENCES users.id,
token varchar(10)
)
“`を想定する
## Select
パッケージ名は仮でpkとして
“`go
pk.Select().From(pk.Table(“users”))// SELECT * FROM users;
“`とすることを考えている。
カラムを限定する場合は
“`go
pk.Select(“id”).From(pk.Table(“users”))// SELECT i
OSSなSNSの開発事情を調べてみた
ここ最近、我らが Twitter が X になってから、なんやかんや X にいつつもどこのサービスに移行しようかと議論されています。
そこで、Twitter に似たオープンソースな SNS がどのような技術で作られているか簡単にまとめました。
Twitter の共同創業者のジャック・ドーシーらが発案した分散型 SNS です。
https://github.com/bluesky-social
[Social-app](https://github.com/bluesky-social) のリポジトリがサービスへ直接関わるリポジトリになります。
– 技術: [React Native](https://r
SkillCred への 道 〜 Linux Foundation SkillCred (Vim, Bash, Git編)〜
こんにちわ。
以前、「[LFCS への道](https://qiita.com/maabou512/items/740a1a2bd3d35c38ddab)」で Linux システム管理者の認定について取り上げました。OSSのジャーニーとして実践的なパフォーマンスベースで「スキルを証明する」ことができるようになり、その選択肢も増えてきました。クラウドネイティブや AI 周りといった新しめの領域も気になるところです、はい。
でも、ワタシはコツコツ型なところもあり、「急がばまわれ」で高度な話は一旦置いておいて(横目でチラ見はしちゃいますけど)、少し新しめの技量認定「**SkillCred**」にトライしてみました。その備忘録的な内容になります。※試験の内容については触れてませんのでご了承ください。
![Screenshot from 2024-01-29 07-47-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3085729/aa5ff033-2b1e-92b5-dbe7-6aa896ce0
分散RedisロックとJedisクライアント
# はじめに
以前、Redis上でセマフォを実装する必要がありました。驚いたことに、私たちが使用しているJedisクライアントとLettuceクライアントの両方には、それに対する良い準備ができた解決策がないことがわかりました(Redissonにはそのようなものがあります)。
そのため、私はその隙間を埋め、JedisとLettuceの両方のRedisクライアント向けの解決策を提供することにしました。# セマフォが使用したい理由は何ですか?
リソースの相互利用を制限する必要がある状況を想像してみてください。たとえば、バックグラウンドタスクで実行されている重いSQLクエリが全体のサービスパフォーマンスに悪影響を及ぼす可能性がある場合、許可された回数よりも同時にそのクエリが発行されないようにする必要があります。
セマフォを使用することで、共通リソースのクロスプロセス競合状態を解決し、共通リソースへのアクセスを特定の量に制限することができます。# 解決策はこちらです
[RedPulsar](https://github.com/himadieievsv/redpulsar) が、セマフォ