Closed aliok closed 7 months ago
Github da yaptığım araştırmada tag üzerinden iki kırılım buldum - https://github.com/topics/turkey ve https://github.com/topics/turkish ama bu tagleme ne kadarı opensource kapsamına girer bilemiyorum.,
StackOverflow üzerinden çok sağlıklı bir veri bulamadım
turkiyeacikkaynakplatformu üzerinden 5 proje buldum
1 - https://www.turkiyeacikkaynakplatformu.com/turkce-dogal-dil-isleme-projesi/ 2 - https://www.turkiyeacikkaynakplatformu.com/pardus-yayginlastirilmasi-projesi/ 3 - https://www.turkiyeacikkaynakplatformu.com/acik-kaynak-sistemleri-yayginlastirma-akasya-projesi/ 4 - https://www.turkiyeacikkaynakplatformu.com/skill-badge-projesi/ 5 - https://www.turkiyeacikkaynakplatformu.com/kubernetes-orkestrasyonu-sistemi-projesi/
Şimdilik bulabildiklerim bu kadar
Benim bulabildiğim veri kaynakları şunlar:
Örnek olarak, Konumuna Türkiye yazan GitHub kullanıcıları: https://github.com/search?q=location%3Aturkey&type=users&p=1
https://github.com/search/advanced adresindeki şeyleri kullanarak aratılacak query üretilebiliyor. Mesela, Türkiye'den en az 200 public repo'su olan ve en az 150 follower'ı olan kişiler: https://github.com/search?q=location%3ATurkey+repos%3A%3E200+followers%3A%3E150&type=users&ref=advsearch
Buradan ama PR ve profil detayları birleştirilemiyor. Mesela, en az 5K star' olan bir projeye Türkiye'den PR açanları aramak mümkün değil. Bunun için GitHub'ın GraphQL API'sini kullanmak gerekebilir.
Aynı zamanda, kullanıcılar üye oldukları tarihe göre sıralanabiliyor. Bu sayede, yeni kullanıcıları da "incremental" olarak bulmak mümkün.
Mesela, Türkiye'den üye olan en son 20 kullanıcı: https://github.com/search?q=location%3ATurkey+&type=users&ref=advsearch&s=joined&o=desc
Bu arama hem pagination destekliyor, hem de, belirli bir kullanıcıdan sonra üye olanları bulmak için "after" parametresi kullanılabiliyor. Yani, belirli bir periyotta, son bulunan kullanıcıdan sonra üye olanları bulmak mümkün. Ancak, bu zaman zarfında eğer kişi ülke bilgisini değiştirmiş olabilir. O yüzden, sona geldikten sonra tekrar en başa gelip taramak gerekir.
GitHub Search kullanmak için REST API kullanılıyor.
https://docs.github.com/en/rest/search/search?apiVersion=2022-11-28
https://docs.github.com/en/graphql/overview/explorer adresindeki GraphQL API'sini kullanarak değişik verileri birleştirebiliriz.
Kullanıcılar, açtıkları PR'lar, PR'ların repository'leri vs. birleştirilebiliyor, ama filtreleme yapılamıyor. Yani, Türkiye'den olan kullanıcıların PR'ları ve PR'ların repolarının tamamını çekebiliyoruz, ama sadece 2K star olan repolara açılan PR'ları getir diyemiyoruz.
Kullanıcıları çekip, filtreleme yapıp, sonra 2. bir çekme yapacaksak, normal GitHub search de kullanabiliriz; emin değilim.
GraphQL API'de bazı şeyler mevcut değil.
Örnek sorgu:
query{
search(query: "location:Turkey", type: USER, last: 3) {
edges {
node {
__typename
...on User {
login
company
name
pullRequests(last:3, states:[MERGED, OPEN]){
nodes{
__typename
...on PullRequest{
merged
state
repository{
url
stargazers{
totalCount
}
collaborators{
totalCount
}
forks{
totalCount
}
isFork
nameWithOwner
pullRequests{
totalCount
}
issues{
totalCount
}
stargazerCount
watchers{
totalCount
}
}
}
}
}
}
}
}
userCount
}
}
Cevap:
"node": {
"__typename": "User",
"login": "metatimeofficial",
"company": "Metatime Technology Inc.",
"name": "Metatime",
"pullRequests": {
"nodes": [
{
"__typename": "PullRequest",
"merged": true,
"state": "MERGED",
"repository": {
"url": "https://github.com/ethereum-lists/chains",
"stargazers": {
"totalCount": 6841
},
"collaborators": null,
"forks": {
"totalCount": 2355
},
"isFork": false,
"nameWithOwner": "ethereum-lists/chains",
"pullRequests": {
"totalCount": 2311
},
"issues": {
"totalCount": 865
},
"stargazerCount": 6841,
"watchers": {
"totalCount": 441
}
}
}
]
}
}
Bazı özet bilgileri buradan kolayca alabiliriz ama. Mesela, Türkiye'den 2'den fazla reposu olanların PR sayısı:
query{
search(query: "location:Turkey repos:>2", type: USER, last: 100) {
edges {
node {
__typename
...on User {
login
company
name
pullRequests(states:[MERGED, OPEN]){
totalCount
}
}
}
}
userCount
}
}
"edges": [
{
"node": {
"__typename": "User",
"login": "f",
"company": "@teknasyon",
"name": "Fatih Kadir Akın",
"pullRequests": {
"totalCount": 145
}
}
},
{
"node": {
"__typename": "User",
"login": "sadikturan",
"company": null,
"name": "Sadık Turan",
"pullRequests": {
"totalCount": 0
}
}
},
https://github.blog/2016-06-29-making-open-source-data-more-available/
Google ve GitHub'in sağladığı bir public data set. Bunu Google BigQuery'ye yüklemişler ve oradan doğrudan sorgulamalar yapılabiliyor. Örnek sorgular var internette. Ama bu datasette daha çok kod içeriğine yönelmişler, kullanıcılar ve repolardan çok. Kullanıcı ve repo verisi de var, ama sampled şekilde.
Mevcut tablolar:
Örnek sorgu - içinde "This should never happen" metni geçen dosya sayısı:
SELECT count(*)
FROM (SELECT id, repo_name, path
FROM `bigquery-public-data.github_repos.sample_files`
) AS F
JOIN (SELECT id
FROM `bigquery-public-data.github_repos.sample_contents`
WHERE NOT binary
AND REGEXP_CONTAINS(content, 'This should never happen')) AS C
ON F.id = C.id;
https://www.gharchive.org/ uzun zamandır GitHub datası toplayan ve bunu paylaşan bir site. Tuttuğu veri oldukça güvenilir. İçinde GitHub event'leri bulunuyor. Repo, kullanıcı bilgileri gibi daha detaylı bilgiler sadece event'in payload'unda gelenler.
Yani, buradan bir aggregation yaptığımız zaman, yine başka bir yerden kullanıcı ve repo bilgilerini çekmemiz gerekecek.
Örnek event:
❯ head 2015-01-01-15.json | jq
{
"id": "2489651051",
"type": "PushEvent",
"actor": {
"id": 3854017,
"login": "rspt",
"gravatar_id": "",
"url": "https://api.github.com/users/rspt",
"avatar_url": "https://avatars.githubusercontent.com/u/3854017?"
},
"repo": {
"id": 28671719,
"name": "rspt/rspt-theme",
"url": "https://api.github.com/repos/rspt/rspt-theme"
},
"payload": {
"push_id": 536863970,
"size": 1,
"distinct_size": 1,
"ref": "refs/heads/master",
"head": "6b089eb4a43f728f0a594388092f480f2ecacfcd",
"before": "437c03652caa0bc4a7554b18d5c0a394c2f3d326",
"commits": [
{
"sha": "6b089eb4a43f728f0a594388092f480f2ecacfcd",
"author": {
"email": "5c682c2d1ec4073e277f9ba9f4bdf07e5794dabe@rspt.ch",
"name": "rspt"
},
"message": "Fix main header height on mobile",
"distinct": true,
"url": "https://api.github.com/repos/rspt/rspt-theme/commits/6b089eb4a43f728f0a594388092f480f2ecacfcd"
}
]
},
"public": true,
"created_at": "2015-01-01T15:00:01Z"
}
Yukarıdan anlaşıldığı gibi, payload'da kullanıcı bilgisi var ama kullanıcının ülkesi yok.
gharcive.org verilerini yine Google BigQuery'ye yüklüyorlar daimi olarak. Oradan da sorgulama yapılabilir.
BigQuery üzerinde yapılan örnek bir aggregation - 22 Aralık 2020'de açılan PR'ların repolara göre sayısı:
SELECT author, repository, COUNT(*) as cnt
FROM (
SELECT type, repo.name as repository, actor.login as author
FROM `githubarchive.day.20221222`
WHERE type = 'PullRequestEvent' and JSON_EXTRACT(payload, '$.action') = '"opened"'
)
GROUP by author, repository
ORDER BY author ASC;
Sonuç:
author | repository | cnt |
---|---|---|
0-vortex | open-sauced/api.opensauced.pizza | 1 |
000yesnt | 0XMagic/BluTape | 1 |
Bu sorgu toplam 15 GB veri process ediyor. Google BigQuery üzerinde 1 TB'a kadar ücretsiz. Sonrasında her 1 TB için 6$ ödemek gerekiyor. Yani, çok masraflı!
Devstats, CNCF tarafından yazılan bir uygulama. CNCF projelerindeki GitHub verilerini çekip, grafikler çıkartıyor.
Örnek bir grafik, ülkelere göre contribution sayısı: https://all.devstats.cncf.io/d/9/developer-activity-counts-by-repository-group-table?orgId=1&var-period_name=Last%20year&var-metric=contributions&var-repogroup_name=All&var-country_name=Turkey
DevStats, gharchive datasını yayınlandıkça çekiyor, işliyor, başka yerlerdeki verilerle birleştiriyor (mesela şirket verisi) ve sonrasında kendi veritabanına kaydediyor.
Biz de benzer bir yaklaşım izleyebiliriz.
GitHub verisi ile elde edilebilecek analizler:
Eline sağlık, epey detaylı veriler var.
Türkiye 'de açık kaynak proje destek vermek ne demek, tanımı iyi ortaya koymak lazım.
Dediğin gibi geliştirici kendi açtığı veya okul projesine PR açmış olabilir.
Kriter olarak turkiyeacikkaynakplatformu üzerinden 5 proje eklemiştim.
Senin bahsettiğin kriterlerle ile genişletebilir ama bir şekilde belirli varsayımlara dayanmak zorundayız.
Br sonraki plan nedir?
@altuga hocam selamlar,
Türkiye 'de açık kaynak proje destek vermek ne demek, tanımı iyi ortaya koymak lazım. Dediğin gibi geliştirici kendi açtığı veya okul projesine PR açmış olabilir.
Aynen hocam. Buna kafa yormamız lazım.
Biraz terminoloji uydurmaya ihtiyacımız var aslında. Çünkü, GitHub'daki her public proje aslında bir açık kaynak proje. Ama, bu demek değil ki bunlar bizim için önemli. Bizim için önemli olan, katkıcı sayısını artırmak istediğimiz projelere bir isim bulmamız lazım. Mesela, "stratejik açık kaynak proje" gibi bir şey.
Stratejik proje terminolojisini devam ettirecek olursam, benim hep aklımdan geçen ASF, JCP, CNCF gibi yerlere katkı yapan kişilerin sayısını artırmak idi. Yani bu kişileri ben "açık kaynağa katkı veren kişiler" olarak tanımlıyordum kafamda. Bunları da stratejik açık kaynak projeler. Ama, çok fazla yer ve proje var.
Sanırım, üstte de bahsettiğim organizasyonlar gibi hardcoded bir listedeki organizasyonların repo'larına belirli bir PR'dan fazla açan kişileri "stratejik proje contributor'u" sınıfına dahil edebiliriz.
Hardcoded listemizde olmayan, atladığımız projeler mutlaka olacaktır (hatta çoğunluğu öyle olacaktır).
Burada da, bir kriter geliştirebiliriz. Atıyorum, aşağıdaki kriterleri sağlayan projeler "stratejik proje"dir diyebiliriz:
Br sonraki plan nedir?
Ben üstteki yorumdaki analizimde, hep kullanıcı odaklı gittim. Yani Türkiye'den kullanıcı sayısı, 20'den fazla PR açanların sayısı vs. gibi şeyler. Hatta bunun için ayrı bir issue açtım: https://github.com/OpenTRFoundation/OpenTR/issues/28 Bu bilgilerle, Türkiye'den açık kaynak katkısı değil de, genel olarak Türkiye'deki GitHub aktivitesi ile ilgili bilgiler edinebiliriz.
Paralelde, üstteki uydurduğum terminolojideki "stratejik açık kaynak proje"nin tanımını yapıp, bu projelerin bilgilerini toplamak için bir çalışma yapmamız gerekiyor. Hatta mümkünse listesini... Yani, şöyle diyebilsek çok güzel olur: "OpenTR olarak, 17 Eylül 2023'te şu 15000 repository bizim için stratejik açık kaynak projedir.". Devamında da, "Türkiye'den bu projelere 1000 kişi katkı vermiş" diyebilsek :) Belirli periyotlarla takip edip, rapor yayınlayabiliriz. Katkıcı sayısını artırmak için yapacağımız çalışmalarda da kullanabiliriz buradan bazı çıkarımlar yapabilirsek.
Biraz uzun oldu yine, ama yorumlarını bekliyorum.
cc @mugekocahan
@altuga @mugekocahan Ayrı bir issue açtım "stratejik proje" tanımı için: https://github.com/OpenTRFoundation/OpenTR/issues/29
Not: hedef proje veya başka bir şey de diyebiliriz. Terminoloji uydurmamız şart ama.
Merhaba,
“Odak proje” de bir alternatif olabilir.
Selamlar Müge
19 Eyl 2023 Sal, saat 01:45 tarihinde Ali Ok @.***> şunu yazdı:
@altuga https://github.com/altuga @mugekocahan https://github.com/mugekocahan Ayrı bir issue açtım "stratejik proje" tanımı için: #29 https://github.com/OpenTRFoundation/OpenTR/issues/29
Not: hedef proje veya başka bir şey de diyebiliriz. Terminoloji uydurmamız şart ama.
— Reply to this email directly, view it on GitHub https://github.com/OpenTRFoundation/OpenTR/issues/20#issuecomment-1724499414, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANPLDNA3IWGS5BUYYIMNLATX3C6GRANCNFSM6AAAAAA2UDSQFM . You are receiving this because you were mentioned.Message ID: @.***>
Bu tamamlandı.
"State of OSS contribution in Turkey" raporu yayınlandı.
Linkler:
Özetleyecek olursak:
https://github.com/OpenTRFoundation/OpenTR/issues/18 'in alt görevidir.
Anket dışında, online bulabileceğimiz veri kaynakları var mıdır?