jerbs done?

This commit is contained in:
Jeremy Kauffman 2018-04-27 17:17:13 -04:00
parent 9630777ec6
commit 073b920d7f
8 changed files with 77 additions and 73 deletions

View file

@ -4,7 +4,7 @@ order: 3
status: active status: active
url: https://hire.withgoogle.com/public/jobs/lbryio/view/P_AAAAAADAAADDIQ-YUHEtOA?trackingTag=joinUs url: https://hire.withgoogle.com/public/jobs/lbryio/view/P_AAAAAADAAADDIQ-YUHEtOA?trackingTag=joinUs
--- ---
Being a project manager at LBRY requires skillful facilitation and coaching of a menagerie of full-time engineers and community contributors. Additionally, it demands the ability to break down big goals into practical plans and keep track of a wide variety of tasks and small details. Being a project manager at LBRY requires skillful facilitation and coaching of a menagerie of full-time engineers and community contributors. It demands the ability to break down big goals into practical plans and keep track of a wide variety of tasks and small details.
This isn't a typical project management position. LBRY is an open-source, community driven company with few externally driven deadlines and a big focus on transparency. This isn't a typical project management position. LBRY is an open-source, community driven company with few externally driven deadlines and a big focus on transparency.

View file

@ -1,7 +1,7 @@
--- ---
title: Protocol Engineer title: Protocol Engineer
order: 4 order: 4
status: rolling status: active
url: https://hire.withgoogle.com/public/jobs/lbryio/view/P_AAAAAADAAADALc6v5NkAOf?trackingTag=joinUs url: https://hire.withgoogle.com/public/jobs/lbryio/view/P_AAAAAADAAADALc6v5NkAOf?trackingTag=joinUs
--- ---
The LBRY protocol consists of a [set of APIs](https://lbry.io/api) provided via a daemon. This daemon is comprised of several sub-components, and interacts with the blockchain, wallet, and other remote daemons that constitute the LBRY data network. The LBRY protocol consists of a [set of APIs](https://lbry.io/api) provided via a daemon. This daemon is comprised of several sub-components, and interacts with the blockchain, wallet, and other remote daemons that constitute the LBRY data network.

View file

@ -109,7 +109,6 @@ class Controller
$router->get(['/press-kit.zip', 'press-kit'], 'ContentActions::executePressKit'); $router->get(['/press-kit.zip', 'press-kit'], 'ContentActions::executePressKit');
$router->get('/join-us', 'ContentActions::executeJobs');
$router->post('/postcommit', 'OpsActions::executePostCommit'); $router->post('/postcommit', 'OpsActions::executePostCommit');
$router->post('/log-upload', 'OpsActions::executeLogUpload'); $router->post('/log-upload', 'OpsActions::executeLogUpload');
$router->get(static::CACHE_CLEAR_PATH, 'OpsActions::executeClearCache'); $router->get(static::CACHE_CLEAR_PATH, 'OpsActions::executeClearCache');

View file

@ -16,7 +16,6 @@ class ContentActions extends Actions
URL_PRESS = '/' . self::SLUG_PRESS, URL_PRESS = '/' . self::SLUG_PRESS,
URL_BOUNTY = '/' . self::SLUG_BOUNTY, URL_BOUNTY = '/' . self::SLUG_BOUNTY,
URL_CREDIT_REPORTS = '/' . self::SLUG_CREDIT_REPORTS, URL_CREDIT_REPORTS = '/' . self::SLUG_CREDIT_REPORTS,
URL_JOBS = '/' . self::SLUG_JOBS,
CONTENT_DIR = ROOT_DIR . '/content', CONTENT_DIR = ROOT_DIR . '/content',
@ -392,33 +391,21 @@ class ContentActions extends Actions
]]; ]];
} }
public static function executeJobs() public static function prepareJobsPartial(array $vars)
{ {
Response::enableHttpCache(); $jobs =
array_filter(
array_map('View::parseMarkdown', glob(static::VIEW_FOLDER_JOBS . '/*')),
function($job) { return $job[0]['status'] !== 'closed'; }
);
$jobs = array(); usort($jobs, function($jobA, $jobB){
if ($jobA[0]['status'] === 'active' xor $jobB[0]['status'] === 'active') {
$jobs = array_filter(glob(static::VIEW_FOLDER_JOBS . '/*'), function($job){ return $jobA[0]['status'] === 'active' ? -1 : 1;
list($metadata, $jobHTML) = View::parseMarkdown($job); }
return $jobA[0]['order'] <=> $jobB[0]['order'];
return $metadata['status'] != 'closed';
}); });
usort($jobs, function($job1, $job2){ return $vars + ['jobs' => $jobs];
list($metadataA, $jobHTMLA) = View::parseMarkdown($job1);
list($metadataB, $jobHTMLB) = View::parseMarkdown($job2);
return $metadataA['order'] <=> $metadataB['order'];
});
return ['content/join-us', ['jobs' => $jobs]];
}
public static function prepareJobPartial(array $vars)
{
list($metadata, $jobHTML) = View::parseMarkdown($vars['job']);
return $vars + ['metadata' => $metadata, 'jobHTML' => $jobHTML];
} }
} }

