%RCSSM read CSSM statistics from google group
% RCSSM extracts CSSM's posting activity
% since its inauguration on jan 8, 1993
% from google's group site and
% - returns the data in a table
% - plots an activity surface [abs/gradient]
%
% CSSM = MATLAB's newsgroup: comp.soft-sys.matlab
%
%SYNTAX
% T = RCSSM;
%
%OUTPUT
% T output table with fields
% .y years: 1993 - current
% .m month: 1:12
% .d activity table
% rows = year [1=1993]
% cols = month [1= jan]
%
%EXAMPLE
% tbl=rcssm;
% created:
% us 10-Jan-2007 us@neurol.unizh.ch
% modified:
% us 20-Feb-2008 13:14:18
function t=rcssm
% currently valid google web address and rex templates
% - 20feb08 us
url='http://groups.google.com/group/comp.soft-sys.matlab/about';
rex='(?<=month/)\d+-\d+">\d+';
fmt='%d-%d">%d';
t=get_html(url,rex);
t=get_tbl(t,fmt);
if ~isempty(t)
t=plt_tbl(t);
end
end
%-------------------------------------------------------------------------------
function t=get_html(url,rex)
import com.mathworks.mde.desk.*;
wb=com.mathworks.mde.webbrowser.WebBrowser.createBrowser;
wb.setCurrentLocation(url(8:end));
pause(1);
t={};
while isempty(t)
s=char(wb.getHtmlText);
t=regexp(s,rex,'match').';
% make sure we can bail-out with CTR-C
pause(.1);
end
desk=MLDesktop.getInstance;
desk.removeClient(wb);
end
%-------------------------------------------------------------------------------
function tbl=get_tbl(t,fmt)
[t,n]=cellfun(@(x) sscanf(char(x),fmt),t,'uni',false);
if ~all([n{:}]==3)
disp(sprintf('RCSSM> error reading table'));
tbl=[];
return;
end
t=cat(2,t{:});
iy=t(1,:)-t(1,1)+1;
im=t(2,:);
tbl.y=unique(t(1,:));
tbl.iy=unique(iy);
tbl.m=1:12;
tbl.d=accumarray([iy.',im.'],t(3,:),[],[],nan);
end
%-------------------------------------------------------------------------------
function tbl=plt_tbl(tbl)
m={
'jan', 'feb', 'mar',...
'apr', 'may', 'jun',...
'jul', 'aug', 'sep',...
'oct', 'nov', 'dec'
};
% surfaces
surf(tbl.d.');
colormap(jet(256));
shading interp;
hold on;
surf(gradient(tbl.d).');
shading interp;
mh=mesh(tbl.d.'+10);
set(mh,...
'facecolor','none',...
'edgecolor',[0,0,0]);
brighten(.6);
view(22,25);
% labels
y=tbl.y;
iy=1:2:max(tbl.iy);
if iy(end) ~= max(tbl.iy)
iy=[iy,max(tbl.iy)];
y=[y(1:2:end),y(end)];
else
y=y(1:2:end);
end
y=strread(sprintf('%2.2d\n',rem(y-1900,100)),'%s');
set(gca,...
'xlim',[1,iy(end)],...
'xtick',iy,...
'xticklabel',y,...
'ylim',[1,12],...
'ytick',1:12,...
'yticklabel',m,...
'fontsize',10,...
'fontname','arial');
lh(1)=xlabel('year');
lh(2)=ylabel('month');
lh(3)=zlabel('entries [absolute / gradient]');
set(lh,...
'fontweight','bold',...
'fontsize',12,...
'fontname','arial');
title('CSSM activity',...
'fontweight','bold',...
'fontsize',16,...
'fontname','arial');
shg;
rotate3d on;
end