<div dir="ltr"><div>Hi Vishnu<br></div><div><br></div><div>If you need any help with writing the proposal, let us know. I hope Mojca's email was clear enough to give you an idea about the project. You can always ask more, please feel free. It takes time to get familiar with the community. If you intend to apply, try coming up with an initial version by today? Don't worry about submitting PRs or prototype tasks, for now, we can work on them after proposal submission as well.</div><div><br></div><div>Umesh.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 23, 2018 at 10:56 AM, Mojca Miklavec <span dir="ltr"><<a href="mailto:mojca@macports.org" target="_blank">mojca@macports.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear Vishnu,<br>
<br>
Thank you very much for reaching to us.<br>
<br>
Just one general remark since the deadlines are approaching very<br>
quickly: a very important part of our GSOC selection process is to<br>
prove to us that you can do a particular task. This may include some<br>
pull requests, small demo prototype that you could show us (that might<br>
be most suitable it this case?), some references to your past work,<br>
... You should provide such information & some sample prototypes as<br>
soon as possible (but it can be a few days after proposal submission<br>
deadline since writing a good proposal is the top priority right now).<br>
Also super important: you should provide a draft proposal at least a<br>
few days before the deadline (it doesn't necessarily have to be<br>
submitted to the GSOC website, it's totally up to you, it can be<br>
anywhere where we could read it). You should absolutely not submit<br>
your first and final proposal one hour before the deadline. I would<br>
have generally suggested to submit it 2 weeks before the deadline, but<br>
that's no longer possible.<br>
<br>
I'm writing this email in a slightly longer form that usual because<br>
some of these ideas were clarified only last week and it makes sense<br>
to get feedback from a broader community. So I'm not writing it<br>
exclusively for you :) :) :)<br>
<span class=""><br>
<br>
On 22 March 2018 at 20:25, Vishnu wrote:<br>
> Hello all,<br>
><br>
> Thanks for rectifying the mail issues.<br>
><br>
> This is Vishnu.<br>
> I would Like to participate in GSOC 18 .And would like to work on :<br>
><br>
> #Collect build statistics<br>
><br>
> I needed some help in understanding the idea a bit more.<br>
> i wanted to understand the idea more deeply.<br>
> Can someone elaborate the idea more?<br>
<br>
</span>This might need some further explanation indeed, in particular because<br>
we had a developer meeting last week and the ideas crystalised a bit<br>
and we now have a slightly better understanding of that we want to<br>
achieve.<br>
<br>
This is our current overview of the package builds:<br>
    <a href="https://build.macports.org/waterfall" rel="noreferrer" target="_blank">https://build.macports.org/<wbr>waterfall</a><br>
The problem is that once the build has finished (the counter is at<br>
roughly 60.000 per builder, sadly only the last 10.000 are kept), we<br>
have absolutely no overview on per-port and per-os basis about whether<br>
or not a particular build of that port succeeded (perhaps a month or a<br>
year ago). The best we can do is check<br>
    <a href="http://packages.macports.org/python27/" rel="noreferrer" target="_blank">http://packages.macports.org/<wbr>python27/</a><br>
