youyesyet/documentation/competitors.html

14 lines
9.3 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC ""
"">
<html><head><meta charset="UTF-8" /><title>Competitor Analysis</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Youyesyet</span> <span class="project-version">0.2.1</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="authorisation.html"><div class="inner"><span>Security and authorisation</span></div></a></li><li class="depth-1 current"><a href="competitors.html"><div class="inner"><span>Competitor Analysis</span></div></a></li><li class="depth-1 "><a href="database.html"><div class="inner"><span>Database Specification</span></div></a></li><li class="depth-1 "><a href="scaling.html"><div class="inner"><span>YouYesYet: Scaling</span></div></a></li><li class="depth-1 "><a href="userspec.html"><div class="inner"><span>YouYesYet: User-oriented specification</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>youyesyet</span></div></div></li><li class="depth-2 branch"><a href="youyesyet.config.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>config</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>db</span></div></div></li><li class="depth-3"><a href="youyesyet.db.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-2 branch"><a href="youyesyet.handler.html"><div class="inner"><span class="tree" style="top: -52px;"><span class="top" style="height: 61px;"></span><span class="bottom"></span></span><span>handler</span></div></a></li><li class="depth-2 branch"><a href="youyesyet.layout.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>layout</span></div></a></li><li class="depth-2 branch"><a href="youyesyet.locality.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>locality</span></div></a></li><li class="depth-2 branch"><a href="youyesyet.middleware.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>middleware</span></div></a></li><li class="depth-2 branch"><a href="youyesyet.oauth.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>oauth</span></div></a></li><li class="depth-2 branch"><a href="youyesyet.outqueue.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>outqueue</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>routes</span></div></div></li><li class="depth-3 branch"><a href="youyesyet.routes.auto.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>auto</span></div></a></li><li class="depth-3 branch"><a href="youyesyet.routes.auto-json.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>auto-json</span></div></a></li><li class="depth-3 branch"><a href="youyesyet.routes.home.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>home</span></div></a></li><li class="depth-3 branch"><a href="youyesyet.routes.issue-experts.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>issue-experts</span></div></a></li><li class="depth-3 branch"><a href="youyesyet.routes.logged-in.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>logged-in</span></div></a></li><li class="depth-3 branch"><a href="youyesyet.routes.manual.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>manual</span></div></a></li><li class="depth-3 branch"><a href="youyesyet.routes.oauth.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>oauth</span></div></a></li><li class="depth-3 branch"><a href="youyesyet.routes.rest.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>rest</span></div></a></li><li class="depth-3 branch"><a href="youyesyet.routes.roles.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>roles</span></div></a></li><li class="depth-3"><a href="youyesyet.routes.services.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>services</span></div></a></li><li class="depth-2 branch"><a href="youyesyet.utils.html"><div class="inner"><span class="tree" style="top: -331px;"><span class="top" style="height: 340px;"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-2"><a href="youyesyet.validation.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>validation</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#competitor-analysis" name="competitor-analysis"></a>Competitor Analysis</h1>
<p>Obviously <strong>You Yes Yet?</strong> is my baby; Ive put a lot of thought into it. At the time I started working on it I wasnt aware of any open source competitors; I did to a web search, and I emailed the Bernie Sanders campaign to see whether their widely admired tools were open source. I didnt find anything.</p>
<p>However, Ive just been pointed to <a href="http://www.voteleavetakecontrol.org/">Vote Leave</a>s <a href="https://dominiccummings.wordpress.com/2016/10/29/on-the-referendum-20-the-campaign-physics-and-data-science-vote-leaves-voter-intention-collection-system-vics-now-available-for-all/">Vics</a> tool, and there may well be others.</p>
<p>There is no room here for ego. What matters is that the Yes campaign gets the best available tool for the job. So its important to do competitor analysis, and not to invest too much work into <strong>You Yes Yet?</strong> unless theres a realistic possibility of producing a tool which is better than any of the available alternatives. But its also the case that by studying competitors we may find ways to improve the design of <strong>You Yes Yet?</strong>.</p>
<h2><a href="#vics" name="vics"></a>Vics</h2>
<p>Vics, the <strong>Voter Intention Collection System</strong>, is reputed to have been a significant factor in the successful campaign by Vote Leave to take Britain out of the EU. It has been <a href="https://github.com/celestial-winter/vics">released</a> as open source under MIT licence, so it is unambiguously available for us to use.</p>
<p>The architecture comprises a single-page app built using Angular talking to a server built in Java using the Spring framework. The database engine used is Postgres. <a href="https://github.com/xetorthio/jedis">Jedis</a>, a Java port of <a href="https://redis.io/">Redis</a>, is used as an in-memory data cache, server side.</p>
<p>### Download and initial build</p>
<p>I checked out the source from the GitHub repository, and following the instructions in the README created the database and ran a maven install process. Unfortunately, run as a normal user, when this process goes into its test sequence many tests fail unable to contact Jedis. I find it slightly worrying to run such a large and complex build as <em>root</em>, but as <em>root</em> it gets substantially further. The build still doesnt complete but it seems that it is closer to completion.</p>
<p>The ironic point is that it fails because it depends on the JavaScript package manager <a href="https://bower.io/">bower</a>, and bower (very sensibly) refuses to run as <em>root</em>. I therefore made a small modification to the build script to allow it to run <em>bower</em> as root, but unfortunately that didnt solve the build problem; the jedis service was still not found where it was expected.</p>
<p>This is difficult to diagnose; the exception is so deeply nested in framework code that no code from the actual Vics application appears on the stack dump, which makes it very hard to know where to start in debugging.</p>
<p>So for tonight Ive failed. I shall try again.</p></div></div></div></body></html>