rabbit-slide-kenhys-debconf2021-online 2021.08.28.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: dace4a29eef7adeaef7b1f2f43642b871eea58cd9d3f24555bad4d7760e074df
4
+ data.tar.gz: f2ff37143651f37411c95c1ea0df56c1950a173bc7dab653efc2631c7ba0b563
5
+ SHA512:
6
+ metadata.gz: 84e82ea41ec8cb86ff6a2c945794d77c7d3dbfe78f87de6c99c82d44ba493248eddbf76cf370aa8728a373e03f00c77b53093ee59f3f64faadd4d9cc551bc99f
7
+ data.tar.gz: ff398a5d68bff1d7020c35f4e3410d341e5f1f0841bfead664039cda93c833583cc9348f4e20141bbb29c318cef37f7f2b3dac1c3855866ac5ceb1db97634500
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ --size=1280,720 debconf2021-online.md
data/README.md ADDED
@@ -0,0 +1,14 @@
1
+ # DebConf 2021 Online
2
+
3
+ ## How to show
4
+
5
+ % rabbit
6
+
7
+ ## How to install
8
+
9
+ % gem install rabbit-slide-kenhys-debconf2021-online
10
+
11
+ ## How to create PDF
12
+
13
+ % rake pdf
14
+
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/cfp.md ADDED
@@ -0,0 +1,28 @@
1
+ Latest updates about fabre.debian.net - Finding untouched bugs
2
+
3
+ #### Introduction
4
+
5
+ At DebConf20, I gave a short talk about an idea to improve
6
+ user interfaces to find untouched bugs and much more.
7
+
8
+ Some idea had been implemented and also deployed as an experimental service on fabre.debian.net.
9
+
10
+ #### Target audience
11
+
12
+ * Debian contributor or maintainer who want to fix bugs not only the bugs which
13
+ is related to maintained packages by you
14
+
15
+ It may not interesting for Debian developer because DD is already familiar with bugs.debian.org, udd.debian.org, or qa.debian.org.
16
+
17
+ #### What will talk about
18
+
19
+ In this session, I’ll talk latest updates about fabre.debian.net since DebConf20.
20
+
21
+ #### References
22
+
23
+ * [Experiment about Debian's bug tracking front-end](https://debconf20.debconf.org/talks/28-experiment-about-debians-bug-tracking-front-end/) DebConf20
24
+ * slide: [An experiment about personalized front-end of bugs.debian.org](https://slide.rabbit-shocker.org/authors/kenhys/debconf2020-online/)
25
+ * [fabre.debian.net - Finding untouched bugs](https://in2021.mini.debconf.org/talks/56-lightning-talks/) MiniDebConf India 2021
26
+ * slide: [An experiment about personalized front-end of bugs.debian.org](https://slide.rabbit-shocker.org/authors/kenhys/minidebconf-india2021/)
27
+ * Ubuntu Streaming Meeting 21.01 (Lightning talk)
28
+ * slide: https://slide.rabbit-shocker.org/authors/kenhys/ubuntu-streaming-meeting-2101/ (Written by Japanese)
data/concept.md ADDED
@@ -0,0 +1,50 @@
1
+ # DebConf21 fabre.debian.netの最近のトピック紹介
2
+
3
+ ## 目的
4
+
5
+ DebConf20以降の最近のトピックを紹介する。
6
+ Debian.net teamによるスポンサーされているので有用性を示す。
7
+
8
+ ## 最近のトピック
9
+
10
+ * DebConf20以降の最新のトピックを紹介し、継続的に改善していることを示す。
11
+ * 実際に使われていること・使えることを示して、有用性を示す
12
+
13
+ ### DebConf20で実現できていたこと
14
+
15
+ * RC,Updated,Createdなバグの表示
16
+ * blockedのリスト表示
17
+ * controlへのmailto: リンク表示
18
+ * bookmark, affected, installedを表示するDashboard
19
+ * 30日以内にコメントたバグへのリンク
20
+
21
+ ### DebConf20以降で実現したこと
22
+
23
+ * よりDebianっぽいデザインに変更した
24
+ * fabre.debian.netのサブドメインを取得した
25
+ * スポンサーを得た(FOSSHOST)
26
+ * スポンサーを得た(Debian.net team)
27
+ * ページングに対応した
28
+ * コントロールメール送信方法を増やした(以前はcontrolのみだった)
29
+ * FTBFSやSecurityカテゴリを表示するようにした
30
+ * カテゴリごとでseverityごとにわけて表示できるようにした
31
+ * コメントがまだついていないもののみを表示できるようにした(Fixme)
32
+ * ArchitectureTagsの表示に対応した
33
+
34
+ ### トピックすべてを解説するのではなく便利なシナリオを紹介する
35
+
36
+ * まだだれも手をつけていないバグをなおしたい
37
+ * Fixmeを参照すればいい
38
+ * RCバグの修正を手伝いたい(主要パッケージではなくてもよい)
39
+ * まだ誰も手をつけていないやつにとりかかる Fixmeから探す
40
+ * FTBFSなやつをなおしたい(new!)
41
+ * GCCを更新したときに起きるやつ FTBFSカテゴリを参照する
42
+ * 特定アーキテクチャでのみ発生する問題をなおしたい(new!)
43
+ * ArchitectureTagsカテゴリを参照するとよい
44
+ * 移行がすすんでいないバグを修正したい(new!)
45
+ * blocked byが多いトラッキングのチケットを探す TODO:これまだバグありそう
46
+
47
+ # 今後の予定
48
+
49
+ * TODO: 自由に全文検索できる
50
+ * TODO: パーソナライズされた検索ができる
data/config.yaml ADDED
@@ -0,0 +1,26 @@
1
+ ---
2
+ id: debconf2021-online
3
+ base_name: debconf2021-online
4
+ tags:
5
+ - rabbit
6
+ - debconf21
7
+ - bugs.debian.org
8
+ - fabre.debian.net
9
+ presentation_date: 2021-08-28
10
+ presentation_start_time:
11
+ presentation_end_time:
12
+ slideshare_id:
13
+ version: 2021.08.28.1
14
+ licenses:
15
+ - CC-BY-SA-4.0
16
+ slideshare_id: kenhys
17
+ speaker_deck_id:
18
+ vimeo_id:
19
+ youtube_id:
20
+ author:
21
+ markup_language: :md
22
+ name: Kentaro Hayashi
23
+ email: kenhys@gmail.com
24
+ rubygems_user: kenhys
25
+ slideshare_user: kenhys
26
+ speaker_deck_user:
@@ -0,0 +1,166 @@
1
+ # Latest topics about fabre.debian.net
2
+
3
+ subtitle
4
+ : Finding untouched bugs 🐞
5
+
6
+ author
7
+ : Kentaro Hayashi
8
+
9
+ institution
10
+ : ClearCode Inc.
11
+
12
+ content-source
13
+ : DebConf21 online August 28, 2021
14
+
15
+ allotted-time
16
+ : 15m
17
+
18
+ theme
19
+ : .
20
+
21
+ # See Rabbit Slide Show
22
+
23
+ * "Latest topics about fabre.debian.net - Finding untouched bugs"
24
+ * <https://slide.rabbit-shocker.org/authors/kenhys/debconf2021-online/>
25
+
26
+ # Personal profile
27
+
28
+ ![](images/profile.png){:relative-height="40"}
29
+
30
+ * Debian Developer (@kenhys) since Sep, 2020
31
+ * Trackpoint(soft dome) and Wasa beef(Yamayoshi Wasabi Potato Chips) fan
32
+ * Working for ClearCode Inc.
33
+
34
+ # ClearCode Inc.
35
+
36
+ ![https://www.clear-code.com/](images/logo-combination-standard.svg){:relative-height="35"}
37
+
38
+ * It is important to do both free software activities and develop/support software business
39
+ * We feedback our business experiences to free software
40
+
41
+ # Agenda
42
+
43
+ * What is Fabre?
44
+ * Recall DebConf20 presentation
45
+ * What I want to solve
46
+ * Useful use cases
47
+ * Summary
48
+
49
+ # What is Fabre?
50
+
51
+ ![https://fabre.debian.net/](images/fabre.debian.net.png){:relative-height="80"}
52
+
53
+ * Small web service to find untouched bugs
54
+
55
+ # Recall DebConf20 presentation summary
56
+
57
+ ![https://slide.rabbit-shocker.org/authors/kenhys/debconf2020-online/](images/debconf2020-presentation.png){:relative-height="100"}
58
+
59
+ # What I want to solve
60
+
61
+ * The troublesome cases about tracking bugs
62
+ * Mainly package or maintainer oriented approach
63
+ * <https://qa.debian.org/>
64
+ * <https://tracker.debian.org/>
65
+ * <https://udd.debian.org/dmd/>
66
+
67
+ * Not so easy cases 🤔
68
+ * Find only untouched bugs
69
+ * See blocked bugs at a glance 👀
70
+
71
+ # How to solve this situation?
72
+
73
+ * Provide simple front-end as an experimental service!
74
+ * Mashup existing data
75
+ * Import E-mail archives (debian-bugs-dist,debian-bugs-closed) 📧
76
+ * Use UDD metadata (udd-mirror@udd-mirror.debian.net) 💽
77
+
78
+ # fabre.debian.net
79
+
80
+ ![](images/fabre-recent-updated.png){:relative-height="100"}
81
+
82
+ # Latest topics
83
+
84
+ * Fabre had been deployed under debian.net
85
+ * Sponsorship for fabre.debian.net
86
+ * And some more minor improvements
87
+
88
+ # Fabre had been deployed under debian.net
89
+
90
+ * At first, Fabre was deployed under my own domain
91
+ * fabre.debian.net was owned by other DD (unused for a long time)
92
+ * Negotiated about fabre.debian.net subdomain with DSA (October, 2020)
93
+ * Got fabre.debian.net subdomain and deployed (November, 2020)
94
+
95
+ # Sponsorship for fabre.debian.net
96
+
97
+ * May 2020 - Oct, 2020 (No sponsor, hosted on WebARENA/Indigo)
98
+ * There is the issue about limited server resources
99
+ * Oct, 2020 - June, 2021 (Sponsored by FOSSHOST)
100
+ * June, 2021 - (Sponsored by Debian.net Team)
101
+ * The issue about server resource has been solved! 🎉
102
+
103
+ # Off-Topic: Request hosting sponsor
104
+
105
+ ![https://salsa.debian.org/debian.net-team/requests/-/issues](images/debian.net-team-requests.png){:relative-height="100"}
106
+
107
+ # And some more minor improvements
108
+
109
+ * Improved viewing bugs by category, severity
110
+ * Added button to share bug report (Tweet)
111
+ * Added more mailto: button to control bug report
112
+ * Added to package description in each bug report
113
+ * ...
114
+
115
+ # Use cases about fabre.debian.net
116
+
117
+ * Finding a bug that no one working on
118
+ * Sending control E-mail easily
119
+ * Easy to view blocked bugs
120
+ * Finding a FTBFS bug 🆕
121
+ * Finding a security bug 🆕
122
+ * Finding a architecture specific bug 🆕
123
+
124
+ # Finding a bug that no one working on
125
+
126
+ ![](images/easy-to-find-no-one-working-mark.png){:relative-height="80"}
127
+
128
+ * Show the number of comments for your hints
129
+
130
+ # Sending control E-mail easily
131
+
132
+ ![](images/easy-to-send-control-email-mark.png){:relative-height="70"}
133
+
134
+ * Show mailto: buttons to control bugs on each bug report
135
+ * Tagging Architecture is supported
136
+
137
+ # Easy to view blocked bugs
138
+
139
+ ![](images/easy-to-view-blocking-mark.png){:relative-height="90"}
140
+
141
+ * List blocked bugs appropriately
142
+
143
+ # Finding a FTBFS bug 🆕
144
+
145
+ ![https://fabre.debian.net/debian/bugs/ftbfs/fixme](images/easy-to-find-ftbfs.png){:relative-height="100"}
146
+
147
+ # Finding a security bug 🆕
148
+
149
+ ![https://fabre.debian.net/debian/bugs/security/fixme](images/easy-to-find-security.png){:relative-height="100"}
150
+
151
+ # Finding a architecture specific bug 🆕
152
+
153
+ ![https://fabre.debian.net/bugs/archtag/arm64](images/easy-to-find-archtag.png){:relative-height="100"}
154
+
155
+ # Summary
156
+
157
+ * Fabre had been deployed as debian.net subdomain
158
+ * Fabre had been sponsored by Debian.net team
159
+ * I've implemented what I want on fabre.debian.net since DebConf20
160
+ * New FTBFS,Security,ArchTag categories and so on
161
+
162
+ # Any questions?
163
+
164
+ * Could you speak slowly if you have a question, please?
165
+ * Use <https://pad.online.debconf.org/p/16-latest-updates-about-fabredebiannet-finding-u> for asking a question
166
+ * I'll follow-up after this presentation a bit 😪
data/faq.md ADDED
@@ -0,0 +1,17 @@
1
+ Q. When Fabre is available?
2
+ A. I don't have concrete schedule about it.
3
+ It is in very early stage of development, because I want to show proof of concept at DebConf.
4
+
5
+ Q. Where can I find the source code of Fabre?
6
+ A. I'll publish at Fabre code on salsa.d.o in the future.
7
+
8
+ Q. What can I help for Fabre?
9
+ A. I hope you will send cool logo for Fabre.
10
+
11
+ Q. Why doesn't send E-mail from system?
12
+ A. I think to send E-mail automatically is not appropriate because
13
+ the responsibility of sending E-mail should be owned by yourself.
14
+
15
+ Q. Why did you use Groonga?
16
+ A. Because I maintain Groonga package and I also want to support fulltext-search with it.
17
+ Groonga is a column store database which supports fulltext-search.
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,255 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="レイヤー_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="508.231" height="179.668" viewBox="0 0 508.231 179.668" overflow="visible" enable-background="new 0 0 508.231 179.668" xml:space="preserve">
5
+ <g>
6
+ <g>
7
+ <path fill="#FFFFFF" d="M28.45,151.424l48.079,16.659l1.392-3.559l-53.667-18.596C25.576,147.813,26.974,149.647,28.45,151.424z"/>
8
+ <path fill="#FFFFFF" d="M21.043,140.978l58.199,20.166l1.392-3.559l-62.377-21.613C19.129,137.671,20.058,139.34,21.043,140.978z"/>
9
+ <path fill="#FFFFFF" d="M20.888,54.256l27.601,9.563c0.82-1.084,1.667-2.142,2.557-3.155l-28.069-9.726 C22.256,52.023,21.562,53.13,20.888,54.256z"/>
10
+ <path fill="#FFFFFF" d="M9.288,89.631l27.919,9.674c-0.044-1.339-0.031-2.685,0.022-4.033L9.743,85.748 C9.56,87.043,9.409,88.337,9.288,89.631z"/>
11
+ <path fill="#FFFFFF" d="M16.048,131.368l65.907,22.837l0.339-0.868l-9.575-3.743c-4.67-1.826-8.95-4.224-12.807-7.067 l-45.747-15.851C14.751,128.257,15.37,129.825,16.048,131.368z"/>
12
+ <path fill="#FFFFFF" d="M12.696,122.328l40.033,13.871c-1.715-1.795-3.299-3.696-4.75-5.687l-36.533-12.658 C11.823,119.357,12.238,120.849,12.696,122.328z"/>
13
+ <path fill="#FFFFFF" d="M42.548,30.245l37.423,12.967c2.572-0.625,5.193-1.067,7.846-1.323L46.397,27.538 C45.091,28.405,43.806,29.304,42.548,30.245z"/>
14
+ <path fill="#FFFFFF" d="M9.3,105.394l31.117,10.782c-0.528-1.487-0.997-2.996-1.398-4.525L9.007,101.251 C9.071,102.637,9.168,104.017,9.3,105.394z"/>
15
+ <path fill="#FFFFFF" d="M10.514,113.693l34.235,11.862c-0.925-1.599-1.771-3.239-2.534-4.918L9.78,109.398 C9.987,110.837,10.233,112.269,10.514,113.693z"/>
16
+ <path fill="#FFFFFF" d="M8.921,97.383l29.167,10.106c-0.257-1.405-0.453-2.823-0.602-4.249L9.021,93.376 C8.956,94.714,8.922,96.05,8.921,97.383z"/>
17
+ <path fill="#FFFFFF" d="M14.679,66.873c-0.114,0.292-0.208,0.586-0.318,0.879l26.716,9.257c0.473-1.198,0.993-2.362,1.538-3.508 l-26.815-9.291C15.419,65.092,15.032,65.971,14.679,66.873z"/>
18
+ <path fill="#FFFFFF" d="M25.126,47.845l28.664,9.932c1.033-1.018,2.093-2.004,3.196-2.934L27.578,44.654 C26.737,45.694,25.92,46.759,25.126,47.845z"/>
19
+ <path fill="#FFFFFF" d="M17.314,60.896l26.979,9.348c0.638-1.142,1.304-2.261,2.012-3.343l-27.237-9.438 C18.459,58.589,17.875,59.733,17.314,60.896z"/>
20
+ <path fill="#FFFFFF" d="M12.021,74.82l26.799,9.286c0.305-1.23,0.648-2.458,1.042-3.68l-26.724-9.26 C12.736,72.381,12.364,73.599,12.021,74.82z"/>
21
+ <path fill="#FFFFFF" d="M30.087,41.685l30.327,10.508c1.309-0.94,2.654-1.821,4.035-2.643L32.94,38.633 C31.966,39.625,31.014,40.641,30.087,41.685z"/>
22
+ <path fill="#FFFFFF" d="M10.335,82.115l27.167,9.413c0.138-1.284,0.317-2.568,0.547-3.851l-26.925-9.33 C10.83,79.602,10.57,80.858,10.335,82.115z"/>
23
+ <path fill="#FFFFFF" d="M35.854,35.805l32.931,11.41c1.716-0.828,3.475-1.565,5.267-2.215L39.165,32.911 C38.039,33.847,36.933,34.808,35.854,35.805z"/>
24
+ <path fill="#FFFFFF" d="M62.424,175.925L72,179.668l0.495-1.267l-18.896-6.547C56.432,173.356,59.367,174.729,62.424,175.925z"/>
25
+ <path fill="#FFFFFF" d="M40.989,163.647l32.828,11.374l1.391-3.559l-41.634-14.426C35.901,159.372,38.372,161.583,40.989,163.647z "/>
26
+ <path fill="#FFFFFF" d="M85.74,13.695l45.05,15.609l1.392-3.558L96.676,13.443C93.008,13.29,89.357,13.372,85.74,13.695z"/>
27
+ <path fill="#FFFFFF" d="M59.529,20.371l65.835,22.812l1.392-3.559L65.012,18.229C63.162,18.886,61.329,19.588,59.529,20.371z"/>
28
+ <path fill="#FFFFFF" d="M70.777,16.389l57.3,19.854l1.392-3.559L77.805,14.783C75.438,15.224,73.091,15.75,70.777,16.389z"/>
29
+ <path fill="#FFFFFF" d="M50.346,25.068l48.72,16.881c4.818,0.518,9.645,1.663,14.37,3.51l9.575,3.744l1.032-2.64L54.853,22.589 C53.326,23.367,51.825,24.198,50.346,25.068z"/>
30
+ </g>
31
+ <g>
32
+ <g>
33
+ <linearGradient id="XMLID_44_" gradientUnits="userSpaceOnUse" x1="114.9907" y1="86.6646" x2="114.9907" y2="255.8493">
34
+ <stop offset="0" style="stop-color:#458CFF"/>
35
+ <stop offset="1" style="stop-color:#FFFFFF"/>
36
+ </linearGradient>
37
+ <path fill="url(#XMLID_44_)" d="M123.731,19.127c-8.888-3.475-18.014-5.305-27.055-5.684l35.506,12.303l1.124-2.875 L123.731,19.127z"/>
38
+ <linearGradient id="XMLID_45_" gradientUnits="userSpaceOnUse" x1="104.2974" y1="86.665" x2="104.2974" y2="255.8504">
39
+ <stop offset="0" style="stop-color:#458CFF"/>
40
+ <stop offset="1" style="stop-color:#FFFFFF"/>
41
+ </linearGradient>
42
+ <path fill="url(#XMLID_45_)" d="M77.805,14.783l51.664,17.901l1.321-3.38L85.74,13.695 C83.072,13.933,80.424,14.295,77.805,14.783z"/>
43
+ <linearGradient id="XMLID_46_" gradientUnits="userSpaceOnUse" x1="96.5449" y1="86.6641" x2="96.5449" y2="255.8498">
44
+ <stop offset="0" style="stop-color:#458CFF"/>
45
+ <stop offset="1" style="stop-color:#FFFFFF"/>
46
+ </linearGradient>
47
+ <path fill="url(#XMLID_46_)" d="M65.012,18.229l61.743,21.394l1.322-3.38l-57.3-19.854 C68.831,16.927,66.913,17.555,65.012,18.229z"/>
48
+ <linearGradient id="XMLID_47_" gradientUnits="userSpaceOnUse" x1="90.1084" y1="86.665" x2="90.1084" y2="255.849">
49
+ <stop offset="0" style="stop-color:#458CFF"/>
50
+ <stop offset="1" style="stop-color:#FFFFFF"/>
51
+ </linearGradient>
52
+ <path fill="url(#XMLID_47_)" d="M54.853,22.589l69.189,23.974l1.321-3.38L59.529,20.371 C57.946,21.059,56.391,21.806,54.853,22.589z"/>
53
+ <linearGradient id="XMLID_48_" gradientUnits="userSpaceOnUse" x1="72.7314" y1="86.6646" x2="72.7314" y2="255.8496">
54
+ <stop offset="0" style="stop-color:#458CFF"/>
55
+ <stop offset="1" style="stop-color:#FFFFFF"/>
56
+ </linearGradient>
57
+ <path fill="url(#XMLID_48_)" d="M46.397,27.538L87.818,41.89c3.708-0.357,7.474-0.346,11.248,0.059l-48.72-16.881 C49.008,25.855,47.691,26.677,46.397,27.538z"/>
58
+ <linearGradient id="XMLID_49_" gradientUnits="userSpaceOnUse" x1="59.5684" y1="86.6646" x2="59.5684" y2="255.8502">
59
+ <stop offset="0" style="stop-color:#458CFF"/>
60
+ <stop offset="1" style="stop-color:#FFFFFF"/>
61
+ </linearGradient>
62
+ <path fill="url(#XMLID_49_)" d="M39.165,32.911L74.052,45c1.937-0.703,3.913-1.3,5.919-1.787L42.548,30.245 C41.4,31.105,40.27,31.991,39.165,32.911z"/>
63
+ <linearGradient id="XMLID_50_" gradientUnits="userSpaceOnUse" x1="50.8628" y1="86.6636" x2="50.8628" y2="255.8486">
64
+ <stop offset="0" style="stop-color:#458CFF"/>
65
+ <stop offset="1" style="stop-color:#FFFFFF"/>
66
+ </linearGradient>
67
+ <path fill="url(#XMLID_50_)" d="M32.94,38.633L64.449,49.55c1.413-0.841,2.858-1.622,4.337-2.335l-32.931-11.41 C34.862,36.722,33.891,37.665,32.94,38.633z"/>
68
+ <linearGradient id="XMLID_51_" gradientUnits="userSpaceOnUse" x1="43.9961" y1="86.6636" x2="43.9961" y2="255.8491">
69
+ <stop offset="0" style="stop-color:#458CFF"/>
70
+ <stop offset="1" style="stop-color:#FFFFFF"/>
71
+ </linearGradient>
72
+ <path fill="url(#XMLID_51_)" d="M27.578,44.654l29.408,10.189c1.107-0.933,2.257-1.809,3.429-2.65L30.087,41.685 C29.229,42.651,28.394,43.644,27.578,44.654z"/>
73
+ <linearGradient id="XMLID_52_" gradientUnits="userSpaceOnUse" x1="38.3833" y1="86.6636" x2="38.3833" y2="255.848">
74
+ <stop offset="0" style="stop-color:#458CFF"/>
75
+ <stop offset="1" style="stop-color:#FFFFFF"/>
76
+ </linearGradient>
77
+ <path fill="url(#XMLID_52_)" d="M22.977,50.939l28.069,9.726c0.88-1.001,1.8-1.958,2.743-2.888l-28.664-9.932 C24.387,48.856,23.674,49.89,22.977,50.939z"/>
78
+ <linearGradient id="XMLID_53_" gradientUnits="userSpaceOnUse" x1="33.7783" y1="86.6636" x2="33.7783" y2="255.8489">
79
+ <stop offset="0" style="stop-color:#458CFF"/>
80
+ <stop offset="1" style="stop-color:#FFFFFF"/>
81
+ </linearGradient>
82
+ <path fill="url(#XMLID_53_)" d="M19.068,57.463l27.237,9.438c0.693-1.059,1.427-2.081,2.184-3.082l-27.601-9.563 C20.259,55.307,19.654,56.377,19.068,57.463z"/>
83
+ <linearGradient id="XMLID_54_" gradientUnits="userSpaceOnUse" x1="30.0459" y1="86.6646" x2="30.0459" y2="255.8496">
84
+ <stop offset="0" style="stop-color:#458CFF"/>
85
+ <stop offset="1" style="stop-color:#FFFFFF"/>
86
+ </linearGradient>
87
+ <path fill="url(#XMLID_54_)" d="M15.799,64.209L42.615,73.5c0.527-1.11,1.086-2.196,1.678-3.256l-26.979-9.348 C16.789,61.985,16.282,63.088,15.799,64.209z"/>
88
+ <linearGradient id="XMLID_55_" gradientUnits="userSpaceOnUse" x1="27.1074" y1="86.6646" x2="27.1074" y2="255.8502">
89
+ <stop offset="0" style="stop-color:#458CFF"/>
90
+ <stop offset="1" style="stop-color:#FFFFFF"/>
91
+ </linearGradient>
92
+ <path fill="url(#XMLID_55_)" d="M13.138,71.167l26.724,9.26c0.351-1.09,0.726-2.177,1.148-3.258 c0.021-0.054,0.046-0.105,0.067-0.16l-26.716-9.257C13.932,68.887,13.515,70.024,13.138,71.167z"/>
93
+ <linearGradient id="XMLID_56_" gradientUnits="userSpaceOnUse" x1="24.9717" y1="86.6636" x2="24.9717" y2="255.8492">
94
+ <stop offset="0" style="stop-color:#458CFF"/>
95
+ <stop offset="1" style="stop-color:#FFFFFF"/>
96
+ </linearGradient>
97
+ <path fill="url(#XMLID_56_)" d="M11.124,78.347l26.925,9.33c0.214-1.192,0.477-2.383,0.772-3.571L12.021,74.82 C11.691,75.994,11.4,77.17,11.124,78.347z"/>
98
+ <linearGradient id="XMLID_57_" gradientUnits="userSpaceOnUse" x1="23.6221" y1="86.6636" x2="23.6221" y2="255.8487">
99
+ <stop offset="0" style="stop-color:#458CFF"/>
100
+ <stop offset="1" style="stop-color:#FFFFFF"/>
101
+ </linearGradient>
102
+ <path fill="url(#XMLID_57_)" d="M9.743,85.748l27.486,9.524c0.049-1.247,0.138-2.495,0.272-3.744l-27.167-9.413 C10.109,83.326,9.915,84.537,9.743,85.748z"/>
103
+ <linearGradient id="XMLID_58_" gradientUnits="userSpaceOnUse" x1="23.2539" y1="86.6641" x2="23.2539" y2="255.849">
104
+ <stop offset="0" style="stop-color:#458CFF"/>
105
+ <stop offset="1" style="stop-color:#FFFFFF"/>
106
+ </linearGradient>
107
+ <path fill="url(#XMLID_58_)" d="M9.021,93.376l28.467,9.864c-0.136-1.306-0.237-2.617-0.281-3.936L9.288,89.631 C9.17,90.881,9.081,92.129,9.021,93.376z"/>
108
+ <linearGradient id="XMLID_59_" gradientUnits="userSpaceOnUse" x1="23.9702" y1="86.6641" x2="23.9702" y2="255.8489">
109
+ <stop offset="0" style="stop-color:#458CFF"/>
110
+ <stop offset="1" style="stop-color:#FFFFFF"/>
111
+ </linearGradient>
112
+ <path fill="url(#XMLID_59_)" d="M9.007,101.251l30.012,10.399c-0.36-1.374-0.674-2.76-0.93-4.161L8.921,97.383 C8.921,98.675,8.948,99.965,9.007,101.251z"/>
113
+ <linearGradient id="XMLID_60_" gradientUnits="userSpaceOnUse" x1="25.7578" y1="86.6641" x2="25.7578" y2="255.8495">
114
+ <stop offset="0" style="stop-color:#458CFF"/>
115
+ <stop offset="1" style="stop-color:#FFFFFF"/>
116
+ </linearGradient>
117
+ <path fill="url(#XMLID_60_)" d="M9.78,109.398l32.436,11.239c-0.663-1.46-1.261-2.949-1.798-4.461L9.3,105.394 C9.428,106.734,9.588,108.069,9.78,109.398z"/>
118
+ <linearGradient id="XMLID_61_" gradientUnits="userSpaceOnUse" x1="29.2466" y1="86.6641" x2="29.2466" y2="255.8498">
119
+ <stop offset="0" style="stop-color:#458CFF"/>
120
+ <stop offset="1" style="stop-color:#FFFFFF"/>
121
+ </linearGradient>
122
+ <path fill="url(#XMLID_61_)" d="M11.446,117.854l36.533,12.658c-1.165-1.598-2.243-3.251-3.23-4.957l-34.235-11.862 C10.79,115.089,11.101,116.476,11.446,117.854z"/>
123
+ <linearGradient id="XMLID_62_" gradientUnits="userSpaceOnUse" x1="36.3047" y1="86.6631" x2="36.3047" y2="255.8477">
124
+ <stop offset="0" style="stop-color:#458CFF"/>
125
+ <stop offset="1" style="stop-color:#FFFFFF"/>
126
+ </linearGradient>
127
+ <path fill="url(#XMLID_62_)" d="M14.167,126.676l45.747,15.851c-2.596-1.914-4.993-4.034-7.185-6.327l-40.033-13.871 C13.149,123.791,13.635,125.241,14.167,126.676z"/>
128
+ <linearGradient id="XMLID_63_" gradientUnits="userSpaceOnUse" x1="49.002" y1="86.6631" x2="49.0019" y2="255.8479">
129
+ <stop offset="0" style="stop-color:#458CFF"/>
130
+ <stop offset="1" style="stop-color:#FFFFFF"/>
131
+ </linearGradient>
132
+ <path fill="url(#XMLID_63_)" d="M18.257,135.972l62.377,21.613l1.321-3.38l-65.907-22.837 C16.733,132.927,17.48,134.457,18.257,135.972z"/>
133
+ <linearGradient id="XMLID_64_" gradientUnits="userSpaceOnUse" x1="50.1431" y1="86.6646" x2="50.1431" y2="255.8489">
134
+ <stop offset="0" style="stop-color:#458CFF"/>
135
+ <stop offset="1" style="stop-color:#FFFFFF"/>
136
+ </linearGradient>
137
+ <path fill="url(#XMLID_64_)" d="M24.254,145.929l53.667,18.596l1.322-3.381l-58.199-20.166 C22.057,142.663,23.124,144.315,24.254,145.929z"/>
138
+ <linearGradient id="XMLID_65_" gradientUnits="userSpaceOnUse" x1="52.4897" y1="86.6636" x2="52.4897" y2="255.8494">
139
+ <stop offset="0" style="stop-color:#458CFF"/>
140
+ <stop offset="1" style="stop-color:#FFFFFF"/>
141
+ </linearGradient>
142
+ <path fill="url(#XMLID_65_)" d="M33.574,157.037l41.634,14.426l1.322-3.38L28.45,151.424 C30.065,153.367,31.778,155.237,33.574,157.037z"/>
143
+ <linearGradient id="XMLID_66_" gradientUnits="userSpaceOnUse" x1="57.4023" y1="86.6636" x2="57.4023" y2="255.849">
144
+ <stop offset="0" style="stop-color:#458CFF"/>
145
+ <stop offset="1" style="stop-color:#FFFFFF"/>
146
+ </linearGradient>
147
+ <path fill="url(#XMLID_66_)" d="M53.598,171.854l18.896,6.547l1.322-3.38l-32.828-11.374 C44.885,166.72,49.099,169.468,53.598,171.854z"/>
148
+ </g>
149
+ <linearGradient id="XMLID_67_" gradientUnits="userSpaceOnUse" x1="62.2041" y1="86.6709" x2="62.2041" y2="255.8549">
150
+ <stop offset="0" style="stop-color:#458CFF"/>
151
+ <stop offset="1" style="stop-color:#FFFFFF"/>
152
+ </linearGradient>
153
+ <path fill="url(#XMLID_67_)" d="M5.782,53.527L5.782,53.527c-16.902,43.229,4.517,92.149,47.746,109.052l9.575,3.744 l10.295-26.332l-9.575-3.743c-28.71-11.225-42.935-43.715-31.709-72.425c11.225-28.71,43.715-42.935,72.425-31.71l9.575,3.744 l10.295-26.331l-9.575-3.744C71.604-11.12,22.684,10.299,5.782,53.527z"/>
154
+ </g>
155
+ <g>
156
+ <linearGradient id="XMLID_68_" gradientUnits="userSpaceOnUse" x1="294.1226" y1="140.9063" x2="294.1226" y2="211.9397">
157
+ <stop offset="0" style="stop-color:#458CFF"/>
158
+ <stop offset="1" style="stop-color:#FFFFFF"/>
159
+ </linearGradient>
160
+ <path fill="url(#XMLID_68_)" d="M289.752,140.747c-0.168-3.205,0.662-6.361,2.492-9.469c1.828-3.107,5.662-4.773,11.498-4.996 v-5.25c-4.145,0.057-7.289,0.893-9.43,2.508c-2.143,1.615-3.787,3.773-4.936,6.473v-7.855h-4.875v44.125h5.25V140.747z"/>
161
+ <linearGradient id="XMLID_69_" gradientUnits="userSpaceOnUse" x1="256.895" y1="140.9092" x2="256.895" y2="211.9418">
162
+ <stop offset="0" style="stop-color:#458CFF"/>
163
+ <stop offset="1" style="stop-color:#FFFFFF"/>
164
+ </linearGradient>
165
+ <path fill="url(#XMLID_69_)" d="M267.127,137.224c-0.07,0.672-0.242,1.188-0.52,1.551c-1.15,0.84-3.303,1.391-6.459,1.656 s-6.563,0.699-10.222,1.301c-3.66,0.602-6.809,1.859-9.445,3.773c-2.637,1.916-4.012,4.957-4.123,9.121 c0.027,3.66,1.287,6.678,3.779,9.053s6.076,3.615,10.751,3.729c4.389-0.168,7.918-1.063,10.588-2.682 c2.668-1.619,4.688-3.211,6.059-4.775c-0.168,2.195,0.285,3.854,1.361,4.979s2.719,1.701,4.928,1.729 c1.033-0.057,1.844-0.141,2.432-0.25c0.586-0.111,0.979-0.166,1.174-0.166v-3.709c-0.225,0-0.49,0.021-0.797,0.063 c-0.309,0.043-0.588,0.063-0.838,0.063c-1.326-0.027-2.217-0.246-2.672-0.656c-0.457-0.41-0.67-0.883-0.641-1.422v-27.506 c0.027-3.232-1.27-6.02-3.891-8.361c-2.621-2.34-6.775-3.566-12.463-3.68c-6.094,0.168-10.542,1.693-13.351,4.58 s-4.197,6.127-4.17,9.725h5c0.082-2.602,1.074-4.865,2.973-6.791s5.166-2.93,9.8-3.014c5.592,0.277,8.869,1.607,9.83,3.986 c0.961,2.381,1.301,4.082,1.021,5.105C267.233,135.687,267.198,136.554,267.127,137.224z M267.233,150.851 c-0.168,3.727-1.793,6.66-4.875,8.801c-3.082,2.143-6.682,3.229-10.799,3.256c-3.359-0.084-5.859-0.918-7.496-2.502 c-1.637-1.582-2.455-3.467-2.455-5.654c0.055-2.766,0.986-4.807,2.793-6.121s4.076-2.23,6.806-2.748 c2.73-0.516,5.537-0.928,8.422-1.236c2.883-0.307,5.418-0.781,7.604-1.426V150.851z"/>
166
+ <linearGradient id="XMLID_70_" gradientUnits="userSpaceOnUse" x1="140.1738" y1="140.9072" x2="140.1738" y2="211.9366">
167
+ <stop offset="0" style="stop-color:#458CFF"/>
168
+ <stop offset="1" style="stop-color:#FFFFFF"/>
169
+ </linearGradient>
170
+ <path fill="url(#XMLID_70_)" d="M141.812,167.907c8.059-0.309,14.08-2.654,18.068-7.041s5.982-9.234,5.982-14.543h-5.5 c-0.057,4.674-1.707,8.613-4.953,11.818s-7.695,4.877-13.348,5.016c-8.227-0.363-13.957-3.355-17.188-8.979 c-3.232-5.623-4.777-11.764-4.637-18.422c0.055-8.557,1.924-15.254,5.604-20.092s8.932-7.299,15.76-7.383 c6.338,0.254,10.953,1.969,13.844,5.148s4.32,6.34,4.293,9.477h5.625c0.027-4.51-1.855-8.838-5.646-12.984 c-3.793-4.146-9.732-6.359-17.82-6.641c-8.549,0.084-15.232,2.959-20.053,8.623s-7.271,13.531-7.355,23.6 c-0.086,8.748,2.023,16.252,6.326,22.51C125.114,164.274,132.114,167.571,141.812,167.907z"/>
171
+ <linearGradient id="XMLID_71_" gradientUnits="userSpaceOnUse" x1="178.6401" y1="140.9063" x2="178.6401" y2="211.9379">
172
+ <stop offset="0" style="stop-color:#458CFF"/>
173
+ <stop offset="1" style="stop-color:#FFFFFF"/>
174
+ </linearGradient>
175
+ <rect x="176.14" y="105.032" fill="url(#XMLID_71_)" width="5" height="61.25"/>
176
+ <linearGradient id="XMLID_72_" gradientUnits="userSpaceOnUse" x1="210.1963" y1="140.9092" x2="210.1963" y2="211.9418">
177
+ <stop offset="0" style="stop-color:#458CFF"/>
178
+ <stop offset="1" style="stop-color:#FFFFFF"/>
179
+ </linearGradient>
180
+ <path fill="url(#XMLID_72_)" d="M210.445,167.407c6.076-0.281,10.648-1.998,13.715-5.154s4.6-6.301,4.6-9.43h-5.125 c-0.029,2.445-1.174,4.744-3.436,6.896s-5.373,3.299-9.334,3.438c-5.107-0.168-8.846-2.002-11.217-5.504 s-3.541-7.668-3.514-12.496h33.25c0-4.883-0.453-8.795-1.359-11.74c-0.906-2.943-2.279-5.281-4.119-7.012 c-1.063-1.166-2.678-2.332-4.844-3.498c-2.168-1.166-4.984-1.791-8.449-1.875c-5.988,0.027-10.732,2.037-14.23,6.029 c-3.5,3.992-5.291,9.783-5.373,17.375c-0.057,6.094,1.434,11.383,4.471,15.867C198.516,164.788,203.504,167.155,210.445,167.407z M200.193,130.241c2.482-3,5.871-4.568,10.168-4.709c4.451,0.084,7.832,1.578,10.141,4.48s3.479,6.617,3.508,11.145h-27.625 C196.439,136.88,197.709,133.241,200.193,130.241z"/>
181
+ <linearGradient id="XMLID_73_" gradientUnits="userSpaceOnUse" x1="489.0425" y1="140.9092" x2="489.0425" y2="211.9418">
182
+ <stop offset="0" style="stop-color:#458CFF"/>
183
+ <stop offset="1" style="stop-color:#FFFFFF"/>
184
+ </linearGradient>
185
+ <path fill="url(#XMLID_73_)" d="M506.872,133.417c-0.906-2.943-2.279-5.281-4.119-7.012c-1.063-1.166-2.678-2.332-4.844-3.498 c-2.168-1.166-4.984-1.791-8.449-1.875c-5.988,0.027-10.732,2.037-14.23,6.029c-3.5,3.992-5.291,9.783-5.373,17.375 c-0.057,6.094,1.434,11.383,4.471,15.867c3.035,4.484,8.023,6.852,14.965,7.104c6.076-0.281,10.648-1.998,13.715-5.154 s4.6-6.301,4.6-9.43h-5.125c-0.029,2.445-1.174,4.744-3.436,6.896s-5.373,3.299-9.334,3.438 c-5.107-0.168-8.846-2.002-11.217-5.504s-3.541-7.668-3.514-12.496h33.25C508.231,140.274,507.778,136.362,506.872,133.417z M475.231,141.157c0.055-4.277,1.324-7.916,3.809-10.916c2.482-3,5.871-4.568,10.168-4.709c4.451,0.084,7.832,1.578,10.141,4.48 s3.479,6.617,3.508,11.145H475.231z"/>
186
+ <linearGradient id="XMLID_74_" gradientUnits="userSpaceOnUse" x1="440.2271" y1="140.9043" x2="440.2271" y2="211.937">
187
+ <stop offset="0" style="stop-color:#458CFF"/>
188
+ <stop offset="1" style="stop-color:#FFFFFF"/>
189
+ </linearGradient>
190
+ <path fill="url(#XMLID_74_)" d="M455.227,129.845c-1.004-2.145-2.74-4.121-5.209-5.93s-5.654-2.77-9.557-2.883 c-6.898,0.141-12.004,2.381-15.313,6.721s-4.949,9.846-4.922,16.516c0.055,7.127,1.773,12.736,5.152,16.83 s8.07,6.195,14.074,6.309c4.238-0.113,7.621-1.014,10.145-2.701c2.523-1.689,4.4-3.666,5.629-5.93v7.506h5v-61.25h-5V129.845z M451.452,158.509c-2.711,3.043-6.375,4.551-10.99,4.523c-5.527-0.223-9.428-2.24-11.701-6.053 c-2.273-3.811-3.369-8.02-3.283-12.627c-0.057-5.34,1.107-9.777,3.492-13.311s6.342-5.369,11.869-5.51 c4.754,0.057,8.395,1.727,10.926,5.008c2.531,3.283,3.811,7.916,3.838,13.896C455.545,150.776,454.163,155.466,451.452,158.509z"/>
191
+ <linearGradient id="XMLID_75_" gradientUnits="userSpaceOnUse" x1="392.6978" y1="140.9092" x2="392.6978" y2="211.9418">
192
+ <stop offset="0" style="stop-color:#458CFF"/>
193
+ <stop offset="1" style="stop-color:#FFFFFF"/>
194
+ </linearGradient>
195
+ <path fill="url(#XMLID_75_)" d="M392.68,121.032c-7.473,0.223-12.756,2.609-15.848,7.16s-4.596,9.881-4.512,15.992 c-0.111,6.094,1.371,11.424,4.449,15.992c3.078,4.57,8.381,6.979,15.91,7.23c7.803-0.309,13.188-2.807,16.152-7.502 s4.377-9.936,4.238-15.721c0.082-6.363-1.455-11.764-4.615-16.201S400.036,121.228,392.68,121.032z M404.276,157.608 c-2.391,3.504-6.256,5.313-11.596,5.424c-5.289-0.111-9.135-1.926-11.541-5.445c-2.406-3.518-3.596-8.014-3.568-13.486 c-0.027-5.367,1.203-9.777,3.693-13.227s6.379-5.23,11.668-5.342c5.367,0.168,9.205,2.039,11.512,5.613s3.432,7.949,3.377,13.123 C407.848,149.659,406.667,154.104,404.276,157.608z"/>
196
+ <g>
197
+ <linearGradient id="XMLID_76_" gradientUnits="userSpaceOnUse" x1="338.2837" y1="140.9072" x2="338.2837" y2="211.9392">
198
+ <stop offset="0" style="stop-color:#458CFF"/>
199
+ <stop offset="1" style="stop-color:#FFFFFF"/>
200
+ </linearGradient>
201
+ <path fill="url(#XMLID_76_)" d="M338.559,103.364c-7.198,0.132-13.027,1.608-17.498,4.417h34.445 C351.292,104.989,345.659,103.501,338.559,103.364z"/>
202
+ <linearGradient id="XMLID_77_" gradientUnits="userSpaceOnUse" x1="338.0591" y1="140.9072" x2="338.0591" y2="211.9387">
203
+ <stop offset="0" style="stop-color:#458CFF"/>
204
+ <stop offset="1" style="stop-color:#FFFFFF"/>
205
+ </linearGradient>
206
+ <path fill="url(#XMLID_77_)" d="M338.559,114.489c2.342,0.06,4.392,0.41,6.167,1.032h17.711c-1.063-2.069-2.484-3.978-4.31-5.706 c-0.344-0.325-0.725-0.617-1.095-0.917h-37.586c-1.46,1.112-2.755,2.385-3.874,3.832c-0.688,0.889-1.308,1.827-1.893,2.792 h18.388C333.95,114.897,336.113,114.552,338.559,114.489z"/>
207
+ <linearGradient id="XMLID_78_" gradientUnits="userSpaceOnUse" x1="319.936" y1="140.9072" x2="319.936" y2="211.9387">
208
+ <stop offset="0" style="stop-color:#458CFF"/>
209
+ <stop offset="1" style="stop-color:#FFFFFF"/>
210
+ </linearGradient>
211
+ <path fill="url(#XMLID_78_)" d="M325.043,120.907c1.113-1.815,2.637-3.223,4.523-4.27H313.05 c-1.128,2.051-2.058,4.249-2.746,6.623h13.511C324.186,122.446,324.585,121.654,325.043,120.907z"/>
212
+ <linearGradient id="XMLID_79_" gradientUnits="userSpaceOnUse" x1="355.8608" y1="140.9072" x2="355.8608" y2="211.9387">
213
+ <stop offset="0" style="stop-color:#458CFF"/>
214
+ <stop offset="1" style="stop-color:#FFFFFF"/>
215
+ </linearGradient>
216
+ <path fill="url(#XMLID_79_)" d="M348.784,117.825c1.841,1.619,2.979,3.432,3.426,5.436h12.385 c-0.186-2.364-0.716-4.574-1.607-6.623h-15.859C347.72,116.992,348.28,117.381,348.784,117.825z"/>
217
+ <linearGradient id="XMLID_80_" gradientUnits="userSpaceOnUse" x1="316.1187" y1="140.9072" x2="316.1187" y2="211.9387">
218
+ <stop offset="0" style="stop-color:#458CFF"/>
219
+ <stop offset="1" style="stop-color:#FFFFFF"/>
220
+ </linearGradient>
221
+ <path fill="url(#XMLID_80_)" d="M323.329,124.377h-13.303c-0.535,2.088-0.907,4.296-1.117,6.623h12.797 C322.002,128.603,322.538,126.391,323.329,124.377z"/>
222
+ <linearGradient id="XMLID_81_" gradientUnits="userSpaceOnUse" x1="315.1274" y1="140.9072" x2="315.1274" y2="211.9387">
223
+ <stop offset="0" style="stop-color:#458CFF"/>
224
+ <stop offset="1" style="stop-color:#FFFFFF"/>
225
+ </linearGradient>
226
+ <path fill="url(#XMLID_81_)" d="M321.43,136.299c-0.026-1.453,0.026-2.843,0.146-4.182h-12.77 c-0.087,1.305-0.139,2.636-0.127,4.014c-0.006,0.889,0.031,1.75,0.07,2.609h12.757 C321.457,137.946,321.426,137.136,321.43,136.299z"/>
227
+ <linearGradient id="XMLID_82_" gradientUnits="userSpaceOnUse" x1="315.9614" y1="140.9072" x2="315.9614" y2="211.9387">
228
+ <stop offset="0" style="stop-color:#458CFF"/>
229
+ <stop offset="1" style="stop-color:#FFFFFF"/>
230
+ </linearGradient>
231
+ <path fill="url(#XMLID_82_)" d="M321.606,139.857h-12.798c0.164,2.327,0.509,4.53,1.017,6.623h13.29 C322.344,144.486,321.845,142.275,321.606,139.857z"/>
232
+ <linearGradient id="XMLID_83_" gradientUnits="userSpaceOnUse" x1="319.5532" y1="140.9072" x2="319.5532" y2="211.9387">
233
+ <stop offset="0" style="stop-color:#458CFF"/>
234
+ <stop offset="1" style="stop-color:#FFFFFF"/>
235
+ </linearGradient>
236
+ <path fill="url(#XMLID_83_)" d="M325.502,150.917c-0.744-1.023-1.377-2.135-1.917-3.32h-13.467 c0.655,2.361,1.525,4.574,2.636,6.623h16.233C327.641,153.345,326.473,152.251,325.502,150.917z"/>
237
+ <linearGradient id="XMLID_84_" gradientUnits="userSpaceOnUse" x1="355.8579" y1="140.9072" x2="355.8579" y2="211.9387">
238
+ <stop offset="0" style="stop-color:#458CFF"/>
239
+ <stop offset="1" style="stop-color:#FFFFFF"/>
240
+ </linearGradient>
241
+ <path fill="url(#XMLID_84_)" d="M348.667,153.017c-0.498,0.445-1.038,0.838-1.598,1.203h15.771 c0.94-2.023,1.542-4.232,1.808-6.623h-12.31C351.787,149.507,350.569,151.313,348.667,153.017z"/>
242
+ <linearGradient id="XMLID_85_" gradientUnits="userSpaceOnUse" x1="337.8325" y1="140.9072" x2="337.8325" y2="211.9387">
243
+ <stop offset="0" style="stop-color:#458CFF"/>
244
+ <stop offset="1" style="stop-color:#FFFFFF"/>
245
+ </linearGradient>
246
+ <path fill="url(#XMLID_85_)" d="M357.174,161.444c2.159-1.783,3.833-3.828,5.077-6.107h-17.263 c-1.959,0.846-4.209,1.32-6.766,1.402c-2.716-0.053-5.084-0.53-7.129-1.402h-17.682c0.683,1.137,1.413,2.242,2.244,3.277 c1,1.244,2.135,2.355,3.39,3.346h37.438C356.712,161.784,356.953,161.627,357.174,161.444z"/>
247
+ <linearGradient id="XMLID_86_" gradientUnits="userSpaceOnUse" x1="337.7622" y1="140.9072" x2="337.7622" y2="211.9391">
248
+ <stop offset="0" style="stop-color:#458CFF"/>
249
+ <stop offset="1" style="stop-color:#FFFFFF"/>
250
+ </linearGradient>
251
+ <path fill="url(#XMLID_86_)" d="M354.931,163.077h-34.339c4.486,2.947,10.359,4.505,17.631,4.662 C344.816,167.618,350.379,166.058,354.931,163.077z"/>
252
+ </g>
253
+ </g>
254
+ </g>
255
+ </svg>
Binary file
@@ -0,0 +1,116 @@
1
+ # fabre.debian.net \\n Finding untouched bugs
2
+
3
+ subtitle
4
+ : E-mail archives + UDD metadata + Simple web front-end = 🤔
5
+
6
+ author
7
+ : Kentaro Hayashi
8
+
9
+ institution
10
+ : ClearCode Inc.
11
+
12
+ content-source
13
+ : MiniDebConf India 2021 January 23, 2021
14
+
15
+ allotted-time
16
+ : 5m
17
+
18
+ theme
19
+ : .
20
+
21
+ # NOTE: Presentation slide is published
22
+
23
+ * This presentation slide is available via Rabbit Slide Show
24
+ * <https://slide.rabbit-shocker.org/authors/kenhys/minidebconf-india2021/>
25
+ "fabre.debian.net - Finding untouched bugs"
26
+
27
+ # Personal profile
28
+
29
+ ![](images/profile.png){:relative-height="40"}
30
+
31
+ * Newbie Debian Developer since September 2020 (@kenhys)
32
+ * Trackpoint(soft dome) and Wasa beef(Yamayoshi Wasabi Potato Chips) fan
33
+ * Working for ClearCode Inc.
34
+
35
+ # ClearCode Inc.
36
+
37
+ ![](images/logo-combination-standard.svg){:relative-height="30"}
38
+
39
+ * <https://www.clear-code.com/>
40
+ * Free software is important in ClearCode Inc.
41
+ * We develop/support software with our free software development experiences
42
+ * We feedback our business experiences to free software
43
+
44
+ # Lightning Talk Agenda
45
+
46
+ * Recall DebConf 2020 presentation
47
+ * The troublesome cases about bugs.d.o
48
+ * How to solve this situation?
49
+ * An experiment - fabre.debian.net
50
+
51
+ # Back to DebConf 2020
52
+
53
+ ![](images/debconf2020-presentation.png){:relative-height="100"}
54
+
55
+
56
+ # The troublesome cases about bugs.d.o
57
+
58
+ * Mainly package or maintainer oriented approach:
59
+ * <https://qa.debian.org/>
60
+ * <https://tracker.debian.org/>
61
+ * <https://udd.debian.org/dmd/>
62
+
63
+ * Not so easy cases: 🤔
64
+ * find only untouched bugs
65
+ * see blocked bugs at a glance 👀
66
+
67
+ # How to solve this situation?
68
+
69
+ * Mashup existing data + Simple front-end 💻
70
+ * E-mail archives (debian-bugs-dist,debian-bugs-closed) 📧
71
+ * UDD metadata (udd-mirror@udd-mirror.debian.net) 🖥
72
+
73
+ # An experiment - fabre.debian.net
74
+
75
+ * Concept
76
+ * *Make "unstable life" comfortable*
77
+ * Fix a bug (by finding a bug that no one working on)
78
+ * Triage a bug (by sending control E-mail easily)
79
+ * Avoid pitfall bugs (by finding affected important bugs)
80
+
81
+ # fabre.debian.net
82
+
83
+ ![](images/fabre-internals.png){:relative-height="100"}
84
+
85
+ # View recently updated bugs
86
+
87
+ ![](images/updated-bugs.png){:relative-height="100"}
88
+
89
+
90
+ # Focus on untouched bugs
91
+
92
+ ![](images/updated-untouched.png){:relative-height="100"}
93
+
94
+
95
+ # Focus on blocked bugs
96
+
97
+ ![](images/blocked-bugs.png){:relative-height="100"}
98
+
99
+ # Updates since DebConf 2020
100
+
101
+ * Become a Debian Developer (September, 2020)
102
+ * Negotiated about <https://fabre.debian.net> subdomain with DSA (October, 2020)
103
+ * Got fabre.debian.net subdomain and deployed 🎉 (November, 2020)
104
+
105
+ # fabre.debian.net is sponsored by FOSSHOST
106
+
107
+
108
+ ![](images/fosshost.org_Host_Light.png){:relative-height="80"}
109
+
110
+ * By migrating to <https://fosshost.org>, got more server resource! 🎉
111
+
112
+ # The next thing...
113
+
114
+ * Make things forward to beta:
115
+ * TODO: Implement cool full-text search feature
116
+ * TODO: Implement personalized search feature
@@ -0,0 +1,322 @@
1
+ # Presentation memo
2
+
3
+ Hi, thank you for coming to this session.
4
+
5
+ I'll start the presentation "An experiment about personalized
6
+ front-end of bugs.debian.org.
7
+
8
+ ## NOTE
9
+
10
+ This slide was already published at Rabbit Slide Show
11
+
12
+ So, you can also download this presentation.
13
+
14
+ ## Personal profile
15
+
16
+ Let me just start by introducing myself.
17
+
18
+ I'm one of the Debian maintainers. and a fan of a Trackpoint and Wasa
19
+ beef. I'm also working for ClearCode.
20
+
21
+ ## ClearCode Inc.
22
+
23
+ Usually, I'm developing and supporting software as an engineer.
24
+
25
+ There is a culture to respect free software, my colleague gave me a
26
+ feedback for this talk.
27
+
28
+ ## Not talk about
29
+
30
+ In this session, this presentation is related to bugs.debian.org, but
31
+ I will not talk about improving bugs.debian.org itself and internal
32
+ details.
33
+
34
+ # Agenda
35
+
36
+ Here is the session agenda.
37
+
38
+ First, I'll explain why so curious about bugs.d.o
39
+ and show you the troublesome case.
40
+
41
+ Next, I'll explain how to solve this situation and demonstrate an
42
+ actual front-end.
43
+
44
+ # We use bugs.d.o
45
+
46
+ Here is the screenshot of bugs.d.o.
47
+
48
+ I guess you are familiar with it.
49
+
50
+ # bugs.debian.org
51
+
52
+ In bugs.d.o, we need to follow the rules.
53
+
54
+ 1. Communicate each other by E-mail
55
+ 2. Change the bug status by sending E-mail
56
+
57
+ # Why so curious about bugs.d.o?
58
+
59
+ One day, I've received deprecated notification about growl-for-linux
60
+ package.
61
+
62
+ growl-for-linux is a notification software.
63
+
64
+ One is related to libappindicator and the other is related to
65
+ dbus-glib.
66
+
67
+ # How did you fixed?
68
+
69
+ About libappindicator, just migrated to libayatana-indicator.
70
+
71
+ # How did you fixed? (again)
72
+
73
+ About, dbus-glib, I need to fix changed interfaces and migrated into
74
+ GDBus.
75
+
76
+ # growl-for-linux was fixed
77
+
78
+ Two bugs about growl-for-linux package was fixed, but I thought what
79
+ about other packages?
80
+
81
+ # What about other packages?
82
+
83
+ libappindicator and dbus-glib was tracked like this.
84
+
85
+ # libappindicator: deprecated in Debian;
86
+
87
+ Against libappindicator, there are many bugs.
88
+
89
+ # libdbus-glib-1-dev: is deprecated
90
+
91
+ Against dbus-glib, there are too many blocked bugs.
92
+
93
+ # How to track many blocked?
94
+
95
+ In these case, we can use UserTags to track bugs.
96
+
97
+ # Does it work with libappindicator?
98
+
99
+ For libappindicator, ayatana-appindicator is used as UserTag
100
+
101
+ # Does it work with libdbus-glib1-dev?
102
+
103
+ It should be tagged... but, UserTag is not available for dbus-glib.
104
+
105
+ # The troublesome case about bugs.d.o
106
+
107
+ Like this, there is a case that UserTag is not always used. How to
108
+ solve this situation?
109
+
110
+ # Use udd.debian.org!
111
+
112
+ The answer is using udd.
113
+ UDD can track usertags and blocking bugs.
114
+
115
+ # In my experience, I need
116
+
117
+ So far, I've fixed or sent feedback to some bugs, I became to feel the
118
+ following ones are needed.
119
+
120
+ Tracking a specified bug
121
+ Finding a bug that no one working on
122
+ Sending control E-mail in required form
123
+ Finding affected bugs
124
+
125
+ # What I need for?
126
+
127
+ First topic is solved by using UDD.
128
+
129
+ But how about the rest issues?
130
+
131
+ # How to solve rest issues?
132
+
133
+ Surely, It is a good manner to fix a bug, but it is not easy.
134
+ It is also good to triage a bug, but it may be troublesome.
135
+
136
+ To know affected bugs are also important, but it is not so easy until
137
+ it hits you.
138
+
139
+ # Find affected bugs
140
+
141
+ In the past, there are some grave/critical bugs It had affected boot
142
+ sequence / logged in user session. I want to avoid these bugs.
143
+
144
+ # What about existing solution?
145
+
146
+ I've searched existing useful services via Debian wiki.
147
+
148
+ Developer Horizon seems well, but not available. Fabre also seems
149
+ well, but discontinued already.
150
+
151
+ I've also heard Debbugs Enhancement Suite. But it is a bit different
152
+ what I want.
153
+
154
+ # What about existing solution?
155
+
156
+ As a result, Debian Popularity Content and Public UDD Mirror seems
157
+ useful.
158
+
159
+ # Starting personal project
160
+
161
+ So I've started a personal project.
162
+
163
+ The concept of this project is: "Make unstable life comfortable" It
164
+ seems that it is ridiculous, but important for me.
165
+
166
+ # Starting personal project
167
+
168
+ To achieve this concept, I need to do some tasks.
169
+
170
+ counting comment for each bugs,
171
+ and adding separate mailto: link,
172
+ checking installed packages to alert affected bugs.
173
+
174
+ # How to realize concept
175
+
176
+ Furthermore, collecting E-mail archives, popcon data, installed
177
+ packages list and so on are also required.
178
+
179
+ # Collect bug information
180
+
181
+ To collect E-mail archives, we can use bugs-mirror with rsync. E-mail
182
+ archive contains *.log and *.summary.
183
+
184
+ # Extract .log and .summary
185
+
186
+ There are many Perl modules to handle bugs.d.o related pieces of
187
+ stuff.
188
+
189
+ # How to parse .log
190
+
191
+ For example, Log and MIME module is used to parse .log file.
192
+
193
+ # How to parse .summary
194
+
195
+ Status module is used to parse .summary file.
196
+ You can access these bugs's metadata.
197
+
198
+ # Collect Popcon data and so on
199
+
200
+ As UDD provides public database access,
201
+
202
+ So we can get popcon stats and investigate which bug affects unstable
203
+ or not.
204
+
205
+ # Collect installed packages information
206
+
207
+ As popularity-content command can collect installed binary packages
208
+ information. It is useful to check recently used packages.
209
+
210
+ # Process collected data and make it accessible!
211
+
212
+ After collecting these information, updating bug information is
213
+ required regularly.
214
+
215
+ I've used debian-bugs-dist mailing list as a trigger to
216
+ update and imported it into database.
217
+
218
+ # Prepared server specs for experiment
219
+
220
+ For my experiment, I've prepared small VPS instance.
221
+
222
+ # System diagrams
223
+
224
+ Here is a simple diagram for explaining the system.
225
+
226
+ Web server is nginx, Application server is puma, and backend database is Groonga.
227
+
228
+ It access external services,
229
+ E-mail server, UDD for metadata, Salsa for authentication.
230
+
231
+ # Named my project as Fabre
232
+
233
+ As diagram indicates,
234
+ I've named this personal system as Fabre.
235
+
236
+ # Why Fabre?
237
+
238
+ Fabre is famous by the study of insects.
239
+ I've borrowed from discontinued similar project in decades ago
240
+
241
+ # Concept of Fabre (again)
242
+
243
+ The concept is this project is Make "unstable life" comfortable.
244
+
245
+ # Finding a bug that no one working on
246
+
247
+ Here is the partial screenshot of Fabre.
248
+ It shows each number of comments (orange background color means no one working on yet)
249
+
250
+ # Sending control E-mail easily
251
+
252
+ I've added each mailto: button to sending control mail
253
+
254
+ # Easy to view blocked bugs
255
+
256
+ I've aligned blocked bugs.
257
+
258
+ # Finding affected important bugs
259
+
260
+ I've added a dashboard to show fire icon. It indicates that there are affected bugs.
261
+
262
+ # How Fabre is good enough to work?
263
+
264
+ I'll show you some demo about Fabre.
265
+
266
+ # Current status of Fabre
267
+
268
+ That's all about Fabre demonstration.
269
+
270
+ In this system, tracked bugs are reached to eighty-nine thousand.
271
+ UDD tracks 90 thousand bugs, so it covers most of them.
272
+
273
+ Currently, bug information is updated every 1 hour, and affected bugs are also updated every 1 day.
274
+
275
+ Disk usage is about 1.5 GiB.
276
+
277
+ # Weak point of Fabre
278
+
279
+ There is a one weak point about Fabre.
280
+ out of memory is occurred sometimes.
281
+
282
+ # Conclusion
283
+
284
+ * There is plenty room of improvement to develop, so I'll go forward this experiment furthermore.
285
+ * In my experiment, I've found that mashup some data sources may improve user experience.
286
+
287
+ # Any questions?
288
+
289
+ Could you speak slowly if you ask, please?
290
+
291
+ # DEMO
292
+
293
+ I'll demonstrate some features of Fabre.
294
+
295
+ If you already sign-in with salsa account,
296
+ You can also sign in with Fabre.
297
+
298
+ You need explicitly allow to authorize with Fabre.
299
+
300
+ After sign in, you can access the dashboard.
301
+
302
+ In the dashboard, you can see a status.
303
+
304
+ As you can see, there are three affected bugs,
305
+ ten bookmarked bugs, and you installed thousand and six hundred packages.
306
+
307
+ At the bottom of the dashboard, you can check the existence of newer comments since you commented finally.
308
+
309
+ Let's see the affected bugs.
310
+ These information is based on your installed packages.
311
+
312
+ Let's see the bookmarked bugs.
313
+ In every bug detail page, bookmark button is shown, so you can track bug freely.
314
+
315
+ You can see recent update bugs, release critical bugs, and newcomer bugs.
316
+
317
+ Here is the bug detail page,
318
+
319
+ You can view original bug report via clicking link,
320
+ tweet about bugs,
321
+ and send control E-mail easily.
322
+
data/theme.rb ADDED
@@ -0,0 +1,11 @@
1
+ @default_font = "Ubuntu"
2
+ @monospace_font = "Ubuntu"
3
+ include_theme("debian")
4
+ @slide_show_span = 1800
5
+ @slide_show_loop = true
6
+
7
+ # Tweak debian theme for 1280x720
8
+ #
9
+ # match(Slide, HeadLine) do |heads|
10
+ # loader_head.resize(canvas.width, 190)
11
+ # end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-kenhys-debconf2021-online
3
+ version: !ruby/object:Gem::Version
4
+ version: 2021.08.28.1
5
+ platform: ruby
6
+ authors:
7
+ - Kentaro Hayashi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-08-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: ''
28
+ email:
29
+ - kenhys@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - README.md
36
+ - Rakefile
37
+ - cfp.md
38
+ - concept.md
39
+ - config.yaml
40
+ - debconf2021-online.md
41
+ - faq.md
42
+ - images/debconf2020-presentation.png
43
+ - images/debian.net-team-requests.png
44
+ - images/easy-to-find-archtag.png
45
+ - images/easy-to-find-ftbfs.png
46
+ - images/easy-to-find-no-one-working-mark.png
47
+ - images/easy-to-find-no-one-working.png
48
+ - images/easy-to-find-security.png
49
+ - images/easy-to-send-control-email-mark.png
50
+ - images/easy-to-send-control-email.png
51
+ - images/easy-to-view-blocking-mark.png
52
+ - images/easy-to-view-blocking.png
53
+ - images/fabre-recent-updated.png
54
+ - images/fabre.debian.net.png
55
+ - images/logo-combination-standard.svg
56
+ - images/profile.png
57
+ - minidebconf-india2021.md
58
+ - pdf/debconf2021-online-debconf2021-online.pdf
59
+ - presentation-memo.md
60
+ - theme.rb
61
+ homepage: https://slide.rabbit-shocker.org/authors/kenhys/debconf2021-online/
62
+ licenses:
63
+ - CC-BY-SA-4.0
64
+ metadata: {}
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubygems_version: 3.2.22
81
+ signing_key:
82
+ specification_version: 4
83
+ summary: DebConf 2021 Online
84
+ test_files: []