View file

@ -1,7 +1,14 @@
<h3> <h3>
<?php echo $metadata['title'] ?> <span class="badge <?php echo $metadata['status'] == "active" ? "badge-primary" : "badge-info" ?>"><?php echo $metadata['status'] ?></span></h3> <?php echo $metadata['title'] ?>
<div class="markdown" <?php echo $jobHTML ?> <?php if (isset($metadata['status'])): ?>
</div> <span class="badge <?php echo $metadata['status'] == "active" ? "badge-primary" : "badge-info" ?>"><?php echo $metadata['status'] ?></span>
<?php if(isset($metadata['url'])): ?> <?php endif ?>
<a class="btn btn-alt" href="<?php echo $metadata['url']?>">Apply Here</a> </h3>
<?php endif ?> <?php if (isset($metadata['url'])): ?>
<div class="spacer-half">
<a class="btn btn-alt" href="<?php echo $metadata['url']?>">Apply</a>
</div>
<?php endif ?>
<div class="markdown">
<?php echo $jobHtml ?>
</div>

View file

@ -0,0 +1,8 @@
<div>
<?php foreach($jobs as $job): ?>
<?php echo View::render('content/_job', [
'metadata' => $job[0],
'jobHtml' => $job[1]
]) ?>
<?php endforeach ?>
</div>

View file

