-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.xml
719 lines (682 loc) · 62.9 KB
/
index.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>youtangaiのブログ</title>
<link>https://youtangai.github.io/</link>
<description>Recent content on youtangaiのブログ</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<copyright>Copyright © 2019–2021, youtangai; all rights reserved.</copyright>
<lastBuildDate>Tue, 10 Dec 2019 00:00:00 +0000</lastBuildDate>
<atom:link href="https://youtangai.github.io/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>実用Go言語読んだやつ その1</title>
<link>https://youtangai.github.io/posts/practical_go_1/</link>
<pubDate>Wed, 20 Jul 2022 22:16:57 +0900</pubDate>
<guid>https://youtangai.github.io/posts/practical_go_1/</guid>
<description>youtangaiのブログ https://youtangai.github.io/posts/practical_go_1/ -<h1 id="1章">1章</h1>
<h2 id="変数名">変数名</h2>
<ul>
<li>頭字語の場合、全部大文字か、全部小文字にする。ほかの単語と組み合わせる場合は、全部大文字にする。
<ul>
<li><code>ID, URL, id, url, ServeHTTP</code></li>
</ul>
</li>
<li>エラーインタフェースを満たす型の名前には接尾辞<code>Error</code>をつける
<ul>
<li><code>MarshalerError, UnsupportedTypeError</code></li>
</ul>
</li>
<li>errors.New(&quot;&quot;)で宣言されるようなエラーの変数は<code>err</code>もしくは<code>Err</code>から始める
<ul>
<li><code>ErrTooLong, ErrAdvanceTooFar</code></li>
</ul>
</li>
<li>基本的に変数名は短い名前が好まれる
<ul>
<li>for文のi、requestのreq</li>
</ul>
</li>
<li>しかし、グローバルだったりパッケージ外で呼ばれる変数は説明的であるほうがよい</li>
</ul>
<h2 id="パッケージ名">パッケージ名</h2>
<ul>
<li>小文字で構成される1つの単語が好ましい
<ul>
<li><code>bytes, http, list</code></li>
</ul>
</li>
<li>汎用的すぎるパッケージ名は避けたい
<ul>
<li><code>util, common, api</code></li>
</ul>
</li>
<li>スネークケースやキャメルケースのパッケージ名はGoらしくないので、フォルダ分けるのがよい
<ul>
<li><code>encoding_json -&gt; encoding/json</code></li>
</ul>
</li>
<li>パッケージは常に公開されているが、<code>internal</code>はモジュール外から読めない</li>
<li>テストパッケージで<code>{name}_test</code>はあり</li>
</ul>
<h2 id="定数">定数</h2>
<ul>
<li>配列、スライス、マップ、関数の返り値は定数として定義できない</li>
</ul>
<div class="highlight"><pre style="background-color:#eed;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#8b008b;font-weight:bold">const</span> (
a = []<span style="color:#00688b;font-weight:bold">int</span>{<span style="color:#b452cd">1</span>,<span style="color:#b452cd">2</span>,<span style="color:#b452cd">3</span>} <span style="color:#228b22">// ダメ
</span><span style="color:#228b22"></span> b = <span style="color:#8b008b;font-weight:bold">map</span>[<span style="color:#00688b;font-weight:bold">string</span>]<span style="color:#00688b;font-weight:bold">int</span>{ <span style="color:#228b22">// ダメ
</span><span style="color:#228b22"></span> <span style="color:#cd5555">&#34;one&#34;</span>: <span style="color:#b452cd">1</span>,
<span style="color:#cd5555">&#34;tow&#34;</span>: <span style="color:#b452cd">2</span>,
}
c = <span style="color:#008b45">function</span>() <span style="color:#228b22">// ダメ
</span><span style="color:#228b22"></span>)
</code></pre></div><h2 id="エラー定数">エラー定数</h2>
<ul>
<li>どうしても厳格にconstでErr定数を定義したい場合は以下のようにできる</li>
</ul>
<div class="highlight"><pre style="background-color:#eed;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#8b008b;font-weight:bold">type</span> errDatabase <span style="color:#00688b;font-weight:bold">int</span>
<span style="color:#8b008b;font-weight:bold">func</span> (e errDatabase) <span style="color:#008b45">Error</span>() <span style="color:#00688b;font-weight:bold">string</span> {
<span style="color:#8b008b;font-weight:bold">return</span> <span style="color:#cd5555">&#34;Database Error&#34;</span>
}
<span style="color:#8b008b;font-weight:bold">const</span> (
ErrDatabase errDatabase = <span style="color:#b452cd">0</span>
)
</code></pre></div><ul>
<li>ここまで厳格にやる必要がなければ<code>var</code>で気軽に定義するのもあり
<ul>
<li><code>databsae/sql</code>パッケージでは下記のように定義されている</li>
<li>しかし簡単に乗っ取り可能</li>
</ul>
</li>
</ul>
<div class="highlight"><pre style="background-color:#eed;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#8b008b;font-weight:bold">var</span> ErrConnDone = errors.<span style="color:#008b45">New</span>(<span style="color:#cd5555">&#34;sql: connection is already closed&#34;</span>)
ErrConnDone = errors.<span style="color:#008b45">New</span>(<span style="color:#cd5555">&#34;エラーを乗っ取ったぜ&#34;</span>)
</code></pre></div><h2 id="関数の引数">関数の引数</h2>
<ul>
<li>たくさん引数がある場合、構造体を利用したオプション引数という手段がある</li>
</ul>
<div class="highlight"><pre style="background-color:#eed;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#8b008b;font-weight:bold">type</span> (
Option <span style="color:#8b008b;font-weight:bold">struct</span> {
age <span style="color:#00688b;font-weight:bold">int</span>
height <span style="color:#00688b;font-weight:bold">int</span>
weight <span style="color:#00688b;font-weight:bold">int</span>
health <span style="color:#00688b;font-weight:bold">bool</span>
}
Human <span style="color:#8b008b;font-weight:bold">struct</span> {
age <span style="color:#00688b;font-weight:bold">int</span>
height <span style="color:#00688b;font-weight:bold">int</span>
weight <span style="color:#00688b;font-weight:bold">int</span>
health <span style="color:#00688b;font-weight:bold">bool</span>
}
)
<span style="color:#8b008b;font-weight:bold">func</span> <span style="color:#008b45">NewHuman</span>(opt Option) *Human {
<span style="color:#228b22">// 100キロ以上は不健康
</span><span style="color:#228b22"></span> <span style="color:#8b008b;font-weight:bold">if</span> opt.weight &lt; <span style="color:#b452cd">0</span> {
opt.health = <span style="color:#8b008b;font-weight:bold">false</span>
}
<span style="color:#8b008b;font-weight:bold">return</span> &amp;Human{
age: opt.age,
height: opt.height,
weight: opt.weight,
health: opt.health,
}
}
</code></pre></div><ul>
<li>ビルダーの手法もある
<ul>
<li>特定のフィールドの値を設定したオプション構造体を返すレシーバ関数を用意する</li>
<li>メソッドチェーンでつないでいく</li>
</ul>
</li>
</ul>
<h2 id="プログラムの引数">プログラムの引数</h2>
<ul>
<li>コマンドライン引数は下記ライブラリを使われてる
<ul>
<li>標準パッケージ<code>flag</code></li>
<li><code>gopkg.in/alecthomas/kingpin.v2</code></li>
<li><code>github.com/spf13/cobra</code></li>
</ul>
</li>
<li>クラウドネイティブなアプリケーションにおいて、環境変数の利用が強く推奨されている
<ul>
<li>デプロイ時に環境変数を設定可能であるため、同じバイナリで柔軟に各環境向けの挙動を設定できる</li>
<li><code>kelseyhightower/envconfig</code></li>
</ul>
</li>
</ul>
<h2 id="メモリパフォーマンス">メモリパフォーマンス</h2>
<ul>
<li>スライスのメモリが足りなかった場合、2倍のサイズを確保してからそこに内容をコピーする
<ul>
<li>1024までは2倍ずつメモリを確保する</li>
</ul>
</li>
<li>長さがわかっている場合は<code>make()</code>でメモリを確保するべき
<ul>
<li>確保とコピーの頻度を減らせる</li>
</ul>
</li>
<li>mapも同様に<code>make()</code>で確保するのがよい</li>
</ul>
<h2 id="文字列の結合">文字列の結合</h2>
<ul>
<li>大量の文字列を結合する場合、<code>+</code>を使ってループで結合するとパフォーマンスが下がる</li>
<li>Goにおいて文字列は不変なので、新しい文字列を生成するたびにメモリ確保が行われる</li>
<li><code>strings</code>パッケージの<code>strings.Builder</code>を利用するのがよい
<ul>
<li>結合後のサイズがわかっているのであれば<code>Grow</code>でバッファサイズをしていするのがよい</li>
</ul>
</li>
</ul>
<div class="highlight"><pre style="background-color:#eed;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#8b008b;font-weight:bold">var</span> builder strings.Builder
builder.<span style="color:#008b45">Grow</span>(<span style="color:#b452cd">100</span>) <span style="color:#228b22">// 100文字以下と仮定
</span><span style="color:#228b22"></span><span style="color:#8b008b;font-weight:bold">for</span> i, word := <span style="color:#8b008b;font-weight:bold">range</span> src {
<span style="color:#8b008b;font-weight:bold">if</span> i != <span style="color:#b452cd">0</span> {
builder.<span style="color:#008b45">WriteByte</span>(<span style="color:#cd5555">&#39; &#39;</span>) <span style="color:#228b22">// byte配列として追加
</span><span style="color:#228b22"></span> }
builder.<span style="color:#008b45">WriteString</span>(word) <span style="color:#228b22">// byte配列として追加
</span><span style="color:#228b22"></span>}
log.<span style="color:#008b45">Println</span>(builder.<span style="color:#008b45">String</span>()) <span style="color:#228b22">// String()メソッドでstringにキャスト
</span></code></pre></div>- https://youtangai.github.io/posts/practical_go_1/ - Copyright © 2019–2021, youtangai; all rights reserved.</description>
</item>
<item>
<title>オレシカナイト16の配信構成</title>
<link>https://youtangai.github.io/posts/oreshika_16/</link>
<pubDate>Sun, 12 Dec 2021 12:35:48 +0900</pubDate>
<guid>https://youtangai.github.io/posts/oreshika_16/</guid>
<description>youtangaiのブログ https://youtangai.github.io/posts/oreshika_16/ -<h1 id="はじめに">はじめに</h1>
<p>皆さんこんにちは、なんとかジム通いを続けられているyoutangaiです。最近トレーニングにメニューにスクワットが追加されてめちゃめちゃきついですが、そのきつさに気持ちよさを感じ始めてきました。</p>
<p>この記事は、サイバーエージェントメディア事業部の広告横軸組織PTA(<a href="https://twitter.com/PTA_CyberAgent">twitter</a>)の<a href="https://adventar.org/calendars/6450">アドベントカレンダー</a>12日目の記事となります。よろしくお願い致します。</p>
<h1 id="オレシカナイト">オレシカナイト</h1>
<p>PTAではだいたい3ヶ月に1回のペースで、アドテク勉強会「オレシカナイト」を実施しております。コロナ前まではオフラインで実施していたのですが、2020年7月に開催したVol13からYoutube上でオンライン配信する形式に変更しました。それから4回オンラインで勉強会を実施し、Vol16では様々な工夫ができるほど経験が溜まってきました。今回の記事では、Vol16配信の構成と工夫について述べます。ちなみに、オレシカナイトVol16のアーカイブは<a href="https://youtube.com/playlist?list=PLBsO-IAhmMUUw5_3PTQ7L0kfcnzhogpR_">こちら</a>にあるので、ぜひご覧ください。</p>
<h1 id="配信画面">配信画面</h1>
<p>結論から述べると、配信画面は下図のようになっています。発表者(右側の人)と司会者(左側の人)が対話しているような画面になっております(オレンジ色の枠です)。また、発表者のスライドが画面の中央に配置されており、視聴者や司会者からの質問に対する回答のスライドを表示することができます(赤色の枠です)。
<img src="https://youtangai.github.io/images/oreshika_16/stream_screen_struct.png" alt="画面構成"></p>
<h1 id="機材構成">機材構成</h1>
<p>配信は<a href="https://obsproject.com/ja">OBS</a>という配信のアプリケーションで行っております。OBSに取り込む入力は以下のリストになります。</p>
<ul>
<li>映像
<ul>
<li>司会者の映像</li>
<li>発表者の映像</li>
<li>発表者のスライドの映像</li>
</ul>
</li>
<li>音声
<ul>
<li>司会者&amp;発表者のマイクの音声</li>
</ul>
</li>
</ul>
<p>これらのデータをOBSに取り込むための構成は下図の様になっております。
<img src="https://youtangai.github.io/images/oreshika_16/stream_structure.jpg" alt="配信構成">
まず、マイクの音声と発表者スライドの取り込みについてです。これらのデータは会社から貸し出されている<code>Roland VR-4HD</code>にて取り込みます。マイクの音声は、赤白のオーディオケーブルからRolandに取り込みます。発表者のスライドはHDMIケーブルでRolandに取り込みます。Rolandからの情報はOBSに映像と音声が別々に取り込まれます。</p>
<p>続いて、司会者と発表者の映像取り込みについてです。これらのデータはRolandから取り込むことも可能だったのですが、Roland側でスライドと合成された形でしか取り込めません。スライドと司会者&amp;発表者の映像はOBS上で切り離して取り込みたかったので、<code>MiraBox VideoCapture</code>を用意しそこから取り込みました。余談ですが、2つのVideoCaptureは私物を利用しております。</p>
<h1 id="obs">OBS</h1>
<p>ここからは取り込んだ情報(映像と音声)の加工についてです。OBSでは取り込んだ映像と音声にフィルタをかけて配信にのせることが可能です。</p>
<h2 id="音声">音声</h2>
<p>音声の加工は大きく下記2つです。</p>
<ol>
<li>音量の増幅</li>
<li>ノイズの低減</li>
</ol>
<p>配信のテスト時にOBSに取り込んだ音声を確認すると、他の一般的なYouTube上の動画に比べて音量が小さいことがわかりました。そこで、OBS上のフィルタ<code>ゲイン</code>を作成し<code>27.4dB</code>を設定しました。これで、入力される音声を増幅して配信にのせることができました。
<img src="https://youtangai.github.io/images/oreshika_16/filter_gain.png" alt="ゲインフィルタ"></p>
<p>しかし、その場合マイクから入ったノイズも増幅されてしまいます。これを回避するために、<code>ノイズ抑制</code>フィルタを作成し<code>RNNoise(高品質、より多くのCPU使用率)</code>を設定しました。
<img src="https://youtangai.github.io/images/oreshika_16/filter_noise.png" alt="ノイズ抑制フィルタ"></p>
<h2 id="映像">映像</h2>
<p>司会者&amp;発表者の後ろにはグリーンバックが設置してあります。そのため、人物の周りは緑色になって映像として取り込まれます。そこで<code>クロマキーフィルタ</code>を利用することで、人物のみを切り抜くことができます。下記のような映像(今回はフリー素材で代替します)に対して<code>クロマキーフィルタ</code>をかけると&hellip;
<img src="https://youtangai.github.io/images/oreshika_16/green_heart.png" alt="ハートの手"></p>
<p>こうなります。
<img src="https://youtangai.github.io/images/oreshika_16/green_heart_filter.png" alt="ハートの手クロマキー"></p>
<h1 id="おわりに">おわりに</h1>
<p>以上が、オレシカナイトVol16における配信構成とOBSでの加工(フィルタ)の説明になります。もし、オンラインでの勉強会などを考えている方々に少しでも有益な情報を提供できていれば嬉しいです。OBSは使ってみるとそこまで難しくないと思います。</p>
<p>繰り返しになりますが、オレシカナイトVol16のアーカイブは<a href="https://youtube.com/playlist?list=PLBsO-IAhmMUUw5_3PTQ7L0kfcnzhogpR_">こちら</a>にあるので、ぜひご覧ください。</p>
- https://youtangai.github.io/posts/oreshika_16/ - Copyright © 2019–2021, youtangai; all rights reserved.</description>
</item>
<item>
<title>Akka Streamsについて調べてみたよ</title>
<link>https://youtangai.github.io/posts/akka_stream/</link>
<pubDate>Tue, 07 Dec 2021 21:19:00 +0900</pubDate>
<guid>https://youtangai.github.io/posts/akka_stream/</guid>
<description>youtangaiのブログ https://youtangai.github.io/posts/akka_stream/ -<h1 id="はじめに">はじめに</h1>
<p>皆さんこんにちは、最近パーソナルトレーニングを始めたyoutangaiです。
ダイエットと運動不足解消を目的に始めたのですが、適切なフォームでトレーニングできてとても満足度が高いです。</p>
<p>さて、今回の記事は、メディア事業部の広告横軸組織PTA(<a href="https://twitter.com/PTA_CyberAgent">twitter</a>)の<a href="https://adventar.org/calendars/6450">アドベントカレンダー</a>8日目の記事となります。よろしくお願い致します。</p>
<p>先に述べますと今回の内容はAkka Streamsの基礎的な概念を調査した内容になります。そのため、対象の読者は私と同じで<code>Akka Streamsなんもわからん</code>という方々です。</p>
<h1 id="動機">動機</h1>
<p>Amebaの広告システムは稼働してから7,8年くらい(正確じゃないかもです)経過しており、古くから稼働しているシステムが結構あります。
その中でも、RDBに保存されているレコードをインメモリデータストアに保存するシステムが、ブラックボックスになってしまっています。
我々の広告配信システムにおいてかなり重要なシステムで、ここで障害が発生すると大損害が発生する可能性があります。
このままではまずいということで、このシステムについて調査することになりました。
しかし、このシステムはScalaのAkka Streamsで実装されており、ソースコードを読んでいてもすんなり理解できる内容ではありませんでした。
そこで、基礎的な部分からしっかり理解しようと思ったのが動機です。</p>
<h1 id="akka-streamsとは">Akka Streamsとは</h1>
<p>ここからが、本題です。<br>
Akka Streamsとは、<a href="https://www.reactive-streams.org/">Reactive Streams</a>のAkka実装です。
そのため、Akka Streamsを理解するためにはReactive Streamsを理解する必要があります。</p>
<h2 id="reactive-streams">Reactive Streams</h2>
<p>Reactive Streamsのドキュメントではこのように記述されています。</p>
<pre><code>Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure
</code></pre><p>直訳すると、Reactive Streamsとは<code>ノンブロッキング</code>な<code>バックプレッシャー</code>を備えた<code>非同期ストリーム処理の標準</code>です。
ノンブロッキングや非同期ストリーム処理はなんとなく想像がつくのですが、バックプレッシャーという単語は初耳でした。</p>
<h2 id="バックプレッシャー">バックプレッシャー</h2>
<p>Reactive Streamsでは、データを流す<code>パブリッシャー</code>と、流れてきたデータを受け取る<code>サブスクライバー</code>が登場します。</p>
<p>バックプレッシャーがない場合、パブリッシャーが流すデータの量がサブスクライバーの処理能力を上回ると、サブスクライバーの処理が間に合わず、データが詰まってしまいます。</p>
<p>このような問題を回避するためにバックプレッシャーがあります。サブスクライバーは、自身が処理できるデータ量を定義し、自身が処理できる分だけパブリッシャーからデータを受け取ります。パブリッシャー側で流量制限を行う必要がないため、効率よくデータを処理することが可能になります。</p>
<h1 id="抽象概念について">抽象概念について</h1>
<p>さて、これまでReactive Streamsについて述べてきましたが、ここからはAkka Streamsにおける概念について述べます。
Akka Streamsには<code>Source</code>、<code>Sink</code>、<code>Flow</code>、<code>Graph</code>という4つの重要な抽象化された概念があります。先に簡単に述べてしまうと、Sourceでデータを作成し、Flowで流れてきたデータを加工し、Sinkで最終的に加工されたデータを受け取るという流れになっています。これらの流れ全体をGraphと呼びます。</p>
<h2 id="source">Source</h2>
<p>データを生成する場所、つまりパブリッシャーです。ここで、ファイルの中身を読み出したり、HTTPリクエストボディの中身を読み出したり、データストアからデータを読み出したりする。</p>
<h2 id="sink">Sink</h2>
<p>最終的にデータを受け取る場所、つまりサブスクライバーです。ここで、受け取ったデータをファイルに書き出したり、データストアに書き込んだりするはず。実際にファイル書き出ししている例は見つけたが、データストアに書き込んだりする例を見つけられなかったので想像の話をしています。例があったら教えて下さい。</p>
<h2 id="flow">Flow</h2>
<p>データを処理する場所です。Flowだけは特殊で、サブスクライバーでありパブリッシャーです。Sourceからデータを受け取ったり、FlowからFlowへデータが流れたり、FlowからSinkにデータを流したりします。
ここでは、流れてきたデータのデコード処理だったり、想定しないデータのフィルタリングなどを行います。</p>
<h2 id="graph">Graph</h2>
<p>Sourceに始まり、0以上のFlowを経由して、Sinkに終わる一連の流れがGraphです。
このGraphを定義し実行することで、処理されたデータを得ることができます。</p>
<h1 id="おわりに">おわりに</h1>
<p>今回調べた結果、ソースコードを読んでいてわからないと思っていた部分が理解できたので、今後のシステム調査はスムーズに進んでくれるといいなと思っています。
引き続きシステムの調査は行うので、改めて調査が必要な内容が出てきたら再度まとめたいと考えています。</p>
<p>最後まで読んでいただきありがとうございました。</p>
<h1 id="参考文献">参考文献</h1>
<ul>
<li>&ldquo;Reactive Streams&rdquo;. <a href="https://www.reactive-streams.org/">https://www.reactive-streams.org/</a></li>
<li>Xiao Yang. &ldquo;Akka Streamsについての基礎概念&rdquo;. Qiita. 2018/02/01. <a href="https://qiita.com/xoyo24/items/299ee3e624f4afe2d27a,">https://qiita.com/xoyo24/items/299ee3e624f4afe2d27a,</a> (Accessed: 2021/12/07)</li>
<li>前出祐吾. &ldquo;Akka Streamsで実装するリアクティブストリーム&rdquo;._ Think IT. 2018/03/07. <a href="https://thinkit.co.jp/article/13485,">https://thinkit.co.jp/article/13485,</a> (Accessed: 2021/12/07)</li>
</ul>
- https://youtangai.github.io/posts/akka_stream/ - Copyright © 2019–2021, youtangai; all rights reserved.</description>
</item>
<item>
<title>EKSを1.16にバージョンアップするの大変だった</title>
<link>https://youtangai.github.io/posts/eks_1_16/</link>
<pubDate>Tue, 11 May 2021 22:24:44 +0900</pubDate>
<guid>https://youtangai.github.io/posts/eks_1_16/</guid>
<description>youtangaiのブログ https://youtangai.github.io/posts/eks_1_16/ -<h1 id="はじめに">はじめに</h1>
<ul>
<li>この記事は、私が仕事でEKS(Elastic Kubernetes Service)のバージョンアップを行った際に、とても苦労したので備忘録も兼ねてやったこと・ハマったことをまとめた記事になります</li>
<li>私達のチームで運用しているEKSのバージョンが1.15だったのですが、<a href="https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/kubernetes-versions.html#kubernetes-release-calendar">EKSのリリースカレンダー</a>をみると5月3日でサポートが終了してしまうという状況でした
<ul>
<li>これに気づいたのが4月20日頃で、猶予が2週間しかないので大慌てで更新作業を行いました</li>
</ul>
</li>
</ul>
<h1 id="やるべきこと">やるべきこと</h1>
<h2 id="apiバージョンの変更">APIバージョンの変更</h2>
<ul>
<li><a href="https://github.com/kubernetes/kubernetes/blob/release-1.16/CHANGELOG/CHANGELOG-1.16.md#deprecations-and-removals">1.16の変更点</a>として影響が大きかったのは一部のAPIバージョンが非対応になったことです</li>
<li>例えば、DaemonSetsとDeploymentsとReplicaSetsにおいて、<code>extensions/v1beta1</code>ではなく<code>apps/v1</code>を利用することが推奨になりました</li>
</ul>
<h2 id="変更対象のアプリケーション">変更対象のアプリケーション</h2>
<ul>
<li>私達のクラスタ上には、実際に非推奨のAPIバージョンで稼働しているDaemonSets・Deploymentsが存在していたので、それらのAPIバージョンを更新する必要がありました</li>
<li>対象となるアプリケーションは下記です(一部抜粋)
<ul>
<li>datadog</li>
<li>cluster-autoscaler</li>
<li>kiam</li>
<li>external-dns</li>
</ul>
</li>
</ul>
<h1 id="作業内容">作業内容</h1>
<p>作業内容は大きく以下の2つです。それぞれについて詳しく記述します。</p>
<ul>
<li>アプリケーションのAPIバージョン変更</li>
<li>ノードのバージョン変更</li>
</ul>
<h2 id="アプリケーションのapiバージョン変更">アプリケーションのAPIバージョン変更</h2>
<ul>
<li>基本的にアプリケーションはhelmfileで管理していたので、helmfileの変更作業の内容を記述します</li>
<li>ちなみにhelmのバージョンは2系です</li>
</ul>
<h3 id="datadog">datadog</h3>
<ul>
<li>大まか作業内容
<ul>
<li>datadogはhelmの<code>stable/datadog</code>というチャートで管理しています</li>
<li>もともとデプロイされていたバージョンは<code>1.30.8</code>でしたが、これを<code>1.35.1</code>に上げました</li>
</ul>
</li>
<li>ハマったポイント
<ul>
<li>Podのイメージタグが変更されない
<ul>
<li>症状:チャートのバージョンを変更したにも関わらず、起動しているPodのイメージのタグが変更されませんでした</li>
<li>原因:jmx用のイメージを利用するためvaluesで直接タグが指定されていることに気づかなかったことです(valuesの中身をしっかりみるべきでした)</li>
<li>対応:valuesでイメージのタグを<code>6.13.0-jmx</code>に変更</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="cluster-autoscaler">cluster-autoscaler</h3>
<ul>
<li>大まか作業内容
<ul>
<li>cluster-autoscalerはhelmの<code>stable/cluster-autoscaler</code>というチャートで管理しています</li>
<li>もともとデプロイされていたバージョンは<code>0.12.4</code>でしたが、これを<code>7.0.0</code>に上げました</li>
</ul>
</li>
<li>ハマったポイント
<ol>
<li>autoDiscovery機能が働かない
<ul>
<li>症状:cluster-autoscalerが起動するも、AutoDiscovery機能によってAutoScalingGroupを発見したというログが流れない</li>
<li>原因:chartのバージョンが大きく上がったことでvaluesに新しく<code>tags</code>という項目が追加されており、そこのデフォルトの値が期待するものと異なっていた</li>
<li>対応:下記内容を追加した</li>
</ul>
</li>
</ol>
</li>
</ul>
<pre><code>autoDiscovery:
clusterName: {クラスタの名前}
tags:
- k8s.io/cluster-autoscaler/enabled
- kubernetes.io/cluster/{クラスタの名前}
</code></pre><pre><code>1. スケールアウトしない
- 症状:PendingになっているPodがあるにも関わらず新しいNodeが起動しない
- 原因:valuesで、cluster-autoscalerイメージのタグに`1.16.0`を指定していたのですが`1.16.0`に[バグ](https://github.com/kubernetes/autoscaler/issues/2345)があった
- 対応:イメージのタグを`1.16.1`に変更した
</code></pre>
<h1 id="おわりに">おわりに</h1>
<p>力尽きてしまったので今日はここまで。
kiam、external-dns、ノードのバージョン変更についてはまた別の機会に&hellip;</p>
- https://youtangai.github.io/posts/eks_1_16/ - Copyright © 2019–2021, youtangai; all rights reserved.</description>
</item>
<item>
<title>ElasticBeanstalkの仕組みを調べた</title>
<link>https://youtangai.github.io/posts/elastic_beanstalk/</link>
<pubDate>Mon, 26 Apr 2021 00:11:12 +0900</pubDate>
<guid>https://youtangai.github.io/posts/elastic_beanstalk/</guid>
<description>youtangaiのブログ https://youtangai.github.io/posts/elastic_beanstalk/ -<h1 id="はじめに">はじめに</h1>
<ul>
<li>この記事は、私が仕事で利用しているElastic BeanstalkがAWS上のどのような技術で構成されているのか知りたくて調べた結果をまとめた記事になります
<ul>
<li>入社してから1年近く利用しているのですが、特に深堀りすることもなく利用していたので、ちゃんと調べようと思った次第です</li>
</ul>
</li>
<li>あまり突っ込んだところまでは調べてません</li>
<li>AWSのどのリソースを利用して実現しているのかを調べています</li>
</ul>
<h1 id="elastic-beanstalkebとは">Elastic Beanstalk(EB)とは</h1>
<ul>
<li><a href="https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/Welcome.html">こちら</a>がEBの公式ドキュメントです。日本語版も結構しっかりしているので、こちらを読むのが良いと思います。</li>
<li>私の認識でめっちゃ簡単に言うと、アプリケーションのプロビジョニング、ロードバランシング、スケーリング、モニタリングを自動的に行なってくれる環境を構築するサービスです</li>
</ul>
<h1 id="どうやって実現しているのか">どうやって実現しているのか</h1>
<ul>
<li>いよいよ本題なのですが、こちらも<a href="https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-webserver.html">公式のドキュメント</a>を読むのが最も誤解なくて良いと思います。</li>
<li>ただ、この調子で公式ドキュメントのリンクを貼り付けていくだけでは私の頭に定着しないと思うので、自分の言葉で説明していきます
<ul>
<li>意図的に英語の公式ドキュメントを読むことで噛み砕くプロセスを追加しています(そんなことはどうでもいい)</li>
</ul>
</li>
</ul>
<h2 id="構成要素">構成要素</h2>
<ul>
<li>EB環境を構築すると、下記リソースが作られます
<ul>
<li>Elastic Load Balancer</li>
<li>Route53のCNAMEレコード</li>
<li>Auto Scaling Group</li>
<li>EC2 Instance</li>
<li>Security Group</li>
</ul>
</li>
<li>それぞれについて詳細を深掘っていきます</li>
</ul>
<h3 id="elastic-load-balancer--route53">Elastic Load Balancer &amp; Route53</h3>
<ul>
<li>ロードバランサーがEB環境へのアクセスの入り口になります</li>
<li>EB環境は、環境ごとにURLを持っています
<ul>
<li>例:{アプリケーション名}.{リージョン}.elasticbeanstalk.com</li>
<li>このURLはロードバランサーへのエイリアスになっています
<ul>
<li>Route53にCNMAEレコードとして登録されています</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="auto-sacling-group">Auto Sacling Group</h3>
<ul>
<li>上記ロードバランサの裏側にAuto Scaling Group(ASG)がいます</li>
<li>このASGには1つ以上のEC2インスタンスが存在します
<ul>
<li>EB環境への負荷が高くなったら、ASGにインスタンスが追加される</li>
<li>逆に負荷が低くなれば、ASGからインスタンスが除かれる(ただし、常に少なくとも1つは存在する)</li>
</ul>
</li>
</ul>
<h3 id="ec2-instance">EC2 Instance</h3>
<ul>
<li>EC2インスタンス上にはHost Manager(HM)というコンポーネントが起動していて、このコンポーネントが下記のタスクを行っている
<ul>
<li>アプリケーションのデプロイ</li>
<li>コンソールやAPI、コマンドラインでのイベントやメトリクスをアグリゲートする</li>
<li>インスタンスレベルのイベントを生成する</li>
<li>アプリケーションのログファイル監視</li>
<li>アプリケーションサーバの監視</li>
<li>Patching instance components(これよくわかりませんでした)</li>
<li>アプリケーションログのローテーションをして、S3に保存する</li>
</ul>
</li>
<li>デフォルトでポート80からのアクセスを許可するSecurity Groupが作成されていて、EBによって作成されたEC2はこのセキュリティグループに所属している</li>
</ul>
<h2 id="まとめると">まとめると</h2>
<ul>
<li>EB環境へのリクエストはロードバランサでうける</li>
<li>ロードバランサの裏にはASGがある</li>
<li>ASGには常に1つ以上のEC2インスタンスが存在する</li>
<li>EC2インスタンス上ではアプリケーションだけでなくHMが稼働しており、HMが色々やってる</li>
</ul>
<h1 id="終わりに">終わりに</h1>
<ul>
<li>1年たってようやく調べたのですが、もっと早めに調べればよかったなと思ってます</li>
<li>今回はとっても簡単な調査程度で終わりますが、実際の環境で実験とかハマったこととか書いて行けるといいなと思っています(かける範囲で)</li>
<li>更新頑張るぞい</li>
</ul>
- https://youtangai.github.io/posts/elastic_beanstalk/ - Copyright © 2019–2021, youtangai; all rights reserved.</description>
</item>
<item>
<title>おすすめ百合作品紹介</title>
<link>https://youtangai.github.io/posts/yuri_introduction/</link>
<pubDate>Thu, 12 Dec 2019 18:27:00 +0900</pubDate>
<guid>https://youtangai.github.io/posts/yuri_introduction/</guid>
<description>youtangaiのブログ https://youtangai.github.io/posts/yuri_introduction/ -<h3 id="はじめに">はじめに</h3>
<p>この投稿は<a href="https://adventar.org/calendars/4179">FUN Advent Calendar 2019 part2</a>の2日目の投稿です</p>
<p>しかし、私は2日を過ぎてから「空いてるのでやりませんか?」と誘ってもらってから書いたので投稿は12月18日となっています</p>
<p><strong>許してください</strong></p>
<p>私については<a href="https://youtangai.github.io/about/">こちら</a>をご覧いただけると幸いです</p>
<h3 id="百合作品紹介">百合作品紹介</h3>
<p>初めての投稿では、私の百合人生において大きな影響を与えてくれた4個の百合作品を紹介します。百合男子としてまだまだにわかの領域を出ませんが、「私もその作品好き!」とか「その作品知らないから読んでみたいな」と思ってもらえるように紹介できたら良いなと思っています。</p>
<p>唐突ですが、百合漫画界隈では有名な<a href="http://yurinavi.com/">百合ナビ</a>というサイトがあります。<a href="https://twitter.com/yuri_navi">ふりっぺさん</a>という方が運営されているのですが、ここで<strong>百合漫画総選挙</strong>という企画が2017、2018、2019年と3回行われています。正直、百合作品を知るにはこちらを見たほうが情報の品質が高いので、ぜひこちらも見てみてください。</p>
<p>以下に、過去の百合漫画総選挙の結果ページのリンクを張っておきます。</p>
<ol>
<li><a href="http://yurinavi.com/2017/09/04/yurimangasousenkyo-matome/">第1回百合漫画総選挙</a></li>
<li><a href="http://yurinavi.com/2018/08/09/dainikai_yurimangasosenkyo_10-1/">第2回百合漫画総選挙</a></li>
<li><a href="http://yurinavi.com/2019/08/14/daisankai-yurimanga-sousenkyo-01_10/">第3回百合漫画総選挙</a></li>
</ol>
<h3 id="4個の百合作品">4個の百合作品</h3>
<p>早速ですが、まずは全作品のタイトルを列挙します(作品に出会った順)。</p>
<ol>
<li>ゆるゆり</li>
<li>GIRL FRIENDS</li>
<li>加瀬さんシリーズ</li>
<li>オトメの帝国</li>
</ol>
<p>聞き覚えがあるものはありますか?
ある人はぜひ私と語り合いましょう。<a href="https://twitter.com/youtangai">twitter</a>でお待ちしております。</p>
<p>聞き覚えが無い作品がありますか?Kindleアプリをご利用でしたら貸し出すのでぜひ<a href="https://twitter.com/youtangai">twitter</a>にて連絡してください。読んだあとに語りあいましょう。</p>
<p>1つずつ詳細に紹介するにはあまりにも量が多いので、私が感じている<strong>作品の特徴</strong>を紹介していきます!</p>
<h4 id="1-ゆるゆり">1. ゆるゆり</h4>
<p>ゆるゆりはコミック百合姫で連載されているなもり先生の作品です。</p>
<p>2019年に10周年を迎えた作品で、界隈ではかなり有名な作品となっています。タイトルだけでも知っている方は多いのではないでしょうか?</p>
<p>ゆるゆりは3期までアニメ化されるほどの人気作品で、かなりの人を百合に目覚めさせ、百合の普及に大きく貢献された作品だと思っています。</p>
<p>私もこのゆるゆりがきっかけで百合に目覚めました。</p>
<h5 id="ここみてポイント">ここみてポイント</h5>
<p>ゆるゆりという作品を紹介する上で絶対に外せないのは</p>
<p><strong>登場するキャラクター同士で様々なカップリングが楽しめる</strong></p>
<p>という点です。</p>
<p>なもり先生のすごい所は、今まで接点のなかった登場人物たちのつながりをとても自然に描かれるところです。例えば、歳が離れていたり、性格的に相容れなさそうなタイプでも「あー、そうやって繋がるんですね」と思わず唸ってしまうような接点が描かれます。</p>
<p>ただ、”ゆるゆり”というタイトルの通りかなりゆるーい展開です。濃厚な絡みや、恋愛で重要な葛藤のシーンなどは描かれません。そういうのは二次創作で補給しましょう!!</p>
<h5 id="こんな人におすすめ">こんな人におすすめ</h5>
<p>ということで、以下のような方におすすめです。</p>
<ul>
<li>さまざまなカップリングを楽しみたい!</li>
<li>妄想の種をひろって自分で展開を広げたい!</li>
<li>ゆるーい百合が見たい!</li>
</ul>
<h4 id="2-girl-friends">2. GIRL FRIENDS</h4>
<p>GIRL FRIENDSはアクションコミックスにて2006年から2010年まで連載されていた森永みるく先生の作品です。</p>
<p>百合初心者におすすめの作品として有名なJK百合です!</p>
<h5 id="ここみてポイント-1">ここみてポイント</h5>
<p>GIRL FRIENDSは<strong>友情と愛情の違いについて考えさせられる</strong>作品です。</p>
<p>地味めな女子高生だった真理子が、ギャルっぽい様子の亜希子と知り合い、亜希子に刺激をもらいながら女子高生らしい遊びに目覚めていきます。
そのような過程から、自分に新しい世界や楽しい毎日を教えてくれた亜希子に強い親しみをいだき、その環状は徐々に友情を超えて行きます。</p>
<p>眠っている亜希子に対してなぜか真理子はキスしたいと思ったり、彼氏がいる亜希子に嫉妬の感情を覚えたり、という経験から徐々に自分の気持ちを自覚していきます。
亜希子も真理子に対して少しずつ友情を超えた感情をいだき始めて、お互いに<strong>好き</strong>を意識しはじめます。</p>
<p>相手に対する思いが強い愛情であるということを自覚していく過程で、二人は<strong>友情</strong>と<strong>愛情</strong>の違いについて考えます。
この2人の葛藤を見て私も「友情と愛情の違いはなんだろう?」と深く考えた記憶があります。</p>
<p>最終的には2人は結ばれて、最後は甘い甘い2人の生活を見届けられるので、安心して読めます。</p>
<h5 id="こんな人におすすめ-1">こんな人におすすめ</h5>
<p>ということで、以下のような方におすすめです</p>
<ul>
<li>王道のJK百合が見たい!</li>
<li>すでに完結した作品がみたい!</li>
<li>甘々な展開が見たい!</li>
</ul>
<h4 id="3-加瀬さんシリーズ">3. 加瀬さんシリーズ</h4>
<p>加瀬さんシリーズは、ウィングスにて連載中の高嶋ひろみ先生の作品です。
俗称は加瀬さんシリーズなのですが、単行本はすべて <strong>&ldquo;○○と加瀬さん&rdquo;</strong> というタイトルで統一されているため、加瀬さんシリーズと呼ばれています。</p>
<h5 id="ここみてポイント-2">ここみてポイント</h5>
<p>加瀬さんシリーズは<strong>初々しい女子高生の恋愛を応援する</strong>作品です。
とっっっっっっっにかく初々しいです!!</p>
<p>陸上部員の加瀬さんと緑化委員の山田さんの物語なのですが、加瀬さんが山田さんを好きになるまでの過程がとても心温まります。
とっても簡単に言うと、緑化委員として日々健気に頑張る山田さんのことが目についてから気になり始めて、ついつい目で追っちゃっていつの間にか好きになっているという感じです。
<strong>可愛くないですか?私は可愛いと思います!!</strong></p>
<p>無事お付き合いをしたあとも、色々と壁が現れますが2人で乗り越えてゆく姿は、心のそこから応援してあげたくなります。
加瀬さんは卒業した先輩(女性)と付き合っていたのではという噂を聞いて、先輩に嫉妬したり、先輩と比べて自分なんか加瀬さんに釣り合わないと自信を失ってしまう場面もあります。
しかし、<strong>加瀬さんがイケメン彼女力を発揮して山田さんの自信を取り戻させるのですが、本当にかっこいいです!!</strong></p>
<p>その後、大学受験でも山田さんが加瀬さんの影響を受けて、加瀬さんと同じく東京の大学に行きたいとがんばります。
親からの反対を受けるのですが、自分の努力や結果でなんとか説得します。その原動力は加瀬さんの近くに居たいという思いなので本当に健気です。</p>
<p>無事大学受験を終え、東京でひとり暮らしをはじめてからやっと2人は体を重ねるのですが、これまで2人で一緒に壁を乗り越えてきたことを思うと<strong>本当に泣けます。</strong></p>
<h5 id="こんな人におすすめ-2">こんな人におすすめ</h5>
<p>ということで、以下のような方におすすめです</p>
<ul>
<li>初々しい百合をみてキュンキュンしたい!</li>
<li>長い長い時間をかけて愛を育む様子が見たい!</li>
<li>陸上部イケメン女子が見たい!</li>
</ul>
<h4 id="4-オトメの帝国">4. オトメの帝国</h4>
<p>オトメの帝国は、少年ジャンプ+にて連載されている岸虎次郎先生の作品です。
とある女子校の複数のカップルのストーリーを描くオムニバス形式の作品となっています。</p>
<p>ゆるゆりとは異なり、**固定のカップリングが明確に存在します。**それぞれのカップリングがそれぞれの色を出していて、見ていて飽きないです。
とっても重い展開があってそれを乗り越えるカップルがいれば、陽気な留学生と陰気な漫画部の生徒のカップルもあったりします。
「あのカップルは今後どのように発展していくんだろう?」とか、「このカップルは見ていて安心するなぁ」とか、「このカップルは毎話イチャイチャしてるなぁ」とか本当に色々あります!</p>
<p>特に<strong>あーちえ</strong>というカップリングは、あーちえの話だけまとめられた「あーちえスペシャル」という単行本も出ているので、これだけでも読んでみる価値があると思います。</p>
<p>作画に関しても特筆するべき項目があります。それは、<strong>登場人物たちの表情です</strong>
陳腐な言葉で申し訳ないのですが、<strong>まるで生きているかのような</strong>表情であり、<strong>このシーンはこの表情しかないっていう最高の表情</strong>を描かれています。
岸虎次郎先生のこだわりを強く感じる部分なので、もし読むことがあればぜひ登場人物たちの表情に注目して読んでみてください!大事なことなのでもう一度いいますが、本当に<strong>この表情以外ありえない</strong>という表情をしています。</p>
<h5 id="こんな人におすすめ-3">こんな人におすすめ</h5>
<p>ということで、以下のような人におすすめです</p>
<ul>
<li>複数の濃厚な百合を一気に楽しみたい!</li>
<li>リアルな作画でキャラクターが生き生きしている姿がみたい!</li>
<li>甘々な百合が見たい!</li>
</ul>
<h4 id="おわりに">おわりに</h4>
<p>いかがでしたでしょうか?</p>
<p>他にももっともっと紹介したい作品があったのですが、時間や気力の関係で紹介しきれませんでした。それでもぜひ知って欲しいので、タイトルとひとくちめもだけ記載しておきます。</p>
<ol>
<li>魔法少女まどかマギカ</li>
<li>ささめきこと</li>
<li>ふたりモノローグ</li>
<li>私がモテないのはどう考えてもお前らが悪い</li>
<li>小林さんちのメイドラゴン</li>
<li>2DK、Gペン、目覚まし時計</li>
<li>安達としまむら</li>
<li>オクターヴ</li>
<li>極上ドロップス</li>
</ol>
<p>作品を紹介する上で、本当はもっともっと適切な表現や言葉あると思うのですが、どうしても語彙力がたりず悔しい気持ちでいっぱいです。</p>
<p>すこしでも皆さんの百合人生が良いものになるよう貢献できていたら幸いです。</p>
- https://youtangai.github.io/posts/yuri_introduction/ - Copyright © 2019–2021, youtangai; all rights reserved.</description>
</item>
<item>
<title>はじめまして</title>
<link>https://youtangai.github.io/about/</link>
<pubDate>Tue, 10 Dec 2019 00:00:00 +0000</pubDate>
<guid>https://youtangai.github.io/about/</guid>
<description>youtangaiのブログ https://youtangai.github.io/about/ -<h1 id="プロフィール">プロフィール</h1>
<p>2019年12月12日現在の内容です</p>
<ul>
<li>公立はこだて未来大学 修士2年</li>
<li>24歳</li>
<li>男性</li>
<li>サーバサイドエンジニア</li>
</ul>
<h1 id="趣味紹介">趣味紹介</h1>
<p>こんにちは、youtangaiです</p>
<p>15歳から百合に目覚めて以来ずっと百合が好きで、主にコミック百合姫を追っかけています。大沢やよい先生の作品が大好きです。</p>
<p>ゲームも好きでかなりやっています。最近ハマっているゲームはLoL(League of Legends)で、ハマりすぎて時間が無限にとけて困っています。IDはyoutangaiでやっています。</p>
<p>Vtuberも好きなのですが、特にホロライブのライバーが好きで応援していて、大神ミオちゃんが一番の推しです。</p>
<h1 id="ブログ開設の動機">ブログ開設の動機</h1>
<p>2019年にアドベントカレンダーを書く機会が増えたので、ブログを開設しました。</p>
<p>普段からGo言語を利用しており、<a href="https://gohugo.io/">HUGO</a>が気になっていたのでサイトのジェネレータとしてHUGOを採用しました。</p>
<h1 id="投稿内容">投稿内容</h1>
<p>私のブログらしく、以下のカテゴリでブログを投稿しようと考えています。</p>
<ul>
<li>百合</li>
<li>Vtuber</li>
<li>LoL</li>
<li>Go言語</li>
</ul>
<p>上記以外にも要望がある内容や、私の価値観や考え方なども投稿できたら良いなと思っています。</p>
<p>よろしくお願いします。</p>
- https://youtangai.github.io/about/ - Copyright © 2019–2021, youtangai; all rights reserved.</description>
</item>
<item>
<title>私が考えるコミュニケーションの技術</title>
<link>https://youtangai.github.io/posts/communication/</link>
<pubDate>Thu, 13 Dec 2018 00:27:32 +0900</pubDate>
<guid>https://youtangai.github.io/posts/communication/</guid>
<description>youtangaiのブログ https://youtangai.github.io/posts/communication/ -<h1 id="はじめに">はじめに</h1>
<p>はじめまして,よーちゃんです<br>
初ブログなので,何を書こうかとても迷いました.
悩んだ結果,あえて情報技術には全く触れずに<code>コミュニケーション技術</code>について書こうと思いました.</p>
<h1 id="よーちゃんのコミュニケーション4ヶ条">よーちゃんのコミュニケーション4ヶ条</h1>
<p>私は普段から以下の4ヶ条を心がけて人と接しています.</p>
<ol>
<li>相手の価値観を知る</li>
<li>自分の価値観を押し付けない</li>
<li>相手の話は最後まで聞く</li>
<li>自分の意見を主張する</li>
</ol>
<p>すべて当たり前のようなことですが,普段から心がけていないと,意外とできないです.<br>
ひとつずつ説明します.</p>
<h2 id="1相手の価値観を知る">1.相手の価値観を知る</h2>
<p>相手がどのようなことを<code>重要視</code>して物事を考えているのか知るようにしています.ディスカッションをする際は必ず行っています.なぜなら,相手の価値観を知れば,相手の意見も素直に<code>納得</code>できるようになりますし,相手を<code>説得</code>する際にも役立つからです.</p>
<h2 id="2自分の価値観を押し付けない">2.自分の価値観を押し付けない</h2>
<p>価値観を押し付けるという行為は,<code>自分</code>を<code>不愉快</code>にしてしまいます.例えば「情報学生ならgitは使えて当然でしょ」という考え方をもって人と接してしまうと,gitを使えない情報学生と接するときに「なんでこれくらいできないんだろう」とイラついてしまいます.イラつきが態度に出ると,相手にも不愉快な思いをさせてしまいます.こうならないためにも,自分の価値観を押し付けることは避けています.</p>
<h2 id="3相手の話は最後まで聞く">3.相手の話は最後まで聞く</h2>
<p>相手の主張の途中で否定的な意見を持ったとしても,必ず最後まで話を聞くようにしています.なぜなら,相手が主張の途中である以上,<code>自分の予測で相手の主張を決めつけている</code>からです.最後まで主張を聞いた上で,「つまり,あなたが言っていることはこういうことですか?」と確認しています.そうすることで,スムーズなディスカッションが可能になります.</p>
<h2 id="4自分の意見を主張する">4.自分の意見を主張する</h2>
<p>人から<code>情報を引き出すという行為</code>はかなり<code>体力を使う行為</code>です.自分が意見を主張しないということは,相手に情報を引き出す役割を担わせるということです.相手に余計な体力を使わせないためにも,普段から意識して自分の意見は主張しています.</p>
<h1 id="おわりに">おわりに</h1>
<p>最後まで駄文を読んでくださってありがとうございました.<br>
これを機会に,普段のコミュニケーションを振り返ってみていただければ,書いた意味があったかなと思います.<br>
当たり前のことですが改めて意識していただけたらとても嬉しいです.</p>
<h1 id="感想">感想</h1>
<p>自分が普段から心がけていることを文章にするのはとても恥ずかしいですね&hellip;笑<br>
汚い文章ですが初投稿ということで勘弁してください汗</p>
- https://youtangai.github.io/posts/communication/ - Copyright © 2019–2021, youtangai; all rights reserved.</description>
</item>
</channel>
</rss>