and see whether version X for macOS version Y exists or not, but<br>
that's clumsy, if nothing else because a package may not exist there<br>
just because of licence conflict that prevents binary distribution.<br>
Also, we have absolutely no overview of which ports built in version<br>
X, but then failed in version Y etc.<br>
<br>
<br>
First of all: just the "collect build statistics" part on its own is<br>
slightly too short on its own to fill the whole summer. I hope others<br>
will chime it with their view, but given your interests and skillset I<br>
would suggest to think in either one of two directions proposed below<br>
(or a bit of both).<br>
<br>
<br>
Option A) Extend buildbot and create some views (requires Python,<br>
JavaScript etc.)<br>
<br>
This might include some modifications of the core buildbot code (which<br>
is all Python), but more important part would be to write dedicated<br>
views for buildbot version 1.x.<br>
<br>
We are currently using buildbot 0.8, but would eventually like to<br>
switch to version 1.x. The main obstacle is that it lacks a view that<br>
would be informative enough for us. (Since we are slightly "abusing"<br>
buildbot in ways different than it was designed for, most of that info<br>
is also lacking now in version 0.8.)<br>
<br>
Here's a bit of background written by Pierre:<br>
<br>
On 16 February 2018 at 14:02, Pierre Tardy wrote:<br>
><br>
> Other people are also frustrated by the nine version of the waterfall,<br>
> including the webkit people <a href="https://github.com/buildbot/buildbot/issues/3884" rel="noreferrer" target="_blank">https://github.com/buildbot/<wbr>buildbot/issues/3884</a><br>
> I added lengthy explaination in this issue on why it is like that and why it<br>
> is not easy to improve. But help is appreciated.<br>
><br>
> My suggestion for webkit is also valid for macports. What you may need is a<br>
> new UI plugin, which is carefully crafted for your requirements.<br>
><br>
> I think this is a very good match for a GSOC project.<br>
> I think this can be done by recruiting a front-end student.<br>
> The project might need to develop some python code in order to speed-up the<br>
> queries (like the one to matches every builds associated to a change<br>
> <a href="https://github.com/buildbot/buildbot/issues/3927" rel="noreferrer" target="_blank">https://github.com/buildbot/<wbr>buildbot/issues/3927</a> ). This is something that I<br>
> could help with.<br>
...<br>
> The goal of buildbot is to allow people with reasonable web frontend background<br>
> to build their custom dashboard in 2 or 3 days.<br>
> Each project does not require that, this is why we try to have some generic<br>
> versions.<br>
...<br>
> The examples we have are the console/grid/waterfall plugins.<br>
<br>
These are some proposals for views that I would for example like to<br>
see *inside* the buildbot:<br>
   <a href="https://trac.macports.org/ticket/55978" rel="noreferrer" target="_blank">https://trac.macports.org/<wbr>ticket/55978</a><br>
<br>
If the main stress would be on this idea, it would be co-mentored from buildbot.<br>
<br>
<br>
Option B) Create package index (which includes build info)<br>
<br>
We desperately need a package index. Some examples:<br>
- <a href="http://brewformulas.org/Python" rel="noreferrer" target="_blank">http://brewformulas.org/Python</a><br>
- <a href="http://braumeister.org/formula/python" rel="noreferrer" target="_blank">http://braumeister.org/<wbr>formula/python</a><br>
<br>
What we have now is merely:<br>
- <a href="https://www.macports.org/ports.php?by=name&substr=python" rel="noreferrer" target="_blank">https://www.macports.org/<wbr>ports.php?by=name&substr=<wbr>python</a><br>
and an old GSOC project for statistics that would need to be improved<br>
(but it might be easier to rewrite it) and properly deployed:<br>
- <a href="http://stats.macports.neverpanic.de/categories/11/ports/18576" rel="noreferrer" target="_blank">http://stats.macports.<wbr>neverpanic.de/categories/11/<wbr>ports/18576</a><br>
There's also an undeployed rails application under:<br>
- <a href="https://github.com/macports/macports-contrib/tree/master/mpwa/doc" rel="noreferrer" target="_blank">https://github.com/macports/<wbr>macports-contrib/tree/master/<wbr>mpwa/doc</a><br>
<br>
During our developer meeting a few days ago Aljaž wrote a tool in a<br>
couple of hours that creates some nice static pages for all ports:<br>
    <a href="https://github.com/g5pw/macports-port-tree" rel="noreferrer" target="_blank">https://github.com/g5pw/<wbr>macports-port-tree</a><br>
