diff --git a/dev/README.md b/dev/README.md index ee43157..da43e37 100644 --- a/dev/README.md +++ b/dev/README.md @@ -1,6 +1,6 @@ # Ahenk Geliştirici Dokümantasyonu -Bu dizinde Ahenk arka yüz geliştiricileri ve Ahenk eklenti geliştiricileri için faydalı olacak dokümantasyon ve kaynaklar bulunmaktadır. Ağırlıklı olarak Türkçe olması planlansa da içerisinde İngilizce sayfalar, yazılar veya terimler de bulunabilir. +Bu dizinde Ahenk arka yüz geliştiricileri ve Ahenk plugin geliştiricileri için faydalı olacak dokümantasyon ve kaynaklar bulunmaktadır. Ağırlıklı olarak Türkçe olması planlansa da içerisinde İngilizce sayfalar, yazılar veya terimler de bulunabilir. @@ -12,5 +12,6 @@ Bu dizinde Ahenk arka yüz geliştiricileri ve Ahenk eklenti geliştiricileri i - *[basitleştirilmiş admin versiyonu](../admin/changelog.md)* - [Çalışma Mekaniği ve Süreçleri](howto.md) - *[basitleştirilmiş admin versiyonu](../admin/howto.md)* +- [Yeni Plugin Geliştirme](newplugin.md) - [Geliştirici Günlükleri (gayriresmi)](./dev-notes/) - [Ahenk Python Dökümantasyonu](https://github.com/Pardus-LiderAhenk/lider-ahenk-docs/tree/docs-1.0/docs/developers/ahenk) \ No newline at end of file diff --git a/dev/dev-notes/README.md b/dev/dev-notes/README.md index 3fa91c0..e0ce3e0 100644 --- a/dev/dev-notes/README.md +++ b/dev/dev-notes/README.md @@ -3,4 +3,4 @@ Bu dizin ahenk-go üzerinde veya benzer projeler üzerinde çalışacak yeni gel | Geliştiriciler | Görevi | Görev Süresi | Notlar | | -------------- | ------ | ------------ | ------ | -| Aliberk Sandıkçı | Stajyer | 6 Temmuz - 31 Ağustos | [asandikci.md](asandikci.md) | \ No newline at end of file +| Aliberk Sandıkçı | Stajyer | 6 Temmuz - 3 Eylül | [asandikci.md](asandikci.md) | \ No newline at end of file diff --git a/dev/dev-notes/asandikci.md b/dev/dev-notes/asandikci.md index 767eaaf..a26c04f 100644 --- a/dev/dev-notes/asandikci.md +++ b/dev/dev-notes/asandikci.md @@ -79,9 +79,11 @@ Yazılım geliştirme konusunda uzman olmadığımdan, go dilini daha önce kull - Kodu concurrent bir şekilde tekrar düzenledim, goroutine kullanmaya başladım #### Son Hafta (28 Ağustos - 3 Eylül 2023) +- Go'da crosscompile program yapmayı öğrendim ve projeye uyguladım +- Go Dinamik Plugin yapısını kodladım (goloader) - Resource Usage pluginini bitirdim -- Go'da crosscompile program yapmayı öğrendim -- Go Dinamik Plugin yapısını kodladım -- Resource Usage pluginini ve ahenk-go programını Windows ile uyumlu hâle getirdim (daemon/servis olarak çalışmamakta) + - Hardware cihazlarını algılamak için hardware paketini kodladım +- Resource Usage pluginini ve ahenk-go programını Windows ile uyumlu hâle getirdim + - program servis olarak çalışmamakta! - Dökümantasyonları güncelledim - .deb dosyasını güncelledim, windows ve linux için paketleri yayımladım \ No newline at end of file diff --git a/dev/environment.md b/dev/environment.md index 8e3416d..ed9429d 100644 --- a/dev/environment.md +++ b/dev/environment.md @@ -10,14 +10,16 @@ Bu dosyada geliştirme sürecinin sürekliliği ve bütünlüğü için gelişti #### Comment Anchors (`exodiusstudios.comment-anchors`) - `TODO` » Future Tasks - `NEXT` » High Priority Tasks - - settings.json dosyasına ekleyiniz (default, #12449f, file) - `FILLME` » Reusable code block - - settings.json dosyasına ekleyiniz (default, #A8C993, file) + - use epic anchors for improve reachability - `FIXME` » Bug or error - `NOTE` » Extra note - `REVIEW` » This code block needs a review - - `LINK` » Link to documentation/forum/information + - `LINK` » Link to code block with line number/id + - see https://github.com/StarlaneStudios/vscode-comment-anchors#link-anchors + - see https://github.com/StarlaneStudios/vscode-comment-anchors for more information #### Go (`golang.go`) + - ##### FIXME build flag issues - package_linux.go ve package_windows.go kodlarındaki aynı fonksiyonlar sorun yaratmakta. Örnek için ahenk-go/pkg/osinfo/os_windows.go ve os_linux.go dosyalarını IDE'nizde birlikte açınız - see these [t](https://github.com/microsoft/vscode-go/issues/2672)w[o](https://github.com/golang/go/issues/29202) issues or [workaround](#workaround) to resolve problem @@ -30,8 +32,11 @@ Bu dosyada geliştirme sürecinin sürekliliği ve bütünlüğü için gelişti - Sorunlar - Her seferinde manuel olarak ayarın değiştirilmesi lazım - herhangi bir sistem için çalışırken diğer sistemin kodu içinde diagnotics çalışmamakta. Örneğin `tags=windows` etkinken eğer package_linux.go dosyasına gidersek go eklentisinin çoğu yapılandırma özellikleri çalışmamakta ve uyarı vermekte - - Neden bilmiyorum ama bazen bu geçici çözüm işe yaramamakta + - Neden bilmiyorum ama bazen bu geçici çözüm işe yaramamakta ¿ +### Otomatik Eklenti Ayarları +- Eklentileri Manuel olarak yüklemeniz gerekmektedir. Konfigrasyonlarını ise VSCode/Codium üzerinden kendiniz yapabilirsiniz veya `.vscode/settings.json` dosyasını direkt kullanabilirsiniz. + - Not: Eğer workspace içerisinde ahenk-go haricinde başka dosya veya klasörler varsa bazı ayarlar geçersiz olabilir, `.vscode/settings.json` içerisindeki tüm ayarları kopyalayıp vscode ayarlarındaki setting.json dosyasına yapıştırabilirsiniz. (tabii ki ilk ve son süslü parantez hariç) --- ## Önerilen Makine Düzeni @@ -49,6 +54,7 @@ Bu dosyada geliştirme sürecinin sürekliliği ve bütünlüğü için gelişti - Windows 10, 11 (Sanal/Fiziksel) ## Creating Docker Development Environment +> For testing and building .deb package 1. Install and Create docker environment, [Quick Start](https://sulincix.github.io/sayfalar/html/docker-kullanimi.html) 2. Pull docker image ```sh diff --git a/dev/newplugin.md b/dev/newplugin.md new file mode 100644 index 0000000..9fca6e1 --- /dev/null +++ b/dev/newplugin.md @@ -0,0 +1,52 @@ +# Yeni Plugin Oluşturma +> Her ne kadar ilk başlarda [resmi plugin yapısı](https://pkg.go.dev/plugin) kullanılmış olsa da windows üzerinde çalışmadığından ve unload özelliği olmadığından dolayı [dinamik plugin yapısı](./resources.md#dynamic-plugin-logic)(goloader) kullanılmaya başlanmıştır. + +## Plugin Oluşturma +- plugin ismi belirleyin, küçük harflerler ve tek kelime olması önerilmektedir. Bu dokümanın devamında plugin isminin **myplugin** olduğu varsayılacaktır. +- `plugins/` dizininde plugin isminiz için bir dizin oluşturun, örneğin `plugins/myplugin/` +- ilgili dizin içinde `main.go` ve `info.go` dosyalarını oluşturun +- plugin içindeki oluşturucağımız fonksiyonların plugin manager ve ana program tarafından anlaşılması için ilk önce bir bağlantı kurmamız gerekmektedir. Plugin manager bu bağlantıyı kurmak için dosyada bir sembol arar. Bunun için `main.go` dosyası içinde ilgili sembolleri oluşturunuz. Sembol isminin `Pluginismi + Connect` olmasına ve ilk harfin büyük olmasına dikkat ediniz, örnek: +```go +package myplugin + +type plug string + +// exported plugin Symbol +var MypluginConnect plug +``` +- Sonrasında oluşturacağınız tüm fonksiyonların (aslında plugin içinde method olarak kullanıyoruz, plugin manager import ettikten sonra fonksiyonmuş gibi kullanıyoruz) sembol türünü alan bir method olduğuna ve büyük harfle başladığına emin olunuz. Aksi taktirde plugininizde oluşturduğunuz bu fonksiyon plugin manager tarafından algılanamaz (interface içinde kullanılamaz) ve ana program tarafından kullanılamaz, örnek: +```go +func (p plug) MyFunction1() { // ÇALIŞIR + fmt.Println(1) +} +func (p plug) myFunction2() { // ÇALIŞMAZ ! + fmt.Println(2) +} +func MyFunction3() { // ÇALIŞMAZ ! + fmt.Println(3) +} +func myFunction4() { // ÇALIŞMAZ ! + fmt.Println(4) +} +``` +- `info.go` dosyası içerisinde pluginler yüklenirken kontrol edilecek olan Info() methodunu implemente ediniz. Bir üst adımdaki uyarılara dikkat ediniz. Ayrıca Info() methodunuzun `map[string]interface{}` türünde bir veri döndürdüğünden emin olunuz. `support` kısmı "any", string slice olarak sıralanmış sistemleri (`[]string{"sistem1", "sistem2"}`) veya `map[string]interface` tipinde kategorize edilmiş sistemleri içerebilir, örnek: +```go +func (p plug) Info() map[string]interface{} { + return map[string]interface{}{ + "name": "myplugin", + "version": "2.6.3", + "support": map[string]interface{}{ + "linux": []string{"debian", "ubuntu", "pardus21", "pardus23"}, + "windows": []string{"10", "11"}, + }, + "description": "My Plugin", + "developer": "mail@domain.tld", + } +``` +- Tebrikler, başarıyla bir plugin oluşturdunuz, daha fazla örnek için [plugins/](https://git.aliberksandikci.com.tr/Liderahenk/ahenk-go/plugins/) dizinindeki diğer pluginleri inceleyebilirsiniz. Şimdi sıra bu pluginleri ana koda içe aktarmakta, sıradaki başlığı takip ediniz. + +## Plugini İçe Aktarma +- NEXT + + + diff --git a/dev/resources.md b/dev/resources.md index 90160c0..124fcc3 100644 --- a/dev/resources.md +++ b/dev/resources.md @@ -18,6 +18,7 @@ - [External Git Repos](#external-git-repos) - [Useful Go Libraries](#useful-go-labraries) - [Plugin Logic](#plugin-logic) + - [Dynamic Plugin Logic](#dynamic-plugin-logic) - [Missing Features](#missing-features-in-golang) - [Agent Market Search](#agent-market-search) @@ -127,19 +128,24 @@ - [asandikci/go-organization](https://git.aliberksandikci.com.tr/asandikci/go-organization) | Project Structure Resources - [asandikci/go-exercise](https://git.aliberksandikci.com.tr/asandikci/go-exercise) | Go Exercise Resources and Solutions - [asandikci/go-crosscompile](https://git.aliberksandikci.com.tr/asandikci/go-crosscompile) | Information and tests about crosscompiling in go +- [asandikci/go-loader-test](https://git.aliberksandikci.com.tr/asandikci/go-loader-test) | Information and tests about [dynamic plugin logic](#dynamic-plugin-logic)(goloader) ### Useful GO Labraries - https://github.com/kirsle/configdir | Get User Config and Cache Directories - https://github.com/shibukawa/configdir | Get User Config and Cache Directories - https://github.com/sevlyar/go-daemon | Go Daemon - **Look for more:** [github/list/go](https://github.com/stars/asandikci/lists/go-language) -### Plugin logic -- https://pkg.go.dev/plugin +### Plugin Logic +- https://pkg.go.dev/plugin | Official Plugin logic - https://github.com/vladimirvivien/go-plugin-example - https://eli.thegreenplace.net/2021/plugins-in-go/ - https://www.sobyte.net/post/2021-12/golang-plugin/ -- https://eli.thegreenplace.net/2023/rpc-based-plugins-in-go/ -- https://appliedgo.net/plugins/ +- https://eli.thegreenplace.net/2023/rpc-based-plugins-in-go/ | other +- https://appliedgo.net/plugins/ | other + +#### Dynamic Plugin Logic + - [asandikci/go-loader-test](https://git.aliberksandikci.com.tr/asandikci/go-loader-test) | Information and tests about dynamic plugin logic(goloader) + - https://github.com/eh-steve/goloader ### Missing Features in Golang - https://github.com/golang/go/issues/20461 | unload plugins