-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
4273 lines (3277 loc) · 146 KB
/
atom.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
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[kurobaraのブログ]]></title>
<link href="http://moonstruckdrops.github.com/atom.xml" rel="self"/>
<link href="http://moonstruckdrops.github.com/"/>
<updated>2018-05-26T01:10:15+09:00</updated>
<id>http://moonstruckdrops.github.com/</id>
<author>
<name><![CDATA[kurobara]]></name>
</author>
<generator uri="http://octopress.org/">Octopress</generator>
<entry>
<title type="html"><![CDATA[shibuya.apk主催のGoogleI/O 2018報告会にいってきた]]></title>
<link href="http://moonstruckdrops.github.com/blog/2018/05/26/shibuya-aab/"/>
<updated>2018-05-26T01:01:00+09:00</updated>
<id>http://moonstruckdrops.github.com/blog/2018/05/26/shibuya-aab</id>
<content type="html"><![CDATA[<h3>まぁなんとかやってます</h3>
<hr />
<p>久々にブログ書きます。<br/>
というか、勉強会も行ってきたの久しぶりかもしれない。。。<br/>
という訳なので、勉強会で取ったメモメモ
(資料はどこかに上がってる)</p>
<h3>Slices氏</h3>
<hr />
<p><a href="https://speakerdeck.com/wasabeef/how-to-develop-slices-apps">資料</a></p>
<ul>
<li>(端末の検索)検索結果の中に自分のアプリのアクションを出せる</li>
<li><p>push通知とかホームスクリーンで出せるようになる</p></li>
<li><p>確認用のアプリがあるので、エミュレータで専用のアプリを必要</p></li>
<li><p>4.4以上</p></li>
<li><p>SliceManager #<= 作れるけどあんまりないと思う</p></li>
<li><p>SliceProvider #<= 実装は大体こっち</p></li>
<li><p>manifestにproviderタグ</p></li>
<li>contentproviderを継承したもの</li>
<li>builderpatternで色々設定</li>
<li>sliceaction(実際はpendingintentみたいなもの)</li>
<li><p>sliceviewで画面</p></li>
<li><p>adb shellで動作検証する</p></li>
<li><p>初回だけパーミッション確認ある</p></li>
<li><p>manifestに書くのはcontentprovider</p></li>
<li><p>authoritiesは後々に重要になる</p></li>
<li><p>contentprovider(sliceprovider)</p></li>
<li>onBindingSliceが重要</li>
<li>中で実装したパスによって動きが変わる</li>
<li>authoritiesはここで使う</li>
<li>builderはここで実装</li>
<li>slice-content://<authorities>/<provider定義のpath>でadb起動</li>
<li><p>sliceactionで起動したいintentとか</p></li>
<li><p>動的に更新もできる</p></li>
<li>contentresolver.notifyChangeにsliceのuriを設定すればOK</li>
</ul>
<h3>Android Test は “Write once, run everywhere.” の夢を見るか</h3>
<hr />
<p><a href="https://docs.google.com/presentation/d/1M_WMloMI18MNUYBSx9xHH3HiGktZIcTk4gG1PPfD_mg/edit?usp=sharing">資料</a></p>
<ul>
<li>robolectricとinstrumentedテストのAPIが似てたので統一された</li>
<li>instrumentedテストのAPIがローカルで動く(robolectricが必要)</li>
<li>テストの実行方法も統一したい = nitrogen pj</li>
<li>flavorとかリセットとかその他辛いので、実行環境を抽象化とかしたもの</li>
<li>googleのサポートの信頼性は高い(リリースはまだされてない)</li>
</ul>
<h3>Android App Bundle</h3>
<hr />
<ul>
<li>5.0以上でsplit apk</li>
<li>base apk, configuration apk, dynamic featureapk</li>
<li>base apkは基本機能でユーザーが最初にインストールするもの</li>
<li>configuration apkは特定の画面サイズとか言語のネイティブコードとか</li>
<li>gradleでbundleセクションでlanguageとかdensityとか設定する</li>
<li>dynamic feature apkは初回に必要にないものすべて</li>
<li>manifestでmodukeを設定</li>
<li>4.4以下では、dist:fusing=true</li>
<li>dependencyにbaseを設定する</li>
<li>base側はdynamicを読む設定を入れる</li>
<li>base側にはmoduleをインストールする実装が必要><</li>
<li>端末に合わせたアプリにできるようになる</li>
<li>最適化されてるので小型のアプリにできる</li>
<li>後から追加してもいいものが対象</li>
<li>cliではbase:bundleみたいなのを打つといい</li>
<li>play consoleのアップロードはちょっと面倒</li>
<li>100MBとかbata program登録</li>
<li>play側の署名できるようにしておく</li>
<li>bundleツールでローカルテスト</li>
<li>bundletoolsでインストールとか端末設定抽出とかして自動で個別設定いれる</li>
<li>端末設定を変更すると追加の設定がインストールされる</li>
<li>playが古いと4.4以前と変わらない動きになることに注意</li>
<li>dynamic feature modukeは大規模でないと実装コスパが悪そうだけどモジュール化は重要かも</li>
</ul>
<h3>Material Components</h3>
<hr />
<ul>
<li>materail theme editor = skitch plugin</li>
<li>material components = 新しいsupport design library</li>
<li>designライブラリにあったものは全部同梱されている(名前が変わったものがあるCardとか)</li>
<li>chips = gmailとか送信とかにでてくる小さいタグっぽいview</li>
<li>textfieldもアウトラインとか縁が簡単に囲まれたものができる</li>
</ul>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[RuubyKaigi2017に参加してきた]]></title>
<link href="http://moonstruckdrops.github.com/blog/2017/09/21/ruby-kaigi/"/>
<updated>2017-09-21T21:32:00+09:00</updated>
<id>http://moonstruckdrops.github.com/blog/2017/09/21/ruby-kaigi</id>
<content type="html"><![CDATA[<h3>はじめに</h3>
<hr />
<p>Rubykaigi2017に参加してきましたので、メモを共有しておきます</p>
<h3>Keynote</h3>
<hr />
<p><a href="http://rubykaigi.org/2017/presentations/n0kada.html">Nobuさんの発表</a></p>
<ul>
<li>ゆるふわRuby生活
<ul>
<li>デバッグ</li>
<li>新機能</li>
<li>バグ作成</li>
</ul>
</li>
<li>リポジトリ
<ul>
<li>Rubyのgithubはミラーなのであんまり見ない</li>
<li>移行コスト(svn to git)</li>
<li>hashが明確でない(リビジョン番号と比較して)</li>
<li>gitがwindows非サポート</li>
</ul>
</li>
<li>issue
<ul>
<li>redmine</li>
<li>mailinglist</li>
</ul>
</li>
<li>meeting
<ul>
<li>(物理で会う場合)バグチケットの棚卸し</li>
</ul>
</li>
<li>build
<ul>
<li>out-of-place-build
<ul>
<li>configureのオプション</li>
</ul>
</li>
<li>baseruby
<ul>
<li>ソース生成したりなど</li>
</ul>
</li>
<li>miniruby
<ul>
<li>ビルド時の中間生成物</li>
<li>拡張ライブラリ</li>
<li>共有ライブラリの非サポート
<ul>
<li>単独で動かせる</li>
<li>エンコードが固定</li>
<li>共有ライブラリの機能が無理</li>
</ul>
</li>
</ul>
</li>
<li>extconfのビルドが遅い
<ul>
<li>別プロセスでビルドするようにした(2.5以降)
<ul>
<li>依存関係がなければ</li>
</ul>
</li>
</ul>
</li>
<li>ヘッダーや共有ライブラリの位置</li>
<li>trace_var
<ul>
<li>ビルド時に変数の代わり内容をhookする</li>
</ul>
</li>
</ul>
</li>
<li>bug?</li>
</ul>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>p = 2
</span><span class='line'>p (-1.3).abs #=> 1.3
</span></code></pre></td></tr></table></div></figure>
<ul>
<li>カッコの前にspaceを置く</li>
<li>キーワード引数の名前を内部的にはラベルと呼称</li>
<li>parse_ident()
<ul>
<li>小文字で始まってるか識別する</li>
</ul>
</li>
<li>lavr_ident
<ul>
<li>既に定義済みかチェック</li>
</ul>
</li>
<li>lvar_definedを外せば多分意図通りになって直るけど・・・</li>
<li>string.intern(symbol作成)の再定義するとsymbolにならない
<ul>
<li>:”#{aaa}”みたいな書き方で、refineでstring.internを上書きしたのだとsymbolにならない</li>
</ul>
</li>
<li>2.5にnew featureはないのか?
<ul>
<li>rescure inside do-end</li>
<li>hash,transform_keys</li>
</ul>
</li>
<li>議論中
<ul>
<li>メソッドオブジェクトを作るためのメソッドみたいなのは議論中</li>
<li>右代入(rightward assignment)</li>
</ul>
</li>
</ul>
<h3>Fiber in the 10th year</h3>
<hr />
<p><a href="http://rubykaigi.org/2017/presentations/ko1.html">ko1さんの発表</a></p>
<ul>
<li>suspend/continueはprocはできないけどfiberならできる</li>
<li>Fiberの応用
<ul>
<li>使うところ
<ul>
<li>ブロックの仲で繰り返す</li>
<li>ブロックの外で制御</li>
</ul>
</li>
<li>ゲームのキャラクタごとにパラメータ制御</li>
<li>IOscheduler(none-blockingio)
<ul>
<li>timerがない</li>
<li>ioblockingでも切り替え無し</li>
<li>共有データの同期処理を書く必要がおそらく無い</li>
</ul>
</li>
</ul>
</li>
<li>当初、Fiberは任意のFiberに処理を渡すpassというAPIだけを持っていた(coroutineだった)。</li>
<li>coroutineは強すぎて管理が難しい。</li>
<li>contextの切替
<ul>
<li>thread state</li>
<li>vm stack</li>
<li>machine stack</li>
</ul>
</li>
<li>昔はコピー
<ul>
<li>コードを参考にできた</li>
<li>殆どの環境で使える</li>
<li>スタックが深いと領域が必要で時間かかる</li>
</ul>
</li>
<li>その次
<ul>
<li>nativeのスタック領域を使うように</li>
</ul>
</li>
<li>今
<ul>
<li>ポインター切替で実行
<ul>
<li>5%早くなった</li>
<li>30%メモリ消費減った(但し、局所的)</li>
</ul>
</li>
</ul>
</li>
<li>autofiber
<ul>
<li>既存コード変更不要</li>
<li>blockimgioを勝手に切り替える(ioblockのみ)</li>
<li>fiberの指定不要</li>
<li>同期処理を書く必要が出て来る</li>
</ul>
</li>
</ul>
<h3>How Close is Ruby 3x3 For Production Web Apps?</h3>
<hr />
<p><a href="http://rubykaigi.org/2017/presentations/codefolio.html">Noah Gibbsさんの発表</a></p>
<ul>
<li>Real Web Appsはproductionで人々に使われていることで、fasterはベンチマークテスト結果を改善</li>
<li>くりかえしすることを実行</li>
<li>通常アクションを記録</li>
<li>optcarrotでwarmup</li>
<li>discurseで採取(https://github.com/discourse/discourse)</li>
<li>Ruby2.0.0からRuby2.4.1で速度はどうなったか。途中でDiscourse自体がv1.5からv1.8に変わってしまったが、同バージョンの中ではRuby Versionが上がるにつれて着実に改善</li>
<li>DiscourseでのベンチマークではRuby2.0.0 -> Ruby 2.4.1にかけて150%ほど速くなっている</li>
<li>ウォームアップについて。MRIでもwarmupについれてスループットが改善する。どのRubyバージョンでも同程度。5000</li>
<li>warmup iterationで5-7%程度の改善。</li>
<li>firstrequestは2.0.0に比較して30%確実に早くなている</li>
<li>https://github.com/noahgibbs/rails_ruby_bench</li>
<li>https://docs.google.com/presentation/d/1tUQpblTufP0IWiZSfnky56y9WvYeqMQF9ve45yIcpYY/edit</li>
</ul>
<h3>Gemification for Ruby 2.5/3.0</h3>
<hr />
<p><a href="http://rubykaigi.org/2017/presentations/hsbt.html">hsbtさんの発表</a></p>
<ul>
<li>現状と展望について
<ul>
<li>raa</li>
<li>rubyforge</li>
<li>gems.github.com</li>
<li>gemcutter.org</li>
<li>rubygems.org</li>
<li>bundler <= イマココ</li>
</ul>
</li>
<li>標準添付ライブラリ
<ul>
<li>requireしなくても使えるもの</li>
<li>standard libraries
<ul>
<li>svnと一致しているもの</li>
</ul>
</li>
<li>default gems
<ul>
<li>rubyと一致orメンテナがリリース</li>
</ul>
</li>
<li>bundled gems
<ul>
<li>メンテナがリリース</li>
</ul>
</li>
</ul>
</li>
<li>default gems
<ul>
<li>openssl
<ul>
<li>githubで開発</li>
<li>あるタイミングでsvn側に取り込み</li>
<li>rubyのバージョン違っていても、使える</li>
</ul>
</li>
<li>psych
<ul>
<li>jruby/crubyの互換性確保</li>
</ul>
</li>
<li>rdoc</li>
</ul>
</li>
<li>bundledgems
<ul>
<li>testunit/minitest</li>
<li>ビルド時にinstallするもの</li>
<li>rake
<ul>
<li>標準添付する必要があんまりないので</li>
</ul>
</li>
<li>デメリット
<ul>
<li>開発中のrubyでbundledgemsが動くかも保証もできない</li>
</ul>
</li>
</ul>
</li>
<li>gemfication
<ul>
<li>standaradのもをgemで配布していく</li>
<li>標準添付ライブラリをgemとして切り出していく</li>
<li>2.5,2.6で追加したものを2.4でも使える可能性ある</li>
</ul>
</li>
<li>問題
<ul>
<li>標準添付ライブラリ間の依存関係</li>
<li>バックポートによるメンテナの負担がヤバイ</li>
<li>メンテナが古いのでも使えうように頑張る必要でてくる
<ul>
<li>1.8.7のサポート対応</li>
</ul>
</li>
</ul>
</li>
<li>rubygems/rubygems.org
<ul>
<li>サイト</li>
</ul>
</li>
<li>rubygems/rubygems
<ul>
<li>ライブラリ周り(bundlerチーム)</li>
</ul>
</li>
<li>rubyfication
<ul>
<li>rubygems上に名前空間周りでバッティングして調整して上書き</li>
</ul>
</li>
<li>3.0へ向けて
<ul>
<li>bundlerはデフォルトgemになる</li>
<li>標準添付は全てgemにしておきたい</li>
<li>標準ライブラリのバージョン周りでもしかしたらバージョンの不具合起きるかも</li>
<li>Bundler がないと RubyGems 2.7 の動きが怪しい</li>
</ul>
</li>
</ul>
<h3>Development of Data Science Ecosystem for Ruby</h3>
<hr />
<p><a href="http://rubykaigi.org/2017/presentations/mrkn.html">mrknさんの発表</a></p>
<ul>
<li>現在
<ul>
<li>Rubyだけで頑張る方法
<ul>
<li>データ処理部分</li>
</ul>
</li>
<li>併用する方法
<ul>
<li>メイン処理に関わる箇所でmデータの受け渡し処理</li>
<li>2重変更が必要(データ処理とメイン処理)</li>
<li>pythonやrを呼び出すとデータ交換コストが高く、データ形式の変更時などは両方に変更が必要</li>
</ul>
</li>
<li>rubyからpythonを呼び出す方法</li>
<li>rails上でpandasで表示
<ul>
<li>パフォーマンスに問題ありそうだけど、pandas呼べてる</li>
</ul>
</li>
<li>rubyからpythonを呼び出すことに不自然ではない
<ul>
<li>先入観では?</li>
<li>RPy2みたいなものも存在している
<ul>
<li>大体のことがPythonでできるから、Pythonになっている</li>
</ul>
</li>
</ul>
</li>
<li>issue登録が欲しい</li>
</ul>
</li>
<li>将来への展望
<ul>
<li>未来を見据えてPycallでないようにしたい</li>
<li>一つの言語では完結しない
<ul>
<li>pysparとはいえ、spark自信はscala,java</li>
</ul>
</li>
<li>apache arrowを例にとっても、bindingを作っておけば将来apache arrowが流行れば使われるようになる</li>
<li>red data toolsに参加してもらいたい</li>
<li>pycallにissue/prが欲しい</li>
</ul>
</li>
</ul>
<h3>Ruby Committers vs the World</h3>
<hr />
<ul>
<li>型注釈、結局コミッターはどう思ってるのか?
<ul>
<li>全体的に「別にあってもいいんじゃないの」って空気感</li>
</ul>
</li>
<li>右代入?
<ul>
<li>matz右代入ありなんだけど、いい記号がない。。。</li>
</ul>
</li>
</ul>
<h3>keynote</h3>
<hr />
<p>Matzによるkeynote</p>
<ul>
<li>言語愛が最大の要因</li>
<li>プログラミング言語面白い</li>
<li>例外なくプログラミング言語が好き</li>
<li>他の言語を貶めることは無い</li>
<li>simula(一番最初と言われるオブジェクト指向言語)
<ul>
<li>inheritance</li>
<li>差分プログラミング</li>
</ul>
</li>
<li>simulaからではなくlisp, smalltalkから影響を受けているのでsimulaから直接ではない</li>
<li>super classは2つでは?</li>
<li>roleは複数持ってるのでは?</li>
<li>単一継承ではなく多重継承
<ul>
<li>Lisp(flavors)の世界から</li>
<li>自然な拡張だが、複雑化しやすい
<ul>
<li>daiamond継承など</li>
<li>c3 linialization algorizm(線形化アルゴリズムで、継承順序を決定する)</li>
</ul>
</li>
</ul>
</li>
<li>mix-in
<ul>
<li>lisp内ではflavorsと呼ばれる
<ul>
<li>バニラアイスに、チョコチップやミントの味を追加するみたいな意味
<ul>
<li>アイスクリームはインスタンスにできるが、チョコチップはできない</li>
<li>混ぜた味(ミントアイスクリーム)はインスタンスにできる</li>
</ul>
</li>
</ul>
</li>
<li>モジュールはmixinの単位</li>
<li>Rubyではグループ分けの単位として使われてる
<ul>
<li>Net::HTTPのNetなど</li>
</ul>
</li>
<li>singletonとしても使われている
<ul>
<li>FileUtilsなど</li>
</ul>
</li>
<li>メソッドや機能の集まりとして使われている
<ul>
<li>Mathモジュールなど
<ul>
<li>includeすると直接使えるようになる(モジュールファンクション)</li>
<li>メソッドをコピーしてオブジェクトに注入</li>
</ul>
</li>
</ul>
</li>
<li>メソッド結合としての単位
<ul>
<li>alias method chain
<ul>
<li>メソッドの別名をつけて、置き換えることができる</li>
</ul>
</li>
<li>module prepend
<ul>
<li>dynamicに変更することができなくなる</li>
</ul>
</li>
<li>最初は入れる気がなかったが考える事で入れるようになった
<ul>
<li>lispのメソッドコンビネーション</li>
<li>classにおけるaround hook</li>
<li>aspect思考からも影響</li>
</ul>
</li>
</ul>
</li>
<li>refinement
<ul>
<li>open classの機能はあった
<ul>
<li>monkey patching機能(昔はgerilla -> gorilla -> monky)</li>
<li>ActiveSupport</li>
</ul>
</li>
<li>グローバルに影響与える
<ul>
<li>selector namaspaceも候補にあった</li>
<li>usingを都度書く必要があるので、イマイチ使われていない?</li>
</ul>
</li>
<li>スコープを区切ったmonkey patch</li>
<li>レキシカル</li>
<li>使い方
<ul>
<li>C#のエクステンション</li>
<li>既存のメソッドを置き換える
<ul>
<li>ローカル里バインディングがない</li>
<li>想定外に置き換わることもない</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>structural signature
<ul>
<li>type check
<ul>
<li>Javaのインターフェースでは?</li>
</ul>
</li>
<li>まだ導入されていない</li>
</ul>
</li>
</ul>
</li>
<li>performanace
<ul>
<li>Benchmark suite</li>
<li>MJIT</li>
<li>Rubex</li>
</ul>
</li>
<li>concurrency
<ul>
<li>fiber</li>
<li>autofiber</li>
<li>guild</li>
</ul>
</li>
<li>static analytics</li>
</ul>
<h3>An introduction and future of Ruby coverage library</h3>
<hr />
<p><a href="http://rubykaigi.org/2017/presentations/mametter.html">mameさんの発表</a></p>
<ul>
<li>型システムだけではなくカバレッジ方面でも活躍していく</li>
<li>カバレッジ
<ul>
<li>コード</li>
<li>未テストのコード検出</li>
<li>テストスイートの良さ体語</li>
<li>function coverage
<ul>
<li>簡単可視化しやすい</li>
<li>関数の中はみないので指標として弱い</li>
</ul>
</li>
<li>line coverage <= Rubyはこちらのみサポート
<ul>
<li>簡単可視化しやすい</li>
<li>関数の中はみないので指標として弱い</li>
<li>後置ifなど見落としやすい</li>
</ul>
</li>
<li>branch coverage
<ul>
<li>網羅的に検証できている</li>
<li>可視化が難しい(多くのツールでサポートできてない)</li>
<li>更に細かいcondition coverageがある</li>
</ul>
</li>
<li>C0/C1/C2の指す内容については人によって異なる可能性あるので注意</li>
</ul>
</li>
<li>理解してつかっていくには
<ul>
<li>よいテストスイートは?
<ul>
<li>仕様を満たしているかは取れない
<ul>
<li>設計に対する網羅性はない</li>
</ul>
</li>
<li>間違えてたしてもテストコードがありカバレッジがあるとないとでは大違い
<ul>
<li>カバレッジは指標なので、100%を目指してもダメ</li>
</ul>
</li>
</ul>
</li>
<li>未テストを理解</li>
<li>テストデザインを考える
<ul>
<li>特に観点が重要</li>
</ul>
</li>
<li>どれくらい網羅性があれば?
<ul>
<li>重要なものに関しては100%を目指す(ぐらいの温度感)</li>
<li>費用対効果も考慮に入れて考える
<ul>
<li>ioとかテストしにくいものは、割に合うか考えてやる</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>ライブラリの現状と展望
<ul>
<li>simplecov
<ul>
<li>coverage.soのラッパー</li>
<li>htmlで結果出力</li>
<li>テストの一番最初に呼ばないと、それ以前に呼ばれたものは測定対象にならないことに注意</li>
<li>関数定義も実行対象になってしまうので、意味が無いことに注意(メソッドが呼ばれてない場合)</li>
</ul>
</li>
<li>concov
<ul>
<li>時系列カバレッジ</li>
<li>追加されたコードに対してテストがされているかのチェック</li>
</ul>
</li>
<li>other lang
<ul>
<li>C/c++
<ul>
<li>gcov/lcov</li>
</ul>
</li>
<li>java
<ul>
<li>covertura emma, clover, jacoco</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>今後の計画と展望
<ul>
<li>function / branch coveargeの測定追加
<ul>
<li>issueにコメント欲しい</li>
<li>互換性を持って作っている</li>
</ul>
</li>
<li>100%既存に互換性</li>
<li>他のcoverageツールも参考
<ul>
<li>lcovなど</li>
</ul>
</li>
<li>overhead
<ul>
<li>現状ruby本体だと5倍弱時間がかかる</li>
<li>railsだと2倍くらい?の見込み</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>workshop</h3>
<hr />
<p>前日のmrknさんが発表されていたPycallについてのworkshop<br/>
リポジトリは<a href="https://github.com/rubydata/rubykaigi2017.git">こちら</a><br/>
docker runをすることで、workshopの内容が出てきます</p>
<h3>Ruby Language Server</h3>
<hr />
<p><a href="http://rubykaigi.org/2017/presentations/mtsmfm.html">mtsmfm</a>さんの発表</p>
<ul>
<li>lanugageserver
<ul>
<li>エディタの補完</li>
<li>メソッド定義</li>
<li>ビルド</li>
<li>languageserverプロトコル</li>
<li>ドキュメントの整形</li>
</ul>
</li>
<li>今までのものはエディタ向けのもの
<ul>
<li>viならvi, emacsならemacs</li>
</ul>
</li>
<li>msが仕様を公開している
<ul>
<li>でもvsコードの拡張プラグイン向け</li>
</ul>
</li>
<li>Languageserverprotocol
<ul>
<li>汎用と専用がある</li>
</ul>
</li>
<li>rubyで書くには?
<ul>
<li>基本はnode</li>
<li>JSON-RPCでアクセスができればOK
<ul>
<li>但し、クライアントがうまくサーバと通信できるようにする必要がある</li>
</ul>
</li>
<li>gemでlanguage_server-protocolとして公開している</li>
</ul>
</li>
<li>内容
<ul>
<li>rocodetoolsで補完
<ul>
<li>動的解析に利用、副作用とか到達不能な場合は無力</li>
<li>インスタンスレベルの補完はできてない(静的解析)</li>
</ul>
</li>
<li>エラーメッセージは実行して(wcオプション)、正規表現で結果取得</li>
</ul>
</li>
<li>将来
<ul>
<li>静的解析の改良</li>
<li>ドキュメント</li>
<li>rubocop</li>
<li>syntax highlight</li>
</ul>
</li>
</ul>
<h3>Compacting GC in MRI</h3>
<hr />
<p><a href="http://rubykaigi.org/2017/presentations/tenderlove.html">Aaron</a>さんの発表</p>
<ul>
<li>copy on write最適化
<ul>
<li>性質や定義に注意</li>
<li>コピーしたものは、複製元のメモリ上の場所だけを持ってる
<ul>
<li>配列も同じだが、hashはできない</li>
<li>コピー元に変更があったら、コピー先に掛かれる</li>
<li>プロセスforkだとコピーしない</li>