On Jan 7, 2013, at 12:39 PM, Rob Weir wrote:
On Fri, Jan 4, 2013 at 1:12 PM, Kay Schenk <kay.sch...@gmail.com> wrote:
On Thu, Jan 3, 2013 at 4:09 PM, Rob Weir <robw...@apache.org> wrote:
<snip>
Since this is the visitors first impression of the project, I wonder
if it is worth exploring further to see if there is a way to address
these issues? As I mentioned before, the ASF home page has a "latest
activity" panel that avoids both of these problems:
http://www.apache.org/
Can we copy what they do?
Yes. See below where I show where to find the rest of the code that Rob
has tracked down.
We can handle it like a feed with ASF::Value type patterns in path.pm
Or we can use xslt and parse a file file in view.pm
Or a combination.
ummm...not sure about this. We would need to do more thorough
investigation
here. Right now, I can not easily determine how this column is generated
--
manually vs something else.
I did a little research on how the ASF home page works.
You cans see the source here:
http://svn.apache.org/repos/asf/infrastructure/site/trunk/
index.html is here:
http://svn.apache.org/repos/asf/infrastructure/site/trunk/content/index.html
and Latest Activity looks like this:
<h3>Latest Activity</h3>
<div class="section-content">
<p><em>This is an overview of activity going on with our
projects. SVN commits, bug reports, tweets, you name it</em>.</p>
</div>
{% for e in twitter.list %}
<div class="section-content">
<a href="{{ e.url }}">@</a>{{ e.title|safe }}
</div>
{% endfor %}
{% for e in svn.list %}
<div class="section-content">
<a class="svn"
href="http://svn.apache.org/viewvc?revision={{ e.revision
}};view=revision">r{{ e.revision }}</a>
{{ e.message|safe|truncatewords_html:20 }} ({{
e.projects|safe }}) —
<a
href="http://people.apache.org/committer-index.html#{{ e.author }}">{{
e.author }}</a>
</div>
{% endfor %}
{% for e in jira.list %}
<div class="section-content">
<a class="bug" href="{{ e.url }}">{{
e.title|safe }}</a><br/>
{{ e.content|safe|truncatewords_html:20 }}
</div>
{% endfor %}
</div>
So they are iterating over twitter.list, svn.list and jira.list. But
it is not leaping out at me where that data comes from. Presumably it
is RSS/Atom feeds, but I don't see the glue that connects this.
Take a look at www.apache.org's trunk/lib/path.pm:
our @patterns = (
[qr!^/index\.html$!, news_page =>
{
svn => ASF::Value::SVN->new(limit => 5),
jira => ASF::Value::Jira->new(limit => 5,
url =>
"http://s.apache.org/q4"),
announce => ASF::Value::Mail->new(list => 'annou...@apache.org',
limit => 3),
planet => ASF::Value::Blogs->new(blog => "planet", limit=> 3),
blog => ASF::Value::Blogs->new(blog => "foundation", limit=>
3),
twitter => ASF::Value::Twitter->new(name => 'TheASF', limit =>
3),
},
],
[qr!^/dev/index\.html$!, news_page =>
{
svn => ASF::Value::SVN->new(limit => 5),
twitter => ASF::Value::Twitter->new(name=>"infrabot", limit =>
3),
blog => ASF::Value::Blogs->new(blog => "infra", limit=> 3),
jira => ASF::Value::Jira->new(limit => 5,
url =>
"http://s.apache.org/lg"),
},
],
[qr!^/dev/sitemap\.html$!, sitemap => { headers => { title =>
"Developer Sitemap" }} ],
[qr!^/licenses/exports/index\.html$!, exports => {} ],
[qr!\.mdtext$!, single_narrative => { template =>
"single_narrative.html" }],
);
And also view.pm, doap2perl.xsl and list2urls.xsl
sub news_page {
my %args = @_;
my $count=0;
for (fetch_doap_url_list()) {
my $result = parse_doap($_);
next unless defined $result;
push @{$args{projects}}, $result;
last if ++$count == 3;
}
return ASF::View::news_page(%args);
}
sub parse_doap {
my $url = shift;
my $doap = get $url or die "Can't get $url: $!\n";
my ($fh, $filename) = tempfile("XXXXXX");
print $fh $doap;
close $fh;
my $result = eval `xsltproc lib/doap2perl.xsl $filename`;
unlink $filename;
return undef if $result->{pmc} =~ m!^http://attic\.apache\.org!;
return $result;
}
sub fetch_doap_url_list {
my $xml = get
"http://svn.apache.org/repos/asf/infrastructure/site-tools/trunk/projects/files.xml"
or die "Can't get doap file list: $!\n";
my ($fh, $filename) = tempfile("XXXXXX");
print $fh $xml;
close $fh;
chomp(my @urls = grep /^http/, `xsltproc lib/list2urls.xsl
$filename`);
unlink $filename;
shuffle \@urls;
return @urls;
}
But in any case, if this is doable within the CMS -- as it appears to
be -- then one option would be for us to format our news stories as
Atom or RSS feeds. Then those can be sucked into a panel on the
homepage. But the nice thing then is the same logic could be used to
put in a list of new bug reports, or forum posts, or check-ins, or
conference paper submissions, or whatever other useful info we can
find a feed for. We set up a generic capability that could find
other users.
The CMS has perl libraries here:
URL: https://svn.apache.org/repos/infra/websites/cms/build/lib/ASF
./SVNUtil.pm
./Util.pm
./Value/Blogs.pm
./Value/Jira.pm
./Value/Mail.pm
./Value/SVN.pm
./Value/Twitter.pm
./Value.pm
./View.pm
Best Regards,
Dave