Friday, December 9, 2011

Android Homebrew Recipe Viewer

I have started a simple android app to provide electronic colourful labels/recipes for Homebrew. This has been an exercise in learning something more than anything else.

The idea is that with a web-page/qr code added to a bottle of homebrew a user could look to find details about the recipe. Ideas are to integrate with something to get feedback (ratings/reviews for when beer is left). If this was to go further there would need to be a web based view for those without android (I'm unlikely to pay $99/year to develop for IOS).
I might even get my brewing process software robust enough that the process could be published alongside the recipe for someone else to replicate. Given this has been a learning exercise how much motivation is left remains to be seen.

The app is fairly simple it takes reacts to an Intent providing a url to a BeerXMLv2 recipe file. There is an "extension" stanza adding a few extra bits of information.. longer term there should be a better answer.

An intent can be set as a link in a webpage, i.e. <a href="net.collie.mellon.recipeviewer://recipeviewer/recipeurl/">find recipe here</a>.
The recipeurl is a base64 encoded string providing the location of the recipe xml.

It would be nice to detect the useragent, if it's an android device link to the market or launch the application. I've got a few thoughts in that area but nothing robust yet.

1:  <?xml version="1.0" encoding="UTF-8"?>  
2:  <beer_xml xmlns="urn:beerxml:v2" xmlns:ferm="urn:beerxml:fermentable:v2" xmlns:hop="urn:beerxml:hop:v2" xmlns:step="urn:beerxml:mash:step:v2" xmlns:mash="urn:beerxml:mash:v2" xmlns:misc="urn:beerxml:miscellaneous:v2" xmlns:rec="urn:beerxml:recipe:v2" xmlns:style="urn:beerxml:style:v2" xmlns:unit="urn:beerxml:unit:v2" xmlns:water="urn:beerxml:water:v2" xmlns:yeast="urn:beerxml:yeast:v2" xmlns:xsi="" xsi:schemaLocation="urn:beerxml:v2 BeerXML.v2.xsd"     xmlns:extension="urn:aaa:extension">  
3:       <version>2.06</version>  
4:       <recipes>  
5:            <recipe>  
6:                 <rec:name>WV Bitter</rec:name>  
7:                 <rec:type>All-Grain</rec:type>  
8:                 <rec:author> </rec:author>  
9:                 <rec:batch_size volume="l">21</rec:batch_size>  
10:                 <rec:boil_size volume="l">0.0</rec:boil_size>  
11:                 <rec:boil_time duration="min">60.0</rec:boil_time>  
12:                 <rec:efficiency>68.0</rec:efficiency>  
13:                 <rec:style>  
14:                      <style:name>None</style:name>  
15:                 </rec:style>  
16:                 <rec:ingredients>  
17:                      <rec:grain_bill>  
18:                           <ferm:addition>  
19:                                <ferm:name>Maris Otter</ferm:name>  
20:                                <ferm:type>grain</ferm:type>  
21:                                <ferm:amount mass="g">4852.6</ferm:amount>  
22:                           </ferm:addition>  
23:                           <ferm:addition>  
24:                                <ferm:name>Crystal 120</ferm:name>  
25:                                <ferm:type>grain</ferm:type>  
26:                                <ferm:amount mass="g">485.3</ferm:amount>  
27:                           </ferm:addition>  
28:                           <ferm:addition>  
29:                                <ferm:name>Torrified Wheat</ferm:name>  
30:                                <ferm:type>grain</ferm:type>  
31:                                <ferm:amount mass="g">388.2</ferm:amount>  
32:                           </ferm:addition>  
33:                      </rec:grain_bill>  
34:                      <rec:adjuncts>  
35:                           <misc:addition>  
36:                                <misc:name>Honey</misc:name>  
37:                                <misc:type></misc:type>  
38:                                <misc:amount mass="g">320.3</misc:amount>  
39:                           </misc:addition>  
40:                      </rec:adjuncts>  
41:                      <rec:hop_bill>  
42:                           <hop:addition>  
43:                                <hop:name>Northdown</hop:name>  
44:                                <hop:form>leaf</hop:form>  
45:                                <hop:alpha_acid_units>8.60</hop:alpha_acid_units>  
46:                                <hop:amount mass="g">19.2</hop:amount>  
47:                                <hop:use>boil</hop:use>  
48:                                <hop:time duration="min">60.0</hop:time>  
49:                           </hop:addition>  
50:                           <hop:addition>  
51:                                <hop:name>Challenger</hop:name>  
52:                                <hop:form>leaf</hop:form>  
53:                                <hop:alpha_acid_units>8.50</hop:alpha_acid_units>  
54:                                <hop:amount mass="g">38.5</hop:amount>  
55:                                <hop:use>boil</hop:use>  
56:                                <hop:time duration="min">60.0</hop:time>  
57:                           </hop:addition>  
58:                           <hop:addition>  
59:                                <hop:name>Northdown</hop:name>  
60:                                <hop:form>leaf</hop:form>  
61:                                <hop:alpha_acid_units>8.60</hop:alpha_acid_units>  
62:                                <hop:amount mass="g">19.2</hop:amount>  
63:                                <hop:use>boil</hop:use>  
64:                                <hop:time duration="min">15.0</hop:time>  
65:                           </hop:addition>  
66:                           <hop:addition>  
67:                                <hop:name>Saaz</hop:name>  
68:                                <hop:form>leaf</hop:form>  
69:                                <hop:alpha_acid_units>3.80</hop:alpha_acid_units>  
70:                                <hop:amount mass="g">18.0</hop:amount>  
71:                                <hop:use>boil</hop:use>  
72:                                <hop:time duration="min">15.0</hop:time>  
73:                           </hop:addition>  
74:                           <hop:addition>  
75:                                <hop:name>Saaz</hop:name>  
76:                                <hop:form>leaf</hop:form>  
77:                                <hop:alpha_acid_units>3.80</hop:alpha_acid_units>  
78:                                <hop:amount mass="g">18.0</hop:amount>  
79:                                <hop:use>boil</hop:use>  
80:                                <hop:time duration="min">0.0</hop:time>  
81:                           </hop:addition>  
82:                      </rec:hop_bill>  
83:                      <rec:yeast_additions>  
84:                           <yeast:addition>  
85:                                <yeast:name>Yeast Slurry</yeast:name>  
86:                                <yeast:amount volume="g">11.0</yeast:amount>  
87:                           </yeast:addition>  
88:                      </rec:yeast_additions>  
89:                 </rec:ingredients>  
90:                 <rec:notes>A bitter which will be brewed to start using some old hops.</rec:notes>  
91:                 <rec:original_gravity>1.0512</rec:original_gravity>  
92:                 <rec:final_gravity>1.0138</rec:final_gravity>  
93:            </recipe>  
94:       </recipes>  
95:       <extension>          <brewDate>1318586400</brewDate>          <bottleDate>1319972400</bottleDate>          <extension:actualOg>1.0500</extension:actualOg>          <extension:breweryName>Wards View Brewing</extension:breweryName>          <extension:brewcost>19.21</extension:brewcost>  
96:       </extension>  
97:  </beer_xml>  

Sunday, November 13, 2011

Homebrew bottled and a £1 donated via Movember for each bottle

Saturday, November 5, 2011

Brewday finished. With the new fermentation bin I can see how much crap makes it out of the boiler.

Recipe Details

Volume:20 L
Cost:£ 10.03
Mash Efficiency:68%
Estimated Original Gravity:1.051
Estimated Final Gravity:1.014
Estimated ABV:4.90 %
Estimated IBU:30.8
Estimated Colour (EBC):9.3
Estimated Style:Classic American Pilsner
Boil Time:60 min
Recipe Type:All-Grain
Default Process:15AG10i11


Qty  Description  Cost
5067.8 gm(90.2 %) Maris Otter £ 3.73
342.7 gm(6.1 %) Honey £ 1.00
207.7 gm(3.7 %) Torrified Wheat £ 0.25


Qty  Description  Cost
48.4 gm(100.0 %) Green Bullet
27 gm @ 60 min (26.7 IBU)
8 gm @ 15 min (4.1 IBU)
13 gm @ 0.001 min (0.0 IBU)
 £ 1.33


Qty  Description  Cost
1.0 pkt(100.0 %) Safale S04 

Sunday, October 30, 2011

Time will tell if this last brew (AG#9) will turn out a good one or infected.
While transferring from the kettle to the fermentation bin a towel was soaking up wort (gambled that the temperature was still around 90deg) and the first time of using yeast slurry.

Sunday, October 16, 2011

As stocks of conditioned beer are running low another brew with the aim of using up some of the Saaz, Northdown and Challenger hops. The aim is to focus on at most 3 core hops for most brews.
This is the first time reusing yeast slurry, which is looking like a solid start to fermentation.

This brew was the first use of an android application instead of the web based brewlog. A suprise discovery is that wrapping the tablet in clingfilm (a diy approach to protect against splashes) cleans the screen.

Wednesday, October 12, 2011

Goose W

The first mini-keg trial underway with 5L of the brew, the rest went into bottles.

Tasting pretty good out the FV and hit the final gravity pretty well.

Sunday, October 2, 2011

This weekend had a few bottles of the last brew before summer and it's pretty good.

Today's brewday was fairly uneventful, close to predictions from the calculations throughout. The only small mistake was thinking that I had a lot of wort (5L) spare. After all cooled probably 1L low in the fermentation bin.... still should get 20L out of this batch though.

Going to try reusing the yeast in the a follow on brew.

Saturday, October 1, 2011

First brew day for 2011/H2

Recipe - pure_gold_goose

This recipe is a variation of the_gold_goose, Centennial is used in place of Cascade and Willamette is used in place of Glacier.

Recipe Details

Volume:21 L
Cost:£ 12.93
Mash Efficiency:68%
Estimated Original Gravity:1.053
Estimated Final Gravity:1.014
Estimated ABV:5.10 %
Estimated IBU:44.1
Estimated Colour (EBC):10.1
Estimated Style:Bohemian Pilsener
Boil Time:60 min
Recipe Type:All-Grain
Default Process:13AG8i9


Qty  Description  Cost
4871.1 gm(77.2 %)Maris Otter£ 3.58
321.5 gm(5.1 %)Honey£ 0.42
730.7 gm(11.6 %)CaraGold£ 0.86
389.7 gm(6.2 %)Torrified Wheat£ 0.46


Qty  Description  Cost
51.2 gm(43.2 %)Centennial
26 gm @ 60 min (19.1 IBU)
26 gm @ 15 min (9.5 IBU)
£ 1.31
51.2 gm(43.2 %)Willamette
26 gm @ 60 min (10.0 IBU)
26 gm @ 15 min (5.0 IBU)
£ 1.02
16.0 gm(13.5 %)Hallertau Hersbrucker
6 gm @ 15 min (0.5 IBU)
10 gm @ 0.001 min (0.0 IBU)
£ 0.03


Qty  Description  Cost
1.0 pkt(100.0 %)Safale S04£ 1.44

Wednesday, September 14, 2011

Ingredients -

First delivery of homebrew ingredients for 2011/H2.

25kg of Maris Otter
2kg of Torrefied Wheat
2kg of CaraGold

That should last a year!

Saturday, April 30, 2011

side by side comparison

Published with Blogger-droid v1.6.8

Sunday, April 24, 2011

the grain for the last pre summer brew

Published with Blogger-droid v1.6.8

Monday, April 18, 2011

The yellow goose was bottled at the weekend... now washed everything and put it away until next brew day.
Published with Blogger-droid v1.6.7

Friday, April 15, 2011

Wednesday, April 13, 2011

beer storage

Published with Blogger-droid v1.6.7

Saturday, April 2, 2011

Brewday getting under way

Recipe - yellow_goose

This recipe is a descendant of the white river goose, but removes the Glacier hops to make way for the lemongrass added towards the end of flameout.

Recipe Details

Volume: 19 L
Cost: £ 4.61
Mash Efficiency: 67%
Estimated Original Gravity: 1.047
Estimated Final Gravity: 1.013
Estimated ABV: 4.45 %
Estimated IBU: 28.6
Estimated Colour (EBC): 9.3
Estimated Style: Classic American Pilsner
Boil Time: 60 min
Recipe Type: All-Grain
Process: 11AG5i6


Qty    Description    Cost
500.0 gm (10.6 %) CaraGold £ 0.00
250.0 gm (5.3 %) Torrified Wheat £ 0.38
230.0 gm (4.9 %) Honey £ 0.00
3725.0 gm (79.2 %) Maris Otter £ 1.24


Qty    Description    Cost
27.0 gm (44.3 %) Hallertau Hersbrucker
20 gm @ 15 min (2.2 IBU)
14 gm @ 0.001 min (0.0 IBU)
£ 0.10
34.0 gm (55.7 %) Centennial
18 gm @ 60 min (21.2 IBU)
9 gm @ 15 min (5.3 IBU)
£ 0.87


Qty    Description    Cost
1.0 pkt (100.0 %) Safale S04 £ 1.99


Qty    Description    Cost
38.9 L (59.0 %) Bottled Water (2L) £ 0.00
2.0 stalks (3.0 %) Lemongrass £ 0.00
25.0 gm (37.9 %) Lemon Peel £ 0.00


Qty    Description    Cost
6.0 tsp (63.2 %) Sterilising Powder £ 0.01
2.0 tsp (21.1 %) Burton Water Salts £ 0.00
0.5 gm (5.3 %) Yeast Vit £ 0.00
1.0 tablet (10.5 %) Protofloc £ 0.02

Sunday, March 6, 2011

Steam Ale Bottled

Steam Ale Bottled... 41 bottles without much fuss.

The last brew has come on well, the dregs from the bottom of the fermentation bin have conditioned well after 5 weeks. Time to name it and get some labels printed.

Thinking about a lemon flavoured brew next, probably will use the the goose as a base, but adjust it to just Centennial and Halleratu Hops. 

Saturday, February 19, 2011

Steam Ale in the fermentation bin

Everything went to plan with the steamale... could have taken more from the copper's but had disturbed the hop trub. 

Ended up with 23 litres of wort @ 1.048 instead of 22 litres of wort @ 1.052. pretty close to targets all day. 
Hopefully this will turn out to be the best yet.

Thursday, February 10, 2011

Steam Ale

Picked up some more malt ready for the next brew, and put together a tentative  recipe with my very own python cli/web-based brewing app.

Sunday, January 23, 2011


All Grain Number 4 completed

"A copy of 'White River Goose' but using Cascade in place of Centennial and Caragold instead of a Caramalt. The golden syrrup is replaced by a bigger malt content"

I've used up some of the older hops, and used new equipment and my own brewing software.
Original Gravity and volume was lower than expected, but the proof will be in the drinking.

Some of the first all grain have conditioned well and are quite drinkable. Not quite as good as the original white river goose, but that has had much longer to condition. hop monster is doing quite well, still bitter but not so much that it's not drinkable. The bass ale clone has suffered with the keg not keeping pressure to dispense... at some point I'll get around to bottling and using it for steak/ale pies. I'm doing well at not starting on the still unnamed all grain number 3... the aim is to keep as much as possible until end of Feb.

Monday, January 3, 2011

new home brew needed soon

only have 1 bottle of white goose left and 1 bottle of orange river goose left.

time to brew more beer!