procon_bypass_man 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +19 -6
  3. data/.github/workflows/gitleacks.yml +1 -1
  4. data/.rubocop.yml +4 -0
  5. data/.ruby-version +1 -1
  6. data/CHANGELOG.md +15 -0
  7. data/Gemfile +6 -3
  8. data/Gemfile.lock +5 -3
  9. data/README.md +28 -41
  10. data/Steepfile +0 -1
  11. data/bin/generate_default_app +10 -0
  12. data/docs/getting_started.md +102 -28
  13. data/docs/setup_raspi_by_mitamae.md +43 -2
  14. data/lib/procon_bypass_man/background/job_performer.rb +1 -2
  15. data/lib/procon_bypass_man/background/job_queue.rb +50 -0
  16. data/lib/procon_bypass_man/background/jobs/base_job.rb +1 -1
  17. data/lib/procon_bypass_man/background/jobs/concerns/has_external_api_setting.rb +2 -2
  18. data/lib/procon_bypass_man/background/jobs/concerns/job_performable.rb +16 -0
  19. data/lib/procon_bypass_man/background/jobs/post_completed_remote_macro_job.rb +1 -1
  20. data/lib/procon_bypass_man/background/jobs/report_boot_job.rb +1 -1
  21. data/lib/procon_bypass_man/background/jobs/report_completed_upgrade_pbm_job.rb +1 -1
  22. data/lib/procon_bypass_man/background/jobs/report_error_job.rb +1 -1
  23. data/lib/procon_bypass_man/background/jobs/report_error_reload_config_job.rb +1 -1
  24. data/lib/procon_bypass_man/background/jobs/report_load_config_job.rb +1 -1
  25. data/lib/procon_bypass_man/background/jobs/report_procon_performance_measurements_job.rb +43 -0
  26. data/lib/procon_bypass_man/background/jobs/report_reload_config_job.rb +1 -1
  27. data/lib/procon_bypass_man/background/jobs/report_start_reboot_job.rb +1 -1
  28. data/lib/procon_bypass_man/background/jobs/sync_device_stats_job.rb +1 -1
  29. data/lib/procon_bypass_man/background.rb +3 -4
  30. data/lib/procon_bypass_man/bypass/bypass_command.rb +16 -20
  31. data/lib/procon_bypass_man/bypass/bypass_value.rb +6 -0
  32. data/lib/procon_bypass_man/bypass/procon_to_switch.rb +99 -0
  33. data/lib/procon_bypass_man/bypass/switch_to_procon.rb +66 -0
  34. data/lib/procon_bypass_man/bypass.rb +5 -109
  35. data/lib/procon_bypass_man/commands/print_boot_message_command.rb +0 -2
  36. data/lib/procon_bypass_man/configuration.rb +18 -39
  37. data/lib/procon_bypass_man/device_connection/procon_setting_overrider.rb +12 -3
  38. data/lib/procon_bypass_man/procon/analog_stick_manipulator.rb +2 -0
  39. data/lib/procon_bypass_man/procon/layer_changer.rb +2 -0
  40. data/lib/procon_bypass_man/procon/macro.rb +3 -1
  41. data/lib/procon_bypass_man/procon/macro_builder.rb +2 -0
  42. data/lib/procon_bypass_man/procon/macro_registry.rb +2 -0
  43. data/lib/procon_bypass_man/procon/performance_measurement/last_bypass_at.rb +17 -0
  44. data/lib/procon_bypass_man/procon/performance_measurement/measurement_collection.rb +9 -0
  45. data/lib/procon_bypass_man/procon/performance_measurement/measurements_summarizer.rb +101 -0
  46. data/lib/procon_bypass_man/procon/performance_measurement/procon_performance_span_transfer_job.rb +8 -0
  47. data/lib/procon_bypass_man/procon/performance_measurement/queue_over_process.rb +38 -0
  48. data/lib/procon_bypass_man/procon/performance_measurement/span_queue.rb +42 -0
  49. data/lib/procon_bypass_man/procon/performance_measurement/span_transfer_buffer.rb +39 -0
  50. data/lib/procon_bypass_man/procon/performance_measurement.rb +110 -0
  51. data/lib/procon_bypass_man/procon/suppress_rumble.rb +2 -0
  52. data/lib/procon_bypass_man/procon/user_operation.rb +2 -0
  53. data/lib/procon_bypass_man/procon/value_objects/analog_stick.rb +2 -0
  54. data/lib/procon_bypass_man/procon/value_objects/binary/inbound_procon_binary.rb +2 -0
  55. data/lib/procon_bypass_man/procon/value_objects/binary/processing_procon_binary.rb +2 -0
  56. data/lib/procon_bypass_man/procon/value_objects/rumble_binary.rb +2 -0
  57. data/lib/procon_bypass_man/procon.rb +26 -7
  58. data/lib/procon_bypass_man/procon_display/bypass_hook.rb +12 -0
  59. data/lib/procon_bypass_man/procon_display.rb +1 -0
  60. data/lib/procon_bypass_man/remote_macro/queue_over_process.rb +26 -44
  61. data/lib/procon_bypass_man/remote_macro/remote_macro_object.rb +22 -24
  62. data/lib/procon_bypass_man/remote_macro/remote_macro_receiver.rb +1 -1
  63. data/lib/procon_bypass_man/remote_macro/remote_macro_sender.rb +1 -1
  64. data/lib/procon_bypass_man/remote_macro/task.rb +1 -5
  65. data/lib/procon_bypass_man/remote_macro/task_queue.rb +6 -10
  66. data/lib/procon_bypass_man/remote_macro.rb +2 -0
  67. data/lib/procon_bypass_man/remote_pbm_action/commands/update_remote_pbm_action_status_command.rb +1 -1
  68. data/lib/procon_bypass_man/remote_pbm_action.rb +2 -0
  69. data/lib/procon_bypass_man/runner.rb +4 -10
  70. data/lib/procon_bypass_man/scheduler.rb +15 -6
  71. data/lib/procon_bypass_man/support/callbacks.rb +79 -34
  72. data/lib/procon_bypass_man/support/can_over_process.rb +60 -0
  73. data/lib/procon_bypass_man/support/gc.rb +8 -0
  74. data/lib/procon_bypass_man/support/http_client.rb +12 -6
  75. data/lib/procon_bypass_man/support/load_agv.rb +20 -0
  76. data/lib/procon_bypass_man/support/procon_performance_http_client.rb +7 -0
  77. data/lib/procon_bypass_man/support/renice_command.rb +17 -0
  78. data/lib/procon_bypass_man/support/retryable.rb +16 -0
  79. data/lib/procon_bypass_man/support/signal_handler.rb +1 -1
  80. data/lib/procon_bypass_man/version.rb +1 -1
  81. data/lib/procon_bypass_man/websocket/client.rb +2 -2
  82. data/lib/procon_bypass_man/worker.rb +32 -0
  83. data/lib/procon_bypass_man.rb +53 -10
  84. data/procon_bypass_man.gemspec +4 -2
  85. data/project_template/README.md +0 -5
  86. data/project_template/app.rb +17 -11
  87. data/project_template/app.rb.erb +59 -0
  88. data/project_template/lib/app_generator.rb +31 -0
  89. data/project_template/web.rb +1 -1
  90. data/sig/main.rbs +10 -52
  91. data/tmp/.keep +0 -0
  92. metadata +43 -10
  93. data/lib/procon_bypass_man/background/job_runner.rb +0 -45
  94. data/lib/procon_bypass_man/background/jobs/concerns/has_internal_api_setting.rb +0 -5
  95. data/lib/procon_bypass_man/background/jobs/concerns/job_runnable.rb +0 -16
  96. data/lib/procon_bypass_man/background/jobs/report_pressed_buttons_job.rb +0 -15
  97. data/lib/procon_bypass_man/bypass/usb_hid_logger.rb +0 -47
  98. data/lib/procon_bypass_man/io_monitor.rb +0 -108
  99. data/lib/procon_bypass_man/support/server_pool.rb +0 -46
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b867d9fe101999d57ded64ff71be83610f04fde36c1c1fffa43ca8495902fb0b
4
- data.tar.gz: 8eb0b7506c7bdb5d4601fb0e6f33cff79cb71a4975449d0c84bcd6a2c0b6303a
3
+ metadata.gz: 556a827cf03895e4212aa4c524963ca7efd24499c2ea14edff2d692bc3e1e63f
4
+ data.tar.gz: bf7cf5a735fffa13e1ff99c259a329a4c6981be755440477884ece0246188f21
5
5
  SHA512:
6
- metadata.gz: a37867fc758ecb8aa45698fbb79be8b48cc221cd218bf6c29646b04587ae66514846709cd1bf951a651ec1ba737cab5dbae010334cb125bc8dca1644d19aa30e
7
- data.tar.gz: d2cf7935350a3085251deb495051586b52b422d388bfd07da7842c09fbc3f50fa0b6090a41652e662d15e367863c76e0b3a2e9e061e87a7e100f3d1e7d9be58e
6
+ metadata.gz: 7bdfd9d2c5bee033c8f6a1f87acebcf3374e353c0ea4d373c76f86ee33b87b248665b087276998f20dee9f0d1258ab2c7c49906cc55b94b51a5e35d84712da5c
7
+ data.tar.gz: 176ac515a48935df2953c36fb747e09be71c31f7850b09397e338bc0685b5da25bcd7ff81795d235287f2a5870fcdec3fec5aa9334e12ba90ca26662fe8807e7
data/.circleci/config.yml CHANGED
@@ -15,7 +15,7 @@ executors:
15
15
  BUNDLE_JOBS: 4
16
16
  working_directory: ~/app
17
17
 
18
- commands: &commands
18
+ commands:
19
19
  bundle_install:
20
20
  parameters:
21
21
  ruby-version:
@@ -55,6 +55,14 @@ jobs:
55
55
  - run: ruby -cw project_template/web.rb
56
56
  - run: ruby -ryaml -e 'puts YAML.load_file("./project_template/setting.yml")["setting"]' > /tmp/content_of_setting.rb && ruby -cw /tmp/content_of_setting.rb
57
57
 
58
+ outdated_app_checker:
59
+ executor:
60
+ name: ruby
61
+ tag: 3.0.1
62
+ steps:
63
+ - checkout
64
+ - run: ruby bin/generate_default_app && git diff --exit-code project_template/app.rb
65
+
58
66
  bundle_install:
59
67
  parameters:
60
68
  ruby-version:
@@ -101,27 +109,31 @@ jobs:
101
109
 
102
110
  build_jobs: &build_jobs
103
111
  - check_pbm_version
112
+ - outdated_app_checker
104
113
  - syntax_check:
105
114
  matrix:
106
115
  parameters:
107
116
  ruby-version:
117
+ - "2.5.5"
108
118
  - "3.0.1"