(a sample output is in attachment, but Aljaž also incorporated some<br>
build statistics for which I don't have an example here)<br>
and Umesh started experimenting with dynamic pages in django 2 (we<br>
have code for that too, but it's still in super preliminary phase).<br>
<br>
What would currently make most sense for us would be a single dynamic<br>
website (django as a framework sounds reasonable, even though not the<br>
only one "allowed"; we would definitely like to avoid rails since that<br>
requires a lot of maintenance to keep it up to date and running and<br>
the latest version and there's a lot of magic going on that's<br>
difficult to understand without mileage) with one page per port which<br>
would combine:<br>
<br>
- all the information about the port (description, version,<br>
maintainer, homepage, variants, dependencies, dependent ports, ...)<br>
- build summary (as scraped from buildbot history): which version was<br>
built at what time on which os, successful or not, ...<br>
  - including whether or not a binary package exists<br>
- installation statistics (from users who opted in and send a json<br>
file every now and then) with some graphs, similar to the stats page<br>
above<br>
- results of "livecheck": whether there's a newer version of the port available<br>
- short git log with links to the last few changes to the Portfile<br>
- links to trac tickets for that port<br>
  <a href="https://trac.macports.org/query?0_port=python27&0_port_mode=%7E&0_status=%21closed" rel="noreferrer" target="_blank">https://trac.macports.org/<wbr>query?0_port=python27&0_port_<wbr>mode=%7E&0_status=%21closed</a><br>
- (maybe links to pull requests for that port)<br>
<br>
We would also need (must easier to do) pages for maintainers (listing<br>
all the ports they maintain, including the info which ports are<br>
outdated), categories (listing all the ports in category), search etc.<br>
<span class=""><br>
> How many web pages do we need to make ?<br>
<br>
</span>Ideally just one framework that will automatically generate all tens<br>
of thousand of pages for various ports :)<br>
<br>
Basically we need to be able to:<br>
- accept submissions of port usage statistics<br>
- accept success/failure reports from the buildbot<br>
- accept updates when Portfiles change, when ports are deleted etc.<br>
- optionally accept build error reports from users who opt in (that<br>
part would still need to be written on the Tcl side)<br>
- show one page per port<br>
- show pages for categories, maintainers<br>
<br>
That said ... our complete project website is from stone age, so any<br>
changes there would also be welcome :)<br>
<span class=""><br>
> Can i get some sample structure of webpage for 1 port . what all need to be<br>
> there.<br>
<br>
</span>I hope it's described well enough above, but feel free to ask for<br>
additional questions.<br>
<span class=""><br>
> Also where to get : collect per-port statistics & success matrix .Can i get<br>
> the exact sample link?<br>
<br>
</span>This would have to combine two separate steps:<br>
- Step 1: scrape old build statistics, see <a href="https://build.macports.org/json/help" rel="noreferrer" target="_blank">https://build.macports.org/<wbr>json/help</a><br>
- Step 2: modify buildbot setup to automatically send the build report<br>
(in json) to the new website<br>
<br>
This is our current buildbot setup:<br>
    <a href="https://github.com/macports/macports-infrastructure/blob/master/buildbot/master.cfg" rel="noreferrer" target="_blank">https://github.com/macports/<wbr>macports-infrastructure/blob/<wbr>master/buildbot/master.cfg</a><br>
<br>
A proof-of-concept for step 1 has in fact already been written during<br>
the developer meeting last week and should not need more than a day or<br>
two to complete + probably a few days to run to fetch the data from<br>
the server. We would probably need to add some more info to buildbot<br>
setup (for example, it's currently pretty cumbersome to extra the<br>
version of the package being built).<br>
<span class=""><br>
> I really think this is the project i could work on because i have prior<br>
> experience with all the languages required for this project (HTML, Python,<br>
> javascript, in fact, did my last intern mainly involving JSON).<br>
> I also have good experience in web Scraping.<br>
><br>
> I am well aware about :<br>
> JSON<br>
> Html<br>
> Css<br>
> Python<br>
> JAVASCRIPT<br>
> Basic idea about perl<br>
><br>
> Have used macOS.<br>
> Access to macos during gsoc would be limited. But possible.<br>
> I have certain knowledge of macports too.<br>
<br>
</span>If working on buildbot, you should be able to set up a working<br>
buildbot installation on your machine, both for version 0.8 and 1.x.<br>
You didn't mention which is your main platform. I don't know if that<br>
works on Windows (it might), but Windows might be a lot more tricky,<br>
so I hope you at least have full access to Linux. That would help in<br>
the second idea as well.<br>
<br>
MacPorts base should also build on Linux (if it doesn't we can<br>
probably fix it). Most packages won't install on a linux box, but it<br>
should be enough to run various commands that would be needed to set<br>
up various parts of the website.<br>
<br>
Mojca<br>
<br>
<br>
PS: here's an example of what current statistics website gets from<br>
someone who opts in for statistics submissions:<br>
{<br>
  "id": "some-unique-id",<br>
  "os": {<br>
    "macports_version": "2.4.2",<br>
    "osx_version": "10.13",<br>
    "os_arch": "i386",<br>
    "os_platform": "darwin",<br>
    "build_arch": "x86_64",<br>
    "xcode_version": "9.2"<br>
  },<br>
  "active_ports": [<br>
    {"name": "python2_select", "version": "0.0_2"},<br>
    {"name": "python_select", "version": "0.3_7"},<br>
    {"name": "llvm_select", "version": "2_0"},<br>
    {"name": "cctools", "version": "895_4", "variants": "llvm40 +"},<br>
    {"name": "xorg-xcb-proto", "version": "1.12_1", "variants": "python27 +"},<br>
    {"name": "SuiteSparse", "version": "4.2.1_4", "variants": "accelerate +"},<br>
    {"name": "wxPython-3.0", "version": "3.0.2_5", "requested": "true"},<br>
    {"name": "p5.26-wx", "version": "0.993.200_0", "requested": "true"}<br>
  ]<br>
}<br>
</blockquote></div><br></div>