Andy Nutter-Upham, I just realized I didn't answer this exact question by
you in full details (I read the original message on the phone while being
quite busy with something a couple of weeks ago, and I somehow missed some
of intricacies of your question):
"If I missed the documentation and someone knows where it is, I'd love to
read it. I think though that since this is a wrapper library there is
instead reference to the underlying documentation (whose method names are a
bit different, and whose arguments are a bit different) and I find that
translation very challenging; especially since glimmer-dsl-libui is not yet
complete, so your run into ineffective keywords if you rely on the
underlying glimmer docs."
Glimmer DSL for LibUI actually does have full documentation for the Ruby
API:
https://github.com/AndyObtiva/glimmer-dsl-libui#supported-keywords
Someone asked me to add the documentation early on when the project was
new, and I added it to that person's satisfaction. I hope it's helpful to
you too.
By the way, I also do mention under the "Original API" section that you
could use the LibUI Go documentation as a reference:
https://pkg.go.dev/github.com/andlabs/ui
But, the most complete reference is the actual C headers:
https://github.com/andlabs/libui/blob/master/ui.h
And, the C headers are exposed as low-level FFI functions in Ruby as per
the Original API (but it's not recommended that you use these method
directly of course):
https://github.com/AndyObtiva/glimmer-dsl-libui#original-api
To give you an example of how the mapping from the C API to Ruby happens,
suppose we have this C function:
uiWindowSetTitle('My Application')
The word before the "Set" or "Get" operation is the control object (e.g.
window), and the word after it is the attribute (e.g. title).
So, the equivalent of that in the Glimmer GUI DSL:
window {
title 'My Application'
}
Basically, we are declaring a window control with one nested attribute of
title having the value 'My Application'
The C API is procedural and imperative whereas the Glimmer GUI DSL is
object-oriented and declarative, better mapping to the way we think of
concepts visually while looking at a screen given that you could nest
controls (widgets) within each other.
If you need further help, do not hesitate to ask further questions at the
Glimmer Gitter chat:
https://app.gitter.im/#/room/#AndyObtiva_glimmer:gitter.im
You shouldn't really get bogged down unless you are missing foundational
grounding in software engineering concepts relating to desktop development
in general, like MVC (Model View Controller). I've done GUI development
professionally in older technologies like Java Swing in the past, and by
comparison, Glimmer lets me leapfrog past productivity by 4x at least,
sometimes 10x or even more (and it's that much faster in productivity than
web development too, so it's great for building quick local apps or tools
that don't need the web as it's much simpler, demanding a tiny fraction of
web code only). But, it does assume you know MVC (Model View Controller)
very well, and it benefits from also knowing MVP (Model View Presenter).
Once you get the main ideas behind Glimmer, everything clicks, and things
like exact APIs or detailed documentation wouldn't matter much anymore
because the way you think with MVC/MVP is you start with the View layer
from a GUI mockup to support a specific user workflow, and you either use
native controls (like text and button, by looking them up in examples or
the docs mentioned above) or you invent your own custom controls (both
options are available in Glimmer DSL for LibUI). Of course, the native
controls are only as complete as what is implemented by the underlying
LibUI library. I know the authors of it are working on adding many new
features, like a Tree control, Table sorting listeners, and some other
missing features. They will all be added to Glimmer DSL for LibUI in due
time when they get released in C LibUI. But, that shouldn't stop someone
from learning the library and using whatever is available in it for now, or
at least mastering the current features until more features are added in
the future (especially given that you could always temporarily polyfill
missing features by building your own custom controls if really needed).
Cheers,
Andy Maleh
On Tue, Feb 14, 2023 at 9:27 PM grigoris charam <xargrigoris(a)gmail.com>
wrote:
> Stop reply all
>
> On Feb 15, 2023, at 03:05, Andy Maleh via ruby-talk <
> ruby-talk(a)ml.ruby-lang.org> wrote:
>
>
> The Glimmer Gitter Chat:
>
> https://app.gitter.im/#/room/#AndyObtiva_glimmer:gitter.im
>
> If you create any Glimmer related projects, libraries, or tools, you could
> alert of us of them in the Gitter Chat.
>
> And, you can open issues or pull requests on any of the Glimmer projects
> if needed:
> <glimmer.png>
> AndyObtiva/glimmer: DSL Framework consisting of a DSL Engine and a
> Data-Binding Library used in Glimmer DSL for SWT (JRuby Desktop Development
> GUI Framework), Glimmer DSL for Opal (Pure Ruby Web GUI), Glimmer DSL for
> LibUI (Prerequisite-Free Ruby Desktop Development GUI Library), Glimmer DSL
> for Tk (Ruby Tk Desktop Development GUI Library), Glimmer DSL for GTK
> (Ruby-GNOME Desktop Development GUI Library), Glimmer DSL for XML (& HTML),
> and Glimmer DSL for CSS <https://github.com/AndyObtiva/glimmer>
> github.com <https://github.com/AndyObtiva/glimmer>
> <https://github.com/AndyObtiva/glimmer>
>
>
> Andy Maleh
>
>
> LinkedIn: https://www.linkedin.com/in/andymaleh
> <https://www.linkedin.com/in/andymaleh>
> Blog: https://andymaleh.blogspot.com
> GitHub: https://github.com/AndyObtiva
> Twitter: https://www.twitter.com/AndyObtiva
>
> On Feb 14, 2023, at 7:51 PM, Fellipe Fingoli via ruby-talk <
> ruby-talk(a)ml.ruby-lang.org> wrote:
>
>
> really good content! I want to help to develop this ecosystem. Does
> anybody know where I can reach the community?
>
> Em ter., 7 de fev. de 2023 às 18:29, Andy Maleh via ruby-talk <
> ruby-talk(a)ml.ruby-lang.org> escreveu:
>
>> My RubyConf 2022 talk video on "Building Native GUI Apps in Ruby" using
>> the Fukuoka Award Winning Glimmer DSL for LibUI has just been released!
>>
>> https://youtu.be/1Bh4CnJqHyY
>>
>> Andy Maleh
>>
>> LinkedIn: https://www.linkedin.com/in/andymaleh
>> <https://www.linkedin.com/in/andymaleh>
>> Blog: http://andymaleh.blogspot.com
>> GitHub: http://www.github.com/AndyObtiva
>> Twitter: @AndyObtiva <https://twitter.com/AndyObtiva>
>>
>> ______________________________________________
>> ruby-talk mailing list -- ruby-talk(a)ml.ruby-lang.org
>> To unsubscribe send an email to ruby-talk-leave(a)ml.ruby-lang.org
>> ruby-talk info --
>> https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-talk.ml.ruby-lang.or…
>
>
>
> --
> Fellipe Fingoli
> ______________________________________________
> ruby-talk mailing list -- ruby-talk(a)ml.ruby-lang.org
> To unsubscribe send an email to ruby-talk-leave(a)ml.ruby-lang.org
> ruby-talk info --
> https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-talk.ml.ruby-lang.or…
>
> ______________________________________________
> ruby-talk mailing list -- ruby-talk(a)ml.ruby-lang.org
> To unsubscribe send an email to ruby-talk-leave(a)ml.ruby-lang.org
> ruby-talk info --
> https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-talk.ml.ruby-lang.or…
>
>
--
Andy Maleh
LinkedIn: https://www.linkedin.com/in/andymaleh
<https://www.linkedin.com/in/andymaleh>
Blog: http://andymaleh.blogspot.com
GitHub: http://www.github.com/AndyObtiva
Twitter: @AndyObtiva <https://twitter.com/AndyObtiva>
httpx 0.23.0 has been released.
```
HTTPX.get("https://gitlab.com/honeyryderchuck/httpx
<https://gitlab.com/honeyryderchuck/httpx>")
```
HTTPX is an HTTP client library for the Ruby programming language.
Among its features, it supports:
* HTTP/2 and HTTP/1.x protocol versions
* Concurrent requests by default
* Simple and chainable API
* Proxy Support (HTTP(S), CONNECT tunnel, Socks4/4a/5)
* Simple Timeout System
* Lightweight by default (require what you need)
And also:
* Compression (gzip, deflate, brotli)
* Streaming Requests
* Authentication (Basic Auth, Digest Auth, AWS Sigv4)
* Expect 100-continue
* Multipart Requests
* Cookies
* HTTP/2 Server Push
* H2C Upgrade
* Automatic follow redirects
* International Domain Names
* GRPC
* Circuit breaker
* WebDAV
* Datadog integration
* Faraday integration
* Webmock integration
* Sentry integration
Here are the updates since the last release:
# 0.23.0
## Features
### `:retries` plugin: resumable requests
The `:retries` plugin will now support scenarios where, if the request
being retried supports the `range` header, and a partial response has been
already buffered, the retry will resume from there and only download the
missing data.
#### HTTPX::ErrorResponse#response
As a result, ´HTTPX::ErrorResponse#response` has also been introduced;
error responses may have an actual response. This happens in cases where
the request failed **after** a partial response was initiated.
#### `:buffer_size` option
A new option, `:buffer_size`, can be used to tweak the buffers used by the
read/write socket routines (16k by default, you can lower it in
memory-constrained environments).
## Improvements
### `:native` resolver falls back to TCP for truncated messages
The `:native` resolver will repeat DNS queries to a nameserver via TCP when
the first attempt is marked as truncated. This behaviour is both aligned
with `getaddrinfo` and the `resolv` standard library.
This introduces a new `resolver_options` option, `:socket_type`, which can
now be `:tcp` if it is to remain the default.
## Chore
### HTTPX.build_request should receive upcased string (i.e. "GET")
Functions which receive an HTTP verb should be given the verb in "upcased
string" format now. The usage of symbols is still possible, but a
deprecation warning will be emitted, and support will be removed in v1.0.0 .
### Remove HTTPX::Registry
This momdule was a bit magical to use, difficult to debug, not thread-safe,
and overall a nuisance when it came to type checking. While there is the
possibility that someone was relying on it existing, nothing had ever been
publicly documented.
## Bugfixes
* fixed proxy discovery using proxy env vars (`HTTPS_PROXY`, `NO_PROXY`...)
being enabled/disabled based on first host used in the session;
* fixed `:no_proxy` option usage inn the `:proxy` plugin.
* fixed `webmock` adapter to correctly disable it when `Webmock.disable!`
is called.
* fixed a bug in `:digest_authentication` plugin when enabled and no
credentials were passed.
* fixed several bugs in the `sentry` adapter around breadcrumb handling.
* fixed `:native` resolver candidate calculation by putting absolute domain
at the bottom of the list.
# 0.22.5
## Bugfixes
* `datadog` and `sentry` integrations did not account for `Connection#send`
being possibly called multiple times (something possible for connection
coalescing, max requests exhaustion, or Happy Eyeballs 2), and were
registering multiple `on(:response)` callbacks. Requests are now marked
when decorated the first time.
* Happy Eyeballs handshake "connect errors" routine is now taking both name
resolution errors, as well as TLS handshake errors, into account, when the
handshake fails.
# 0.22.4
## Bugfixes
* fix happy eyeballs v2 bug where, once the first connection would be
established, the remaining one would still end up in the coalescing loop,
thereby closing itself via the `:tcp_open` callback.
* fix for faraday plugin parallel mode, where it'd hang if no requests
would be made in the parallel block (@catlee)
# 0.22.3
## Features
### HTTPX::Response::Body#filename
A new method, `.filename` can be called on response bodies, to get the
filename referenced by the server for the received payload (usually in the
"Content-Disposition" header).
```ruby
response = HTTPX.get(url)
response.raise_for_status
filename = response.body.filename
# you can do, for example:
response.body.copy_to("/home/files/#{filename}")
```
## Improvements
### Loading integrations by default
Integrations will be loaded by default, as long as the dependency being
integrated is already available:
```ruby
require "ddtrace"
require "httpx"
HTTPX.get(... # request will be traced via the datadog integration
```
### Faraday: better error handling
The `faraday` adapter will not raise errors anymore, when used in parallel
mode. This fixes the difference in behaviour with the equivalent `typhoeus`
parallel adapter, which does not raise errors in such cases as well. This
behaviour will exclude 4xx and 5xx HTTP responses, which will not be
considered errors in the `faraday` adapter.
If errors occur in parallel mode, these'll be available in `env[:error]`.
Users can check it in two ways:
```ruby
response.status == 0
# or
!response.env[:error].nil?
```
## Bugfixes
* unix socket: handle the error when the path for the unix sock is invalid,
which was causing an endless loop.
### IPv6 / Happy eyeballs v2
* the `native` resolver will now use IPv6 nameservers with zone identifiers
to perform DNS queries. This bug was being ignored prior to ruby 3.1 due to
some pre-filtering on the nameservers which were covering misuse of the
`uri` dependency for this use case.
* Happy Eyeballs v2 handshake error on connection establishment for the
first IP will now ignore it, in case an ongoing connection for the second
IP is happening. This fixes a case where both IPv4 and IPv6 addresses are
served for a given domain, but only one of them can be connected to (i.e.
if connection via IPv6 fails, the IPv4 one should still proceed to
completion).
* the `native` resolver won't try querying DNS name candidates, if the
resolver sends an empty answer with an error code different from "domain
not found".
* fix error of Happy Eyeballs v2 handshake, where the resulting connection
would coalesce with an already open one for the same IP **before** requests
were merged to the coalesced connection, resulting in no requests being
sent and the client hanging.
## Chore
* fixed error message on wrong type of parameter for the
`compression_threshold_size` option from the `:compression` plugin.
# 0.22.2
## Chore
Checking response class before calling `.status`, as this was being called
in some places on error responses, thereby triggering the deprecation
warning.
# 0.22.1
## Bugfixes
* `:retries` plugin: fix `HTTPX::Response#response to point to the last
possible response in the redirection chain.
* `:stream` plugin: Make `HTTPX::Session#request` public (as it is in the
main class) .
* return 100 responses if the request didn't specifically ask for
"100-continue" negotiation (via the "expect" header).
## Improvements
Wrap low-level socket errors in a `HTTPX::ConnectionError` exception.
Greetings.
https://www.rubykoans.com/ - are not accessible now. There is some weird dashboard. It is a real disaster because ruby koans is a perfect beginning for any one who want to work with Ruby.
Thank you.
Glimmer DSL for LibUI 0.7.4 has been released!
Blog Announcement:
https://andymaleh.blogspot.com/2023/04/glimmer-dsl-for-libui-07x-table.html
GitHub: https://github.com/AndyObtiva/glimmer-dsl-libui
RubyGem: https://rubygems.org/gems/glimmer-dsl-libui/
Change Log:
## 0.7.4
- `table` `sortable` property (default: `true`) to enable automatic table
sorting support when `cell_rows` is an `Array` (does not sort if
`cell_rows` is a lazy enumerable)
- Fix issue with not auto-checking checkboxes for zero-or-many table
selection in `examples/basic_table_selection2.rb`
- Rename `examples/basic_table_selection.rb` to
`examples/basic_table_selection3.rb` and add new
`examples/basic_table_selection.rb` with automated `table` selection via
`sortable` property (default: `true`)
- Disable automatic sorting by default in `refined_table` (set its `table`
`sortable` property to `false`) since it does not sort over the entire
collection, yet the visible collection only
- Disable `sortable` sorting for `table` `button_column` since it does not
make sense for it
## 0.7.3
- `table` `selection` data-binding support
- `table` column `sort_indicator` data-binding support
- New `examples/basic_table_selection2.rb` that uses `selection`,
`selection_mode`, `header_visible`, and `sort_indicator` data-binding
support
## 0.7.2
- `table` `on_selection_changed` listener arguments now provide extra
arguments of `selection`, `added_selection`, `removed_selection` after
first argument (`table`)
- Update `examples/basic_table_selection.rb` to use new
`on_selection_changed` arguments of `selection`, `added_selection`, and
`removed_selection`
## 0.7.1
- `table` column `on_clicked` listener (can be nested under `text_column`,
`text_color_column`, `button_column`, `checkbox_column`,
`checkbox_text_color_column`, `image_column`, `image_text_color_column`,
`image_text_column`, and `progress_bar_column`)
- `table` column `sort_indicator` property (can be `nil`, `:ascending`
[aliases: `:asc`, `:a`], `:descending` [aliases: `:desc`, `:d`])
- `table` column `set_sort_indicator` alias for `sort_indicator=` can
accept an option of `reset_columns: false` to avoid resetting sort
indicator of other columns when setting sort indicator on a specific column
- `table` `header_visible` property (Boolean)
- Fix issue with `table` `selection_mode` getting set to `nil` if not
specified
## 0.7.0
- Upgrade to libui v0.1.2.pre (including newer libui-ng with table
selection API)
- `table` `on_row_clicked`, `on_row_double_clicked`, and
`on_selection_changed` listeners
- `table` `selection` property (including `selection=` attribute writer)
- `table` `selection_mode` property supporting values: `:zero_or_many` ,
`:none` , `:zero_or_one` , and `:one`
- Support `radio_buttons` `selected` value of `nil`, treating as `-1` to
clear selected radio button.
- `examples/basic_table_selection.rb`
Nokogiri v1.14.3 has been released with a security update for CRuby users.
The release notes [1] are reproduced here for your convenience.
[1]: https://github.com/sparklemotion/nokogiri/releases/tag/v1.14.3
---
1.14.3 / 2023-04-11Security
- [CRuby] Vendored libxml2 is updated to address CVE-2023-29469,
CVE-2023-28484, and one other security-related issue. See
GHSA-pxvg-2qj5-37jqGHSA-pxvg-2qj5-37jq
<https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-pxvg-2qj…>
for
more information.
Dependencies
- [CRuby] Vendored libxml2 is updated to v2.10.4
<https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.10.4> from v2.10.3.
------------------------------
sha256 checksums:
9cc53dd8d92868a0f5bcee44396357a19f95e32d8b9754092622a25bc954c60c
nokogiri-1.14.3-aarch64-linux.gem
320fa1836b8e59e86a804baee534893bcf3b901cc255bbec6d87f3dd3e431610
nokogiri-1.14.3-arm-linux.gem
67dd4ac33a8cf0967c521fa57e5a5422db39da8a9d131aaa2cd53deaa12be4cd
nokogiri-1.14.3-arm64-darwin.gem
13969ec7f41d9cff46fc7707224c55490a519feef7cfea727c6945c5b444caa2
nokogiri-1.14.3-java.gem
9885085249303461ee08f9a9b161d0a570391b8f5be0316b3ac5a6d9a947e1e2
nokogiri-1.14.3-x64-mingw-ucrt.gem
997943d7582a23ad6e7a0abe081d0d40d2c1319a6b2749f9b30fd18037f0c38a
nokogiri-1.14.3-x64-mingw32.gem
58c30b763aebd62dc4222385509d7f83ac398ee520490fadc4b6d7877e29895a
nokogiri-1.14.3-x86-linux.gem
e1d58a5c56c34aab71b00901a969e19bf9f7322ee459b4e9380f433213887c04
nokogiri-1.14.3-x86-mingw32.gem
f0a1ed1460a91fd2daf558357f4c0ceac6d994899da1bf98431aeda301e4dc74
nokogiri-1.14.3-x86_64-darwin.gem
e323a7c654ef846e64582fb6e26f6fed869a96753f8e048ff723e74d8005cb11
nokogiri-1.14.3-x86_64-linux.gem
3b1cee0eb8879e9e25b6dd431be597ca68f20283b0d4f4ca986521fad107dc3a
nokogiri-1.14.3.gem
rodauth-oauth 1.3.0 has been released.
rodauth-oauth is a rack-compatible toolkit for building OAuth 2.0
authorization servers, as well as OpenID Authentication Providers.
rodauth-oauth
is certified <https://openid.net/certification/> for the following profiles
of the OpenID Connect™ protocol:
Basic OP, Implicit OP, Hybrid OP, Config OP, Dynamic OP, Form Post OP, 3rd
Party Init OP
# as simple as
rodauth do
enable :oauth_authorization_code_grant
# or
enable :oidc
end
Among its features, it supports:
* Authorization Code Grant
* Refresh Token Grant
* Implicit Grant
* Client Credentials Grant
* Device Code Grant
* Token Revocation
* Token Introspection
* Auth Server Metadata
* PKCE
* Resource Indicators
* JWT Access Tokens
* mTLS Client Authentication
* Assertion Framework
* SAML 2.0 Bearer Assertion Grant
* JWT Bearer Assertion Grant
* JWT Secured authorization requests (JAR)
* JWT Secured authorization response mode (JARM)
* Pushed Authorization requests
* Dynamic Client Registration
* OpenID
* OpenID Discovery
* OpenID Multiple Response types
* OpenID Self Issued Tokens
* OpenID Connect Dynamic Client Registration
* OpenID Relying Party Initiated Logout
It can also be used with Rails (via the "rodauth-rails" gem).
Website: https://honeyryderchuck.gitlab.io/rodauth-oauth/
Documentation: https://honeyryderchuck.gitlab.io/rodauth-oauth/rdoc/
Wiki: https://gitlab.com/honeyryderchuck/rodauth-oauth/wikis/home
CI: https://gitlab.com/honeyryderchuck/rodauth-oauth/pipeline
These are the release notes since the last update:
## 1.3.0 (02/04/2023)
## Features
### Self-Signed Issued Tokens
`rodauth-oauth` supports self-signed issued tokens, via the
`oidc_self_issued` feature.
More info about the feature [in the
docs](https://gitlab.com/os85/rodauth-oauth/-/wikis/Self-Issued-OpenID).
#### JARM
`rodauth-oauth` supports JWT-secured Authorization Response Mode, also
known as JARM, via the
`oauth_jwt_secured_authorization_response_mode`.
More info about the feature [in the
docs](https://gitlab.com/os85/rodauth-oauth/-/wikis/JWT-Secured-Authorizati….
## Improvements
### `fill_with_account_claims` auth method
`fill_with_account_claims` is now exposed as an auth method. This
allows one to override to be able to cover certain requirements, such
as aggregated and distributed claims. Here's a [link to the
docs](https://gitlab.com/os85/rodauth-oauth/-/wikis/Id-Token-Authentication…
explaining how to do it.
### oidc: only generate refresh token when `offline_access` scope is used.
When the `oidc` feature is used, refresh tokens won't be generated
anymore by default; in order to do so, the `offline_access` needs to
be requested for in the respective authorization request, [as the spec
mandates](https://openid.net/specs/openid-connect-core-1_0.html#OfflineAcce….
### oidc: implicit grant loaded by default
The `oidc` feature now loads the `oauth_implicit_grant` feature by
default. This hadn't been done before due to the wish to ship a secure
integration by default, but since then, spec compliance became more
prioritary, and this is a requirement.
## Bugfixes
* rails integration: activerecord migrations fixes:
* use `bigint` for foreign keys;
* index creation instruction with the wrong syntax;
* set precision 6 for default timestamps, to comply with AR defaults;
* add missing `code` column to the `oauth_pushed_requests` table;
* oidc: when using the `id_token` , or any composite response type
including `id_token`, using any response mode other than `fragment`
will result in an invalid request.