109
119
  - "3.0.2"
110
- - "3.1.1"
120
+ - "3.1.2"
111
121
  - bundle_install:
112
122
  matrix:
113
123
  parameters:
114
124
  ruby-version:
125
+ - "2.5.5"
115
126
  - "3.0.1"
116
127
  - "3.0.2"
117
- - "3.1.1"
128
+ - "3.1.2"
118
129
  - lint:
119
130
  matrix:
120
131
  parameters:
121
132
  ruby-version:
133
+ - "2.5.5"
122
134
  - "3.0.1"
123
135
  - "3.0.2"
124
- - "3.1.1"
136
+ - "3.1.2"
125
137
  requires:
126
138
  - bundle_install
127
139
  - type_check:
@@ -130,16 +142,17 @@ build_jobs: &build_jobs
130
142
  ruby-version:
131
143
  # - "3.0.1" # たまにSEGVするので
132
144
  - "3.0.2"
133
- - "3.1.1"
145
+ - "3.1.2"
134
146
  requires:
135
147
  - bundle_install
136
148
  - rspec:
137
149
  matrix:
138
150
  parameters:
139
151
  ruby-version:
152
+ - "2.5.5"
140
153
  - "3.0.1"
141
154
  - "3.0.2"
142
- - "3.1.1"
155
+ - "3.1.2"
143
156
  requires:
144
157
  - bundle_install
145
158
  workflows:
@@ -9,4 +9,4 @@ jobs:
9
9
  steps:
10
10
  - uses: actions/checkout@v1
11
11
  - name: gitleaks-action
12
- uses: zricethezav/gitleaks-action@master
12
+ uses: zricethezav/gitleaks-action@v1.6.0
data/.rubocop.yml CHANGED
@@ -26,3 +26,7 @@ Lint/ReturnInVoidContext:
26
26
  Enabled: false
27
27
  Lint/AssignmentInCondition:
28
28
  Enabled: false
29
+ Lint/AmbiguousBlockAssociation:
30
+ Enabled: false
31
+ Security/Eval:
32
+ Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.0.2
1
+ 3.1.2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## [0.3.0] - 2022-9-9
2
+ * 表示入力機能を一時的に削除しました #185
3
+ * バイパス処理中の小さなラグがほぼなくなりました #185
4
+ * バイパス処理をマルチプロセスで行うようにしたのでGCによる停止時間がほぼなくなったため
5
+
6
+ ## [0.2.3] - 2022-8-27
7
+ * プロコンのラグ具合をpbm-cloudに送信し、グラフで見れるようになりました #158
8
+ * 非同期ジョブをmasterプロセス経由で実行するようになりました #191
9
+ * バイパス処理が数秒間固まる現象がおそらく直りました #179
10
+
11
+ ## [0.2.2] - 2022-07-10
12
+ * project_template/app.rbを動的に生成する仕組みを追加しました
13
+ * ドキュメントからpbm_webに関する記述を削除しました
14
+ * 起動スクリプト(app.rb) がたまに意図せず /usr/share/pbm/current を削除してしまう不具合を修正しました
15
+
1
16
  ## [0.2.1] - 2022-05-29
2
17
  - 入力表示機能を提供するSwitchProconInputViewerに対応しました
3
18
  - https://github.com/splaplapla/switch-procon-input-viewer
data/Gemfile CHANGED
@@ -10,8 +10,11 @@ gem "rspec"
10
10
  gem "pry"
11
11
  gem "timecop"
12
12
  gem "rubocop", require: false
13
- gem "steep", require: false
14
- gem 'typeprof', require: false
15
- gem 'rbs', require: false
16
13
  gem "sinatra", require: false
17
14
  gem "webrick", require: false
15
+
16
+ if Gem::Version.new(RUBY_VERSION) > Gem::Version.new("2.6.0")
17
+ gem 'typeprof', require: false
18
+ gem 'rbs', require: false
19
+ gem "steep", require: false
20
+ end
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- procon_bypass_man (0.2.1)
4
+ procon_bypass_man (0.3.0)
5
5
  action_cable_client
6
+ blue_green_process
6
7
  pbmenv (>= 0.1.9)
7
8
  sorted_set
8
9
 
@@ -18,6 +19,7 @@ GEM
18
19
  tzinfo (~> 2.0)
19
20
  zeitwerk (~> 2.3)
20
21
  ast (2.4.2)
22
+ blue_green_process (0.1.3)
21
23
  coderay (1.1.3)
22
24
  concurrent-ruby (1.1.9)
23
25
  diff-lcs (1.4.4)
@@ -36,7 +38,7 @@ GEM
36
38
  parallel (1.21.0)
37
39
  parser (3.0.3.2)
38
40
  ast (~> 2.4.1)
39
- pbmenv (0.1.9)
41
+ pbmenv (0.1.10)
40
42
  pry (0.14.1)
41
43
  coderay (~> 1.1)
42
44
  method_source (~> 1.0)
@@ -78,7 +80,7 @@ GEM
78
80
  parser (>= 3.0.1.1)
79
81
  ruby-progressbar (1.11.0)
80
82
  ruby2_keywords (0.0.5)
81
- set (1.0.2)
83
+ set (1.0.3)
82
84
  sinatra (2.2.0)
83
85
  mustermann (~> 1.0)
84
86
  rack (~> 2.2)
data/README.md CHANGED
@@ -3,55 +3,26 @@
3
3
 
