rabbit-slide-unasuke-rubykaigi-2026-followup 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 20ad197a676da1a3a163e3381779a7c09a3e8bfe9da4ad057ac5f65a2475debf
4
+ data.tar.gz: 2e9b5523f28fa6614932fae27db0bb6bcc2315dc85e8aea983d4981ca1d19523
5
+ SHA512:
6
+ metadata.gz: 4de6498bf77068f021c14e997c07b0f2667abdc83d6fb4038f4306bfb260a8dbb823d9864c5dd821634468812665f58a1d452833b68ab35a3d3c394dcf4412b6
7
+ data.tar.gz: 8905417b8e4d832aa10cb5b676d96e315c4413e97f3f463380243ff8e594bf88b6443160be64851ed12c9a5ab451ff662f0123381d43f117109c0b8fadae4945
data/.rabbit ADDED
@@ -0,0 +1,2 @@
1
+ --size 1920,1080
2
+ slide.md
data/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # RubyKaigi 2026 followup
2
+
3
+ https://rhc.connpass.com/event/392503/
4
+
5
+ ## For author
6
+
7
+ ### Show
8
+
9
+ rake
10
+
11
+ ### Publish
12
+
13
+ rake publish
14
+
15
+ ## For viewers
16
+
17
+ ### Install
18
+
19
+ gem install rabbit-slide--rubykaigi-2026-followup
20
+
21
+ ### Show
22
+
23
+ rabbit rabbit-slide--rubykaigi-2026-followup.gem
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ # spec.add_runtime_dependency("rabbit-theme-YOUR-THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
data/config.yaml ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: rubykaigi-2026-followup
3
+ base_name: slide
4
+ tags: ["ruby", "tls", "quic"]
5
+ presentation_date: 2026-09-05
6
+ presentation_start_time:
7
+ presentation_end_time:
8
+ version: 1.0.0
9
+ licenses: ["MIT"]
10
+ slideshare_id:
11
+ speaker_deck_id:
12
+ vimeo_id:
13
+ youtube_id:
14
+ width: 1920
15
+ height: 1080
16
+ source_code_uri: https://github.com/unasuke/rubykaigi-2026-followup
17
+ author:
18
+ markup_language: :markdown
19
+ name: unasuke
20
+ email: yusuke1994525@gmail.com
21
+ rubygems_user: unasuke
22
+ slideshare_user:
23
+ speaker_deck_user:
data/img/icon.png ADDED
Binary file
Binary file
Binary file
data/slide.md ADDED
@@ -0,0 +1,116 @@
1
+ # QUIC、HTTP/3について
2
+
3
+ author
4
+ : unasuke
5
+
6
+ content-source
7
+ : RubyKaigi 2026 follow up
8
+
9
+ date
10
+ : 2026-09-05
11
+
12
+ theme
13
+ : theme
14
+
15
+ # 自己紹介
16
+
17
+ * Name: うなすけ
18
+ * Work: フリーランス
19
+ * Kaigi on Rails 2026 organizer (10/16-17)
20
+ * {::tag name='x-small'}GitHub <https://github.com/unasuke>{:/tag}
21
+ * {::tag name='x-small'}Fediverse <https://mstdn.unasuke.com/@unasuke>{:/tag}
22
+ * {::tag name='x-small'}X <https://x.com/yu_suke1994>{:/tag}
23
+ * {::tag name='x-small'}<https://unasuke.com>{:/tag}
24
+
25
+ ![](img/icon.png){:relative_width='24' align='right' relative_margin_right='-8' relative_margin_top='25'}
26
+
27
+ # もくじ
28
+ * 2025から2026にやっていたこと
29
+ * つくったもの
30
+ * 関わったもの
31
+ * 今後の展望
32
+
33
+ # 2025 → 2026
34
+ * [QUIC実装月報 2025年3月 \| うなすけとあれこれ](https://blog.unasuke.com/2025/quic-impl-monthly-report-202503/)
35
+ * [QUIC実装月報 2025年4月 \| うなすけとあれこれ](https://blog.unasuke.com/2025/quic-impl-monthly-report-202504/)
36
+ * [QUIC実装月報 2025年5月 \| うなすけとあれこれ](https://blog.unasuke.com/2025/quic-impl-monthly-report-202505/)
37
+ * [QUIC実装月報 2025年6月 \| うなすけとあれこれ](https://blog.unasuke.com/2025/quic-impl-monthly-report-202506/)
38
+ * [QUIC実装月報 2025年7月 \| うなすけとあれこれ](https://blog.unasuke.com/2025/quic-impl-monthly-report-202507/)
39
+ * [QUIC実装月報 2025年8月 \| うなすけとあれこれ](https://blog.unasuke.com/2025/quic-impl-monthly-report-202508/)
40
+ * [QUIC実装月報 2025年10月 \| うなすけとあれこれ](https://blog.unasuke.com/2025/quic-impl-monthly-report-202510/)
41
+ * [QUIC実装月報 2025年12月 \| うなすけとあれこれ](https://blog.unasuke.com/2025/quic-impl-monthly-report-202512/)
42
+
43
+ # 2025 → 2026
44
+ * [QUIC実装月報 2026年1月 \| うなすけとあれこれ](https://blog.unasuke.com/2026/quic-impl-monthly-report-202601/)
45
+ * [QUIC実装月報 2026年2月 \| うなすけとあれこれ](https://blog.unasuke.com/2026/quic-impl-monthly-report-202602/)
46
+ * [QUIC実装月報 2026年4月 \| うなすけとあれこれ](https://blog.unasuke.com/2026/quic-impl-monthly-report-202604/)
47
+ * [QUIC実装月報 2026年5月 \| うなすけとあれこれ](https://blog.unasuke.com/2026/quic-impl-monthly-report-202605/)
48
+ * [QUIC実装月報 2026年6月 \| うなすけとあれこれ](https://blog.unasuke.com/2026/quic-impl-monthly-report-202606/)
49
+ * [QUIC実装月報 2026年8月 \| うなすけとあれこれ](https://blog.unasuke.com/2026/quic-impl-monthly-report-202608/)
50
+
51
+ 進捗を書いています!
52
+
53
+ # つくったもの
54
+ * <https://github.com/unasuke/nghttp3-ruby>
55
+ * <https://github.com/unasuke/quic-ruby>
56
+ * <https://github.com/unasuke/carbuncle>
57
+
58
+ それぞれについて説明します
59
+
60
+ # `unasuke/nghttp3-ruby`
61
+ * <https://github.com/unasuke/nghttp3-ruby>
62
+
63
+ <https://github.com/ngtcp2/nghttp3> のRuby binding gem。これ単体ではQUICプロトコルによる通信はできない。
64
+
65
+ OpenSSLに実装されているAPIをRuby側に露出しないと使えないので、このgemがあったとして今は何もできない。
66
+
67
+ # `unasuke/quic-ruby`
68
+ * <https://github.com/unasuke/quic-ruby>
69
+
70
+ <https://github.com/ngtcp2/ngtcp2> とLibreSSLのRuby binding gem。 `examples/` 以下に実際の動作例を置いてある。
71
+
72
+ LibreSSLを暗号化バックエンドとして使用しているのはngtcp2がOpenSSLをbackendに使用するのをexperimentalとしているため。
73
+
74
+ # `unasuke/carbuncle`
75
+ * <https://github.com/unasuke/carbuncle>
76
+
77
+ これはQUICの利用側。家の中のRaspberry Piで動かしている DNS full service resolver。Pi-HoleのWeb UIがないもの、というのが伝わりやすい?
78
+
79
+ DoH3、DoT、DoQに対応することで、自分のQUIC, HTTP/3、TLSの実装が実運用に耐えるかどうかを検証するために開発している。完全に自分用。
80
+
81
+ 現在はDoTには対応できている。家の中に置いてもDoH、DoQのクライアントになるものなのかなぁ……
82
+
83
+ # 関わったもの
84
+ * <https://github.com/socketry/protocol-quic>
85
+ * <https://github.com/socketry/protocol-http3>
86
+
87
+ # `socketry/protocol-quic`
88
+ * <https://github.com/socketry/protocol-quic>
89
+
90
+ ioquatix氏によるQUIC実装。QUICレイヤはngtcp2を利用しており、Asyncエコシステムで使いやすいように色々やっている。
91
+
92
+ 手元でbuildに失敗する問題の修正を取り込んでもらった。
93
+
94
+ <https://github.com/socketry/protocol-quic/pull/3>
95
+
96
+ # `socketry/protocol-http3`
97
+ * <https://github.com/socketry/protocol-http3>
98
+
99
+ ioquatix氏によるHTTP/3実装。QUICレイヤはngtcp2を、HTTP/3レイヤはnghttp3を利用しており、Asyncエコシステムで使いやすいように色々やっている。
100
+
101
+ 手元で(以下略)
102
+
103
+ <https://github.com/socketry/protocol-http3/pull/1>
104
+
105
+ # ioquatix and me
106
+ ![](img/ioquatix-and-me.jpg){:relative_width=' 70'}
107
+
108
+ # Joined socketry org
109
+ ![](img/socketry-org-invitation.png){:relative_width='60'}
110
+
111
+ # 今後の展望
112
+ * Pure Ruby実装の設計をやりなおし中
113
+ * TLSのあたりで非効率なことをしていた
114
+ * 設計はAIに手伝ってもらっている、実装は……?
115
+ * Ruby本体(openssl gem)へのQUICを……?
116
+ * <https://github.com/ruby/openssl/pull/1008>
data/theme.rb ADDED
@@ -0,0 +1,126 @@
1
+ @default_foreground ||= @foreground
2
+ @default_background ||= @background
3
+ @default_shadow_color ||= @shadow_color
4
+
5
+ # pp font_families
6
+ font_color = '#333'
7
+ @default_font = 'BIZ UDPGothic'
8
+ @font_family = find_font_family(@default_font)
9
+ @bold_font = @default_font
10
+ @bold_font_family = find_font_family(@bold_font)
11
+ @monospace_font = 'Cica'
12
+ @monospace_font_family = find_font_family(@monospace_font)
13
+
14
+ @xxxx_large_font_size = screen_size(10 * Pango::SCALE)
15
+ @xxx_large_font_size = screen_size(8 * Pango::SCALE)
16
+ @xx_large_font_size = screen_size(6 * Pango::SCALE)
17
+ @x_large_font_size = screen_size(4.5 * Pango::SCALE)
18
+ @large_font_size = screen_size(4 * Pango::SCALE)
19
+ @normal_font_size = screen_size(3.5 * Pango::SCALE)
20
+ @small_font_size = screen_size(3.2 * Pango::SCALE)
21
+ @x_small_font_size = screen_size(3 * Pango::SCALE)
22
+ @xx_small_font_size = screen_size(2.8 * Pango::SCALE)
23
+ @xxx_small_font_size = screen_size(2.5 * Pango::SCALE)
24
+ @script_font_size = @x_small_font_size
25
+ @large_script_font_size = @small_font_size
26
+ @x_large_script_font_size = @large_font_size
27
+ @title_slide_title_font_size = @xxx_large_font_size
28
+
29
+ @block_quote_fill_color = "#f8f8f8"
30
+ @preformatted_fill_color = "#f8f8f8"
31
+ @default_headline_line_color = font_color
32
+
33
+ # @title_slide_background_image = 'img/title_bg.png'
34
+ # @slide_background_image = 'img/bg.png'
35
+
36
+ # set_foreground(@default_foreground)
37
+ # set_background(@default_background)
38
+
39
+ add_image_path("ruby-images")
40
+ include_theme("default-icon")
41
+ # include_theme("default-title-text")
42
+ include_theme("default-text")
43
+ include_theme("default-title-slide")
44
+ include_theme("default-slide")
45
+ include_theme("default-item-mark")
46
+ include_theme("default-method-list")
47
+ include_theme("default-preformatted")
48
+ include_theme("default-block-quote")
49
+ include_theme("default-foot-text")
50
+ include_theme("default-description")
51
+ include_theme("image")
52
+ include_theme("table")
53
+ include_theme("newline-in-slides")
54
+ include_theme("per-slide-background-color")
55
+ include_theme("background-image-toolkit")
56
+ include_theme("per-slide-background-image")
57
+ include_theme("body-background-image")
58
+ include_theme("tag")
59
+ include_theme("syntax-highlighting")
60
+ include_theme("default-comment")
61
+
62
+ include_theme("title-slide-background-image")
63
+ include_theme("slide-background-image")
64
+
65
+ match(TitleSlide, "*") do |elems|
66
+ elems.horizontal_centering = true
67
+ elems.prop_set("size", @large_font_size)
68
+ set_font_family(elems)
69
+ end
70
+
71
+ match(TitleSlide, Title) do |titles|
72
+ titles.prop_set("size", @title_slide_title_font_size)
73
+ titles.padding_bottom = @space * 2
74
+ titles.prop_set("weight", "SemiBold")
75
+ end
76
+
77
+ match(Slide, HeadLine) do |heads|
78
+ heads.prop_set("size", @large_font_size)
79
+ heads.prop_set("weight", "bold")
80
+ end
81
+
82
+ match(TitleSlide) do |slides|
83
+ # slides.margin_left = 900
84
+ slides.vertical_centering = true
85
+ slides.prop_set "foreground", font_color
86
+ slides.prop_set("weight", "bold")
87
+ end
88
+ match(TitleSlide, Subtitle) do |subtitle|
89
+ subtitle.margin_top = -20
90
+ subtitle.prop_set("size", @large_font_size)
91
+ end
92
+ match(TitleSlide, Author) do |author|
93
+ author.margin_top = 50
94
+ author.prop_set("size", @large_font_size)
95
+ author.prop_set("weight", "normal")
96
+ end
97
+ match(TitleSlide, Place) do |place|
98
+ place.prop_set("size", @small_font_size)
99
+ end
100
+ match(TitleSlide, "*") do |elems|
101
+ elems.horizontal_centering = true
102
+ end
103
+
104
+ match(TitleSlide, Date) do |dates|
105
+ dates.prop_set("size", @small_font_size)
106
+ # dates.prop_set("style", "italic")
107
+ end
108
+
109
+ match(TitleSlide, ContentSource) do |sources|
110
+ sources.prop_set("size", @small_font_size)
111
+ sources.margin_bottom = @space
112
+ # sources.prop_set("style", "italic")
113
+ end
114
+
115
+ @body_line_spacing = screen_y(1.3)
116
+
117
+ match(Slide, Body, "**", Paragraph) do |paragraphs|
118
+ paragraphs.spacing = @body_line_spacing
119
+ end
120
+
121
+ @body_paragraph_space = @space * (3 / 4.0)
122
+
123
+ match(Slide, Body, Paragraph) do |paragraphs|
124
+ paragraphs.margin_top = @body_paragraph_space
125
+ paragraphs.margin_bottom = @body_paragraph_space
126
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-unasuke-rubykaigi-2026-followup
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - unasuke
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 2026-09-05 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rabbit
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 2.0.2
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 2.0.2
26
+ description: https://rhc.connpass.com/event/392503/
27
+ email:
28
+ - yusuke1994525@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - ".rabbit"
34
+ - README.md
35
+ - Rakefile
36
+ - config.yaml
37
+ - img/icon.png
38
+ - img/ioquatix-and-me.jpg
39
+ - img/socketry-org-invitation.png
40
+ - pdf/rubykaigi-2026-followup-slide.pdf
41
+ - slide.md
42
+ - theme.rb
43
+ homepage: https://slide.rabbit-shocker.org/authors/unasuke/rubykaigi-2026-followup/
44
+ licenses:
45
+ - MIT
46
+ metadata:
47
+ source_code_uri: https://github.com/unasuke/rubykaigi-2026-followup
48
+ markup_language: markdown
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubygems_version: 4.0.16
64
+ specification_version: 4
65
+ summary: RubyKaigi 2026 followup
66
+ test_files: []