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 +7 -0
- data/.rabbit +2 -0
- data/README.md +23 -0
- data/Rakefile +17 -0
- data/config.yaml +23 -0
- data/img/icon.png +0 -0
- data/img/ioquatix-and-me.jpg +0 -0
- data/img/socketry-org-invitation.png +0 -0
- data/pdf/rubykaigi-2026-followup-slide.pdf +0 -0
- data/slide.md +116 -0
- data/theme.rb +126 -0
- metadata +66 -0
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
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
|
|
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
|
+
{: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
|
+
{:relative_width=' 70'}
|
|
107
|
+
|
|
108
|
+
# Joined socketry org
|
|
109
|
+
{: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: []
|