toji 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +10 -8
- data/example/koji_recipe.rb +13 -13
- data/example/moromi.ipynb +17 -17
- data/example/rice_recipe.rb +8 -8
- data/lib/toji/graph/progress.rb +5 -2
- data/lib/toji/product/job_accessor.rb +1 -1
- data/lib/toji/product/koji_making.rb +2 -2
- data/lib/toji/product/moromi.rb +2 -2
- data/lib/toji/product/shubo.rb +2 -2
- data/lib/toji/recipe/rice_rate/cooked.rb +38 -8
- data/lib/toji/version.rb +1 -1
- data/toji.gemspec +2 -2
- metadata +4 -5
- data/example/koji_making2.rb +0 -69
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49e614ba76556c1a4bca653e4653f683aad26d13b44ca2e2fcd112671c556104
|
4
|
+
data.tar.gz: 7eb635c7a7f566e85b1144c63ddb725b8bb7d103482efd7b73dd79ae6ab6fbb7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e375faf007e1eb65146a575321b82ced96b917399cec703e96d0c563a27c9af4ffffc18d5cbfd3e792ff6b31c72ab3077c0d0924124e6f3842c449c742339b5
|
7
|
+
data.tar.gz: c43f3becbb5e7e45bb25a3da75c478911aea408c0003a19bbfa4ed09552269bfd4df0a807f3d86b34496bde2ea0a083dce33520320bd31227316bde7baaf4e0e
|
data/README.md
CHANGED
@@ -1,8 +1,15 @@
|
|
1
1
|
# Toji
|
2
2
|
|
3
|
-
|
3
|
+
Management tools for brewing japanese sake.
|
4
|
+
|
5
|
+
- Koji making recipe and weight estimation.
|
6
|
+
- Koji making progress graph.
|
7
|
+
- Step mashing recipe and weight estimation.
|
8
|
+
- Shubo progress graph.
|
9
|
+
- Moromi progress graph.
|
10
|
+
- Moromi BMD graph.
|
11
|
+
- Moromi A-B graph.
|
4
12
|
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
6
13
|
|
7
14
|
## Installation
|
8
15
|
|
@@ -24,15 +31,10 @@ Or install it yourself as:
|
|
24
31
|
|
25
32
|
TODO: Write usage instructions here
|
26
33
|
|
27
|
-
## Development
|
28
|
-
|
29
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
-
|
31
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
34
|
|
33
35
|
## Contributing
|
34
36
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
37
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/yoshida-eth0/ruby-toji.
|
36
38
|
|
37
39
|
## License
|
38
40
|
|
data/example/koji_recipe.rb
CHANGED
@@ -6,11 +6,11 @@ koji = Toji::Ingredient::Koji.expected(100, rice_rate: Toji::Recipe::RiceRate::S
|
|
6
6
|
table = Terminal::Table.new do |t|
|
7
7
|
t << ["", "分量", "白米を基準とした歩合"]
|
8
8
|
t << :separator
|
9
|
-
t << ["麹", koji.dekoji, 1.0 + koji.dekoji_rate]
|
10
|
-
t << [" 蒸米", koji.steamed, 1.0 + koji.steamed_rate]
|
11
|
-
t << [" 白米", koji.raw, 1.0]
|
12
|
-
t << [" 汲水", koji.soaking_water, koji.soaked_rate]
|
13
|
-
t << [" 種麹", koji.tanekoji, koji.tanekoji_rate]
|
9
|
+
t << ["麹", koji.dekoji&.round(2), (1.0 + koji.dekoji_rate)&.round(2)]
|
10
|
+
t << [" 蒸米", koji.steamed&.round(2), (1.0 + koji.steamed_rate)&.round(2)]
|
11
|
+
t << [" 白米", koji.raw&.round(2), 1.0]
|
12
|
+
t << [" 汲水", koji.soaking_water&.round(2), koji.soaked_rate&.round(2)]
|
13
|
+
t << [" 種麹", koji.tanekoji&.round(2), koji.tanekoji_rate&.round(2)]
|
14
14
|
end
|
15
15
|
puts table
|
16
16
|
puts
|
@@ -18,17 +18,17 @@ puts
|
|
18
18
|
table = Terminal::Table.new do |t|
|
19
19
|
t << ["工程", "原料", "分量"]
|
20
20
|
t << :separator
|
21
|
-
t << ["洗米・浸漬", "白米", koji.raw]
|
22
|
-
t << ["", "吸水増加量", koji.soaking_water]
|
21
|
+
t << ["洗米・浸漬", "白米", koji.raw&.round(2)]
|
22
|
+
t << ["", "吸水増加量", koji.soaking_water&.round(2)]
|
23
23
|
t << :separator
|
24
|
-
t << ["水切り", "浸漬米", koji.soaked]
|
25
|
-
t << ["", "蒸発・炊飯前の汲水", koji.steaming_water]
|
24
|
+
t << ["水切り", "浸漬米", koji.soaked&.round(2)]
|
25
|
+
t << ["", "蒸発・炊飯前の汲水", koji.steaming_water&.round(2)]
|
26
26
|
t << :separator
|
27
|
-
t << ["蒸し", "蒸米", koji.steamed]
|
27
|
+
t << ["蒸し", "蒸米", koji.steamed&.round(2)]
|
28
28
|
t << :separator
|
29
|
-
t << ["放冷・引込み", "蒸米", koji.cooled]
|
30
|
-
t << ["", "種麹", koji.tanekoji]
|
29
|
+
t << ["放冷・引込み", "蒸米", koji.cooled&.round(2)]
|
30
|
+
t << ["", "種麹", koji.tanekoji&.round(2)]
|
31
31
|
t << :separator
|
32
|
-
t << ["製麹", "麹", koji.dekoji]
|
32
|
+
t << ["製麹", "麹", koji.dekoji&.round(2)]
|
33
33
|
end
|
34
34
|
puts table
|
data/example/moromi.ipynb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
"cells": [
|
3
3
|
{
|
4
4
|
"cell_type": "code",
|
5
|
-
"execution_count":
|
5
|
+
"execution_count": 2,
|
6
6
|
"metadata": {
|
7
7
|
"scrolled": false
|
8
8
|
},
|
@@ -16,25 +16,25 @@
|
|
16
16
|
" </script>\n",
|
17
17
|
"\n",
|
18
18
|
"\n",
|
19
|
-
"<div id=\"
|
19
|
+
"<div id=\"c10430b3-2705-4de4-9852-7c5c48ca3285\" style=\"height: 100%; width: 100%;\"></div>\n",
|
20
20
|
"\n",
|
21
21
|
"<script>\n",
|
22
22
|
" require(['plotly'], function(Plotly) { \n",
|
23
23
|
"Plotly.newPlot(\n",
|
24
|
-
" '
|
24
|
+
" 'c10430b3-2705-4de4-9852-7c5c48ca3285',\n",
|
25
25
|
" [{\"x\":[0.0,1.0,86400.0,172800.0,259200.0,259201.0,345600.0,345601.0,432000.0,518400.0,604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0,1209600.0,1296000.0,1382400.0,1468800.0,1555200.0,1641600.0,1728000.0,1814400.0,1900800.0,1987200.0,2073600.0],\"y\":[14.8,11.0,14.3,11.3,6.9,10.6,7.5,8.0,9.1,10.4,11.9,12.3,13.1,13.1,12.9,12.8,12.9,12.6,12.0,11.2,10.2,9.7,9.8,9.1,8.4,8.1,8.3,8.1],\"text\":[\"01/16 00:00\",\"01/16 00:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/03 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\",\"02/09 00:00\"],\"name\":\"temps\",\"line\":{\"shape\":\"linear\"}},{\"x\":[0.0,86400.0,172800.0,259200.0,345600.0,432000.0,518400.0,604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0,1209600.0,1296000.0,1382400.0,1468800.0,1555200.0,1641600.0,1728000.0,1814400.0,1900800.0,1987200.0,2073600.0],\"y\":[9,9,8.5,9,6,7,7,8,8,7.5,7.5,7.5,7.0,8.0,8.0,7.0,7.0,6.5,7.0,8.0,6.0,5.0,5.0,7.0,6.0],\"text\":[\"01/16 00:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/03 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\",\"02/09 00:00\"],\"name\":\"room_temp\",\"line\":{\"shape\":\"linear\"}},{\"x\":[604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0,1209600.0,1296000.0,1382400.0,1468800.0,1641600.0,1728000.0,1814400.0,1900800.0,1987200.0],\"y\":[8.6,8.0,7.2,5.8,4.8,4.0,3.4,2.7,2.1,1.7000000000000002,1.3,0.8,0.5,0.30000000000000004,0.2,-0.0],\"text\":[\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\"],\"name\":\"baume\",\"line\":{\"shape\":\"linear\"}},{\"x\":[691200.0,777600.0,864000.0,1036800.0,1123200.0,1209600.0,1296000.0,1641600.0,1814400.0],\"y\":[4.8,6.75,7.992,10.7,11.6,12.7,13.7,16.0,16.3],\"text\":[\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/04 00:00\",\"02/06 00:00\"],\"name\":\"alcohol\",\"line\":{\"shape\":\"linear\"}}],\n",
|
26
|
-
" {\"xaxis\":{\"dtick\":86400,\"tickvals\":[0,86400,172800,259200,345600,432000,518400,604800,691200,777600,864000,950400,1036800,1123200,1209600,1296000,1382400,1468800,1555200,1641600,1728000,1814400,1900800,1987200,2073600],\"ticktext\":[\"soe\",\"odori\",\"odori\",\"naka\",\"tome\",2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]},\"annotations\":[
|
26
|
+
" {\"xaxis\":{\"dtick\":86400,\"tickvals\":[0,86400,172800,259200,345600,432000,518400,604800,691200,777600,864000,950400,1036800,1123200,1209600,1296000,1382400,1468800,1555200,1641600,1728000,1814400,1900800,1987200,2073600],\"ticktext\":[\"soe\",\"odori\",\"odori\",\"naka\",\"tome\",2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]},\"annotations\":[]},\n",
|
27
27
|
" {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
|
28
28
|
")\n",
|
29
29
|
"\n",
|
30
30
|
"window.addEventListener('resize', function() {\n",
|
31
|
-
" Plotly.Plots.resize(document.getElementById('
|
31
|
+
" Plotly.Plots.resize(document.getElementById('c10430b3-2705-4de4-9852-7c5c48ca3285'))\n",
|
32
32
|
"})\n",
|
33
33
|
" }) \n",
|
34
34
|
"</script>"
|
35
35
|
],
|
36
36
|
"text/plain": [
|
37
|
-
"#<Plotly::Offline::HTML:
|
37
|
+
"#<Plotly::Offline::HTML:0x00007fdaf30c3c50 @id=\"c10430b3-2705-4de4-9852-7c5c48ca3285\", @data=[{:x=>[0.0, 1.0, 86400.0, 172800.0, 259200.0, 259201.0, 345600.0, 345601.0, 432000.0, 518400.0, 604800.0, 691200.0, 777600.0, 864000.0, 950400.0, 1036800.0, 1123200.0, 1209600.0, 1296000.0, 1382400.0, 1468800.0, 1555200.0, 1641600.0, 1728000.0, 1814400.0, 1900800.0, 1987200.0, 2073600.0], :y=>[14.8, 11.0, 14.3, 11.3, 6.9, 10.6, 7.5, 8.0, 9.1, 10.4, 11.9, 12.3, 13.1, 13.1, 12.9, 12.8, 12.9, 12.6, 12.0, 11.2, 10.2, 9.7, 9.8, 9.1, 8.4, 8.1, 8.3, 8.1], :text=>[\"01/16 00:00\", \"01/16 00:00\", \"01/17 00:00\", \"01/18 00:00\", \"01/19 00:00\", \"01/19 00:00\", \"01/20 00:00\", \"01/20 00:00\", \"01/21 00:00\", \"01/22 00:00\", \"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\", \"01/30 00:00\", \"01/31 00:00\", \"02/01 00:00\", \"02/02 00:00\", \"02/03 00:00\", \"02/04 00:00\", \"02/05 00:00\", \"02/06 00:00\", \"02/07 00:00\", \"02/08 00:00\", \"02/09 00:00\"], :name=>:temps, :line=>{:shape=>:linear}}, {:x=>[0.0, 86400.0, 172800.0, 259200.0, 345600.0, 432000.0, 518400.0, 604800.0, 691200.0, 777600.0, 864000.0, 950400.0, 1036800.0, 1123200.0, 1209600.0, 1296000.0, 1382400.0, 1468800.0, 1555200.0, 1641600.0, 1728000.0, 1814400.0, 1900800.0, 1987200.0, 2073600.0], :y=>[9, 9, 8.5, 9, 6, 7, 7, 8, 8, 7.5, 7.5, 7.5, 7.0, 8.0, 8.0, 7.0, 7.0, 6.5, 7.0, 8.0, 6.0, 5.0, 5.0, 7.0, 6.0], :text=>[\"01/16 00:00\", \"01/17 00:00\", \"01/18 00:00\", \"01/19 00:00\", \"01/20 00:00\", \"01/21 00:00\", \"01/22 00:00\", \"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\", \"01/30 00:00\", \"01/31 00:00\", \"02/01 00:00\", \"02/02 00:00\", \"02/03 00:00\", \"02/04 00:00\", \"02/05 00:00\", \"02/06 00:00\", \"02/07 00:00\", \"02/08 00:00\", \"02/09 00:00\"], :name=>:room_temp, :line=>{:shape=>:linear}}, {:x=>[604800.0, 691200.0, 777600.0, 864000.0, 950400.0, 1036800.0, 1123200.0, 1209600.0, 1296000.0, 1382400.0, 1468800.0, 1641600.0, 1728000.0, 1814400.0, 1900800.0, 1987200.0], :y=>[8.6, 8.0, 7.2, 5.8, 4.8, 4.0, 3.4, 2.7, 2.1, 1.7000000000000002, 1.3, 0.8, 0.5, 0.30000000000000004, 0.2, -0.0], :text=>[\"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\", \"01/30 00:00\", \"01/31 00:00\", \"02/01 00:00\", \"02/02 00:00\", \"02/04 00:00\", \"02/05 00:00\", \"02/06 00:00\", \"02/07 00:00\", \"02/08 00:00\"], :name=>:baume, :line=>{:shape=>:linear}}, {:x=>[691200.0, 777600.0, 864000.0, 1036800.0, 1123200.0, 1209600.0, 1296000.0, 1641600.0, 1814400.0], :y=>[4.8, 6.75, 7.992, 10.7, 11.6, 12.7, 13.7, 16.0, 16.3], :text=>[\"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/28 00:00\", \"01/29 00:00\", \"01/30 00:00\", \"01/31 00:00\", \"02/04 00:00\", \"02/06 00:00\"], :name=>:alcohol, :line=>{:shape=>:linear}}], @layout={:xaxis=>{:dtick=>86400, :tickvals=>[0, 86400, 172800, 259200, 345600, 432000, 518400, 604800, 691200, 777600, 864000, 950400, 1036800, 1123200, 1209600, 1296000, 1382400, 1468800, 1555200, 1641600, 1728000, 1814400, 1900800, 1987200, 2073600], :ticktext=>[:soe, :odori, :odori, :naka, :tome, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]}, :annotations=>[]}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
|
38
38
|
]
|
39
39
|
},
|
40
40
|
"metadata": {},
|
@@ -49,25 +49,25 @@
|
|
49
49
|
" </script>\n",
|
50
50
|
"\n",
|
51
51
|
"\n",
|
52
|
-
"<div id=\"
|
52
|
+
"<div id=\"afa53933-7db0-4dab-a85d-ebe4a405c08b\" style=\"height: 100%; width: 100%;\"></div>\n",
|
53
53
|
"\n",
|
54
54
|
"<script>\n",
|
55
55
|
" require(['plotly'], function(Plotly) { \n",
|
56
56
|
"Plotly.newPlot(\n",
|
57
|
-
" '
|
57
|
+
" 'afa53933-7db0-4dab-a85d-ebe4a405c08b',\n",
|
58
58
|
" [{\"x\":[259200,345600,432000,518400,604800,691200,777600,864000,950400,1036800,1123200,1296000,1382400,1468800,1555200,1641600],\"y\":[34.4,40.0,43.2,40.6,38.4,36.0,34.0,29.700000000000003,25.200000000000003,22.1,18.2,12.8,8.5,5.4,3.8000000000000003,-0.0],\"text\":[\"2019-01-23 00:00:00 +0900\\u003cbr /\\u003emoromi day=4, be=8.6, bmd=34.4\",\"2019-01-24 00:00:00 +0900\\u003cbr /\\u003emoromi day=5, be=8.0, bmd=40.0\",\"2019-01-25 00:00:00 +0900\\u003cbr /\\u003emoromi day=6, be=7.2, bmd=43.2\",\"2019-01-26 00:00:00 +0900\\u003cbr /\\u003emoromi day=7, be=5.8, bmd=40.6\",\"2019-01-27 00:00:00 +0900\\u003cbr /\\u003emoromi day=8, be=4.8, bmd=38.4\",\"2019-01-28 00:00:00 +0900\\u003cbr /\\u003emoromi day=9, be=4.0, bmd=36.0\",\"2019-01-29 00:00:00 +0900\\u003cbr /\\u003emoromi day=10, be=3.4, bmd=34.0\",\"2019-01-30 00:00:00 +0900\\u003cbr /\\u003emoromi day=11, be=2.7, bmd=29.700000000000003\",\"2019-01-31 00:00:00 +0900\\u003cbr /\\u003emoromi day=12, be=2.1, bmd=25.200000000000003\",\"2019-02-01 00:00:00 +0900\\u003cbr /\\u003emoromi day=13, be=1.7000000000000002, bmd=22.1\",\"2019-02-02 00:00:00 +0900\\u003cbr /\\u003emoromi day=14, be=1.3, bmd=18.2\",\"2019-02-04 00:00:00 +0900\\u003cbr /\\u003emoromi day=16, be=0.8, bmd=12.8\",\"2019-02-05 00:00:00 +0900\\u003cbr /\\u003emoromi day=17, be=0.5, bmd=8.5\",\"2019-02-06 00:00:00 +0900\\u003cbr /\\u003emoromi day=18, be=0.30000000000000004, bmd=5.4\",\"2019-02-07 00:00:00 +0900\\u003cbr /\\u003emoromi day=19, be=0.2, bmd=3.8000000000000003\",\"2019-02-08 00:00:00 +0900\\u003cbr /\\u003emoromi day=20, be=-0.0, bmd=-0.0\"],\"name\":\"actual\"}],\n",
|
59
59
|
" {\"xaxis\":{\"title\":\"Moromi day\",\"dtick\":86400,\"range\":[86400,1728000],\"tickvals\":[0,86400,172800,259200,345600,432000,518400,604800,691200,777600,864000,950400,1036800,1123200,1209600,1296000,1382400,1468800,1555200,1641600],\"ticktext\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]},\"yaxis\":{\"title\":\"BMD\"}},\n",
|
60
60
|
" {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
|
61
61
|
")\n",
|
62
62
|
"\n",
|
63
63
|
"window.addEventListener('resize', function() {\n",
|
64
|
-
" Plotly.Plots.resize(document.getElementById('
|
64
|
+
" Plotly.Plots.resize(document.getElementById('afa53933-7db0-4dab-a85d-ebe4a405c08b'))\n",
|
65
65
|
"})\n",
|
66
66
|
" }) \n",
|
67
67
|
"</script>"
|
68
68
|
],
|
69
69
|
"text/plain": [
|
70
|
-
"#<Plotly::Offline::HTML:
|
70
|
+
"#<Plotly::Offline::HTML:0x00007fdaf4506370 @id=\"afa53933-7db0-4dab-a85d-ebe4a405c08b\", @data=[{:x=>[259200, 345600, 432000, 518400, 604800, 691200, 777600, 864000, 950400, 1036800, 1123200, 1296000, 1382400, 1468800, 1555200, 1641600], :y=>[34.4, 40.0, 43.2, 40.6, 38.4, 36.0, 34.0, 29.700000000000003, 25.200000000000003, 22.1, 18.2, 12.8, 8.5, 5.4, 3.8000000000000003, -0.0], :text=>[\"2019-01-23 00:00:00 +0900<br />moromi day=4, be=8.6, bmd=34.4\", \"2019-01-24 00:00:00 +0900<br />moromi day=5, be=8.0, bmd=40.0\", \"2019-01-25 00:00:00 +0900<br />moromi day=6, be=7.2, bmd=43.2\", \"2019-01-26 00:00:00 +0900<br />moromi day=7, be=5.8, bmd=40.6\", \"2019-01-27 00:00:00 +0900<br />moromi day=8, be=4.8, bmd=38.4\", \"2019-01-28 00:00:00 +0900<br />moromi day=9, be=4.0, bmd=36.0\", \"2019-01-29 00:00:00 +0900<br />moromi day=10, be=3.4, bmd=34.0\", \"2019-01-30 00:00:00 +0900<br />moromi day=11, be=2.7, bmd=29.700000000000003\", \"2019-01-31 00:00:00 +0900<br />moromi day=12, be=2.1, bmd=25.200000000000003\", \"2019-02-01 00:00:00 +0900<br />moromi day=13, be=1.7000000000000002, bmd=22.1\", \"2019-02-02 00:00:00 +0900<br />moromi day=14, be=1.3, bmd=18.2\", \"2019-02-04 00:00:00 +0900<br />moromi day=16, be=0.8, bmd=12.8\", \"2019-02-05 00:00:00 +0900<br />moromi day=17, be=0.5, bmd=8.5\", \"2019-02-06 00:00:00 +0900<br />moromi day=18, be=0.30000000000000004, bmd=5.4\", \"2019-02-07 00:00:00 +0900<br />moromi day=19, be=0.2, bmd=3.8000000000000003\", \"2019-02-08 00:00:00 +0900<br />moromi day=20, be=-0.0, bmd=-0.0\"], :name=>:actual}], @layout={:xaxis=>{:title=>\"Moromi day\", :dtick=>86400, :range=>[86400, 1728000], :tickvals=>[0, 86400, 172800, 259200, 345600, 432000, 518400, 604800, 691200, 777600, 864000, 950400, 1036800, 1123200, 1209600, 1296000, 1382400, 1468800, 1555200, 1641600], :ticktext=>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]}, :yaxis=>{:title=>\"BMD\"}}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
|
71
71
|
]
|
72
72
|
},
|
73
73
|
"metadata": {},
|
@@ -82,25 +82,25 @@
|
|
82
82
|
" </script>\n",
|
83
83
|
"\n",
|
84
84
|
"\n",
|
85
|
-
"<div id=\"
|
85
|
+
"<div id=\"26a57095-09b3-4249-9eb3-3b3901d31e36\" style=\"height: 100%; width: 100%;\"></div>\n",
|
86
86
|
"\n",
|
87
87
|
"<script>\n",
|
88
88
|
" require(['plotly'], function(Plotly) { \n",
|
89
89
|
"Plotly.newPlot(\n",
|
90
|
-
" '
|
90
|
+
" '26a57095-09b3-4249-9eb3-3b3901d31e36',\n",
|
91
91
|
" [{\"x\":[4.8,6.75,7.992,10.7,11.6,12.7,13.7,16.0,16.3],\"y\":[8.0,7.2,5.8,4.0,3.4,2.7,2.1,0.8,0.30000000000000004],\"text\":[\"2019-01-24 00:00:00 +0900\\u003cbr /\\u003ealc=4.8, be=8.0\",\"2019-01-25 00:00:00 +0900\\u003cbr /\\u003ealc=6.75, be=7.2\",\"2019-01-26 00:00:00 +0900\\u003cbr /\\u003ealc=7.992, be=5.8\",\"2019-01-28 00:00:00 +0900\\u003cbr /\\u003ealc=10.7, be=4.0\",\"2019-01-29 00:00:00 +0900\\u003cbr /\\u003ealc=11.6, be=3.4\",\"2019-01-30 00:00:00 +0900\\u003cbr /\\u003ealc=12.7, be=2.7\",\"2019-01-31 00:00:00 +0900\\u003cbr /\\u003ealc=13.7, be=2.1\",\"2019-02-04 00:00:00 +0900\\u003cbr /\\u003ealc=16.0, be=0.8\",\"2019-02-06 00:00:00 +0900\\u003cbr /\\u003ealc=16.3, be=0.30000000000000004\"],\"name\":\"actual\"},{\"x\":[16.05,4.049999999999999],\"y\":[0.0,8.0],\"name\":\"+3.0 16.5\"},{\"x\":[16.55,4.549999999999999],\"y\":[0.0,8.0],\"name\":\"+3.0 17.0\"},{\"x\":[16.5,4.5],\"y\":[0.0,8.0],\"name\":\"+0.0 16.5\"}],\n",
|
92
92
|
" {\"xaxis\":{\"title\":\"Alcohol\",\"dtick\":2,\"range\":[0,20]},\"yaxis\":{\"title\":\"Baume\",\"dtick\":1,\"range\":[0,10]}},\n",
|
93
93
|
" {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
|
94
94
|
")\n",
|
95
95
|
"\n",
|
96
96
|
"window.addEventListener('resize', function() {\n",
|
97
|
-
" Plotly.Plots.resize(document.getElementById('
|
97
|
+
" Plotly.Plots.resize(document.getElementById('26a57095-09b3-4249-9eb3-3b3901d31e36'))\n",
|
98
98
|
"})\n",
|
99
99
|
" }) \n",
|
100
100
|
"</script>"
|
101
101
|
],
|
102
102
|
"text/plain": [
|
103
|
-
"#<Plotly::Offline::HTML:
|
103
|
+
"#<Plotly::Offline::HTML:0x00007fdaf452f590 @id=\"26a57095-09b3-4249-9eb3-3b3901d31e36\", @data=[{:x=>[4.8, 6.75, 7.992, 10.7, 11.6, 12.7, 13.7, 16.0, 16.3], :y=>[8.0, 7.2, 5.8, 4.0, 3.4, 2.7, 2.1, 0.8, 0.30000000000000004], :text=>[\"2019-01-24 00:00:00 +0900<br />alc=4.8, be=8.0\", \"2019-01-25 00:00:00 +0900<br />alc=6.75, be=7.2\", \"2019-01-26 00:00:00 +0900<br />alc=7.992, be=5.8\", \"2019-01-28 00:00:00 +0900<br />alc=10.7, be=4.0\", \"2019-01-29 00:00:00 +0900<br />alc=11.6, be=3.4\", \"2019-01-30 00:00:00 +0900<br />alc=12.7, be=2.7\", \"2019-01-31 00:00:00 +0900<br />alc=13.7, be=2.1\", \"2019-02-04 00:00:00 +0900<br />alc=16.0, be=0.8\", \"2019-02-06 00:00:00 +0900<br />alc=16.3, be=0.30000000000000004\"], :name=>:actual}, {:x=>[16.05, 4.049999999999999], :y=>[0.0, 8.0], :name=>\"+3.0 16.5\"}, {:x=>[16.55, 4.549999999999999], :y=>[0.0, 8.0], :name=>\"+3.0 17.0\"}, {:x=>[16.5, 4.5], :y=>[0.0, 8.0], :name=>\"+0.0 16.5\"}], @layout={:xaxis=>{:title=>\"Alcohol\", :dtick=>2, :range=>[0, 20]}, :yaxis=>{:title=>\"Baume\", :dtick=>1, :range=>[0, 10]}}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
|
104
104
|
]
|
105
105
|
},
|
106
106
|
"metadata": {},
|
@@ -109,10 +109,10 @@
|
|
109
109
|
{
|
110
110
|
"data": {
|
111
111
|
"text/plain": [
|
112
|
-
"#<CZTop::Socket::PUB:
|
112
|
+
"#<CZTop::Socket::PUB:0x7fdaf259d730 last_endpoint=\"tcp://127.0.0.1:62137\">"
|
113
113
|
]
|
114
114
|
},
|
115
|
-
"execution_count":
|
115
|
+
"execution_count": 2,
|
116
116
|
"metadata": {},
|
117
117
|
"output_type": "execute_result"
|
118
118
|
}
|
@@ -123,7 +123,7 @@
|
|
123
123
|
"require 'rbplotly'\n",
|
124
124
|
"\n",
|
125
125
|
"moromi = Toji::Product::Moromi.template\n",
|
126
|
-
"moromi.progress.plot.show\n",
|
126
|
+
"moromi.progress(enable_annotations: false).plot.show\n",
|
127
127
|
"moromi.bmd.plot.show\n",
|
128
128
|
"\n",
|
129
129
|
"moromi.ab(1.5)\n",
|
data/example/rice_recipe.rb
CHANGED
@@ -7,9 +7,9 @@ rice = Toji::Ingredient::Rice.expected(100, rice_rate: Toji::Recipe::RiceRate::C
|
|
7
7
|
table = Terminal::Table.new do |t|
|
8
8
|
t << ["", "分量", "白米を基準とした歩合"]
|
9
9
|
t << :separator
|
10
|
-
t << ["蒸米", rice.steamed, 1.0 + rice.steamed_rate]
|
11
|
-
t << [" 白米", rice.raw, 1.0]
|
12
|
-
t << [" 汲水", rice.soaking_water, rice.soaked_rate]
|
10
|
+
t << ["蒸米", rice.steamed&.round(2), (1.0 + rice.steamed_rate)&.round(2)]
|
11
|
+
t << [" 白米", rice.raw&.round(2), 1.0]
|
12
|
+
t << [" 汲水", rice.soaking_water&.round(2), rice.soaked_rate&.round(2)]
|
13
13
|
end
|
14
14
|
puts table
|
15
15
|
puts
|
@@ -17,12 +17,12 @@ puts
|
|
17
17
|
table = Terminal::Table.new do |t|
|
18
18
|
t << ["工程", "原料", "分量"]
|
19
19
|
t << :separator
|
20
|
-
t << ["洗米・浸漬", "白米", rice.raw]
|
21
|
-
t << ["", "吸水増加量", rice.soaking_water]
|
20
|
+
t << ["洗米・浸漬", "白米", rice.raw&.round(2)]
|
21
|
+
t << ["", "吸水増加量", rice.soaking_water&.round(2)]
|
22
22
|
t << :separator
|
23
|
-
t << ["水切り", "浸漬米", rice.soaked]
|
24
|
-
t << ["", "蒸発・炊飯前の汲水", rice.steaming_water]
|
23
|
+
t << ["水切り", "浸漬米", rice.soaked&.round(2)]
|
24
|
+
t << ["", "蒸発・炊飯前の汲水", rice.steaming_water&.round(2)]
|
25
25
|
t << :separator
|
26
|
-
t << ["蒸し", "蒸米", rice.steamed]
|
26
|
+
t << ["蒸し", "蒸米", rice.steamed&.round(2)]
|
27
27
|
end
|
28
28
|
puts table
|
data/lib/toji/graph/progress.rb
CHANGED
@@ -2,8 +2,11 @@ module Toji
|
|
2
2
|
module Graph
|
3
3
|
class Progress
|
4
4
|
|
5
|
-
|
5
|
+
attr_accessor :enable_annotations
|
6
|
+
|
7
|
+
def initialize(product, enable_annotations: true)
|
6
8
|
@product = product
|
9
|
+
@enable_annotations = enable_annotations
|
7
10
|
end
|
8
11
|
|
9
12
|
def data(keys=nil)
|
@@ -75,7 +78,7 @@ module Toji
|
|
75
78
|
tickvals: @product.days.times.map{|d| d*Product::Job::DAY},
|
76
79
|
ticktext: @product.day_labels
|
77
80
|
},
|
78
|
-
annotations: annotations,
|
81
|
+
annotations: @enable_annotations ? annotations : [],
|
79
82
|
}
|
80
83
|
)
|
81
84
|
end
|
data/lib/toji/product/moromi.rb
CHANGED
data/lib/toji/product/shubo.rb
CHANGED
@@ -118,8 +118,8 @@ module Toji
|
|
118
118
|
days.times.map(&:succ)
|
119
119
|
end
|
120
120
|
|
121
|
-
def progress
|
122
|
-
Graph::Progress.new(self)
|
121
|
+
def progress(enable_annotations: true)
|
122
|
+
Graph::Progress.new(self, enable_annotations: enable_annotations)
|
123
123
|
end
|
124
124
|
|
125
125
|
def self.template(key=:default)
|
@@ -5,17 +5,47 @@ module Toji
|
|
5
5
|
include Base
|
6
6
|
|
7
7
|
# 炊飯器を使う場合
|
8
|
+
#
|
9
|
+
# 浸漬。
|
10
|
+
# 25〜30分くらい浸漬させないと中心部まで水を吸わない。
|
11
|
+
# => 吸水歩合 約1.30。
|
12
|
+
#
|
13
|
+
# 炊飯。
|
14
|
+
# 吸水と炊く用の水を合わせて歩合1.50くらいにしないと中心部まで火が通らない、且つ側面が焦げる。
|
15
|
+
# 圧力がかかる熟成炊きみたいな長めの炊飯が良い。
|
16
|
+
# => 蒸米歩合 約1.40。
|
17
|
+
#
|
8
18
|
# 白米の60%の水で炊くと蒸米吸水率はだいたい38%くらいになる
|
9
19
|
# 炊飯、放冷の過程で水分のうち36%程度は蒸発する
|
20
|
+
#
|
21
|
+
# 放冷。
|
22
|
+
# 歩合1.36〜1.37くらいになる。
|
23
|
+
# 更に歩合を下げたければ炊飯までは同じで、放冷に注力するのが良い。
|
10
24
|
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
25
|
+
# 重量推移の例
|
26
|
+
#
|
27
|
+
# 浸漬
|
28
|
+
# before
|
29
|
+
# 白米(無洗米コシヒカリ) 100g
|
30
|
+
# after
|
31
|
+
# 吸水後白米 130g
|
32
|
+
# (吸水歩合 30%)
|
33
|
+
#
|
34
|
+
# 炊飯
|
35
|
+
# before
|
36
|
+
# 吸水後白米 130g
|
37
|
+
# 炊飯用水 20g
|
38
|
+
# (吸水歩合+炊飯水率 50%)
|
39
|
+
# after
|
40
|
+
# 炊飯米 140g
|
41
|
+
# (炊飯米吸水率 40%)
|
42
|
+
#
|
43
|
+
# 放冷
|
44
|
+
# before
|
45
|
+
# 炊飯米 140g
|
46
|
+
# after
|
47
|
+
# 放冷後炊飯米 136g
|
48
|
+
# (放冷後炊飯米吸水率 36%)
|
19
49
|
|
20
50
|
def initialize(soaked_rate, before_steaming_rate, steamed_rate, cooled_rate)
|
21
51
|
@soaked_rate = soaked_rate
|
data/lib/toji/version.rb
CHANGED
data/toji.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ["Yoshida Tetsuya"]
|
9
9
|
spec.email = ["yoshida.eth0@gmail.com"]
|
10
10
|
|
11
|
-
spec.summary = %q{}
|
12
|
-
spec.description = %q{}
|
11
|
+
spec.summary = %q{Management tools for brewing japanese sake.}
|
12
|
+
spec.description = %q{Management tools for brewing japanese sake.}
|
13
13
|
spec.homepage = "https://github.com/yoshida-eth0/ruby-toji"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toji
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshida Tetsuya
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -94,7 +94,7 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '5.0'
|
97
|
-
description:
|
97
|
+
description: Management tools for brewing japanese sake.
|
98
98
|
email:
|
99
99
|
- yoshida.eth0@gmail.com
|
100
100
|
executables: []
|
@@ -111,7 +111,6 @@ files:
|
|
111
111
|
- bin/setup
|
112
112
|
- example/koji_making.ipynb
|
113
113
|
- example/koji_making.rb
|
114
|
-
- example/koji_making2.rb
|
115
114
|
- example/koji_recipe.rb
|
116
115
|
- example/moromi.ipynb
|
117
116
|
- example/moromi.rb
|
@@ -182,5 +181,5 @@ requirements: []
|
|
182
181
|
rubygems_version: 3.0.3
|
183
182
|
signing_key:
|
184
183
|
specification_version: 4
|
185
|
-
summary:
|
184
|
+
summary: Management tools for brewing japanese sake.
|
186
185
|
test_files: []
|
data/example/koji_making2.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'toji'
|
2
|
-
require 'terminal-table'
|
3
|
-
|
4
|
-
rice_rate = Toji::Recipe::RiceRate.cooked(0.30, 0.45, 0.40, 0.37)
|
5
|
-
koji = Toji::Ingredient::Koji.expected(200.0, rice_rate: rice_rate)
|
6
|
-
#koji = Toji::Ingredient::Koji.actual(200.0, 266.0, 24.0, 280.0, 270, 0.2, 0.0)
|
7
|
-
|
8
|
-
table = Terminal::Table.new do |t|
|
9
|
-
t << ["", "分量", "白米を基準とした歩合"]
|
10
|
-
t << :separator
|
11
|
-
t << ["麹", koji.dekoji, 1.0 + koji.dekoji_rate]
|
12
|
-
t << [" 蒸米", koji.steamed, 1.0 + koji.steamed_rate]
|
13
|
-
t << [" 白米", koji.raw, 1.0]
|
14
|
-
t << [" 汲水", koji.soaking_water, koji.soaked_rate]
|
15
|
-
t << [" 種麹", koji.tanekoji, koji.tanekoji_rate]
|
16
|
-
end
|
17
|
-
puts table
|
18
|
-
puts
|
19
|
-
|
20
|
-
table = Terminal::Table.new do |t|
|
21
|
-
t << ["工程", "原料", "分量"]
|
22
|
-
t << :separator
|
23
|
-
t << ["洗米・浸漬", "白米", koji.raw&.round(2)]
|
24
|
-
t << ["", "吸水増加量", koji.soaking_water&.round(2)]
|
25
|
-
t << :separator
|
26
|
-
t << ["水切り", "浸漬米", koji.soaked&.round(2)]
|
27
|
-
t << ["", "蒸発・炊飯前の汲水", koji.steaming_water&.round(2)]
|
28
|
-
t << :separator
|
29
|
-
t << ["蒸し", "蒸米", koji.steamed&.round(2)]
|
30
|
-
t << :separator
|
31
|
-
t << ["放冷・引込み", "蒸米", koji.cooled&.round(2)]
|
32
|
-
t << ["", "種麹", koji.tanekoji&.round(2)]
|
33
|
-
t << :separator
|
34
|
-
t << ["製麹", "麹", koji.dekoji&.round(2)]
|
35
|
-
end
|
36
|
-
puts table
|
37
|
-
|
38
|
-
|
39
|
-
koji_making = Toji::Product::KojiMaking.template
|
40
|
-
|
41
|
-
table = Terminal::Table.new do |t|
|
42
|
-
t << ["作業", "品温(度)", "操作室温", "乾湿差(度)", "経過時間", "日時"]
|
43
|
-
t << :separator
|
44
|
-
koji_making.each {|j|
|
45
|
-
temp = j.temps.map(&:to_s).join(" / ")
|
46
|
-
t << [j.id, temp, j.room_temp, j.room_psychrometry, j.elapsed_time, j.display_time]
|
47
|
-
}
|
48
|
-
end
|
49
|
-
puts table
|
50
|
-
|
51
|
-
|
52
|
-
koji_making = Toji::Product::KojiMaking.template
|
53
|
-
koji_making.add(Toji::Product::Job.new(
|
54
|
-
time: Time.mktime(2020, 1, 15, 13, 15),
|
55
|
-
id: :hikikomi,
|
56
|
-
temps: 31.2,
|
57
|
-
preset_temp: 35,
|
58
|
-
room_temp: 25,
|
59
|
-
))
|
60
|
-
|
61
|
-
table = Terminal::Table.new do |t|
|
62
|
-
t << ["作業", "品温(度)", "操作室温", "設定温度", "経過時間", "日時"]
|
63
|
-
t << :separator
|
64
|
-
koji_making.each {|j|
|
65
|
-
temp = j.temps.map(&:to_s).join(" / ")
|
66
|
-
t << [j.id, temp, j.room_temp, j.preset_temp, j.elapsed_time, j.display_time]
|
67
|
-
}
|
68
|
-
end
|
69
|
-
puts table
|