@ -70,74 +70,69 @@
<h2 id="positions">Positions</h2> <h2 id="positions">Positions</h2>
<em>If a position is marked paused, you are still welcome to contact us. For blockchain, protocol, and application engineers, we will be hiring regularly throughout 2018.</em> <?php echo View::render('content/_jobs') ?>
<div>
<?php foreach($jobs as $job): ?>
<?php echo View::render('content/_job', ['job' => $job]) ?>
<?php endforeach ?>
</div>
<h2 id="applying">Applying</h2>
<h4 id="how-to-apply">How To Apply</h4>
<p>
Contact <a href="mailto:joinus@lbry.io">joinus@lbry.io</a> if interested in a position. Please include the following:
</p>
<ol>
<li>A resume, LinkedIn profile, or other resource that would serve as a work history.</li>
<li>A code sample. Preferably a link to a public repository for a project you have built or significantly contributed to.</li>
<li>One sentence about why you'd like to work for LBRY.</li>
</ol>
<h4 id="process">The Process</h4> <h2 id="applying">Hiring Process</h2>
<p> <p>
We use a 3-step hiring process: Click "Apply" next to any job listed above to begin the process. We use a 3-step hiring process:
</p> </p>
<ol> <ol>
<li>A brief (20-30 minute) non-technical, introductory phone call with either the CEO or CTO.</li> <li>A brief (30 minute max), non-technical, introductory phone call with either the CEO, CTO, or appropriate lead.</li>
<li> <li>
<p>A compensated code contribution (4 hours minimum) on the repository you'd be working on.</p> <p>
All technical hires are required to complete compensated code contribution on the repository they'd be working on.
Non-technical hires will also be asked to complete a compensated trial task after they apply and complete step 1.
</p>
<p>
Issues tagged "good first issue" are suitable for this purpose, though you are welcome to work on another issue or even something not filed at all.
</p>
<table class="full-table"> <table class="full-table">
<thead> <thead>
<tr> <tr>
<th>Project</th> <th>Project(s)</th>
<th>Position</th> <th>Position</th>
<th>Issues</th> <th>Issues</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td><a href="https://github.com/lbryio/lbry">lbry</a></td> <td class="center"><a href="https://github.com/lbryio/lbrycrd">lbrycrd</a></td>
<td>Protocol Engineer</td> <td class="center">Blockchain Engineer</td>
<td class="center"><a href="https://github.com/lbryio/lbrycrd/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">good first issues</a></td>
</tr>
<tr>
<td class="center">
<a href="https://github.com/lbryio/lbry">lbry (daemon)</a><br/>
<a href="https://github.com/lbryio/lbryum">lbryum (wallet)</a>
</td class="center">
<td class="center">Protocol Engineer</td>
<td><a href="https://github.com/lbryio/lbry/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">good first issues</a></td> <td><a href="https://github.com/lbryio/lbry/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">good first issues</a></td>
</tr> </tr>
<tr> <tr>
<td><a href="https://github.com/lbryio/lbry-app">lbry-app</a></td> <td class="center">
<td>Application or UX Engineer</td> <a href="https://github.com/lbryio/lbry-app">lbry-desktop</a><br/>
<td><a href="https://github.com/lbryio/lbry-app/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">good first issues</a></td> <a href="https://github.com/lbryio/lbry-android">lbry-android</a><br/>
<a href="https://github.com/lbryio/spee.ch">spee.ch</a>
</td>
<td class="center">Lead Application Engineer</td>
<td class="center"><a href="https://github.com/lbryio/lbry-app/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">good first issues</a></td>
</tr> </tr>
<tr> <tr>
<td><a href="https://github.com/lbryio/lbrycrd">lbrycrd</a></td> <td class="center"><em>(not public)</em></td>
<td>Blockchain Engineer</td> <td class="center">API engineer</td>
<td><a href="https://github.com/lbryio/lbrycrd/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">good first issues</a></td> <td class="center">contact us / apply first</td>
</tr>
<tr>
<td><a href="https://github.com/lbryio/lbry.io">lbry.io</a></td>
<td>Web Developer</td>
<td><a href="https://github.com/lbryio/lbry.io/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">good first issues</a></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<p>
We ask all potential full-time contributors to take on a potential issue on the project they'd be working on. Issues tagged "good first issue" are suitable for this purpose, though you are welcome to work on another issue or even something not filed at all.
</p>
<p> <p>
The issue you choose does not necessarily need to be fully completed, and we don't expect a perfect first contribution. Open a pull request as soon as you'd like any feedback from one of our developers. We compensate at or above market rates for all accepted pull requests. The issue you choose does not necessarily need to be fully completed, and we don't expect a perfect first contribution. Open a pull request as soon as you'd like any feedback from one of our developers. We compensate at or above market rates for all accepted pull requests.
</p> </p>
<p> <p>
For questions or problems with a particular issue, please comment directly on the GitHub issue. For setup or environment trouble, open a separate issue. You can also join #dev in <a href="https://chat.lbry.io">our chat</a> to interact with other community members. For questions or problems with a particular issue, please comment directly on the GitHub issue. For setup or environment trouble, open a separate issue or email the contact listed in the project <code>README</code>. You can also join #dev in <a href="https://chat.lbry.io">our chat</a> to interact with other community members.
</p> </p>
</li> </li>
<li> <li>
<p>A longer (1-2 hours) meeting with the team members you'd be working directly with, as well as the CEO and/or CTO.</p> <p>A longer meeting with the team members you'd be working directly with, as well as the CEO and/or CTO.</p>
</li> </li>
</ol> </ol>
<p>Steps 1 and 2 may be completed in either order (i.e. you're welcome to try contributing before the introductory call).</p> <p>Steps 1 and 2 may be completed in either order (i.e. you're welcome to try contributing before the introductory call).</p>

View file

@ -22,4 +22,12 @@ $badge-height: $spacing-vertical * 3/4;
{ {
background-color: $color-info-bg; background-color: $color-info-bg;
} }
}
h1, h2, h3, h4, h5, h6
{
> .badge
{
vertical-align: middle;
}
} }