- From: Pierre Dubois <duboisp2@gmail.com>
- Date: Mon, 31 Dec 2012 14:09:49 -0500
- To: Ian Hickson <ian@hixie.ch>
- Cc: "whatwg@whatwg.org" <whatwg@whatwg.org>
On Fri Dec 14 2012, Ian Hickson wrote: > I don't think this works for all tables. For example, the first example in > the spec in the <th> element's section does not get handled correctly by > your algorithm -- it treats the ID column as important, instead of the > second column. I may did not used the correct word to identify that kind of cell that I named "Key cell". The objective of the "Key cell" is to identify a "td" cell that have a relationships to a "th" cell at his right side in the same row. The "td" rowspan attribute would need to match or be lower than the corresponding "th". The inverse would show a data cell "td" used as an heading cell "th". The current relationships algorithm create a relationship for the preceding "th" cell not following "th" cell. > Without the scope="" attributes, I don't think that table > would make much sense. You have right that the proposed algorithm, for the first example in the spec in the <th> element's section does not get handled correctly. The question is: Why from a visual point of view, by excluding any styling, can you feel that "Cats" cell and the "English speakers" cell is know as a row group as highlighted in the source code with the scope attribute set to "rowgroup"? My answer is: Because the header cell is surounded by empty data cell in his row. For me that represent a mix of a layout table combined with a data table. A quick fix to the proposed algorithm would be at the end of the data row processing, do a test to know if the header cell is surrounded by empty data cell, that until the first real data row is found in the rowgroup (tbody) section. If that is true, the header cell scope can be determined as a rowgroup header and the surrounded empty data cell can be know as layout cell. Is that make sense? Have you another visual logic regarding that case? > Similarly, the "Characteristics with positive and > negative sides" example used a number of times in the HTML spec works > better with a few headers="" attributes to define the mappings than > without, as far as I can tell The raison you need the "headers" attributes is because the current relationships algorithm do not support the "Key cell" relationship as explained above. > (though your algorithm does make a valiant > attempt, I will grant you). Thank you, I will do my best to explain the table usability concept. > > Proposal: Table Usability API > > This is a very elaborate and large API. What are the use cases against > which to evaluate it? i.e. what problem does it solve? The main use case is to parse a complex table and extract the data in the objectif to create an accessible (WCAG 2.0 Level AA compliant) chart by using the progressive enhancement strategy. The use of the table to create the chart remove the need for an web author to discus and sometime debate with the content provider in the objectif to build a descriptive text alternative version of the chart. Also the proposed Table Usability API is not just to handle complex table. The proposed API provide support access the tabular data either by his row or by his columns. Sometime, for presentational purpose, the axes are reversed. As an example took the following two row table. Do you think, for presentational purpose, it will be better have a two column table instead? I think both table, with equivalent structure, should be supported and have an equivalent accessible API. (reference: http://agora.ic.gc.ca/lineActivityRevenue_eng.cfm?p_auction_id=5.0&p_round_no=331) <h2>Revenue Graph</h2> <table class="wet-boew-charts wb-charts-line wb-charts-height-450 wb-charts-width-550"> <caption>Standing High Bids (M$)</caption> <thead> <tr> <th>Round</th> <td>1</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td>6</td> <td>7</td> <td>8</td> <td>9</td> <td>10</td> <td>11</td> <td>12</td> <td>13</td> <td>14</td> <td>15</td> <td>16</td> <td>17</td> <td>18</td> <td>19</td> <td>20</td> <td>21</td> <td>22</td> <td>23</td> <td>24</td> <td>25</td> <td>26</td> <td>27</td> <td>28</td> <td>29</td> <td>30</td> <td>31</td> <td>32</td> <td>33</td> <td>34</td> <td>35</td> <td>36</td> <td>37</td> <td>38</td> <td>39</td> <td>40</td> <td>41</td> <td>42</td> <td>43</td> <td>44</td> <td>45</td> <td>46</td> <td>47</td> <td>48</td> <td>49</td> <td>50</td> <td>51</td> <td>52</td> <td>53</td> <td>54</td> <td>55</td> <td>56</td> <td>57</td> <td>58</td> <td>59</td> <td>60</td> <td>61</td> <td>62</td> <td>63</td> <td>64</td> <td>65</td> <td>66</td> <td>67</td> <td>68</td> <td>69</td> <td>70</td> <td>71</td> <td>72</td> <td>73</td> <td>74</td> <td>75</td> <td>76</td> <td>77</td> <td>78</td> <td>79</td> <td>80</td> <td>81</td> <td>82</td> <td>83</td> <td>84</td> <td>85</td> <td>86</td> <td>87</td> <td>88</td> <td>89</td> <td>90</td> <td>91</td> <td>92</td> <td>93</td> <td>94</td> <td>95</td> <td>96</td> <td>97</td> <td>98</td> <td>99</td> <td>100</td> <td>101</td> <td>102</td> <td>103</td> <td>104</td> <td>105</td> <td>106</td> <td>107</td> <td>108</td> <td>109</td> <td>110</td> <td>111</td> <td>112</td> <td>113</td> <td>114</td> <td>115</td> <td>116</td> <td>117</td> <td>118</td> <td>119</td> <td>120</td> <td>121</td> <td>122</td> <td>123</td> <td>124</td> <td>125</td> <td>126</td> <td>127</td> <td>128</td> <td>129</td> <td>130</td> <td>131</td> <td>132</td> <td>133</td> <td>134</td> <td>135</td> <td>136</td> <td>137</td> <td>138</td> <td>139</td> <td>140</td> <td>141</td> <td>142</td> <td>143</td> <td>144</td> <td>145</td> <td>146</td> <td>147</td> <td>148</td> <td>149</td> <td>150</td> <td>151</td> <td>152</td> <td>153</td> <td>154</td> <td>155</td> <td>156</td> <td>157</td> <td>158</td> <td>159</td> <td>160</td> <td>161</td> <td>162</td> <td>163</td> <td>164</td> <td>165</td> <td>166</td> <td>167</td> <td>168</td> <td>169</td> <td>170</td> <td>171</td> <td>172</td> <td>173</td> <td>174</td> <td>175</td> <td>176</td> <td>177</td> <td>178</td> <td>179</td> <td>180</td> <td>181</td> <td>182</td> <td>183</td> <td>184</td> <td>185</td> <td>186</td> <td>187</td> <td>188</td> <td>189</td> <td>190</td> <td>191</td> <td>192</td> <td>193</td> <td>194</td> <td>195</td> <td>196</td> <td>197</td> <td>198</td> <td>199</td> <td>200</td> <td>201</td> <td>202</td> <td>203</td> <td>204</td> <td>205</td> <td>206</td> <td>207</td> <td>208</td> <td>209</td> <td>210</td> <td>211</td> <td>212</td> <td>213</td> <td>214</td> <td>215</td> <td>216</td> <td>217</td> <td>218</td> <td>219</td> <td>220</td> <td>221</td> <td>222</td> <td>223</td> <td>224</td> <td>225</td> <td>226</td> <td>227</td> <td>228</td> <td>229</td> <td>230</td> <td>231</td> <td>232</td> <td>233</td> <td>234</td> <td>235</td> <td>236</td> <td>237</td> <td>238</td> <td>239</td> <td>240</td> <td>241</td> <td>242</td> <td>243</td> <td>244</td> <td>245</td> <td>246</td> <td>247</td> <td>248</td> <td>249</td> <td>250</td> <td>251</td> <td>252</td> <td>253</td> <td>254</td> <td>255</td> <td>256</td> <td>257</td> <td>258</td> <td>259</td> <td>260</td> <td>261</td> <td>262</td> <td>263</td> <td>264</td> <td>265</td> <td>266</td> <td>267</td> <td>268</td> <td>269</td> <td>270</td> <td>271</td> <td>272</td> <td>273</td> <td>274</td> <td>275</td> <td>276</td> <td>277</td> <td>278</td> <td>279</td> <td>280</td> <td>281</td> <td>282</td> <td>283</td> <td>284</td> <td>285</td> <td>286</td> <td>287</td> <td>288</td> <td>289</td> <td>290</td> <td>291</td> <td>292</td> <td>293</td> <td>294</td> <td>295</td> <td>296</td> <td>297</td> <td>298</td> <td>299</td> <td>300</td> <td>301</td> <td>302</td> <td>303</td> <td>304</td> <td>305</td> <td>306</td> <td>307</td> <td>308</td> <td>309</td> <td>310</td> <td>311</td> <td>312</td> <td>313</td> <td>314</td> <td>315</td> <td>316</td> <td>317</td> <td>318</td> <td>319</td> <td>320</td> <td>321</td> <td>322</td> <td>323</td> <td>324</td> <td>325</td> <td>326</td> <td>327</td> <td>328</td> <td>329</td> <td>330</td> <td>331</td> </tr> </thead> <tbody> <tr> <th>Revenue</th> <td>$490.9m</td> <td>$560.2m</td> <td>$627.6m</td> <td>$701m</td> <td>$779.5m</td> <td>$864.3m</td> <td>$965.5m</td> <td>$1043.9m</td> <td>$1139.5m</td> <td>$1262m</td> <td>$1399.4m</td> <td>$1564m</td> <td>$1713.1m</td> <td>$1814.1m</td> <td>$1932.2m</td> <td>$2084m</td> <td>$2192.4m</td> <td>$2309.6m</td> <td>$2437m</td> <td>$2545.2m</td> <td>$2626.5m</td> <td>$2711.5m</td> <td>$2778.9m</td> <td>$2851.8m</td> <td>$2887.7m</td> <td>$2922.8m</td> <td>$2958.8m</td> <td>$2991.7m</td> <td>$3028.9m</td> <td>$3071.4m</td> <td>$3105.7m</td> <td>$3131.2m</td> <td>$3144.3m</td> <td>$3155.1m</td> <td>$3193.6m</td> <td>$3239m</td> <td>$3185m</td> <td>$3210.7m</td> <td>$3237.1m</td> <td>$3272.2m</td> <td>$3395m</td> <td>$3415.4m</td> <td>$3436.2m</td> <td>$3356.2m</td> <td>$3369.1m</td> <td>$3481.6m</td> <td>$3497.3m</td> <td>$3509.6m</td> <td>$3521.8m</td> <td>$3532.9m</td> <td>$3544.4m</td> <td>$3552.5m</td> <td>$3564.9m</td> <td>$3577.1m</td> <td>$3588.3m</td> <td>$3598.3m</td> <td>$3611.1m</td> <td>$3617.9m</td> <td>$3631.2m</td> <td>$3643.3m</td> <td>$3653.9m</td> <td>$3664m</td> <td>$3675.1m</td> <td>$3685.8m</td> <td>$3695.9m</td> <td>$3706.4m</td> <td>$3717.7m</td> <td>$3729.1m</td> <td>$3742.1m</td> <td>$3755.3m</td> <td>$3766.9m</td> <td>$3775.5m</td> <td>$3686.6m</td> <td>$3771.1m</td> <td>$3798.4m</td> <td>$3805.3m</td> <td>$3811m</td> <td>$3816.3m</td> <td>$3822.6m</td> <td>$3829.9m</td> <td>$3836.5m</td> <td>$3842.1m</td> <td>$3848.6m</td> <td>$3854.9m</td> <td>$3860.8m</td> <td>$3866.7m</td> <td>$3873.2m</td> <td>$3879.5m</td> <td>$3884.7m</td> <td>$3889.5m</td> <td>$3894m</td> <td>$3898.4m</td> <td>$3902.4m</td> <td>$3907m</td> <td>$3912.4m</td> <td>$3917.3m</td> <td>$3922.6m</td> <td>$3927.9m</td> <td>$3933.8m</td> <td>$3940.5m</td> <td>$3946.4m</td> <td>$3952.3m</td> <td>$3959m</td> <td>$3964.1m</td> <td>$3969.7m</td> <td>$3976m</td> <td>$3980.8m</td> <td>$3984.6m</td> <td>$3958.7m</td> <td>$3980.4m</td> <td>$4000.2m</td> <td>$4004.7m</td> <td>$4009.2m</td> <td>$4013.7m</td> <td>$4017.7m</td> <td>$4023.8m</td> <td>$4028.8m</td> <td>$4033.4m</td> <td>$4038.5m</td> <td>$4043.2m</td> <td>$4046.6m</td> <td>$4050m</td> <td>$4053.3m</td> <td>$4057.9m</td> <td>$4060.5m</td> <td>$4060.6m</td> <td>$4066.7m</td> <td>$4071.9m</td> <td>$4075.7m</td> <td>$4078.8m</td> <td>$4081.7m</td> <td>$4084.7m</td> <td>$4087.8m</td> <td>$4090.4m</td> <td>$4092.8m</td> <td>$4083.1m</td> <td>$4099m</td> <td>$4102.1m</td> <td>$4104.6m</td> <td>$4106.5m</td> <td>$4070.1m</td> <td>$4087.3m</td> <td>$4090.2m</td> <td>$4105.8m</td> <td>$4110.4m</td> <td>$4129.6m</td> <td>$4133.4m</td> <td>$4136.4m</td> <td>$4139.1m</td> <td>$4142.5m</td> <td>$4145.4m</td> <td>$4148.1m</td> <td>$4150.7m</td> <td>$4153.4m</td> <td>$4156m</td> <td>$4158.5m</td> <td>$4161.3m</td> <td>$4162.8m</td> <td>$4164.4m</td> <td>$4165.9m</td> <td>$4167.8m</td> <td>$4169.4m</td> <td>$4170.6m</td> <td>$4172.1m</td> <td>$4173.2m</td> <td>$4174.5m</td> <td>$4176.4m</td> <td>$4178.1m</td> <td>$4179.9m</td> <td>$4182m</td> <td>$4183.1m</td> <td>$4184.1m</td> <td>$4185m</td> <td>$4185.8m</td> <td>$4187.1m</td> <td>$4188.2m</td> <td>$4189.4m</td> <td>$4190m</td> <td>$4190.5m</td> <td>$4190.8m</td> <td>$4191.1m</td> <td>$4183.6m</td> <td>$4192.5m</td> <td>$4192.7m</td> <td>$4191m</td> <td>$4191.5m</td> <td>$4193.6m</td> <td>$4194.1m</td> <td>$4195.1m</td> <td>$4195.3m</td> <td>$4195.4m</td> <td>$4195.5m</td> <td>$4195.7m</td> <td>$4195.9m</td> <td>$4196m</td> <td>$4196.1m</td> <td>$4196.2m</td> <td>$4196.3m</td> <td>$4196.3m</td> <td>$4196.4m</td> <td>$4196.5m</td> <td>$4196.6m</td> <td>$4196.6m</td> <td>$4196.7m</td> <td>$4196.8m</td> <td>$4196.9m</td> <td>$4197m</td> <td>$4197.1m</td> <td>$4197.1m</td> <td>$4197.2m</td> <td>$4197.3m</td> <td>$4197.4m</td> <td>$4197.5m</td> <td>$4197.6m</td> <td>$4197.6m</td> <td>$4197.7m</td> <td>$4197.8m</td> <td>$4198m</td> <td>$4198.1m</td> <td>$4198.3m</td> <td>$4198.4m</td> <td>$4198.6m</td> <td>$4198.9m</td> <td>$4199m</td> <td>$4199.1m</td> <td>$4199.2m</td> <td>$4197.5m</td> <td>$4197.6m</td> <td>$4197.8m</td> <td>$4197.9m</td> <td>$4197.9m</td> <td>$4197.9m</td> <td>$4198.5m</td> <td>$4198.7m</td> <td>$4198.8m</td> <td>$4198.7m</td> <td>$4198.1m</td> <td>$4199.1m</td> <td>$4199.2m</td> <td>$4198.7m</td> <td>$4200.3m</td> <td>$4201.9m</td> <td>$4201.9m</td> <td>$4201.2m</td> <td>$4201.4m</td> <td>$4201.8m</td> <td>$4182.4m</td> <td>$4189.2m</td> <td>$4204.9m</td> <td>$4205.5m</td> <td>$4206m</td> <td>$4206.7m</td> <td>$4207.4m</td> <td>$4208m</td> <td>$4208.9m</td> <td>$4209.9m</td> <td>$4210.9m</td> <td>$4211.3m</td> <td>$4211.8m</td> <td>$4212.3m</td> <td>$4212.6m</td> <td>$4213m</td> <td>$4213.4m</td> <td>$4213.8m</td> <td>$4214.2m</td> <td>$4214.6m</td> <td>$4214.9m</td> <td>$4215.3m</td> <td>$4215.8m</td> <td>$4216.1m</td> <td>$4216.4m</td> <td>$4216.7m</td> <td>$4217.1m</td> <td>$4217.4m</td> <td>$4217.7m</td> <td>$4217.9m</td> <td>$4218m</td> <td>$4218.2m</td> <td>$4218.5m</td> <td>$4218.8m</td> <td>$4219m</td> <td>$4219.6m</td> <td>$4220.4m</td> <td>$4220.5m</td> <td>$4220.6m</td> <td>$4220.1m</td> <td>$4221.4m</td> <td>$4222.8m</td> <td>$4224.2m</td> <td>$4224.6m</td> <td>$4225.1m</td> <td>$4226.5m</td> <td>$4228.1m</td> <td>$4228.5m</td> <td>$4229m</td> <td>$4229.4m</td> <td>$4229.9m</td> <td>$4230.4m</td> <td>$4230.5m</td> <td>$4225m</td> <td>$4232.6m</td> <td>$4233.5m</td> <td>$4234.5m</td> <td>$4234.2m</td> <td>$4236.3m</td> <td>$4236.8m</td> <td>$4237.3m</td> <td>$4208.8m</td> <td>$4211.9m</td> <td>$4245m</td> <td>$4246.4m</td> <td>$4246.6m</td> <td>$4247m</td> <td>$4247.1m</td> <td>$4217.4m</td> <td>$4221m</td> <td>$4252.6m</td> <td>$4252.6m</td> <td>$4252.3m</td> <td>$4251.1m</td> <td>$4252.8m</td> <td>$4253m</td> <td>$4253.2m</td> <td>$4253.4m</td> <td>$4253.5m</td> <td>$4253.7m</td> <td>$4253.9m</td> <td>$4254m</td> <td>$4254.2m</td> <td>$4254.7m</td> <td>$4254.7m</td> </tr> </tbody> </table> > > Proposal: Table Usability Parser Algorithm > > https://github.com/duboisp/Table-Usability-Concept/tree/master/Algorithm > > Can you elaborate on how this differs from the algorithm in the HTML spec, > and in what ways it is better? (e.g. examples that your algorithm handles > but that the HTML spec doesn't) > > I'm all in favour of improving the spec, I just don't have a good frame of > reference here by which to evaluate the proposal. Yes, I will do a more elaborated comparaison between the current and the proposed algorithm. I will send an email later when that is completed. <aside> The proposed algorithm define a relationship model on how to get the benefit of using the row grouping and the column grouping markup. When the row grouping markup is not used, that algorithm are able to detect which rows belong to the table head (thead) and are able to detect simple row group and simple column group. Also the algorithm suggest a real use case of using the 'colgroup' and 'col' element in a table. That is made possible by using the proposed API in regards of accessing the data by using the column instead of the row. I found a lot of example where the 'colgroup' and 'col' element is use for utilitarian purposes. But I was unable to find a example where the 'colgroup' and the 'col' element is used to provide an additional/supplemental information to the cell header (th) defined in the table head (thead) section. >From a row group perspective the specification define 3 kind of row group (thead, tbody and tfoot). The algorithm define how to detect those 3 kind of group in a column perspective. The proposed algorithm define the relationships between groups (Data level). </aside> > > > On Fri, 19 Oct 2012, Pierre Dubois wrote: > > > > Sometime the subsequent row grouping under the same data level and the > > subsequent column grouping under the same data level don't necessary > > mean a summary group but still a data group. > > A summary group is just a group with a heading saying it's a summary > group, no? I don't really understand what is special about a summary > group. How should software treat it differently? Sometime a summary group is not clearly identified by using a cell heading (th) but it is often identified by using the styling. >From an accessibility (WCAG 2.0) point of view, by using styling to define those summary group make it fail the Success Criterion 1.3.3 (Level A) "Sensory Characteristics" http://www.w3.org/TR/UNDERSTANDING-WCAG20/content-structure-separation-understanding.html Here a simple common example where a summary group do not have a heading saying it's a summary group. <table hassum> <caption>Invoice</caption> <thead> <tr> <th>Item</th> <th>Price</th> </tr> </thead> <tbody> <tr><th>Product 1</th><td>25.00</td></tr> <tr><th>Product 2</th><td>60.00</td></tr> <tr><th>Product 3</th><td>15.00</td></tr> </tbody> <tbody class="summary"> <tr><th>Sub Total</th><td>100.00</td></tr> <tr><th>Federal Taxes</th><td>5.00</td></tr> <tr><th>Provincial Taxes</th><td>10.00</td></tr> </tbody> <tfoot> <tr><th>Total</th><td>115.00</td></tr> </tfoot> </table> The summary group concept can be useful to spec a responsive table concept. For example, an user agent could hide some data group to reduce the table space taken in view port. So in the previous "Invoice" table, the user agent could hide the first row group and provide a mechanism to display it, if requested by the user. > > To fix that the solution would be to have a new attribute set on the > > table element to know if the table contains summaries group. > > I would be very surprised if such an attribute was used correctly a useful > fraction of the time. If the responsive table is spec by having summary group, then I am sure it would used correctly or at least to get the espected behaviour. > On Tue, 6 Nov 2012, Pierre Dubois wrote: > > > > Use case: Draw a graphic based on a data table > > * Like a pie chart, based on a sub-set of data contained in a data table. > > This is an interesting use case. Do any sites actually try to do this > today? > Any website that use the Web Experience Toolkit chart plugin (https://github.com/wet-boew/wet-boew/wiki/Charts-and-graphs) and any website that use the Filament Group chart (http://www.filamentgroup.com/examples/charting_v2/) > I tried writing an example to do this, and it's not clear to me that the > API is particularly hard to use. Somewhat verbose, granted, but it only > took a few lines of code, most of which is spent in canvas logic and in > the CSS styles to make the table presentable: > > http://damowmow.com/playground/demos/tables/002.html > > That's an admittedly simple table; what kinds of tables are people > generating pie charts out of? Are they more complex? Do you have any > examples we could study? > > An issue can be when the header cell cover and/or represent more than > > one group (eg. multiple tbody from a column perspective and multiple > > colgroup from a row perspective) > > Certainly that does make things more complex and the current API doesn't > handle spanning cells well if you want to select a cell by grid position. The goal with the following table is to generate a bar chart for the data group and a line chart for the summary group. See the an example of the espected result here: https://github.com/duboisp/Table-Usability-Concept/blob/master/Table%20Example/graph_samples/cluster-column-line-markers-eng.jpg#files (The cells relationships of the following table are not supported by the current algorithm. The proposed algorithm support that kind of complex table) <table hassum> <caption>Current account balances</caption> <colgroup> <col /> </colgroup> <colgroup> <col /> <col /> </colgroup> <colgroup> <col /> </colgroup> <thead> <tr><th> <th>Goods<th>Other current account<th>Total <tbody> <tr><th colspan="4">2006 <tr><th>III <td>11 406 <td>-7010 <td>4396 <tr><th>IV <td>12 139 <td>-7437 <td>4702 <tr><th colspan="4">2007 <tr><th>I <td>13 563 <td>-10231 <td>3332 <tr><th>II <td>15 134 <td>-9516 <td>5618 <tr><th>III <td>9 510 <td>-7910 <td>1600 <tr><th>IV <td>9 230 <td>-7009 <td>2221 <tr><th colspan="4">2008 <tr><th>I <td>12 551 <td>-6387 <td>6164 <tr><th>II <td>16 095 <td>-10573 <td>5522 <tr><th>III <td>14 383 <td>-11603 <td>2780 <tr><th>IV <td>3 215 <td>-10763 <td>-7548 <tr><th colspan="4">2009 <tr><th>I <td>403 <td>-7498 <td>-7095 <tr><th>II <td>-2 019 <td>-10436 <td>-12455 <tr><th>III <td>-3 388 <td>-10382 <td>-13770 <tr><th>IV <td>436 <td>-10640 <td>-10204 <tr><th colspan="4">2010 <tr><th>I <td>1 103 <td>-10289 <td>-9186 <tr><th>II <td>-2 236 <td>-10747 <td>-12983 <tr><th>III <td>-6 504 <td>-11032 <td>-17536 </tbody> </table> > Can you be more elaborate? Examples of pages trying to do this, examples > of tables that need to be charted client-side, etc, would go a long way > towards helping flesh out the use case. Generating client-side chart help about the Web Content Accessibility. Generating client-side chart save money. It is faster to change a data cell value of a HTML table instead of updating a non HTML data table (like MS Excel), generating a new chart image, add the corporate look, update the text alternatives version, upload the image, update the webpage, ... Pierre Dubois :-)
Received on Monday, 31 December 2012 19:10:18 UTC