Hello everyone, It seems that the answer to my question should be obvious, but I''ve not yet found a way to do what I want. Any advice on the best method would be greatly appreciated. Have the following database table: CREATE TABLE datasets ( id int not null auto increment, name varchar not null, value varchar not null, year varchar not null, state varchar not null, series_id int not null, primary key (id) ); In my view, I want to display the data from the datasets table as a grid grouped by series_id. Each state should be on the x-axis (rows along the left side) and each year should be on the y-axis (columns along the top). Any ideas? Thanks.
Seems pretty straightforward, first select min and max year, then unique states (or all of them if you want), then use those to construct a grid and populate it with the data, when available, as you go. The query to select the data would be sorted on state, year, and when there is no data avaialable for a particular field you just output "<td></td>" -Jeff ----- Original Message ----- From: "Jason Gilstrap" <info-Yf9cRGTgqmECWBydzj52wkEOCMrvLtNR@public.gmane.org> To: <rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org> Sent: Wednesday, September 14, 2005 12:26 PM Subject: [Rails] Showing database results in a grid view> Hello everyone, > > It seems that the answer to my question should be obvious, but I''ve not > yet found a way to do what I want. Any advice on the best method would be > greatly appreciated. > > Have the following database table: > > CREATE TABLE datasets ( > id int not null auto increment, > name varchar not null, > value varchar not null, > year varchar not null, > state varchar not null, > series_id int not null, > primary key (id) > ); > > In my view, I want to display the data from the datasets table as a grid > grouped by series_id. Each state should be on the x-axis (rows along the > left side) and each year should be on the y-axis (columns along the top). > > Any ideas? > > Thanks. > > _______________________________________________ > Rails mailing list > Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org > http://lists.rubyonrails.org/mailman/listinfo/rails
Thanks for the reply, Jeffrey. My question relates more to what should happen in the view rather than in the controller. If I have this in my controller: @data = Dataset.find(:all, :conditions => ["series_id = ?", params[:id]]) Then I will have access to @data in the view, which would contain something like: [#"350", "id"=>"1", "year"=>"2005", "series_id"=>"1", "state"=>"CA"}>, #"300", "id"=>"1", "year"=>"2004", "series_id"=>"1", "state"=>"CA"}>, #"250", "id"=>"1", "year"=>"2003", "series_id"=>"1", "state"=>"CA"}>, #"200", "id"=>"1", "year"=>"2005", "series_id"=>"1", "state"=>"NY"}>, #"250", "id"=>"1", "year"=>"2004", "series_id"=>"1", "state"=>"NY"}>, #"150", "id"=>"1", "year"=>"2003", "series_id"=>"1", "state"=>"NY"}>, #"500", "id"=>"1", "year"=>"2005", "series_id"=>"1", "state"=>"MA"}>, #"450", "id"=>"1", "year"=>"2004", "series_id"=>"1", "state"=>"MA"}>, #"600", "id"=>"1", "year"=>"2003", "series_id"=>"1", "state"=>"MA"}>] I want this to appear in the view as: <table> <tr> <th>State</th> <th>2003</th> <th>2004</th> <th>2005</th> </tr> <tr> <td>CA</td> <td>250</td> <td>300</td> <td>350</td> </tr> <tr> <td>MA</td> <td>600</td> <td>450</td> <td>500</td> </tr> <tr> <td>NY</td> <td>150</td> <td>250</td> <td>200</td> </tr> </table> Any ideas on how to do this? Thanks again. Jeffrey Moss wrote:> Seems pretty straightforward, first select min and max year, then > unique states (or all of them if you want), then use those to > construct a grid and populate it with the data, when available, as you > go. The query to select the data would be sorted on state, year, and > when there is no data avaialable for a particular field you just > output "<td></td>" > > -Jeff > > ----- Original Message ----- From: "Jason Gilstrap" > <info-Yf9cRGTgqmECWBydzj52wkEOCMrvLtNR@public.gmane.org> > To: <rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org> > Sent: Wednesday, September 14, 2005 12:26 PM > Subject: [Rails] Showing database results in a grid view > > >> Hello everyone, >> >> It seems that the answer to my question should be obvious, but I''ve >> not yet found a way to do what I want. Any advice on the best method >> would be greatly appreciated. >> >> Have the following database table: >> >> CREATE TABLE datasets ( >> id int not null auto increment, >> name varchar not null, >> value varchar not null, >> year varchar not null, >> state varchar not null, >> series_id int not null, >> primary key (id) >> ); >> >> In my view, I want to display the data from the datasets table as a >> grid grouped by series_id. Each state should be on the x-axis (rows >> along the left side) and each year should be on the y-axis (columns >> along the top). >> >> Any ideas? >> >> Thanks. >> >> _______________________________________________ >> Rails mailing list >> Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org >> http://lists.rubyonrails.org/mailman/listinfo/rails > > > _______________________________________________ > Rails mailing list > Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org > http://lists.rubyonrails.org/mailman/listinfo/rails
Hi, I''m also a newbie on rails, so this might not be the best approach. as @data is an array, I can use loop to iterate it like i =0 while i < @date[i].length # action like @data.[i].year # end i+=1 then you can do what you want. it''s probably not the best way as it''s not so ruby...if there is better way please let me know. sammy --------------------------------- DO YOU YAHOO!? 雅虎免费G邮箱-中国第一绝无垃圾邮件骚扰超大邮箱 _______________________________________________ Rails mailing list Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org http://lists.rubyonrails.org/mailman/listinfo/rails
On Thursday 15 September 2005 07:10, s c wrote:> Hi, I''m also a newbie on rails, so this might not be the best > approach. as @data is an array, I can use loop to iterate it like > i =0 > while i < @date[i].length > # action like @data.[i].year # > end > i+=1 > then you can do what you want. > > it''s probably not the best way as it''s not so ruby...if there is > better way please let me know. sammyIt''s actually a very bad way to do it like this in ruby. What you want is @data.each do |d| ... end or for d in @data do ... end Michael -- Michael Schuerig Life is just as deadly mailto:michael-q5aiKMLteq4b1SvskN2V4Q@public.gmane.org As it looks http://www.schuerig.de/michael/ --Richard Thompson, Sibella
Michael Schuerig wrote:> It''s actually a very bad way to do it like this in ruby. What you want > is > > @data.each do |d| > ... > end > > or > > for d in @data do > ... > endOn a similar note, is there a shortcut for @data.each {|d| d.foo } along the lines of @data.each.foo ? That syntax doesn''t work, but I can''t figure out what might... Have I missed something obvious? -- Alex
On Thursday 15 September 2005 03:59, Jason Gilstrap wrote:> Thanks for the reply, Jeffrey. > > My question relates more to what should happen in the view rather > than in the controller. > > If I have this in my controller: > @data = Dataset.find(:all, :conditions => ["series_id = ?", > params[:id]]) > > Then I will have access to @data in the view, which would contain > something like: > [#"350", "id"=>"1", "year"=>"2005", "series_id"=>"1", > "state"=>"CA"}>, #"300", "id"=>"1", "year"=>"2004", "series_id"=>"1", > "state"=>"CA"}>, #"250", "id"=>"1", "year"=>"2003", "series_id"=>"1", > "state"=>"CA"}>, #"200", "id"=>"1", "year"=>"2005", "series_id"=>"1", > "state"=>"NY"}>, #"250", "id"=>"1", "year"=>"2004", "series_id"=>"1", > "state"=>"NY"}>, #"150", "id"=>"1", "year"=>"2003", "series_id"=>"1", > "state"=>"NY"}>, #"500", "id"=>"1", "year"=>"2005", "series_id"=>"1", > "state"=>"MA"}>, #"450", "id"=>"1", "year"=>"2004", "series_id"=>"1", > "state"=>"MA"}>, #"600", "id"=>"1", "year"=>"2003", "series_id"=>"1", > "state"=>"MA"}>] > > I want this to appear in the view as: > > <table> > <tr> > <th>State</th> > <th>2003</th> > <th>2004</th> > <th>2005</th> > </tr> > <tr> > <td>CA</td> > <td>250</td> > <td>300</td> > <td>350</td> > </tr> > <tr> > <td>MA</td> > <td>600</td> > <td>450</td> > <td>500</td> > </tr> > <tr> > <td>NY</td> > <td>150</td> > <td>250</td> > <td>200</td> > </tr> > </table> > > Any ideas on how to do this?Try it like this sql =<<END SELECT data_2003.state, data_2003.value AS "year2003", data_2004.value AS "year2004", data_2005.value AS "year2005" FROM data as data_2003 LEFT OUTER JOIN data as data_2004 ON data_2003.state = data_2004.state LEFT OUTER JOIN data as data_2005 ON data_2003.state = data_2005.state WHERE data_2003.series_id = ? AND data_2004.series_id = ? AND data_2005.series_id = ? AND data_2003.year = 2003 AND data_2004.year = 2004 AND data_2005.year = 2005 ORDER BY state END series_id = params[:id] @data = Dataset.find_by_sql([sql, series_id, series_id, series_id) <table> <tr> <th>State</th> <th>2003</th> <th>2004</th> <th>2005</th> </tr> <% for d in @data -%> <tr> <td><%= d.state %><td> <td><%= d.year2003 %><td> <td><%= d.year2004 %><td> <td><%= d.year2005 %><td> </tr> <% end -%> </table> Now, that''s a nice SQL exercise for sure, but it''s possibly more efficient to retrieve the objects, iterate over the result and create fill in the yearly data in row objects. Then use the latter to create the table. Michael -- Michael Schuerig Airtight arguments have mailto:michael-q5aiKMLteq4b1SvskN2V4Q@public.gmane.org vacuous conclusions. http://www.schuerig.de/michael/ --A.O. Rorty, Explaining Emotions
Thanks to everyone who has replied so far. Unfortunately, after spending a much time searching the web and looking the rails book, I still don''t have a solution to my problem. Any advice is greatly appreciated. To simplify the problem, I have database result with the following columns: id, name, value, state, year Normally I could use a table with a fixed header and output the rows in my view like: <% for data in @data %> <tr> <td><%= data.name %></td> <td><%= data.value %></td> <td><%= data.state %></td> <td><%= data.year %></td> </tr> <% end %> But my requirements make what happens in the view a bit more complex. I need unique values for the year column to show in the table header and the remaining values to be grouped by state in rows. Therefore, for each unique year a new table column is created and in the table body the value for each state and year appears in the associated table cell. See the table below for how I want this to appear. It seems that others would want to display data this way, but I''ve not yet found any way to do it. Thanks again. -Jason Gilstrap Michael Schuerig wrote:>On Thursday 15 September 2005 03:59, Jason Gilstrap wrote: > > >>Thanks for the reply, Jeffrey. >> >>My question relates more to what should happen in the view rather >>than in the controller. >> >>If I have this in my controller: >>@data = Dataset.find(:all, :conditions => ["series_id = ?", >>params[:id]]) >> >>Then I will have access to @data in the view, which would contain >>something like: >>[#"350", "id"=>"1", "year"=>"2005", "series_id"=>"1", >>"state"=>"CA"}>, #"300", "id"=>"1", "year"=>"2004", "series_id"=>"1", >>"state"=>"CA"}>, #"250", "id"=>"1", "year"=>"2003", "series_id"=>"1", >>"state"=>"CA"}>, #"200", "id"=>"1", "year"=>"2005", "series_id"=>"1", >>"state"=>"NY"}>, #"250", "id"=>"1", "year"=>"2004", "series_id"=>"1", >>"state"=>"NY"}>, #"150", "id"=>"1", "year"=>"2003", "series_id"=>"1", >>"state"=>"NY"}>, #"500", "id"=>"1", "year"=>"2005", "series_id"=>"1", >>"state"=>"MA"}>, #"450", "id"=>"1", "year"=>"2004", "series_id"=>"1", >>"state"=>"MA"}>, #"600", "id"=>"1", "year"=>"2003", "series_id"=>"1", >>"state"=>"MA"}>] >> >>I want this to appear in the view as: >> >><table> >><tr> >> <th>State</th> >> <th>2003</th> >> <th>2004</th> >> <th>2005</th> >></tr> >><tr> >> <td>CA</td> >> <td>250</td> >> <td>300</td> >> <td>350</td> >></tr> >><tr> >> <td>MA</td> >> <td>600</td> >> <td>450</td> >> <td>500</td> >></tr> >><tr> >> <td>NY</td> >> <td>150</td> >> <td>250</td> >> <td>200</td> >></tr> >></table> >> >>Any ideas on how to do this? >> >> > >Try it like this > >sql =<<END >SELECT > data_2003.state, > data_2003.value AS "year2003", > data_2004.value AS "year2004", > data_2005.value AS "year2005" >FROM > data as data_2003 >LEFT OUTER JOIN > data as data_2004 >ON > data_2003.state = data_2004.state >LEFT OUTER JOIN > data as data_2005 >ON > data_2003.state = data_2005.state >WHERE > data_2003.series_id = ? AND > data_2004.series_id = ? AND > data_2005.series_id = ? AND > data_2003.year = 2003 AND > data_2004.year = 2004 AND > data_2005.year = 2005 >ORDER BY state >END > >series_id = params[:id] >@data = Dataset.find_by_sql([sql, series_id, series_id, series_id) > ><table> > <tr> > <th>State</th> > <th>2003</th> > <th>2004</th> > <th>2005</th> > </tr> ><% for d in @data -%> > <tr> > <td><%= d.state %><td> > <td><%= d.year2003 %><td> > <td><%= d.year2004 %><td> > <td><%= d.year2005 %><td> > </tr> ><% end -%> ></table> > >Now, that''s a nice SQL exercise for sure, but it''s possibly more >efficient to retrieve the objects, iterate over the result and create >fill in the yearly data in row objects. Then use the latter to create >the table. > >Michael > > >
It''s me newbie again.. :) and this is what I can think of, again there''s probably a better solution and please let me know. something like this will work? (sorry if there is syntax mistake, but idea is there...) @data[0]= Dataset.find(:all,:conditions=> ["state=?",''CA''], :order=>"year") @data[1]= Dataset.find(:all,:conditions=>["state=?",''MA''], :order=>"year") @data[2]= Dataset.find(:all,:conditions:=> ["state=?",''NY''], :order=>"year") <table> for data in @data <tr> <th>State</th> <th>2003</th> <th>2004</th> <th>2005</th> <tr> <tr> <td><%=data.name%></td> <td><%=data.num%></td> # so forth # sam --------------------------------- DO YOU YAHOO!? 雅虎免费G邮箱-中国第一绝无垃圾邮件骚扰超大邮箱 _______________________________________________ Rails mailing list Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org http://lists.rubyonrails.org/mailman/listinfo/rails
On Fri, 2005-09-16 at 00:51 +0800, s c wrote: Hi Sam,> something like this will work? (sorry if there is syntax mistake, but > idea is there...) > > @data[0]= Dataset.find(:all,:conditions=> > ["state=?",''CA''], :order=>"year") > > @data[1]> Dataset.find(:all,:conditions=>["state=?",''MA''], :order=>"year") > > @data[2]= Dataset.find(:all,:conditions:=> > ["state=?",''NY''], :order=>"year") > > <table> > for data in @data > <tr> > <th>State</th> > <th>2003</th> > <th>2004</th> > <th>2005</th> > <tr> > <tr> > <td><%=data.name%></td> > <td><%=data.num%></td> > # so forth # > samSeems to me what you are creating with is multi-dimentional arrays, so you data[] might look like this: data = [[rec_1a,rec_2a,rec_3a],[rec_2a,rec_2b,rec_2c]] so data[0][0] would be your first CA record, and data[1][0] would be your first MA record. So yes, if you nested another loop inside of your existing for loop, it could work. My gut, however, tells me there is almost certainly a more elegant way to do this. My ruby coding just isn''t strong enough yet to suggest anything. Perhaps someone else might suggest something better. G''Luck, Howard
On Thu, 2005-09-15 at 11:25 -0400, Jason Gilstrap wrote:> Thanks to everyone who has replied so far. Unfortunately, after > spending a much time searching the web and looking the rails book, I > still don''t have a solution to my problem. Any advice is greatly > appreciated. > > To simplify the problem, I have database result with the following columns: > id, name, value, state, year > > Normally I could use a table with a fixed header and output the rows in > my view like: > <% for data in @data %> > <tr> > <td><%= data.name %></td> > <td><%= data.value %></td> > <td><%= data.state %></td> > <td><%= data.year %></td> > </tr> > <% end %> > > But my requirements make what happens in the view a bit more complex. I > need unique values for the year column to show in the table header and > the remaining values to be grouped by state in rows. Therefore, for > each unique year a new table column is created and in the table body the > value for each state and year appears in the associated table cell. See > the table below for how I want this to appear. > > It seems that others would want to display data this way, but I''ve not > yet found any way to do it.So why aren''t you building a 2 dimensional hash, looping over your result set and populating the hash so that you can then push that to some simple method that dumps the hash with HTML tags around it? @header_row = [] @simple_hash = {} @data = Dataset.find(:all, :conditions => ["series_id = ?", params[:id]]) @data.each { |row| # populate header with valid years from result set @header_row << row[''year''] unless @header_row.include? row[''year''] # make sure there is a state row in our hash before assigning into it @simple_hash.merge!( row[''state''] => {}) unless @simple_hash.include? row[''state''] # stuff cell with data @simple_hash[row[''state''].update row[''year''] => row[''value''] } # depending on result size, this may be a good time to toss @data to garbage collection Now in your view, <table> <tr> <th>State</th> <% @header_row.sort.each { |header| } <th><%= header %></th> <% } %> </tr> <% @simple_hash.keys.sort.each { |key| %> <tr> <td><%= key %></td> <% @header_row.sort.each { |year| %> <td><%= @simple_hash[key][year] %></td> <% } # end of @header_row loop %> </tr> <% } # end of @simple_hash loop %> </table> Nothing too complicated there. Depending on the speed of sort, you might want to do it once on the @header_row in the controller and store that back into @header_row so you don''t need to call it for each row in your grid. -- Steven Critchfield <critch-wQLwMjUOumVBDgjK7y7TUQ@public.gmane.org>
Steven, Thanks so much. This looks like the perfect solution. However, I''m having trouble with this line producing a syntax error: @simple_hash[row[''state''].update row[''year''] => row[''value''] Any ideas of what could be going wrong? Thanks. -Jason Gilstrap Steven Critchfield wrote:> > >So why aren''t you building a 2 dimensional hash, looping over your >result set and populating the hash so that you can then push that to >some simple method that dumps the hash with HTML tags around it? > >@header_row = [] >@simple_hash = {} >@data = Dataset.find(:all, :conditions => ["series_id = ?", params[:id]]) >@data.each { |row| > # populate header with valid years from result set > @header_row << row[''year''] unless @header_row.include? row[''year''] > > # make sure there is a state row in our hash before assigning into it > @simple_hash.merge!( row[''state''] => {}) unless @simple_hash.include? row[''state''] > > # stuff cell with data > @simple_hash[row[''state''].update row[''year''] => row[''value''] >} ># depending on result size, this may be a good time to toss @data to garbage collection > >Now in your view, > ><table> > <tr> > <th>State</th> ><% @header_row.sort.each { |header| } > <th><%= header %></th> ><% } %> > </tr> ><% @simple_hash.keys.sort.each { |key| %> > <tr> > <td><%= key %></td> ><% @header_row.sort.each { |year| %> > <td><%= @simple_hash[key][year] %></td> ><% } # end of @header_row loop %> > </tr> ><% } # end of @simple_hash loop %> ></table> > > >Nothing too complicated there. Depending on the speed of sort, you might >want to do it once on the @header_row in the controller and store that >back into @header_row so you don''t need to call it for each row in your >grid. > >
On Friday 16 September 2005 00:58, Jason Gilstrap wrote:> @simple_hash[row[''state''].update row[''year''] => row[''value''] > > Any ideas of what could be going wrong?Try to count the brackets. And consider whether "=>" is the right operator. Michael -- Michael Schuerig There is no matrix, mailto:michael-q5aiKMLteq4b1SvskN2V4Q@public.gmane.org only reality. http://www.schuerig.de/michael/ --Lawrence Fishburn
Thank you Lordkhaos .. That''s why I''m here to be pointed at . Currently I ''m using all kinds of inappropriate ways, to make something work.... I bet I''m authorized enough to write a ''impractical guide'' to using ruby instead...;-) Hopefully I can write better code shortly. Best regards, sammy>>Seems to me what you are creating with is multi-dimentional arrays, soyou data[] might look like this: data = [[rec_1a,rec_2a,rec_3a],[rec_2a,rec_2b,rec_2c]] so data[0][0] would be your first CA record, and data[1][0] would be your first MA record. So yes, if you nested another loop inside of your existing for loop, it could work. My gut, however, tells me there is almost certainly a more elegant way to do this. My ruby coding just isn''t strong enough yet to suggest anything. Perhaps someone else might suggest something better. G''Luck, Howard --------------------------------- DO YOU YAHOO!? 雅虎邮箱超强增值服务-2G超大空间、pop3收信、无限量邮件提醒 _______________________________________________ Rails mailing list Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org http://lists.rubyonrails.org/mailman/listinfo/rails
On Fri, 2005-09-16 at 01:52 +0200, Michael Schuerig wrote:> On Friday 16 September 2005 00:58, Jason Gilstrap wrote: > > @simple_hash[row[''state''].update row[''year''] => row[''value''] > > > > Any ideas of what could be going wrong? > > Try to count the brackets. And consider whether "=>" is the right > operator.You''re right to count brackets. It is missing one before the .update. => is the right operator since it is a hash and you are merging a hash entry into a hash. But, you might be right that the lack of parenthesis makes for a somewhat ambiguous meaning when you try to debug my code, or even if I were to debug it at a later time. -- Steven Critchfield critch-wQLwMjUOumVBDgjK7y7TUQ@public.gmane.org KI4KTY
On Friday 16 September 2005 04:37, Steven wrote:> On Fri, 2005-09-16 at 01:52 +0200, Michael Schuerig wrote: > > On Friday 16 September 2005 00:58, Jason Gilstrap wrote: > > > @simple_hash[row[''state''].update row[''year''] => row[''value''] > > > > > > Any ideas of what could be going wrong? > > > > Try to count the brackets. And consider whether "=>" is the right > > operator. > > You''re right to count brackets. It is missing one before the .update. > > => is the right operator since it is a hash and you are merging a > hash entry into a hash. But, you might be right that the lack of > parenthesis makes for a somewhat ambiguous meaning when you try to > debug my code, or even if I were to debug it at a later time.My comment on the => was a bit misleading. It''s pretty wasteful to create a one-element hash only to use it for updating an existing hash. All that''s needed is indexing @simple_hash[row[''state'']][row[''year'']] = row[''value''] Michael -- Michael Schuerig Airtight arguments have mailto:michael-q5aiKMLteq4b1SvskN2V4Q@public.gmane.org vacuous conclusions. http://www.schuerig.de/michael/ --A.O. Rorty, Explaining Emotions
On Fri, 2005-09-16 at 09:50 +0200, Michael Schuerig wrote:> On Friday 16 September 2005 04:37, Steven wrote: > > On Fri, 2005-09-16 at 01:52 +0200, Michael Schuerig wrote: > > > On Friday 16 September 2005 00:58, Jason Gilstrap wrote: > > > > @simple_hash[row[''state''].update row[''year''] => row[''value''] > > > > > > > > Any ideas of what could be going wrong? > > > > > > Try to count the brackets. And consider whether "=>" is the right > > > operator. > > > > => is the right operator since it is a hash and you are merging a > > hash entry into a hash. But, you might be right that the lack of > > parenthesis makes for a somewhat ambiguous meaning when you try to > > debug my code, or even if I were to debug it at a later time. > > My comment on the => was a bit misleading. It''s pretty wasteful to > create a one-element hash only to use it for updating an existing hash. > All that''s needed is indexing > > @simple_hash[row[''state'']][row[''year'']] = row[''value'']While I don''t know all the nuances why, the difference in speed between a single element hash merge and a straight assignment is considerable especially in large amounts. Michael has submitted the more efficient method. On my machine, 1 million iterations of updating x=>x took 15 seconds and the straight assignment took only 3 seconds. So a 5x difference. -- Steven Critchfield critch-wQLwMjUOumVBDgjK7y7TUQ@public.gmane.org KI4KTY