4
4
  [![Ruby](https://github.com/splaplapla/procon_bypass_man/actions/workflows/ruby.yml/badge.svg?branch=master)](https://github.com/splaplapla/procon_bypass_man/actions/workflows/ruby.yml)
5
5
 
6
- * Switchに繋いだプロコンを連射機にしたり、ボタンのリマップをしたり、マクロを実行できる、Raspberry Pi上で動かすツールです
7
- * 設定ファイルはrubyスクリプトで記述します
8
- * 特定のタイトルに特化した振る舞いにしたい時は各プラグインを使ってください
6
+ * Nintendo Switch Proコントローラーを連射機などにするRaspberry Pi上で動かすコンバータです
9
7
  * ドキュメントは [getting_started.md](docs/getting_started.md) にまとめています
10
8
  * https://pbm-cloud.herokuapp.com を使うと、webだけで運用が可能です
11
9
 
12
10
 
13
11
  <img width="880" alt="スクリーンショット 2022-04-02 9 10 38" src="https://user-images.githubusercontent.com/1664497/161356057-71e4bc2a-0217-4434-9bf1-0002b9fb261a.png">
14
12
 
15
-
16
-
17
- <!--
18
- ![image](https://user-images.githubusercontent.com/1664497/123414210-942f6980-d5ee-11eb-8192-955bd9e37e0b.png)
19
- ```
20
- @startuml
21
- ProController \-\-> (PBM): ZR押しっぱなし
22
- Switch <-- (PBM): ZR連打
23
- @enduml
24
- ```
25
- -->
13
+ https://user-images.githubusercontent.com/1664497/171327108-f12f56a5-fc36-48da-95a5-65e976553a20.mov
26
14
 
27
15
  ## 使うハードウェア
28
- * プロコン
16
+ * Nintendo Switch Proコントローラー
29
17
  * Switch本体とドック
30
- * Raspberry Pi4 Model B/4GB(Raspberry Pi OS (32-bit))
18
+ * Raspberry Pi4 (Raspberry Pi OS)
31
19
  * 他のシリーズは未確認です
32
- * zeroは非対応
33
20
  * データ通信が可能なUSBケーブル
34
21
 
35
22
  ## 使うソフトウェア
36
- * ruby-3.0.x
37
-
38
- ## Usage
39
- * USBガジェットモードで起動するRaspberry Pi4を用意する
40
- * https://github.com/splaplapla/procon_bypass_man/blob/master/docs/setup_raspi.md
41
- * Raspberry Pi4 でprocon_bypass_manを実行するための準備
42
- * rubyのインストール
43
- * sudo apt-get install rbenv
44
- * git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
45
- * rbenv install 3.0.1
46
- * gem install pbmenv
47
- * sudo [pbmenv](https://github.com/splaplapla/pbmenv) install latest
48
- * Raspberry Pi4 でprocon_bypass_manを実行する
49
- * cd /usr/share/pbm/current
50
- * sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
51
- * 動いたのを確認したらserviceとして登録にするなどしてください
52
- * [serviceとして登録する方法](https://github.com/splaplapla/procon_bypass_man/tree/master/project_template#systemd%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AB%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)
53
-
54
- ## Plugins
23
+ * ruby 2.5 以上
24
+
25
+ ## プラグイン
55
26
  * https://github.com/splaplapla/procon_bypass_man-splatoon2
56
27
 
57
28
  ## FAQ
@@ -61,9 +32,6 @@ Switch <-- (PBM): ZR連打
61
32
  * ケーブルでそれらを接続した状態で、Raspberry Pi4にsshして本プログラムを起動することで使用します
62
33
  * ラズベリーパイ4のセットアップ方法は?
63
34
  * https://github.com/splaplapla/procon_bypass_man/tree/master/docs/setup_raspi.md
64
- * モード, マクロの違いは?
65
- * modeはProconの入力をそのまま再現するため機能。レイヤーを切り替えるまで繰り返し続けます
66
- * マクロは特定のキーを順番に入れていく機能。キーの入力が終わったらマクロは終了します
67
35
  * レイヤーとは?
68
36
  * 自作キーボードみたいな感じでレイヤー毎に設定内容を記述して切り替えれます
69
37
  * レイヤーは4つあって、up, down, left, rightです。十字キーに対応しています
@@ -80,6 +48,13 @@ Switch <-- (PBM): ZR連打
80
48
  * sshなしで運用は可能ですか?
81
49
  * https://pbm-cloud.herokuapp.com を使えば、sshを使わずに運用が可能です
82
50
 
51
+ ## 仕様・制約
52
+ * 日を跨ぐ24時ちょうどになった瞬間はLinuxのcronが起動などがするようで、この時間は数秒間バイパスが激しく遅延します
53
+ * ログファイルのローテションが少なくとも走るはずなので、不要なデーモンを停止するなどで影響を小さくすることはできると思いますが、完全に抑制することは難しいと思います
54
+ * コントローラーから読み取ってSwitchに書き込む時間は、少なくとも0.02秒はかかります
55
+ * 動かしているRaspberry Piの負荷に依存するこの限りではありません
56
+
57
+ <!--
83
58
  ## TODO
84
59
  * レコーディング機能(プロコンの入力をマクロとして登録ができる)
85
60
  * ドキュメントを書く(doing)
@@ -103,11 +78,23 @@ sudo kill -USR2 `cat ./pbm_pid`
103
78
  * CHANGELOG.md に日付を書く
104
79
  * be rake release
105
80
  * githubのreleaseを作成する
81
+ -->
106
82
 
107
- ## License
83
+ ## Raspberry Pi4のセットアップを代行します
84
+ * Raspberry Pi4を開発者である私の家に配送してくれれば、セットアップを代行します。セットアップが終わり次第送り返します
85
+ * 使い方に関しては、https://pbm-cloud.herokuapp.com ですべて完結するので、Linuxの知識は不要です
86
+ * 何か問題が起きた時はリモートログインでサポート可能です
87
+ * 希望者はDiscordの `kawagu#7684` にDMを送ってください
88
+ * お金はかかりません
108
89
 
109
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
90
+ ## 開発を支援してくれる人を募集しています
91
+ * https://jiikko.fanbox.cc/
92
+ * procon_bypassの運営・開発・サーバー費用に充てさせていただきます。また、問い合わせに優先して対応します。
110
93
 
111
94
  ## Links
112
95
  * https://discord.gg/bEcRNKf4ep
113
96
  * 質問などご意見をdiscordでも受け付けています
97
+
98
+ ## License
99
+
100
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Steepfile CHANGED
@@ -38,7 +38,6 @@ target :lib do
38
38
  check 'lib/procon_bypass_man/support/http_client'
39
39
  check 'lib/procon_bypass_man/support/send_device_stats_http_client'
40
40
  check 'lib/procon_bypass_man/support/on_memory_cache'
41
- check 'lib/procon_bypass_man/support/server_pool'
42
41
  check 'lib/procon_bypass_man/support/uptime.rb'
43
42
  check 'lib/procon_bypass_man/support/safe_timeout'
44
43
  check 'lib/procon_bypass_man/support/update_remote_pbm_action_status_http_client'
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "./project_template/lib/app_generator"
4
+
5
+ AppGenerator.new(
6
+ prefix_path: "./project_template",
7
+ enable_integration_with_pbm_cloud: false,
8
+ ).generate
9
+
10
+ puts "Created project_template/app.rb"
@@ -3,6 +3,7 @@
3
3
  * [はじめに](#はじめに)
4
4
  * [procon_bypass_manで解決したいこと](#procon_bypass_manで解決したいこと)
5
5
  * [procon_bypass_manでできること](#procon_bypass_manでできること)
6
+ * [セットアップを代行できます](#セットアップを代行できます)
6
7
  * [セットアップ](#セットアップ)
7
8
  * [ラズベリーパイのセットアップ](#ラズベリーパイのセットアップ)
8
9
  * [procon_bypass_manのインストール](#procon_bypass_manのインストール)
@@ -10,23 +11,26 @@
10
11
  * [pbmenvを使わない方法](#pbmenvを使わない方法)
11
12
  * [普段使いをするためのセットアップ](#普段使いをするためのセットアップ)
12
13
  * [レイヤー](#レイヤー)
13
- * モード
14
14
  * [マクロ](#マクロ)
15
15
  * [左スティックの感度調整](#左スティックの感度調整)
16
16
  * [入力表示](#入力表示)
17
- * 設定ファイルの書き方
17
+ * [設定ファイルの書き方](#設定ファイルの書き方)
18
18
  * プラグインの書き方
19
19
  * [設定ファイルの書き方がわからない、エラーが起きるとき](#設定ファイルの書き方がわからない、エラーが起きるとき)
20
20
  * [procon_bypass_manのアップグレード方法](#procon_bypass_manのアップグレード方法)
21
21
  * [procon_bypass_man_cloudについて](#procon_bypass_man_cloudについて)
22
+ * [最適化について](#最適化について)
22
23
 
23
24
  ## はじめに
24
25
  ### procon_bypass_manで解決したいこと
25
26
 
26
- 通常、ボタン連射をするには、市販されているサードパーティー製のコントローラーを使う必要があるのですが、ボタンの押した感覚や各種設定方法は各社の独自仕様であるため、それらを手に馴染ませるのがとても大変です。
27
- 特に「説明書を熟読してコントローラーの設定方法を覚えること、設定されている状態を思い出す」がつらい。
28
-
29
- このツールを使うことで、使い慣れたコントローラーを使ってボタン連射ができます。また、設定内容はテキストで管理しているため一目瞭然です。
27
+ サードパーティー製のコントローラーは頑丈で使いやすいですか?
28
+
29
+ 通常、ボタンの連射をするには、サードパーティー製のコントローラーを使う必要があるのですが、ボタンの押した感覚や各種設定方法は各社の独自仕様であるため、それらを手に馴染ませるのがとても大変です。
30
+ 特に「説明書を熟読して、コントローラーの設定方法を理解し適用すること、時間が空いてから設定されている状態を思い出す」がつらいと思っています。
31
+ また、サードパーティー製のコントローラーは非常に壊れやすく、同じ製品が再び購入できるとは限りません。
32
+
33
+ 本ツールを使うと、使い慣れた純正コントローラーを使って、サードパーティー製のコントローラー以上のことができます。設定内容はテキストで管理しているため一目瞭然です。設定内容のコピーも容易です。
30
34
 
31
35
  ### procon_bypass_manでできること
32
36
 
@@ -35,13 +39,19 @@
35
39
  * 連射中は特定のキーの入力を無視したり、複数のキーをトリガーに連射することもできます
36
40
  * マクロ
37
41
  * [活用例](/docs/setting/splatoon2_macro_sokuwari_bubble.md)
38
- * 特定の同じ操作の繰り返し(モード)
39
42
  * 左スティックの感度調整
40
43
  * [設定方法](/docs/setting/left-analogstick-cap.md)
41
44
  * WEBから設定状態の閲覧・反映
42
45
  * ボタンリマップ
43
46
  * 入力表示
44
-   * https://github.com/splaplapla/switch-procon-input-viewer
47
+ * https://github.com/splaplapla/switch-procon-input-viewer
48
+
49
+ ## セットアップを代行できます
50
+ * Raspberry Pi4を開発者である私の家に配送してくれれば、セットアップを代行します。セットアップが終わり次第送り返します
51
+ * 使い方に関しては、https://pbm-cloud.herokuapp.com ですべて完結するので、Linuxの知識は不要です
52
+ * 何か問題が起きた時はリモートログインでサポート可能です
53
+ * 希望者はDiscordの `kawagu#7684` にDMを送ってください
54
+ * お金はかかりません
45
55
 
46
56
  ## セットアップ
47
57
  ### ラズベリーパイのセットアップ
@@ -50,26 +60,66 @@
50
60
 
51
61
  ### procon_bypass_manのインストール
52
62
 
53
- pbmenvを使うと https://pbm-cloud.herokuapp.com と連携ができるのでおすすめですが、pbmenvを使わなくてもprocon_bypass_manをインストールすることは可能です。
63
+ pbmenvを使うと https://pbm-cloud.herokuapp.com と連携ができるのでおすすめですが、pbmenvを使わなくてもprocon_bypass_manをインストールすることは可能です。
64
+ 次の4つからインストール方法を1つ選んでください。
65
+
66
+ * pbmenvを使う方法
67
+ * systemにインストールされているrubyを使う場合(初心者におすすめ)
68
+ * rbenvでインストールしたrubyを使う場合
69
+ * pbmenvを使わない方法
70
+ * systemにインストールされているrubyを使う場合(初心者におすすめ)
71
+ * rbenvでインストールしたrubyを使う場合
54
72
 
55
- #### pbmenvを使う方法
73
+ ちなみに、rbenvを使った方がラグは少ないような気がしますが、明確な体験の違いはそこまでないように思います。
74
+
75
+ #### 1) pbmenvを使う方法
56
76
 
57
77
  https://github.com/splaplapla/pbmenv
58
- pbmenvはprocon_bypass_manのバージョンマネジャーです。procon_bypass_manはバージョンアップによって起動スクリプトに変更が入ることがあって、バージョンアップするときはpbmenvを使うとエラーが起きることなくインストールができるようになります。また、pbm-cloudと連携してすべての機能を使うには、pbmenvの利用が必須になります。
78
+ pbmenvはprocon_bypass_manのバージョンマネジャーです。
79
+ procon_bypass_manはバージョンアップによって起動スクリプトに変更が入ることがあって、バージョンアップするときはpbmenvを使うとエラーが起きることなくインストールができるようになります。また、pbm-cloudと連携してすべての機能を使うには、pbmenvの利用が必須になります。
80
+
81
+ ##### 1-1) systemにインストールされているrubyを使う場合(初心者におすすめ)
59
82
 
83
+ ```bash
84
+ sudo apt-get install ruby ruby-dev
85
+ sudo gem i bundler pbmenv
86
+ sudo pbmenv install latest --use
87
+ cd /usr/share/pbm/current
88
+ sudo ruby app.rb
60
89
  ```
61
- gem install pbmenv
62
- sudo pbmenv install latest
90
+
91
+ ##### 1-2) rbenvでインストールしたrubyを使う場合
92
+ rbenvはrubyのパッケージマネージャーです。
93
+
94
+ ```bash
95
+ rbenv install 3.0.1
96
+ sudo gem install pbmenv
97
+ sudo pbmenv install latest --use
63
98
  cd /usr/share/pbm/current
64
99
  sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
65
100
  ```
66
101
 
67
- #### pbmenvを使わない方法
102
+ #### 2) pbmenvを使わない方法
103
+ https://github.com/jiikko/procon_bypass_man_sample にある app.rb と setting.yml を Raspberry Pi にダウンロードすれば、起動することができます。
68
104
 
69
- https://github.com/jiikko/procon_bypass_man_sample にある app.rb と setting.yml を Raspberry Pi にダウンロードし、ruby 3.0.1 をインストールすれば起動することができます。
105
+ ##### 2-1) systemにインストールされているrubyを使う場合(初心者におすすめ)
70
106
 
107
+ ```bash
108
+ sudo apt-get install ruby ruby-dev wget
109
+ wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/app.rb
110
+ wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/setting.yml
111
+ sudo gem i bundler
112
+ sudo ruby app.rb
71
113
  ```
114
+
115
+ ##### 2-2) rbenvでインストールしたrubyを使う場合
116
+ rbenvはrubyのパッケージマネージャーです。
117
+
118
+ ```bash
72
119
  rbenv install 3.0.1
120
+ sudo apt-get install wget
121
+ wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/app.rb
122
+ wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/setting.yml
73
123
  sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
74
124
  ```
75
125
 
@@ -90,12 +140,12 @@ pbmenvを使っていない場合は、 https://github.com/splaplapla/procon_byp
90
140
  ゲームをやめたくなったらSwitchはそのままスリープに入って問題ないです。このときにRaspberry Piも一緒に電源が切れてしまいますが故障することはありません。
91
141
 
92
142
  ## レイヤー
93
- あらかじめレイヤーごとにキーの配置を設定しておき、用途に応じてレイヤーを切り替えることで違うキーが入力できるという機能です。
143
+ レイヤーごとにボタンの設定をすることができ、用途に応じてレイヤーを切り替えることで、違う設定を即座に適用できるという機能です。
94
144
  レイヤーは、up, down, left, rightの4つあります。 設定ファイルの書いている `prefix_keys_for_changing_layer` を押しながら、十字キーのup, down, left, rightのどれかを押すと、レイヤーを変更することができます。
95
145
 
96
- レイヤー毎の定義方法は、 `layer` ブロックで囲って定義します。
146
+ 設定ファイルでのレイヤー毎の定義方法は、 `layer` ブロックで囲って定義します。
97
147
  以下の例は、upレイヤーとleftレイヤーだけに設定が書かれています。ゲーム進行状況によってレイヤーを切り替えてください。
98
- 初期レイヤーは、 up です。
148
+ procon_bypass_manを起動した直後に有効になっているレイヤーは、 up です。
99
149
 
100
150
  ```ruby
101
151
  layer :up do
@@ -113,15 +163,12 @@ layer :down do
113
163
  end
114
164
  ```
115
165
 
116
- ## モード
117
- * 後で書きます
118
-
119
166
  ## マクロ
120
167
 
121
168
  決まった入力を繰り返し実行できる機能を「マクロ」と呼んでいます。
122
- スプラトゥーンであれば、バブル即割の操作や、試合中の味方へのスーパージャンプもマクロ経由で入力できます。
169
+ マクロを使うことで、スプラトゥーンであれば、バブル即割の操作や、試合中の味方へのスーパージャンプもマクロ経由で入力できます。
123
170
 
124
- マクロの実態はただの文字列で`toggle_r_for_0_2sec` や `toggle_r_for_1sec`といった時間指定もできますし、`[:x, :down, :a, :a]` のような1文字のずつの入力も可能です。
171
+ 設定ファイルに記述するマクロは文字列で定義します。
125
172
  マクロを設定ファイルに定義するには、「プラグイン」か設定ファイルへ直接を記述する「open_macro」のどちらかで行えます。
126
173
 
127
174
  「プラグイン」を使用する場合は、マクロの詳細を記述する必要がなく、PBMのバージョンアップとともに改善が入る可能性があります。
@@ -136,10 +183,13 @@ open_macroは、マクロの詳細を設定ファイルに直書きするため
136
183
  y, x, b, a, sl, sr, r, zr, minus, plus, thumbr, thumbl, home, cap, down, up, right, left, l, zl
137
184
  ```
138
185
 
186
+ <!--
139
187
  マクロの形式には、1ボタンずつ入力する「バージョン1」と時間指定のできる「バージョン2」があります。
140
188
  バージョン1は、 `[:x, :y, :up]` と記述すると、x, y, 十字キーの上ボタンを順番に入力します。バージョン1では実行時間を指定することはできません。
189
+ -->
141
190
 
142
- バージョン2では、 複数のボタンを同時に、時間を指定して「連打」「押しっぱなし」「無操作」ができます。
191
+ マクロは、複数のボタンを同時に「連打」「押しっぱなし」または「待機」ができます。
192
+
143
193
  連打はtoggleで、押しっぱなしはpressing, 無操作は、waitというキーワードを使います。
144
194
  複数のボタンを同時押しの場合は、andで繋ぎます。Xボタンを押しっぱなしにして、ZRボタンを連打する場合は `pressing_x_and_toggle_zr` と記述します。
145
195
  これに時間を指定をする場合は、forで繋ぎます。 `pressing_x_and_toggle_zr_for_1sec` となります。
@@ -154,7 +204,7 @@ y, x, b, a, sl, sr, r, zr, minus, plus, thumbr, thumbl, home, cap, down, up, rig
154
204
  * toggle_x_and_toggle_zr_for_0_2sec
155
205
  * XボタンとZRボタンを0.2秒間連打
156
206
 
157
- 上述したマクロ(ステップ)は、open_macroで記述できます。次は実際の記述例です。
207
+ 上述したマクロ(ステップ)は、open_macroという構文でも記述できます。次は実際の記述例です。
158
208
 
159
209
  ```
160
210
  open_macro :sokuwari, steps: [:toggle_r_for_0_2sec, :toggle_thumbr_for_0_14sec, :toggle_thumbr_and_toggle_zr_for_0_34sec, :toggle_r_for_1sec], if_pressed: [:zl, :right]
@@ -166,11 +216,16 @@ open_macro :sokuwari, steps: [:toggle_r_for_0_2sec, :toggle_thumbr_for_0_14sec,
166
216
  [左スティックの感度調整](/docs/setting/left-analogstick-cap.md)
167
217
 
168
218
  ## 入力表示
169
- * https://github.com/splaplapla/switch-procon-input-viewer
170
- * 後で書きます
219
+ * 使い方は https://github.com/splaplapla/switch-procon-input-viewer を参照してください。
220
+ * https://zenn.dev/jiikko/articles/2ef0ccbdfe0fe7 に技術的な解説を書きました
171
221
 
172
222
  ## 設定ファイルの書き方
173
- * 後で書きます
223
+ 設定ファイルは、ymlフォーマットに埋め込まれたRubyスクリプトで記述します。
224
+ Rubyスクリプトな上に独特な構文に対して、アレンジを加えることは難しいと思ったので、マウス操作をするだけで設定ファイルを生成するツールを作りました。
225
+ https://splaplapla.github.io/procon_bypass_man_setting_editor/ です。
226
+ このツールで設定ファイルを生成し、コピペをするだけで大半のことは済みます。
227
+
228
+ TODO 設定ファイルの書き方
174
229
 
175
230
  ## プラグインの書き方
176
231
  * 後で書きます
@@ -191,3 +246,22 @@ procon_bypass_man_cloudとの接続が完了後、Raspberry Piを起動時にpro
191
246
  セットアップ方法などでわからないことがあればdiscordで質問してみてください。
192
247
 
193
248
  セットアップ方法は https://pbm-cloud.herokuapp.com/faq に書いています。
249
+
250
+ ## 最適化について
251
+ 本稿では、Rubyの最適化について書きます。上級者向けです。適用しなくても普通に動きますが、逆に適用したことで何らかのケースで遅くなる場合があるかもしれません。
252
+
253
+ * jemallocを使う
254
+ * GCの回数が減る(はずな)ので小さな遅延が減ると考えています。が、違いを測定および体感はできませんでした。
255
+ * インストール方法と動作確認
256
+ * sudo apt install libjemalloc-dev
257
+ * export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2
258
+ * MALLOC_CONF=stats_print:true ruby -e "exit"
259
+ * 適用方法
260
+ * `/usr/share/pbm/current/systemd_units/pbm.service` の `ExecStart` 行に `LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2` を足してください
261
+ * ex) `ExecStart=/bin/bash -c "LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2 /home/pi/.rbenv/versions/3.0.1/bin/ruby /usr/share/pbm/current/app.rb"`
262
+ * jitを有効にする
263
+ * 起動した直後は、コンパイルが走るので遅くなります。しかし、有効にしたところで本プログラムはIOバインドなので効果は薄いようです。
264
+ * 適用方法
265
+ * `/usr/share/pbm/current/systemd_units/pbm.service` の `ExecStart` 行に `--jit` を足してください
266
+ * ex) `ExecStart=/bin/bash -c "/home/pi/.rbenv/versions/3.0.1/bin/ruby --jit /usr/share/pbm/current/app.rb"`
267
+ * ラズベリーパイのGUIをオフにする
@@ -9,12 +9,51 @@
9
9
  * wget https://raw.githubusercontent.com/splaplapla/procon_bypass_man/master/docs/setup_raspi.mitamae.rb -O setup_raspi.mitamae.rb
10
10
  * sudo ./mitamae-armhf-linux local setup_raspi.mitamae.rb -l debug
11
11
  * sudo reboot
12
- * sudo sh /usr/share/pbm/shared/add_procon_gadget.sh の実行に成功させる
13
- * /etc/rc.local に sh /usr/share/pbm/shared/add_procon_gadget.sh って書く
12
+ * sudo sh /usr/share/pbm/shared/add_procon_gadget.sh の実行する
13
+ * 何も表示されなければOK
14
14
  * PCとRaspberry Pi4を接続し、プロコンとして認識していることを確認する
15
15
  * sudo gem i pbmenv
16
16
  * sudo pbmenv install latest
17
17
 
18
+ Raspberry Piのセットアップは以上です。
19
+ 次は、SwitchとRaspberry Piとプロコンにケーブルを接続した上で、次のコマンドをshellに入力し、procon_bypass_manの動作確認を行なってください。
20
+
21
+ ```shell
22
+ cd /usr/share/pbm/current
23
+ sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
24
+ ```
25
+
26
+ 次のような出力が画面に表示されれば、動作しています。
27
+
28
+ ```
29
+ ----
30
+ ProconBypassMan::VERSION: 0.2.2
31
+ RUBY_VERSION: 3.0.1
32
+ Pbmenv::VERSION: 0.1.10
33
+ pid: 574
34
+ root: /usr/share/pbm/v0.2.0
35
+ pid_path: /usr/share/pbm/v0.2.0/pbm_pid
36
+ setting_path: /usr/share/pbm/current/setting.yml
37
+ uptime from boot: 60 sec
38
+ use_pbmenv: true
39
+ session_id: s_c6f36422-c20f-4a04-a446-b4a235c2face
40
+ device_id: d_8b0c90d8-90*************************
41
+ ----
42
+ ```
43
+
44
+ <hr>
45
+
46
+ procon_bypass_manを手動で起動する場合は、先ほどの2行のコマンドを毎回入力してください。
47
+ procon_bypass_manを自動起動する方法については `GETTING STARTED` を参照してください。
48
+
49
+ <hr>
50
+
51
+
52
+ ケーブルの接続方法は、次の写真を参考にしてください。
53
+
54
+ <img src="https://user-images.githubusercontent.com/1664497/151661582-3a1e8ce9-6c38-4754-8075-7a4453b3109a.jpg" width="500px">
55
+
56
+ <!--
18
57
  ## 上記手順の動作確認方法
19
58
  * 使えそうなイメージ
20
59
  * navikey/raspbian-bullseye
@@ -48,3 +87,5 @@ sudo ./mitamae-armhf-linux local setup_raspi.mitamae.rb -l debug
48
87
  * /etc/modules に指定の文字列があること
49
88
  * /boot/config.txt に指定の文字列があること
50
89
  * /usr/share/pbm/shared/add_procon_gadget.sh が存在していること
90
+
91
+ -->
@@ -6,10 +6,9 @@ module ProconBypassMan
6
6
  @args = args
7
7
  end
8
8
 
9
+ # @raise [any]
9
10
  def perform
10
11
  @klass.perform(*@args)
11
- rescue => e
12
- ProconBypassMan::ReportErrorJob.perform(e)
13
12
  end
14
13
  end
15
14
  end