Link to contact page from English Rules page

Rules

  The competition rules are not available in English yet.

  For now, please refer to the German version of this website or
  <%= link "contact us", to: page_path(@conn, :contact) %>.

Rules

  The competition rules are not available in English yet.

  For now, please refer to the German version of this website.


nav button changes

nav button changes

<!DOCTYPE html>

	<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
	<meta content="width=device-width, initial-scale=1" name="viewport">
	<meta content="BeyondBOINC displays the recently created content from a curated list of Steemit authors on the topics of cryptocurrency, distributed computing and technology." name="description">
	<meta content="Gridcoin, Bitshares, Steemit, Cryptocurrency, Blog, Aggregator, Glasnost, BOINC, BeyondBitcoin, BeyondBOINC, Distributed Computing, Cloud computing, Science, Peerplays, Blockchain, Decentralization, money, science, technology, crypto" name="keywords">
	<meta content="Customminer aka @cm-steem" name="author">
	<meta content="index, follow" name="robots">
	<meta content="1 days" name="revisit-after">

	<link rel="apple-touch-icon" sizes="57x57" href="/images/apple-icon-57x57.png">
	<link rel="apple-touch-icon" sizes="60x60" href="/images/apple-icon-60x60.png">
	<link rel="apple-touch-icon" sizes="72x72" href="/images/apple-icon-72x72.png">
	<link rel="apple-touch-icon" sizes="76x76" href="/images/apple-icon-76x76.png">
	<link rel="apple-touch-icon" sizes="114x114" href="/images/apple-icon-114x114.png">
	<link rel="apple-touch-icon" sizes="120x120" href="/images/apple-icon-120x120.png">
	<link rel="apple-touch-icon" sizes="144x144" href="/images/apple-icon-144x144.png">
	<link rel="apple-touch-icon" sizes="152x152" href="/images/apple-icon-152x152.png">
	<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-icon-180x180.png">
	<link rel="icon" type="image/png" sizes="192x192"  href="/images/android-icon-192x192.png">
	<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
	<link rel="icon" type="image/png" sizes="96x96" href="/images/favicon-96x96.png">
	<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
	<link rel="manifest" href="/images/manifest.json">
	<meta name="msapplication-TileColor" content="#ffffff">
	<meta name="msapplication-TileImage" content="/images/ms-icon-144x144.png">
	<meta name="theme-color" content="#ffffff">

	<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

	<link href="https://beyondboinc.net" rel="canonical">
	<title>BeyondBOINC: <%= naive_translate("head title", @conn.assigns[:lang])%></title>
 	<link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">
 	<link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.10/semantic.css" rel="stylesheet">

          			<img class="logo" src="/images/<%=naive_image_chooser("logo", @conn.assigns[:lang])%>">
          			BeyondBOINC

	        	<a href="/authors/<%=@conn.assigns[:about_blog_author]%>/<%=@conn.assigns[:about_blog_permlink]%>" class="item"><%=naive_translate("about", @conn.assigns[:lang])%>

					Trade GRC

							 Decentralized Exchanges

BitSquare

OpenLedger

BTSABC

BTSBOTS

Bitshares-Light

							 Centralized Exchanges

									HolyTransactions

									Poloniex

									C-Cex

									Bittrex

							 Explorers

									GridcoinStats

									GridResearchCorp

									Explorer.Gridcoin.Asia

									HolyTransactions

							 Exchange Stats

									CoinMarketCap

									CoinGecko

									CoinCap

					BOINC links

							 Official

									BOINC Website

									BOINC Forums

									GitHub

							 Services

									FormulaBOINC

									User of the day

									Desktop Grid Federation

									Boincstats

									Statsbzh

									DC-Vault

									Free-DC

							 Team Forums

									Rechenkraft

									SETI Germany

									SETI USA

									Free-DC

									Czech national team

									L'Alliance Francophone

									Overclock.Net

									Planet3DNow

							 Projects

ATLAS@Home

ATLAS.CH

Citizen Science Grid

Cosmology@Home

Enigma@Home

Leiden Classical

LHC@Home

NFS@Home

NumberFields@home

Rosetta@Home

SRBase

SZTAKI Desktop Grid

theSkyNet POGS

VGTU

Universe@home

World Community Grid

YAFU

yoyo@home

Amicable Numbers

Asteroids@home

Collatz Conjecture

Einstein@home

GPUgrid

Milkyway@home

Moo! Wrapper

PrimeGrid

SETI@home

					Community links

							 Gridcoin

									Official Website

									Forums

									GitHub

									Twitter

									Steemit

									Telegram

									Reddit

									IRC

									GRC MediaWiki

									GRC @ Wikipedia

							 Bitshares

									Official website

									Forums

									Telegram

									Explorer

							 Peerplays

									Official website

									Telegram

									Peerplays.chat

									GitHub

							 Steemit

									Official website

									Telegram

									Steemit.Chat

									GitHub

									Applications

									Explorer

				  <input placeholder="Search..." type="text" id="Search">
				  <button class="ui icon button" id="Button">

				  </button>

				<%= if get_flash(@conn, :info) do %>

					<%= get_flash(@conn, :info) %>

<%end %><%= if get_flash(@conn, :error) do %>

					<%= get_flash(@conn, :error) %>

<%end %>

<%= render @view_module, @view_template, assigns %>

Promoted Tags

	            Gridcoin
	            BOINC
	            Bitshares
	            BeyondBitcoin
	            Cryptocurrency

Promoted Authors

	            CM-Steem
	            OfficialFuzzy
	            Erkan
	            SC-Steemit
	            moisesmcardona

Affiliate links

	            Vultr
	            Namecheap
	            NordVPN
	            Purse.IO
	            CoinPayments

About

BeyondBOINC is a Steemit backed blog, powered by the  Glasnost  library & is actively maintained by @CM-STEEM.

Want to be a featured author? Join the BeyondBOINC Telegram Chat to apply.

				<form action="https://www.coinpayments.net/index.php" method="post">
					<input type="hidden" name="cmd" value="_donate">
					<input type="hidden" name="reset" value="1">
					<input type="hidden" name="merchant" value="b876aa63f7bf92ed4af474005a21bfaf">
					<input type="hidden" name="item_name" value="BeyondBOINC.Net Donation">
					<input type="hidden" name="currency" value="GRC">
					<input type="hidden" name="amountf" value="100.00000000">
					<input type="hidden" name="allow_amount" value="1">
					<input type="hidden" name="want_shipping" value="0">
					<input type="hidden" name="success_url" value="https://beyondboinc.net">
					<input type="hidden" name="cancel_url" value="https://beyondboinc.net">
					<input type="hidden" name="allow_extra" value="1">
					<input type="image" src="https://www.coinpayments.net/images/pub/donate-wide-blue.png" alt="Donate with CoinPayments.net">
				</form>

	      <img class="ui centered mini image" src="/images/<%=naive_image_chooser("logo", @conn.assigns[:lang])%>">

	        Home
	        Site Map
	        BeyondBOINC Telegram Chat


Trying to fix design group overview

Trying to fix design group overview

<!doctype html>

    <base target="_parent" />    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>Survey statistics</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="apple-touch-icon" href="apple-touch-icon.png">

    <link rel="stylesheet" href="/css/tablesorter.blue/style.css">
    <link rel="stylesheet" href="/css/reset.css">
    <link rel="stylesheet" href="/css/main.css">

        <% if get_flash(@conn, :info) || get_flash(@conn, :error) do %>

<%= get_flash(@conn, :info) %>

<%= get_flash(@conn, :error) %>

        <% end %>

Design groups

    id	SIG	Title	Members	Currently online
    Chats	Emails
    <%= for wk <- 1..@max_review do %>Review wk<%= wk %>	<% end %>
    Wiki authors	Wiki revs	Wiki diff
    <%= for wk <- 1..@etherpad_max do %>Etherpad wk<%= wk %> authors	Etherpad wk<%= wk %> diff	<% end %>

    <%= for group <- @groups do %>

        <%= group.id %>
        <%= group.sig_id %>
        <a href='/admin/collab/<%= group.id %>' target='_blank'><%= group.title %>
        <%= @num_members[group.id] %>
        <%= case length(@online[group.id] || []) do
          nil -> ""
          0 -> ""
          x -> raw "#{x}"
          end
          %>
        <%= @chats[group.id] || 0 %>
        <%= @emails[group.id] || 0 %>
        <%= for wk <- 1..@max_review do %>
          <%= if @reviews[group.id][wk] do %>
            <%= case @reviews[group.id][wk] do
              nil -> ""
              %{} -> 1
              x when is_list(x) -> length(x)
            end%>
          <%= else %>

      <% end %>
      <% end %>

          <%= group.wiki_contributors %>

        <%= group.wiki_rev %>
        <a href='<%= group.wiki_url %>'><%= group.wiki_diff %>

        <%= for wk <- 1..@etherpad_max do %>
          <%= if rev = Map.get(group.etherpad_rev, wk) do %>
        <%= rev[:authors] %>
        <a href='https://etherpad.mooc.encorelab.org/p/<%= rev[:hash] %>'><%= rev[:diff] %>
        <%= else %>
        <%= %>
        <%= %>
      <% end %>
      <% end %>

      <% end %>

<!doctype html>

    <base target="_parent" />    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>Survey statistics</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="apple-touch-icon" href="apple-touch-icon.png">

    <link rel="stylesheet" href="/css/tablesorter.blue/style.css">
    <link rel="stylesheet" href="/css/reset.css">
    <link rel="stylesheet" href="/css/main.css">

        <% if get_flash(@conn, :info) || get_flash(@conn, :error) do %>

<%= get_flash(@conn, :info) %>

<%= get_flash(@conn, :error) %>

        <% end %>

Design groups

    id	SIG	Title	Members	Currently online
    Chats	Emails
    <%= for wk <- 1..@max_review do %>Review wk<%= wk %>	<% end %>
    Wiki authors	Wiki revs	Wiki diff
    <%= for wk <- 1..@etherpad_max do %>Etherpad wk<%= wk %> authors	Etherpad wk<%= wk %> diff	<% end %>

    <%= for group <- @groups do %>

        <%= group.id %>
        <%= group.sig_id %>
        <a href='/admin/collab/<%= group.id %>' target='_blank'><%= group.title %>
        <%= @num_members[group.id] %>
        <%= case length(@online[group.id] || []) do
          nil -> ""
          0 -> ""
          x -> raw "#{x}"
          end
          %>
        <%= @chats[group.id] || 0 %>
        <%= @emails[group.id] || 0 %>
        <%= for wk <- 1..@max_review do %>
          <%= if @reviews[group.id][wk] do %>
            <%= case @reviews[group.id][wk] do
              nil -> ""
              %{} -> 1
              x when is_list(x) -> length(x)
            end%>
          <%= else %>

      <% end %>
      <% end %>

          <%= group.wiki_contributors %>

        <%= group.wiki_rev %>
        <a href='<%= group.wiki_url %>'><%= group.wiki_diff %>

        <%= for wk <- 1..@etherpad_max do %>
          <%= if group.etherpad_rev[wk] do %>
        <%= group.etherpad_rev[wk][:authors] %>
        <a href='https://etherpad.mooc.encorelab.org/p/<%= group.etherpad_rev[wk][:hash] %>'><%= group.etherpad_rev[wk][:diff] %>
        <%= else %>
        <%= %>
        <%= %>
      <% end %>
      <% end %>

      <% end %>


hide session infos against anonymous users

<!DOCTYPE html>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>Web QA Voting</title>
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">

          <%= if Guardian.Plug.current_resource(@conn) do %>

<%= Guardian.Plug.current_resource(@conn).email %>

<%= link("Logout", to: logout_path(@conn, :delete), method: :delete) %>

          <% else %>

<%= link("Signup", to: user_path(@conn, :new)) %>

<%= link("Login", to: login_path(@conn, :create)) %>

          <% end %>

<%= get_flash(@conn, :info) %>

<%= get_flash(@conn, :error) %>

      <%= @inner %>

    <%= if Guardian.Plug.current_resource(@conn) do %>

Guardian Data

Claims

<%= inspect(Guardian.Plug.claims(@conn)) %>

Token

<%= inspect(Guardian.Plug.current_token(@conn)) %>

Resource

<%= inspect(Guardian.Plug.current_resource(@conn)) %>

Pings

    <% end %>

<!DOCTYPE html>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>Web QA Voting</title>
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">

          <%= if Guardian.Plug.current_resource(@conn) do %>

<%= Guardian.Plug.current_resource(@conn).email %>

<%= link("Logout", to: logout_path(@conn, :delete), method: :delete) %>

          <% else %>

<%= link("Signup", to: user_path(@conn, :new)) %>

<%= link("Login", to: login_path(@conn, :create)) %>

          <% end %>

<%= get_flash(@conn, :info) %>

<%= get_flash(@conn, :error) %>

      <%= @inner %>

Guardian Data

Claims

<%= inspect(Guardian.Plug.claims(@conn)) %>

Token

<%= inspect(Guardian.Plug.current_token(@conn)) %>

Resource

<%= inspect(Guardian.Plug.current_resource(@conn)) %>

Pings


vefify

vefify

<!DOCTYPE html>
<html lang="<%= locale %>">

  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">

  <title><%= page_title(@conn, assigns) %></title>
  <meta name="author" content="">
  <meta name="keywords" content="">
  <meta name="description" content="">
  <meta name="google-site-verification" content="<%= Application.get_env(:exblur, :sitemap)[:verify] %>" />

  <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">

  <%= render "_header.html", assigns %>

    <%= render @view_module, @view_template, assigns %>

  <%= render "_footer.html", assigns %>

<!DOCTYPE html>
<html lang="<%= locale %>">

  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">

  <meta name="description" content="">
  <meta name="author" content="">

  <title><%= page_title(@conn, assigns) %></title>
  <meta name="keywords" content="">
  <meta name="description" content="">

  <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">

  <%= render "_header.html", assigns %>

    <%= render @view_module, @view_template, assigns %>

  <%= render "_footer.html", assigns %>


Update landing page copy

Update landing page copy

    Remote

    RetroBETA

  <%= if @current_user do %>

      Glad to have you, <%= @current_user.given_name %>!

    <%= form_for @conn, retro_path(@conn, :create), [as: :retro, class: "ui form"], fn _f -> %>
      <%= submit "Create a Retrospective for Your Team", class: "ui button blue" %>
    <% end %>
  <%= else %>

      Get Better With Your Team

Remote Retro lets you get together, even when you're far apart.

      Sign in with Google to Get Started

  <% end %>

    Remote

    RetroBETA

  <%= if @current_user do %>

      Glad to have you, <%= "#{@current_user.given_name} #{@current_user.family_name}" %>!

    <%= form_for @conn, retro_path(@conn, :create), [as: :retro, class: "ui form"], fn _f -> %>
      <%= submit "Create a Retrospective", class: "ui button teal" %>
    <% end %>
  <%= else %>

      Get Better With Your Team

Remote Retro lets you get together, even when you're far apart.

      Sign in with Google to Get Started

  <% end %>


creating some links to experiment with the ecto endpoint.

Welcome to GraphQL!

A better way to build blazing fast APIs.

Hello World Example

        /graphql/hello?query={greeting}

        /graphql/hello?query={greeting(name:"Joe")}

Simple Blog Example

        /graphql/blog?query={article(id:"1"){id,title,body,author{name}}}

        /graphql/blog?query={feed{title,body},article(id:1){id,title,body,author{name}}}

Ecto Example

          /graphql/ecto?query={greeting(id:2)}

          /graphql/ecto?query={greeting(name:"Garrett1")}

Resources

        GraphQL Plug Hex Package

        GraphQL Plug Docs

        GraphQL Plug Source

        GraphQL Core Hex Package

        GraphQL Core Docs

        GraphQL Core Source

        GraphQL Spec

Help

        Erlang channel on the GraphQL Slack

Welcome to GraphQL!

A better way to build blazing fast APIs.

Hello World Example

        /graphql/hello?query={greeting}

        /graphql/hello?query={greeting(name:"Joe")}

Simple Blog Example

        /graphql/blog?query={article(id:"1"){id,title,body,author{name}}}

        /graphql/blog?query={feed{title,body},article(id:1){id,title,body,author{name}}}

Resources

        GraphQL Plug Hex Package

        GraphQL Plug Docs

        GraphQL Plug Source

        GraphQL Core Hex Package

        GraphQL Core Docs

        GraphQL Core Source

        GraphQL Spec

Help

        Erlang channel on the GraphQL Slack


Put Events link back in main header (#304)

- We moved events to the resources drop down, but this is perhaps hard to find. Thus, this commit puts events back in the header as a main link.

      <img src="<%=  Routes.static_path(@conn, "/images/eef-header-logo.svg") %>" style="max-height:50px;max-width:50px;" alt="EEF Logo" >

    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">

    </button>

          Join Us!

          Sponsors

Fellows

Working Groups

Stipends

News

Events

          Resources

            Academic Papers
            Community

          About

            Board Members
            Contact
            Bylaws
            FAQ

        <%= if logged_in?(assigns) do %>

                <%= @current_user.name %>

                <%= link("Profile", to: "/members/profile", class: "dropdown-item") %>
                <%= link("My News Tips", to: "/submissions/news", class: "dropdown-item") %>
                <%= if @current_user.is_app_admin do %>
                  Administration
                <% end %>

                <%= form_tag(Routes.session_path(@conn, :delete)) do %>
                  <button type="submit" class="dropdown-item btn btn-link">Log out</button>
                <% end %>

      <% else %>
        <%= if Erlef.is_env?(:dev) do %>

            Log in as

              <%= link("Basic", to: "/login?code=basic_member",
                        class: "dropdown-item") %>
              <%= link("Annual Supporting Member", to: "/login?code=annual_member",
                        class: "dropdown-item") %>
              <%= link("Lifetime Member", to: "/login?code=lifetime_member",
                        class: "dropdown-item") %>
              <%= link("Fellow", to: "/login?code=fellow_member",
                        class: "dropdown-item") %>
              <%= link("Working Group Chair", to: "/login?code=wg_chair",
                        class: "dropdown-item") %>
              <%= link("Admin", to: "/login?code=admin",
                        class: "dropdown-item") %>

        <% else %>

            <a class="nav-link" href="<%= Routes.session_path(@conn, :show) %>">Log in

        <% end %>
      <% end %>

      <img src="<%=  Routes.static_path(@conn, "/images/eef-header-logo.svg") %>" style="max-height:50px;max-width:50px;" alt="EEF Logo" >

    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">

    </button>

          Join Us!

          Sponsors

Fellows

Working Groups

Stipends

News

          Resources

            Academic Papers
            Community
            Events

          About

            Board Members
            Contact
            Bylaws
            FAQ

        <%= if logged_in?(assigns) do %>

                <%= @current_user.name %>

                <%= link("Profile", to: "/members/profile", class: "dropdown-item") %>
                <%= link("My News Tips", to: "/submissions/news", class: "dropdown-item") %>
                <%= if @current_user.is_app_admin do %>
                  Administration
                <% end %>

                <%= form_tag(Routes.session_path(@conn, :delete)) do %>
                  <button type="submit" class="dropdown-item btn btn-link">Log out</button>
                <% end %>

      <% else %>
        <%= if Erlef.is_env?(:dev) do %>

            Log in as

              <%= link("Basic", to: "/login?code=basic_member",
                        class: "dropdown-item") %>
              <%= link("Annual Supporting Member", to: "/login?code=annual_member",
                        class: "dropdown-item") %>
              <%= link("Lifetime Member", to: "/login?code=lifetime_member",
                        class: "dropdown-item") %>
              <%= link("Fellow", to: "/login?code=fellow_member",
                        class: "dropdown-item") %>
              <%= link("Working Group Chair", to: "/login?code=wg_chair",
                        class: "dropdown-item") %>
              <%= link("Admin", to: "/login?code=admin",
                        class: "dropdown-item") %>

        <% else %>

            <a class="nav-link" href="<%= Routes.session_path(@conn, :show) %>">Log in

        <% end %>
      <% end %>


fixing search

fixing search

<!DOCTYPE html>

	<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
	<meta content="width=device-width, initial-scale=1" name="viewport">
	<meta content="BeyondBOINC displays the recently created content from a curated list of Steemit authors on the topics of cryptocurrency, distributed computing and technology." name="description">
	<meta content="Gridcoin, Bitshares, Steemit, Cryptocurrency, Blog, Aggregator, Glasnost, BOINC, BeyondBitcoin, BeyondBOINC, Distributed Computing, Cloud computing, Science, Peerplays, Blockchain, Decentralization, money, science, technology, crypto" name="keywords">
	<meta content="Customminer aka @cm-steem" name="author">
	<meta content="index, follow" name="robots">
	<meta content="1 days" name="revisit-after">

	<link rel="apple-touch-icon" sizes="57x57" href="/images/apple-icon-57x57.png">
	<link rel="apple-touch-icon" sizes="60x60" href="/images/apple-icon-60x60.png">
	<link rel="apple-touch-icon" sizes="72x72" href="/images/apple-icon-72x72.png">
	<link rel="apple-touch-icon" sizes="76x76" href="/images/apple-icon-76x76.png">
	<link rel="apple-touch-icon" sizes="114x114" href="/images/apple-icon-114x114.png">
	<link rel="apple-touch-icon" sizes="120x120" href="/images/apple-icon-120x120.png">
	<link rel="apple-touch-icon" sizes="144x144" href="/images/apple-icon-144x144.png">
	<link rel="apple-touch-icon" sizes="152x152" href="/images/apple-icon-152x152.png">
	<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-icon-180x180.png">
	<link rel="icon" type="image/png" sizes="192x192"  href="/images/android-icon-192x192.png">
	<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
	<link rel="icon" type="image/png" sizes="96x96" href="/images/favicon-96x96.png">
	<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
	<link rel="manifest" href="/images/manifest.json">
	<meta name="msapplication-TileColor" content="#ffffff">
	<meta name="msapplication-TileImage" content="/images/ms-icon-144x144.png">
	<meta name="theme-color" content="#ffffff">

	<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

	<link href="https://beyondboinc.net" rel="canonical">
	<title>BeyondBOINC: <%= naive_translate("head title", @conn.assigns[:lang])%></title>
 	<link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">
 	<link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.10/semantic.css" rel="stylesheet">

          			<img class="logo" src="/images/<%=naive_image_chooser("logo", @conn.assigns[:lang])%>">
          			BeyondBOINC

	        	<a href="/authors/<%=@conn.assigns[:about_blog_author]%>/<%=@conn.assigns[:about_blog_permlink]%>" class="item"><%=naive_translate("about", @conn.assigns[:lang])%>

					Trade GRC

							Decentralized Exchanges

							BitSquare

							OpenLedger

							BTSABC

							BTSBOTS

							Bitshares-Light

							Centralized Exchanges

							HolyTransactions

							Poloniex

							C-Cex

							Bittrex

							Explorers

							GridcoinStats

							GridResearchCorp

							Explorer.Gridcoin.Asia

							HolyTransactions

							Exchange stats

							CoinMarketCap

							CoinGecko

							CoinCap

					Community links

							 Gridcoin

									Website

									Forums

									GitHub

									Twitter

									Steemit

									Telegram

									Reddit

									IRC

									Wiki

							 BOINC

									BOINC Website

									BOINC Forums

									FormulaBOINC

									User of the day

									Rechenkraft

									Desktop Grid Federation

									SETI Germany

									SETI USA

							 Bitshares

									Official website

									Forums

									Telegram

									Explorer

							 Peerplays

									Official website

									Telegram

									Peerplays.chat

									GitHub

				  <input placeholder="Search..." type="text" id="Search">
				  <button class="ui icon button" id="Button">

				  </button>

				<%= if get_flash(@conn, :info) do %>

					<%= get_flash(@conn, :info) %>

<%end %><%= if get_flash(@conn, :error) do %>

					<%= get_flash(@conn, :error) %>

<%end %>

<%= render @view_module, @view_template, assigns %>

Promoted Tags

	            Gridcoin
	            BOINC
	            BeyondBitcoin
	            Cryptocurrency

Promoted Authors

	            CM-Steem
	            OfficialFuzzy
	            Erkan
	            Chris4210

Affiliate links

	            Vultr
	            Namecheap
	            NordVPN
	            Purse.IO

About

BeyondBOINC is a Steemit backed blog, powered by the  Glasnost  library & is actively maintained by @CM-STEEM.

	      <img class="ui centered mini image" src="/images/<%=naive_image_chooser("logo", @conn.assigns[:lang])%>">

	        Home
	        Site Map
	        Gridcoin Chat

<!DOCTYPE html>

	<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
	<meta content="width=device-width, initial-scale=1" name="viewport">
	<meta content="BeyondBOINC displays the recently created content from a curated list of Steemit authors on the topics of cryptocurrency, distributed computing and technology." name="description">
	<meta content="Gridcoin, Bitshares, Steemit, Cryptocurrency, Blog, Aggregator, Glasnost, BOINC, BeyondBitcoin, BeyondBOINC, Distributed Computing, Cloud computing, Science, Peerplays, Blockchain, Decentralization, money, science, technology, crypto" name="keywords">
	<meta content="Customminer aka @cm-steem" name="author">
	<meta content="index, follow" name="robots">
	<meta content="1 days" name="revisit-after">

	<link rel="apple-touch-icon" sizes="57x57" href="/images/apple-icon-57x57.png">
	<link rel="apple-touch-icon" sizes="60x60" href="/images/apple-icon-60x60.png">
	<link rel="apple-touch-icon" sizes="72x72" href="/images/apple-icon-72x72.png">
	<link rel="apple-touch-icon" sizes="76x76" href="/images/apple-icon-76x76.png">
	<link rel="apple-touch-icon" sizes="114x114" href="/images/apple-icon-114x114.png">
	<link rel="apple-touch-icon" sizes="120x120" href="/images/apple-icon-120x120.png">
	<link rel="apple-touch-icon" sizes="144x144" href="/images/apple-icon-144x144.png">
	<link rel="apple-touch-icon" sizes="152x152" href="/images/apple-icon-152x152.png">
	<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-icon-180x180.png">
	<link rel="icon" type="image/png" sizes="192x192"  href="/images/android-icon-192x192.png">
	<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
	<link rel="icon" type="image/png" sizes="96x96" href="/images/favicon-96x96.png">
	<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
	<link rel="manifest" href="/images/manifest.json">
	<meta name="msapplication-TileColor" content="#ffffff">
	<meta name="msapplication-TileImage" content="/images/ms-icon-144x144.png">
	<meta name="theme-color" content="#ffffff">

	<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

	<link href="https://beyondboinc.net" rel="canonical">
	<title>BeyondBOINC: <%= naive_translate("head title", @conn.assigns[:lang])%></title>
 	<link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">
 	<link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.10/semantic.css" rel="stylesheet">

          			<img class="logo" src="/images/<%=naive_image_chooser("logo", @conn.assigns[:lang])%>">
          			BeyondBOINC

	        	<a href="/authors/<%=@conn.assigns[:about_blog_author]%>/<%=@conn.assigns[:about_blog_permlink]%>" class="item"><%=naive_translate("about", @conn.assigns[:lang])%>

					Trade GRC

							Decentralized Exchanges

							BitSquare

							OpenLedger

							BTSABC

							BTSBOTS

							Bitshares-Light

							Centralized Exchanges

							HolyTransactions

							Poloniex

							C-Cex

							Bittrex

							Explorers

							GridcoinStats

							GridResearchCorp

							Explorer.Gridcoin.Asia

							HolyTransactions

							Exchange stats

							CoinMarketCap

							CoinGecko

							CoinCap

					Community links

							 Gridcoin

									Website

									Forums

									GitHub

									Twitter

									Steemit

									Telegram

									Reddit

									IRC

									Wiki

							 BOINC

									BOINC Website

									BOINC Forums

									FormulaBOINC

									User of the day

									Rechenkraft

									Desktop Grid Federation

									SETI Germany

									SETI USA

							 Bitshares

									Official website

									Forums

									Telegram

									Explorer

							 Peerplays

									Official website

									Telegram

									Peerplays.chat

									GitHub

				  <input placeholder="Search..." type="text" id="Search" >

				<%= if get_flash(@conn, :info) do %>

					<%= get_flash(@conn, :info) %>

<%end %><%= if get_flash(@conn, :error) do %>

					<%= get_flash(@conn, :error) %>

<%end %>

<%= render @view_module, @view_template, assigns %>

Promoted Tags

	            Gridcoin
	            BOINC
	            BeyondBitcoin
	            Cryptocurrency

Promoted Authors

	            CM-Steem
	            OfficialFuzzy
	            Erkan
	            Chris4210

Affiliate links

	            Vultr
	            Namecheap
	            NordVPN
	            Purse.IO

About

BeyondBOINC is a Steemit backed blog, powered by the  Glasnost  library & is actively maintained by @CM-STEEM.

	      <img class="ui centered mini image" src="/images/<%=naive_image_chooser("logo", @conn.assigns[:lang])%>">

	        Home
	        Site Map
	        Gridcoin Chat


Tweak login form width on smaller screens

<%= gettext("Internal Pages") %>

  <%= gettext("Here you can log in as a Jumu organizer.") %>

    <%= form_for @conn, session_path(@conn, :create), [as: :session], fn f -> %>

        <%= label f, :email, gettext("Email"), class: "control-label" %>
        <%= email_input f, :email, class: "form-control", autofocus: true %>

          <%= label f, :password, gettext("Password"), class: "control-label" %>

          <%= link gettext("Forgot password?"), to: password_reset_path(@conn, :new) %>

        <%= password_input f, :password, class: "form-control" %>

        <%= label f, :remember_me do %>
          <%= checkbox f, :remember_me %> <%= gettext("Stay logged in") %>
        <% end %>

      <%= submit gettext("Log in"), class: "btn btn-primary" %>
    <% end %>


use hexdox url for docs link on index.html.eex template

Welcome to Phoenix!

Phoenix is an Elixir Web Framework targeting full-featured, fault tolerant applications with realtime functionality.

Resources

        Docs

        Source

Help

        Issues

        #elixir-lang on freenode IRC

        @chris_mccord


only show loaded and active images

only show loaded and active images


Fix boot script typo causing test failure

#!/bin/sh

set -e

# Set VERBOSE to enable verbose logging of the boot script
#VERBOSE=true
if [ ! -z $DEBUG_BOOT ]; then
    set -x
fi;

my_readlink_f() {
    TARGET_FILE="$1"
    cd $(dirname "$TARGET_FILE")
    TARGET_FILE=$(basename "$TARGET_FILE")

    # Iterate down a (possible) chain of symlinks
    while [ -L "$TARGET_FILE" ]
    do
        TARGET_FILE=$(readlink "$TARGET_FILE")
        cd $(dirname "$TARGET_FILE")
        TARGET_FILE=$(basename "$TARGET_FILE")
    done
    # Compute the canonicalized name by finding the physical path
    # for the directory we're in and appending the target file.
    PHYS_DIR=$(pwd -P)
    RESULT="$PHYS_DIR/$TARGET_FILE"
    echo "$RESULT"
}

# Path to this script
if uname | grep -q 'Darwin'; then
  # on OSX, best to install coreutils from homebrew or similar
  # to get greadlink
  if command -v greadlink >/dev/null 2>&1; then
    SCRIPT="${SCRIPT:-$(greadlink -f "$0")}"
  else
    SCRIPT="${SCRIPT:-$(my_readlink_f "$0")}"
  fi
else
  SCRIPT="${SCRIPT:-$(readlink -f "$0" )}"
fi

# Parent directory of this script
SCRIPT_DIR="${SCRIPT_DIR:-$(dirname "${SCRIPT}")}"
# Root directory of all releases
RELEASE_ROOT_DIR="${RELEASE_ROOT_DIR:-$(dirname $(dirname ${SCRIPT_DIR}))}"

# Disable flow control for run_erl
# Flow control can cause several problems. On Linux, if you
# accidentally hit Ctrl-S (instead of Ctrl-D to detach) and
# then some other key, the entire beam process will hang when
# attempting to write to stdout. On Solaris, the beam process
# will hang on writing if ScrollLock is on.
RUN_ERL_DISABLE_FLOWCNTRL="${RUN_ERL_DISABLE_FLOWCNTRL:-true}"
# Name of the release
REL_NAME="${REL_NAME:-<%= release_name %>}"
# Current version of the release
REL_VSN="${REL_VSN:-<%= release_version %>}"
# Current version of ERTS being used
# If this is not present/unset, it will be detected
<%= if ((is_binary(include_erts) or include_erts) and not is_nil(erts_vsn)) do %>ERTS_VSN="${ERTS_VSN:-<%= erts_vsn %>}"<% end %>
# VM code loading mode, embedded by default, can also be interactive
# See http://erlang.org/doc/man/code.html
CODE_LOADING_MODE="${CODE_LOADING_MODE:-embedded}"
# Path to start_erl.data
START_ERL_DATA="${START_ERL_DATA:-$RELEASE_ROOT_DIR/releases/start_erl.data}"
# Directory containing the current version of this release
REL_DIR="${REL_DIR:-$RELEASE_ROOT_DIR/releases/$REL_VSN}"
# The lib directory for this release
REL_LIB_DIR="${REL_LIB_DIR:-$RELEASE_ROOT_DIR/lib}"
# Options passed to erl
ERL_OPTS="${ERL_OPTS:-<%= release.profile.erl_opts %>}"
# When stdout is piped to a file, this is the directory those files will
# be stored in. defaults to /log in the release root directory

# RELEASE_MUTABLE_DIR
RELEASE_MUTABLE_DIR="${RELEASE_MUTABLE_DIR:-$RELEASE_ROOT_DIR/var}"

RUNNER_LOG_DIR="${RUNNER_LOG_DIR:-$RELEASE_MUTABLE_DIR/log}"
# A string of extra options to pass to erl, here for plugins
EXTRA_OPTS="${EXTRA_OPTS:-}"

# Pre-start/stop event hook paths
PRE_START_HOOKS="$REL_DIR/hooks/pre_start.d"
POST_START_HOOKS="$REL_DIR/hooks/post_start.d"
PRE_STOP_HOOKS="$REL_DIR/hooks/pre_stop.d"
POST_STOP_HOOKS="$REL_DIR/hooks/post_stop.d"
PRE_UPGRADE_HOOKS="$REL_DIR/hooks/pre_upgrade.d"
POST_UPGRADE_HOOKS="$REL_DIR/hooks/post_upgrade.d"

# Get node pid
get_pid() {
    if output="$(nodetool rpcterms os getpid)"
    then
        echo "$output" | sed -e 's/"//g'
        return 0
    else
        echo "$output"
        return 1
    fi
}

# Generate a unique nodename
gen_nodename() {
    id="longname$(gen_id)-${NAME}"
    "$BINDIR/erl" -boot start_clean -eval '[Host] = tl(string:tokens(atom_to_list(node()),"@")), io:format("~s~n", [Host]), halt()' -noshell ${NAME_TYPE} $id
}

# Generate a random id
gen_id() {
    od -t x -N 4 /dev/urandom | head -n1 | awk '{print $2}'
}

# Control a node
# Use like `nodetool "ping"`
nodetool() {
    command="$1"; shift
    name=${PEERNAME:-$NAME}
    "$ERTS_DIR/bin/escript" "$ROOTDIR/bin/nodetool" "$NAME_TYPE" "$name" \
                            -setcookie "$COOKIE" "$command" $@
}

# Run an escript in the node's environment
# Use like `escript "path/to/escript"`
escript() {
    shift; scriptpath="$1"; shift
    export RELEASE_ROOT_DIR

    "$ERTS_DIR/bin/escript" "$ROOTDIR/$scriptpath" $@
}

# Private. Load target cookie, either from vm.args or $HOME/.cookie
_load_cookie() {
    COOKIE_ARG="$(grep '^-setcookie' "$VMARGS_PATH" || true)"
    DEFAULT_COOKIE_FILE="$HOME/.erlang.cookie"
    if [ -z "$COOKIE_ARG" ]; then
        if [ -f "$DEFAULT_COOKIE_FILE" ]; then
            COOKIE="$(cat "$DEFAULT_COOKIE_FILE")"
        fi
    else
        # Extract cookie name from COOKIE_ARG
        COOKIE="$(echo "$COOKIE_ARG" | awk '{print $2}')"
    fi
}

# Private. Ensure that cookie is set.
_check_cookie() {
    # Attempt reloading cookie in case it has been set in a hook
    if [ -z "$COOKIE" ]; then
        _load_cookie
    fi
    # Die if cookie is still not set, as connecting via distribution will fail
    if [ -z "$COOKIE" ]; then
        printf "a secret cookie must be provided in one of the following ways:\n  - with vm.args using the -setcookie parameter,\n  or\n  by writing the cookie to '$DEFAULT_COOKIE_FILE', with permissions set to 0400"
        exit 1
    fi
}

# Private. For determining the version of ERTS available to the release
# This is only ever called if ERTS_VSN is not set
_detect_erts_vsn() {
    set +e # temporarily disable so we can display a nice error message to the user
    __erl="$(which erl)"
    set -e
    if [ -z "${__erl}"  ]; then
        echo 'erlang runtime not found. If erlang is installed check your $PATH. aborting.'
        exit 1
    fi
    "$__erl" -boot start_clean -eval 'Ver = erlang:system_info(version), io:format("~s~n", [Ver]), halt()' -noshell
}

# Private. Gets a list of code paths for this release
_get_code_paths() {
    "$ERTS_DIR/bin/escript" "$ROOTDIR/bin/release_utils.escript" "get_code_paths" "$ROOTDIR" "$ERTS_DIR" "$REL_NAME" "$REL_VSN"
}

# Private. For setting ERTS_DIR and ROOTDIR
_find_erts_dir() {
    __erts_dir="$RELEASE_ROOT_DIR/erts-$ERTS_VSN"
    if [ -d "$__erts_dir" ]; then
        ERTS_DIR="$__erts_dir";
        ROOTDIR="$RELEASE_ROOT_DIR"
    else
        set +e # temporarily disable so we can display a nice error message to the user
        __erl="$(which erl)"
        set -e
        if [ -z "${__erl}"  ]; then
          echo 'erlang runtime not found. If erlang is installed check your $PATH. aborting.'
          exit 1
        fi
        code="io:format(\"~s\", [code:root_dir()]), halt()."
        __erl_root="$("$__erl" -noshell -eval "$code")"
        ERTS_DIR="$__erl_root/erts-$ERTS_VSN"
        ROOTDIR="$__erl_root"
    fi
}

# Private. Open a shell on a remote node
_rem_sh() {
    # Generate a unique id used to allow multiple remsh to the same node
    # transparently
    id="remsh$(gen_id)-${NAME}"

    # Get the node's ticktime so that we use the same thing.
    TICKTIME="$(nodetool rpcterms net_kernel get_net_ticktime)"

    # Setup remote shell command to control node
    if [ ! -z "$USE_ERL_SHELL" ]; then
        exec "$BINDIR/erl" \
            -hidden \
            -boot start_clean -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \
            -kernel net_ticktime $TICKTIME \
            "$NAME_TYPE" "$id" -remsh "$NAME" -setcookie "$COOKIE"
    else
        __code_paths=$(_get_code_paths)
        exec "$BINDIR/erl" \
            -pa "$CONSOLIDATED_DIR" \
            ${__code_paths} \
            -hidden -noshell \
            -boot start_clean -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \
            -kernel net_ticktime $TICKTIME \
            -user Elixir.IEx.CLI "$NAME_TYPE" "$id" -setcookie "$COOKIE" \
            -extra --no-halt +iex -"$NAME_TYPE" "$id" --cookie "$COOKIE" --remsh "$NAME"
    fi
}

# Output a start command for the last argument of run_erl
_start_command() {
    printf "exec \"%s\" \"%s\" -- %s %s" "$RELEASE_ROOT_DIR/bin/$REL_NAME" \
           "$START_OPTION" "${ARGS}" "${EXTRA_OPTS}"
}

# Do a textual replacement of ${VAR} occurrences in $1 and pipe to $2
_replace_os_vars() {
    awk '
        function escape(s) {
            gsub(/'\&'/, "\\\\&", s);
            return s;
        }
        {
            while(match($0,"[$]{[^}]*}")) {
                var=substr($0,RSTART+2,RLENGTH-3);
                gsub("[$]{"var"}", escape(ENVIRON[var]))
            }
        }1' < "$1" > "$1.bak"
    mv -- "$1.bak" "$1"
}

# Private. Run hooks from directory.
_run_hooks_from_dir() {
   if [ -d "$1" ]; then
      for file in $1/[0-9a-zA-Z]*.sh; do
        [ -f "$file" ] || continue
        . "$file"
      done
   fi
}

# If TERM is not set, set it to xterm
if [ -z "$TERM" ]; then
    export TERM=xterm
fi

# If ERTS_VSN is not set, detect it
if [ -z "$ERTS_VSN" ]; then
    export ERTS_VSN="$(_detect_erts_vsn)"
    echo "$ERTS_VSN $REL_VSN" > "$START_ERL_DATA"
fi

# Allow override of where to read configuration from
# By default it's RELEASE_ROOT_DIR
if [ -z "$RELEASE_CONFIG_DIR" ]; then
    export RELEASE_CONFIG_DIR="$RELEASE_ROOT_DIR"
fi

# Make sure directories exist
mkdir -p "$RELEASE_MUTABLE_DIR"
echo "Files in this directory are regenerated frequently, edits will be lost" \
    > "$RELEASE_MUTABLE_DIR/WARNING_README"
mkdir -p "$RUNNER_LOG_DIR"

# Set VMARGS_PATH, the path to the vm.args file to use
# Use $RELEASE_CONFIG_DIR/vm.args if exists, otherwise releases/VSN/vm.args
if [ -z "$VMARGS_PATH" ]; then
    if [ -f "$RELEASE_CONFIG_DIR/vm.args" ]; then
        export VMARGS_PATH="$RELEASE_CONFIG_DIR/vm.args"
    else
        export VMARGS_PATH="$REL_DIR/vm.args"
    fi
fi
if [ "$VMARGS_PATH" != "$RELEASE_MUTABLE_DIR/vm.args" ]; then
    echo "#### Generated - edit/create $RELEASE_CONFIG_DIR/vm.args instead." \
        >  "$RELEASE_MUTABLE_DIR/vm.args"
    cat  "$VMARGS_PATH"                              \
        >> "$RELEASE_MUTABLE_DIR/vm.args"
    export VMARGS_PATH=$RELEASE_MUTABLE_DIR/vm.args
fi
if [ $REPLACE_OS_VARS ]; then
    _replace_os_vars "$VMARGS_PATH"
fi

# Set SYS_CONFIG_PATH, the path to the sys.config file to use
# Use $RELEASE_CONFIG_DIR/sys.config if exists, otherwise releases/VSN/sys.config
if [ -z "$SYS_CONFIG_PATH" ]; then
    if [ -f "$RELEASE_CONFIG_DIR/sys.config" ]; then
        export SYS_CONFIG_PATH="$RELEASE_CONFIG_DIR/sys.config"
    else
        export SYS_CONFIG_PATH="$REL_DIR/sys.config"
    fi
fi
if [ "$SYS_CONFIG_PATH" != "$RELEASE_MUTABLE_DIR/sys.config" ]; then
    (echo "%% Generated - edit/create $RELEASE_CONFIG_DIR/sys.config instead."; \
    cat  "$SYS_CONFIG_PATH")                              \
        > "$RELEASE_MUTABLE_DIR/sys.config"
    export SYS_CONFIG_PATH=$RELEASE_MUTABLE_DIR/sys.config
fi
if [ $REPLACE_OS_VARS ]; then
    _replace_os_vars "$SYS_CONFIG_PATH"
fi

# Extract the target node name from node.args
# Should be `-sname somename` or `-name somename@somehost`
export NAME_ARG="$(egrep '^-s?name' "$VMARGS_PATH" || true)"
if [ -z "$NAME_ARG" ]; then
    echo "vm.args needs to have either -name or -sname parameter."
    exit 1
fi

# Extract the name type and name from the NAME_ARG for REMSH
# NAME_TYPE should be -name or -sname
export NAME_TYPE="$(echo "$NAME_ARG" | awk '{print $1}')"
# NAME will be either `somename` or `somename@somehost`
export NAME="$(echo "$NAME_ARG" | awk '{print $2}')"

# Where the pipe will be stored when using `start`
# This is used so you can attach the running application to the current
# shell using `attach`
PIPE_DIR="${PIPE_DIR:-$RELEASE_MUTABLE_DIR/erl_pipes/$NAME/}"

# Extract the target cookie
_load_cookie

_find_erts_dir
export ROOTDIR="$RELEASE_ROOT_DIR"
export BINDIR="$ERTS_DIR/bin"
export EMU="beam"
export PROGNAME="erl"
export LD_LIBRARY_PATH="$ERTS_DIR/lib:$LD_LIBRARY_PATH"
ERTS_LIB_DIR="$ERTS_DIR/../lib"
CONSOLIDATED_DIR="$ROOTDIR/lib/${REL_NAME}-${REL_VSN}/consolidated"

cd "$ROOTDIR"

# User can specify an sname without @hostname
# This will fail when creating remote shell
# So here we check for @ and add @hostname if missing
case $NAME in
    *@*)
        # Nothing to do
        ;;
    *)
        NAME=$NAME@$(gen_nodename)
        ;;
esac

# For Elixir runtime
export DISTILLERY_TASK="$1"

# Check the first argument for instructions
case "$1" in
    start|start_boot)

        # Make sure there is not already a node running
        #RES=`$NODETOOL ping`
        #if [ "$RES" = "pong" ]; then
        #    echo "Node is already running!"
        #    exit 1
        #fi
        # Save this for later.
        CMD=$1
        case "$1" in
            start)
                shift
                START_OPTION="console"
                HEART_OPTION="start"
                ;;
            start_boot)
                shift
                START_OPTION="console_boot"
                HEART_OPTION="start_boot"
                ;;
        esac
        ARGS="$@"
        RUN_PARAM="$@"

        _check_cookie
        _run_hooks_from_dir "$PRE_START_HOOKS"

        # Set arguments for the heart command
        set -- "$SCRIPT_DIR/$REL_NAME" "$HEART_OPTION"
        [ "$RUN_PARAM" ] && set -- "$@" "$RUN_PARAM"

        # Export the HEART_COMMAND
        HEART_COMMAND="$RELEASE_ROOT_DIR/bin/$REL_NAME $CMD"
        export HEART_COMMAND

        mkdir -p "$PIPE_DIR"

        "$BINDIR/run_erl" -daemon "$PIPE_DIR" "$RUNNER_LOG_DIR" \
                          "$(_start_command)"

        _run_hooks_from_dir "$POST_START_HOOKS"
        ;;

    stop)
        _check_cookie
        _run_hooks_from_dir "$PRE_STOP_HOOKS"
        # Wait for the node to completely stop...
        PID="$(get_pid)"
        if ! nodetool "stop"; then
            exit 1
        fi
        while $(kill -s 0 "$PID" 2>/dev/null);
        do
            sleep 1
        done
        _run_hooks_from_dir "$POST_STOP_HOOKS"
        ;;

    restart)
        _check_cookie
        _run_hooks_from_dir "$PRE_START_HOOKS"
        ## Restart the VM without exiting the process
        if ! nodetool "restart"; then
            exit 1
        fi
        ;;

    reboot)
        _check_cookie
        _run_hooks_from_dir "$PRE_START_HOOKS"
        ## Restart the VM completely (uses heart to restart it)
        if ! nodetool "reboot"; then
            exit 1
        fi
        ;;

    pid)
        ## Get the VM's pid
        _check_cookie
        if ! get_pid; then
            exit 1
        fi
        ;;

    ping)
        _check_cookie
        ## See if the VM is alive
        if ! nodetool "ping"; then
            exit 1
        fi
        ;;

    pingpeer)
        PEERNAME=$2 nodetool "ping"
        exit_status=$?
        if [ "$exit_status" -ne 0 ]; then
            exit $exit_status
        fi
        ;;

    escript)
        _check_cookie
        ## Run an escript under the node's environment
        if ! escript $@; then
            exit 1
        fi
        ;;

    attach)
        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        shift
        exec "$BINDIR/to_erl" "$PIPE_DIR"
        ;;

    remote_console)
        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        shift
        _rem_sh
        ;;

    upgrade|downgrade|install)
        if [ -z "$2" ]; then
            echo "Missing package argument"
            echo "Usage: $REL_NAME $1 {package base name}"
            echo "NOTE {package base name} MUST NOT include the .tar.gz suffix"
            exit 1
        fi

        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        SOURCE_VERSION="$REL_VSN"
        TARGET_VERSION="$2"

        "$BINDIR/escript" "$ROOTDIR/bin/release_utils.escript" \
             "unpack_release" "$REL_NAME" "$NAME_TYPE"  "$NAME" "$COOKIE" "$TARGET_VERSION"

        _run_hooks_from_dir "$PRE_UPGRADE_HOOKS"

        "$BINDIR/escript" "$ROOTDIR/bin/release_utils.escript" \
             "install_release" "$REL_NAME" "$NAME_TYPE"  "$NAME" "$COOKIE" "$TARGET_VERSION"

        _run_hooks_from_dir "$POST_UPGRADE_HOOKS"

        ;;
    unpack)
        if [ -z "$2" ]; then
            echo "Missing package argument"
            echo "Usage: $REL_NAME $1 {package base name}"
            echo "NOTE {package base name} MUST NOT include the .tar.gz suffix"
            exit 1
        fi

        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        exec "$BINDIR/escript" "$ROOTDIR/bin/release_utils.escript" \
             "unpack_release" "$REL_NAME" "$NAME_TYPE" "$NAME" "$COOKIE" "$2"
        ;;

    console|console_clean|console_boot)
        # .boot file typically just $REL_NAME (ie, the app name)
        # however, for debugging, sometimes start_clean.boot is useful.
        # For e.g. 'setup', one may even want to name another boot script.
        case "$1" in
            console)
                if [ -f "$REL_DIR/$REL_NAME.boot" ]; then
                  BOOTFILE="$REL_DIR/$REL_NAME"
                else
                  BOOTFILE="$REL_DIR/start"
                fi
                ;;
            console_clean)
                BOOTFILE="$ROOTDIR/bin/start_clean"
                __code_paths=$(_get_code_paths)
                EXTRA_CODE_PATHS=${__code_paths}
                ;;
            console_boot)
                shift
                BOOTFILE="$1"
                shift
                ;;
        esac
        # Setup beam-required vars
        EMU="beam"
        PROGNAME="${0#*/}"

        export EMU
        export PROGNAME

        # Store passed arguments since they will be erased by `set`
        ARGS="$@"

        _check_cookie

        # Start the VM, executing pre_start hook along
        # the way. We can't run the post_start hook because
        # the console will crash with no TTY attached
        _run_hooks_from_dir "$PRE_START_HOOKS"

        # Build an array of arguments to pass to exec later on
        # Build it here because this command will be used for logging.
        set -- "$BINDIR/erlexec" \
            -boot "$BOOTFILE" \
            -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \
            -env ERL_LIBS "$REL_LIB_DIR" \
            -pa "$CONSOLIDATED_DIR" \
            ${EXTRA_CODE_PATHS} \
            -args_file "$VMARGS_PATH" \
            -config "$SYS_CONFIG_PATH" \
            -mode "$CODE_LOADING_MODE" \
            ${ERL_OPTS} \
            -user Elixir.IEx.CLI \
            -extra --no-halt +iex

        # Dump environment info for logging purposes
        if [ ! -z $VERBOSE ]; then
            echo "Exec: $@" -- ${1+$ARGS} ${EXTRA_OPTS}
            echo "Root: $ROOTDIR"

            # Log the startup
            echo "$RELEASE_ROOT_DIR"
        fi;

        logger -t "$REL_NAME[$$]" "Starting up"

        exec "$@" -- ${1+$ARGS} ${EXTRA_OPTS}
        ;;

    foreground)
        # start up the release in the foreground for use by runit
        # or other supervision services

        [ -f "$REL_DIR/$REL_NAME.boot" ] && BOOTFILE="$REL_NAME" || BOOTFILE=start
        FOREGROUNDOPTIONS="-noshell -noinput +Bd"

        # Setup beam-required vars
        EMU=beam
        PROGNAME="${0#*/}"

        export EMU
        export PROGNAME

        # Store passed arguments since they will be erased by `set`
        ARGS="$@"

        _check_cookie

        # Start the VM, executing pre and post start hooks
        _run_hooks_from_dir "$PRE_START_HOOKS"

        # Build an array of arguments to pass to exec later on
        # Build it here because this command will be used for logging.
        set -- "$BINDIR/erlexec" $FOREGROUNDOPTIONS \
            -boot "$REL_DIR/$BOOTFILE" \
            -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \
            -env ERL_LIBS "$REL_LIB_DIR" \
            -pa "$CONSOLIDATED_DIR" \
            -args_file "$VMARGS_PATH" \
            -config "$SYS_CONFIG_PATH" \
            -mode "$CODE_LOADING_MODE" \
            ${ERL_OPTS} \
            -extra ${EXTRA_OPTS}

        # Dump environment info for logging purposes
        if [ ! -z $VERBOSE ]; then
            echo "Exec: $@" -- ${1+$ARGS}
            echo "Root: $ROOTDIR"
        fi;

        "$@" -- ${1+$ARGS} &
        __bg_pid=$!
        _run_hooks_from_dir "$POST_START_HOOKS"
        wait $__bg_pid
        ;;
    rpc)
        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        shift

        nodetool rpc $@
        ;;
    rpcterms)
        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        shift

        nodetool rpcterms $@
        ;;
    eval)
        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        shift
        nodetool "eval" $@
        ;;
    command)
        # Execute as command-line utility
        #
        # Like the escript command, this does not start the OTP application.
        # If your command depends on a running OTP application,
        # use
        #
        #     {:ok, _} = Application.ensure_all_started(:your_app)

        _check_cookie

        shift
        MODULE="$1"; shift
        FUNCTION="$1"; shift

        # Save extra arguments
        ARGS="$@"

        # Build arguments for erlexec
        __code_paths=$(_get_code_paths)
        set -- "$ERL_OPTS"
        [ "$SYS_CONFIG_PATH" ] && set -- "$@" -config "$SYS_CONFIG_PATH"
        set -- "$@" -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR"
        set -- "$@" -noshell
        set -- "$@" -boot start_clean
        set -- "$@" -pa "$CONSOLIDATED_DIR"
        set -- "$@" ${__code_paths}
        set -- "$@" -s "$MODULE" "$FUNCTION"

        $BINDIR/erlexec $@ -extra $ARGS
        exit "$?"
        ;;
    describe)
        ## Print a summary of information about this release
        echo "$REL_NAME-$REL_VSN\n"
        echo "erts:       $ERTS_VSN"
        echo "path:       $REL_DIR"
        echo "sys.config: $SYS_CONFIG_PATH"
        echo "vm.args:    $VMARGS_PATH"
        echo "name:       $NAME"
        echo "cookie:     $COOKIE"
        echo "erl_opts:   ${ERL_OPTS:-none provided}"
        echo ""
        echo "hooks:"
        __has_hooks=0
        for hook in "$REL_DIR"/hooks/*.d/[0-9a-zA-Z]*.sh; do
            [ -f "$hook" ] || continue
            __has_hooks=1
            echo "$hook"
        done
        if [ $__has_hooks -eq 0 ]; then
            echo "No custom hooks found."
        fi
        echo ""
        echo "commands:"
        __has_commands=0
        for command in "$REL_DIR"/commands/*.sh; do
            [ -f "$command" ] || continue
            __has_commands=1
            echo "$command"
        done
        if [ $__has_commands -eq 0 ]; then
            echo "No custom commands found."
        fi
        exit 0
        ;;
    *)
        __command_path="$REL_DIR/commands/$1"
        if [ -f "$__command_path" ]; then
            _check_cookie
            . "$__command_path"
        else
            echo "Usage: $REL_NAME {start|start_boot <file>|foreground|stop|restart|reboot|pid|ping|pingpeer|console|console_clean|console_boot <file>|attach|remote_console|upgrade|downgrade|install|escript|rpc|rpcterms|eval|command <module> <function> <args>}|describe"
            exit 1
        fi
        ;;
esac

exit 0

#!/bin/sh

set -e

# Set VERBOSE to enable verbose logging of the boot script
#VERBOSE=true
if [ ! -z $DEBUG_BOOT ]; then
    set -x
fi;

my_readlink_f() {
    TARGET_FILE="$1"
    cd $(dirname "$TARGET_FILE")
    TARGET_FILE=$(basename "$TARGET_FILE")

    # Iterate down a (possible) chain of symlinks
    while [ -L "$TARGET_FILE" ]
    do
        TARGET_FILE=$(readlink "$TARGET_FILE")
        cd $(dirname "$TARGET_FILE")
        TARGET_FILE=$(basename "$TARGET_FILE")
    done
    # Compute the canonicalized name by finding the physical path
    # for the directory we're in and appending the target file.
    PHYS_DIR=$(pwd -P)
    RESULT="$PHYS_DIR/$TARGET_FILE"
    echo "$RESULT"
}

# Path to this script
if uname | grep -q 'Darwin'; then
  # on OSX, best to install coreutils from homebrew or similar
  # to get greadlink
  if command -v greadlink >/dev/null 2>&1; then
    SCRIPT="${SCRIPT:-$(greadlink -f "$0")}"
  else
    SCRIPT="${SCRIPT:-$(my_readlink_f "$0")}"
  fi
else
  SCRIPT="${SCRIPT:-$(readlink -f "$0" )}"
fi

# Parent directory of this script
SCRIPT_DIR="${SCRIPT_DIR:-$(dirname "${SCRIPT}")}"
# Root directory of all releases
RELEASE_ROOT_DIR="${RELEASE_ROOT_DIR:-$(dirname $(dirname ${SCRIPT_DIR}))}"

# Disable flow control for run_erl
# Flow control can cause several problems. On Linux, if you
# accidentally hit Ctrl-S (instead of Ctrl-D to detach) and
# then some other key, the entire beam process will hang when
# attempting to write to stdout. On Solaris, the beam process
# will hang on writing if ScrollLock is on.
RUN_ERL_DISABLE_FLOWCNTRL="${RUN_ERL_DISABLE_FLOWCNTRL:-true}"
# Name of the release
REL_NAME="${REL_NAME:-<%= release_name %>}"
# Current version of the release
REL_VSN="${REL_VSN:-<%= release_version %>}"
# Current version of ERTS being used
# If this is not present/unset, it will be detected
<%= if ((is_binary(include_erts) or include_erts) and not is_nil(erts_vsn)) do %>ERTS_VSN="${ERTS_VSN:-<%= erts_vsn %>}"<% end %>
# VM code loading mode, embedded by default, can also be interactive
# See http://erlang.org/doc/man/code.html
CODE_LOADING_MODE="${CODE_LOADING_MODE:-embedded}"
# Path to start_erl.data
START_ERL_DATA="${START_ERL_DATA:-$RELEASE_ROOT_DIR/releases/start_erl.data}"
# Directory containing the current version of this release
REL_DIR="${REL_DIR:-$RELEASE_ROOT_DIR/releases/$REL_VSN}"
# The lib directory for this release
REL_LIB_DIR="${REL_LIB_DIR:-$RELEASE_ROOT_DIR/lib}"
# Options passed to erl
ERL_OPTS="${ERL_OPTS:-<%= release.profile.erl_opts %>}"
# When stdout is piped to a file, this is the directory those files will
# be stored in. defaults to /log in the release root directory

# RELEASE_MUTABLE_DIR
RELEASE_MUTABLE_DIR="${RELEASE_MUTABLE_DIR:-$RELEASE_ROOT_DIR/var}"

RUNNER_LOG_DIR="${RUNNER_LOG_DIR:-$RELEASE_MUTABLE_DIR/log}"
# A string of extra options to pass to erl, here for plugins
EXTRA_OPTS="${EXTRA_OPTS:-}"

# Pre-start/stop event hook paths
PRE_START_HOOKS="$REL_DIR/hooks/pre_start.d"
POST_START_HOOKS="$REL_DIR/hooks/post_start.d"
PRE_STOP_HOOKS="$REL_DIR/hooks/pre_stop.d"
POST_STOP_HOOKS="$REL_DIR/hooks/post_stop.d"
PRE_UPGRADE_HOOKS="$REL_DIR/hooks/pre_upgrade.d"
POST_UPGRADE_HOOKS="$REL_DIR/hooks/post_upgrade.d"

# Get node pid
get_pid() {
    if output="$(nodetool rpcterms os getpid)"
    then
        echo "$output" | sed -e 's/"//g'
        return 0
    else
        echo "$output"
        return 1
    fi
}

# Generate a unique nodename
gen_nodename() {
    id="longname$(gen_id)-${NAME}"
    "$BINDIR/erl" -boot start_clean -eval '[Host] = tl(string:tokens(atom_to_list(node()),"@")), io:format("~s~n", [Host]), halt()' -noshell ${NAME_TYPE} $id
}

# Generate a random id
gen_id() {
    od -t x -N 4 /dev/urandom | head -n1 | awk '{print $2}'
}

# Control a node
# Use like `nodetool "ping"`
nodetool() {
    command="$1"; shift
    name=${PEERNAME:-$NAME}
    "$ERTS_DIR/bin/escript" "$ROOTDIR/bin/nodetool" "$NAME_TYPE" "$name" \
                            -setcookie "$COOKIE" "$command" $@
}

# Run an escript in the node's environment
# Use like `escript "path/to/escript"`
escript() {
    shift; scriptpath="$1"; shift
    export RELEASE_ROOT_DIR

    "$ERTS_DIR/bin/escript" "$ROOTDIR/$scriptpath" $@
}

# Private. Load target cookie, either from vm.args or $HOME/.cookie
_load_cookie() {
    COOKIE_ARG="$(grep '^-setcookie' "$VMARGS_PATH" || true)"
    DEFAULT_COOKIE_FILE="$HOME/.erlang.cookie"
    if [ -z "$COOKIE_ARG" ]; then
        if [ -f "$DEFAULT_COOKIE_FILE" ]; then
            COOKIE="$(cat "$DEFAULT_COOKIE_FILE")"
        fi
    else
        # Extract cookie name from COOKIE_ARG
        COOKIE="$(echo "$COOKIE_ARG" | awk '{print $2}')"
    fi
}

# Private. Ensure that cookie is set.
_check_cookie() {
    # Attempt reloading cookie in case it has been set in a hook
    if [ -z "$COOKIE" ]; then
        _load_cookie
    fi
    # Die if cookie is still not set, as connecting via distribution will fail
    if [ -z "$COOKIE" ]; then
        printf "a secret cookie must be provided in one of the following ways:\n  - with vm.args using the -setcookie parameter,\n  or\n  by writing the cookie to '$DEFAULT_COOKIE_FILE', with permissions set to 0400"
        exit 1
    fi
}

# Private. For determining the version of ERTS available to the release
# This is only ever called if ERTS_VSN is not set
_detect_erts_vsn() {
    set +e # temporarily disable so we can display a nice error message to the user
    __erl="$(which erl)"
    set -e
    if [ -z "${__erl}"  ]; then
        echo 'erlang runtime not found. If erlang is installed check your $PATH. aborting.'
        exit 1
    fi
    "$__erl" -boot start_clean -eval 'Ver = erlang:system_info(version), io:format("~s~n", [Ver]), halt()' -noshell
}

# Private. Gets a list of code paths for this release
_get_code_paths() {
    "$ERTS_DIR/bin/escript" "$ROOTDIR/bin/release_utils.escript" "get_code_paths" "$ROOTDIR" "$ERTS_DIR" "$REL_NAME" "$REL_VSN"
}

# Private. For setting ERTS_DIR and ROOTDIR
_find_erts_dir() {
    __erts_dir="$RELEASE_ROOT_DIR/erts-$ERTS_VSN"
    if [ -d "$__erts_dir" ]; then
        ERTS_DIR="$__erts_dir";
        ROOTDIR="$RELEASE_ROOT_DIR"
    else
        set +e # temporarily disable so we can display a nice error message to the user
        __erl="$(which erl)"
        set -e
        if [ -z "${__erl}"  ]; then
          echo 'erlang runtime not found. If erlang is installed check your $PATH. aborting.'
          exit 1
        fi
        code="io:format(\"~s\", [code:root_dir()]), halt()."
        __erl_root="$("$__erl" -noshell -eval "$code")"
        ERTS_DIR="$__erl_root/erts-$ERTS_VSN"
        ROOTDIR="$__erl_root"
    fi
}

# Private. Open a shell on a remote node
_rem_sh() {
    # Generate a unique id used to allow multiple remsh to the same node
    # transparently
    id="remsh$(gen_id)-${NAME}"

    # Get the node's ticktime so that we use the same thing.
    TICKTIME="$(nodetool rpcterms net_kernel get_net_ticktime)"

    # Setup remote shell command to control node
    if [ ! -z "$USE_ERL_SHELL" ]; then
        exec "$BINDIR/erl" \
            -hidden \
            -boot start_clean -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \
            -kernel net_ticktime $TICKTIME \
            "$NAME_TYPE" "$id" -remsh "$NAME" -setcookie "$COOKIE"
    else
        __code_paths=$(_get_code_paths)
        exec "$BINDIR/erl" \
            -pa "$CONSOLIDATED_DIR" \
            ${__code_paths} \
            -hidden -noshell \
            -boot start_clean -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \
            -kernel net_ticktime $TICKTIME \
            -user Elixir.IEx.CLI "$NAME_TYPE" "$id" -setcookie "$COOKIE" \
            -extra --no-halt +iex -"$NAME_TYPE" "$id" --cookie "$COOKIE" --remsh "$NAME"
    fi
}

# Output a start command for the last argument of run_erl
_start_command() {
    printf "exec \"%s\" \"%s\" -- %s %s" "$RELEASE_ROOT_DIR/bin/$REL_NAME" \
           "$START_OPTION" "${ARGS}" "${EXTRA_OPTS}"
}

# Do a textual replacement of ${VAR} occurrences in $1 and pipe to $2
_replace_os_vars() {
    awk '
        function escape(s) {
            gsub(/'\&'/, "\\\\&", s);
            return s;
        }
        {
            while(match($0,"[$]{[^}]*}")) {
                var=substr($0,RSTART+2,RLENGTH-3);
                gsub("[$]{"var"}", escape(ENVIRON[var]))
            }
        }1' < "$1" > "$1.bak"
    mv -- "$1.bak" "$1"
}

# Private. Run hooks from directory.
_run_hooks_from_dir() {
   if [ -d "$1" ]; then
      for file in $1/[0-9a-zA-Z]*.sh; do
        [ -f "$file" ] || continue
        . "$file"
      done
   fi
}

# If TERM is not set, set it to xterm
if [ -z "$TERM" ]; then
    export TERM=xterm
fi

# If ERTS_VSN is not set, detect it
if [ -z "$ERTS_VSN" ]; then
    export ERTS_VSN="$(_detect_erts_vsn)"
    echo "$ERTS_VSN $REL_VSN" > "$START_ERL_DATA"
fi

# Allow override of where to read configuration from
# By default it's RELEASE_ROOT_DIR
if [ -z "$RELEASE_CONFIG_DIR" ]; then
    export RELEASE_CONFIG_DIR="$RELEASE_ROOT_DIR"
fi

# Make sure directories exist
mkdir -p "$RELEASE_MUTABLE_DIR"
echo "Files in this directory are regenerated frequently, edits will be lost" \
    > "$RELEASE_MUTABLE_DIR/WARNING_README"
mkdir -p "$RUNNER_LOG_DIR"

# Set VMARGS_PATH, the path to the vm.args file to use
# Use $RELEASE_CONFIG_DIR/vm.args if exists, otherwise releases/VSN/vm.args
if [ -z "$VMARGS_PATH" ]; then
    if [ -f "$RELEASE_CONFIG_DIR/vm.args" ]; then
        export VMARGS_PATH="$RELEASE_CONFIG_DIR/vm.args"
    else
        export VMARGS_PATH="$REL_DIR/vm.args"
    fi
fi
if [ "$VMARGS_PATH" != "$RELEASE_MUTABLE_DIR/vm.args" ]; then
    echo "#### Generated - edit/create $RELEASE_CONFIG_DIR/vm.args instead." \
        >  "$RELEASE_MUTABLE_DIR/vm.args"
    cat  "$VMARGS_PATH"                              \
        >> "$RELEASE_MUTABLE_DIR/vm.args"
    export VMARGS_PATH=$RELEASE_MUTABLE_DIR/vm.args
fi
if [ $REPLACE_OS_VARS ]; then
    _replace_os_vars "$VMARGS_PATH"
fi

# Set SYS_CONFIG_PATH, the path to the sys.config file to use
# Use $RELEASE_CONFIG_DIR/sys.config if exists, otherwise releases/VSN/sys.config
if [ -z "$SYS_CONFIG_PATH" ]; then
    if [ -f "$RELEASE_CONFIG_DIR/sys.config" ]; then
        export SYS_CONFIG_PATH="$RELEASE_CONFIG_DIR/sys.config"
    else
        export SYS_CONFIG_PATH="$REL_DIR/sys.config"
    fi
fi
if [ "$SYS_CONFIG_PATH" != "$RELEASE_MUTABLE_DIR/sys.config" ]; then
    (echo "%% Generated - edit/create $RELEASE_CONFIG_DIR/sys.config instead."; \
    cat  "$SYS_CONFIG_PATH")                              \
        > "$RELEASE_MUTABLE_DIR/sys.config"
    export SYS_CONFIG_PATH=$RELEASE_MUTABLE_DIR/sys.config
fi
if [ $REPLACE_OS_VARS ]; then
    _replace_os_vars "$SYS_CONFIG_PATH"
fi

# Extract the target node name from node.args
# Should be `-sname somename` or `-name somename@somehost`
export NAME_ARG=$(egrep '^-s?name' "$VMARGS_PATH" || true)
if [ -z "$NAME_ARG" ]; then
    echo "vm.args needs to have either -name or -sname parameter."
    exit 1
fi

# Extract the name type and name from the NAME_ARG for REMSH
# NAME_TYPE should be -name or -sname
export NAME_TYPE="$(echo "$NAME_ARG" | awk '{print $1}')"
# NAME will be either `somename` or `somename@somehost`
export NAME="$(echo "$NAME_ARG" | awk '{print $2}')"

# Where the pipe will be stored when using `start`
# This is used so you can attach the running application to the current
# shell using `attach`
PIPE_DIR="${PIPE_DIR:-$RELEASE_MUTABLE_DIR/erl_pipes/$NAME/}"

# Extract the target cookie
_load_cookie

_find_erts_dir
export ROOTDIR="$RELEASE_ROOT_DIR"
export BINDIR="$ERTS_DIR/bin"
export EMU="beam"
export PROGNAME="erl"
export LD_LIBRARY_PATH="$ERTS_DIR/lib:$LD_LIBRARY_PATH"
ERTS_LIB_DIR="$ERTS_DIR/../lib"
CONSOLIDATED_DIR="$ROOTDIR/lib/${REL_NAME}-${REL_VSN}/consolidated"

cd "$ROOTDIR"

# User can specify an sname without @hostname
# This will fail when creating remote shell
# So here we check for @ and add @hostname if missing
case $NAME in
    *@*)
        # Nothing to do
        ;;
    *)
        NAME=$NAME@$(gen_nodename)
        ;;
esac

# For Elixir runtime
export DISTILLERY_TASK="$1"

# Check the first argument for instructions
case "$1" in
    start|start_boot)

        # Make sure there is not already a node running
        #RES=`$NODETOOL ping`
        #if [ "$RES" = "pong" ]; then
        #    echo "Node is already running!"
        #    exit 1
        #fi
        # Save this for later.
        CMD=$1
        case "$1" in
            start)
                shift
                START_OPTION="console"
                HEART_OPTION="start"
                ;;
            start_boot)
                shift
                START_OPTION="console_boot"
                HEART_OPTION="start_boot"
                ;;
        esac
        ARGS="$@"
        RUN_PARAM="$@"

        _check_cookie
        _run_hooks_from_dir "$PRE_START_HOOKS"

        # Set arguments for the heart command
        set -- "$SCRIPT_DIR/$REL_NAME" "$HEART_OPTION"
        [ "$RUN_PARAM" ] && set -- "$@" "$RUN_PARAM"

        # Export the HEART_COMMAND
        HEART_COMMAND="$RELEASE_ROOT_DIR/bin/$REL_NAME $CMD"
        export HEART_COMMAND

        mkdir -p "$PIPE_DIR"

        "$BINDIR/run_erl" -daemon "$PIPE_DIR" "$RUNNER_LOG_DIR" \
                          "$(_start_command)"

        _run_hooks_from_dir "$POST_START_HOOKS"
        ;;

    stop)
        _check_cookie
        _run_hooks_from_dir "$PRE_STOP_HOOKS"
        # Wait for the node to completely stop...
        PID="$(get_pid)"
        if ! nodetool "stop"; then
            exit 1
        fi
        while $(kill -s 0 "$PID" 2>/dev/null);
        do
            sleep 1
        done
        _run_hooks_from_dir "$POST_STOP_HOOKS"
        ;;

    restart)
        _check_cookie
        _run_hooks_from_dir "$PRE_START_HOOKS"
        ## Restart the VM without exiting the process
        if ! nodetool "restart"; then
            exit 1
        fi
        ;;

    reboot)
        _check_cookie
        _run_hooks_from_dir "$PRE_START_HOOKS"
        ## Restart the VM completely (uses heart to restart it)
        if ! nodetool "reboot"; then
            exit 1
        fi
        ;;

    pid)
        ## Get the VM's pid
        _check_cookie
        if ! get_pid; then
            exit 1
        fi
        ;;

    ping)
        _check_cookie
        ## See if the VM is alive
        if ! nodetool "ping"; then
            exit 1
        fi
        ;;

    pingpeer)
        PEERNAME=$2 nodetool "ping"
        exit_status=$?
        if [ "$exit_status" -ne 0 ]; then
            exit $exit_status
        fi
        ;;

    escript)
        _check_cookie
        ## Run an escript under the node's environment
        if ! escript $@; then
            exit 1
        fi
        ;;

    attach)
        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        shift
        exec "$BINDIR/to_erl" "$PIPE_DIR"
        ;;

    remote_console)
        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        shift
        _rem_sh
        ;;

    upgrade|downgrade|install)
        if [ -z "$2" ]; then
            echo "Missing package argument"
            echo "Usage: $REL_NAME $1 {package base name}"
            echo "NOTE {package base name} MUST NOT include the .tar.gz suffix"
            exit 1
        fi

        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        SOURCE_VERSION="$REL_VSN"
        TARGET_VERSION="$2"

        "$BINDIR/escript" "$ROOTDIR/bin/release_utils.escript" \
             "unpack_release" "$REL_NAME" "$NAME_TYPE"  "$NAME" "$COOKIE" "$TARGET_VERSION"

        _run_hooks_from_dir "$PRE_UPGRADE_HOOKS"

        "$BINDIR/escript" "$ROOTDIR/bin/release_utils.escript" \
             "install_release" "$REL_NAME" "$NAME_TYPE"  "$NAME" "$COOKIE" "$TARGET_VERSION"

        _run_hooks_from_dir "$POST_UPGRADE_HOOKS"

        ;;
    unpack)
        if [ -z "$2" ]; then
            echo "Missing package argument"
            echo "Usage: $REL_NAME $1 {package base name}"
            echo "NOTE {package base name} MUST NOT include the .tar.gz suffix"
            exit 1
        fi

        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        exec "$BINDIR/escript" "$ROOTDIR/bin/release_utils.escript" \
             "unpack_release" "$REL_NAME" "$NAME_TYPE" "$NAME" "$COOKIE" "$2"
        ;;

    console|console_clean|console_boot)
        # .boot file typically just $REL_NAME (ie, the app name)
        # however, for debugging, sometimes start_clean.boot is useful.
        # For e.g. 'setup', one may even want to name another boot script.
        case "$1" in
            console)
                if [ -f "$REL_DIR/$REL_NAME.boot" ]; then
                  BOOTFILE="$REL_DIR/$REL_NAME"
                else
                  BOOTFILE="$REL_DIR/start"
                fi
                ;;
            console_clean)
                BOOTFILE="$ROOTDIR/bin/start_clean"
                __code_paths=$(_get_code_paths)
                EXTRA_CODE_PATHS=${__code_paths}
                ;;
            console_boot)
                shift
                BOOTFILE="$1"
                shift
                ;;
        esac
        # Setup beam-required vars
        EMU="beam"
        PROGNAME="${0#*/}"

        export EMU
        export PROGNAME

        # Store passed arguments since they will be erased by `set`
        ARGS="$@"

        _check_cookie

        # Start the VM, executing pre_start hook along
        # the way. We can't run the post_start hook because
        # the console will crash with no TTY attached
        _run_hooks_from_dir "$PRE_START_HOOKS"

        # Build an array of arguments to pass to exec later on
        # Build it here because this command will be used for logging.
        set -- "$BINDIR/erlexec" \
            -boot "$BOOTFILE" \
            -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \
            -env ERL_LIBS "$REL_LIB_DIR" \
            -pa "$CONSOLIDATED_DIR" \
            ${EXTRA_CODE_PATHS} \
            -args_file "$VMARGS_PATH" \
            -config "$SYS_CONFIG_PATH" \
            -mode "$CODE_LOADING_MODE" \
            ${ERL_OPTS} \
            -user Elixir.IEx.CLI \
            -extra --no-halt +iex

        # Dump environment info for logging purposes
        if [ ! -z $VERBOSE ]; then
            echo "Exec: $@" -- ${1+$ARGS} ${EXTRA_OPTS}
            echo "Root: $ROOTDIR"

            # Log the startup
            echo "$RELEASE_ROOT_DIR"
        fi;

        logger -t "$REL_NAME[$$]" "Starting up"

        exec "$@" -- ${1+$ARGS} ${EXTRA_OPTS}
        ;;

    foreground)
        # start up the release in the foreground for use by runit
        # or other supervision services

        [ -f "$REL_DIR/$REL_NAME.boot" ] && BOOTFILE="$REL_NAME" || BOOTFILE=start
        FOREGROUNDOPTIONS="-noshell -noinput +Bd"

        # Setup beam-required vars
        EMU=beam
        PROGNAME="${0#*/}"

        export EMU
        export PROGNAME

        # Store passed arguments since they will be erased by `set`
        ARGS="$@"

        _check_cookie

        # Start the VM, executing pre and post start hooks
        _run_hooks_from_dir "$PRE_START_HOOKS"

        # Build an array of arguments to pass to exec later on
        # Build it here because this command will be used for logging.
        set -- "$BINDIR/erlexec" $FOREGROUNDOPTIONS \
            -boot "$REL_DIR/$BOOTFILE" \
            -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \
            -env ERL_LIBS "$REL_LIB_DIR" \
            -pa "$CONSOLIDATED_DIR" \
            -args_file "$VMARGS_PATH" \
            -config "$SYS_CONFIG_PATH" \
            -mode "$CODE_LOADING_MODE" \
            ${ERL_OPTS} \
            -extra ${EXTRA_OPTS}

        # Dump environment info for logging purposes
        if [ ! -z $VERBOSE ]; then
            echo "Exec: $@" -- ${1+$ARGS}
            echo "Root: $ROOTDIR"
        fi;

        "$@" -- ${1+$ARGS} &
        __bg_pid=$!
        _run_hooks_from_dir "$POST_START_HOOKS"
        wait $__bg_pid
        ;;
    rpc)
        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        shift

        nodetool rpc $@
        ;;
    rpcterms)
        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        shift

        nodetool rpcterms $@
        ;;
    eval)
        _check_cookie

        # Make sure a node IS running
        if ! nodetool "ping" > /dev/null; then
            echo "Node is not running!"
            exit 1
        fi

        shift
        nodetool "eval" $@
        ;;
    command)
        # Execute as command-line utility
        #
        # Like the escript command, this does not start the OTP application.
        # If your command depends on a running OTP application,
        # use
        #
        #     {:ok, _} = Application.ensure_all_started(:your_app)

        _check_cookie

        shift
        MODULE="$1"; shift
        FUNCTION="$1"; shift

        # Save extra arguments
        ARGS="$@"

        # Build arguments for erlexec
        __code_paths=$(_get_code_paths)
        set -- "$ERL_OPTS"
        [ "$SYS_CONFIG_PATH" ] && set -- "$@" -config "$SYS_CONFIG_PATH"
        set -- "$@" -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR"
        set -- "$@" -noshell
        set -- "$@" -boot start_clean
        set -- "$@" -pa "$CONSOLIDATED_DIR"
        set -- "$@" ${__code_paths}
        set -- "$@" -s "$MODULE" "$FUNCTION"

        $BINDIR/erlexec $@ -extra $ARGS
        exit "$?"
        ;;
    describe)
        ## Print a summary of information about this release
        echo "$REL_NAME-$REL_VSN\n"
        echo "erts:       $ERTS_VSN"
        echo "path:       $REL_DIR"
        echo "sys.config: $SYS_CONFIG_PATH"
        echo "vm.args:    $VMARGS_PATH"
        echo "name:       $NAME"
        echo "cookie:     $COOKIE"
        echo "erl_opts:   ${ERL_OPTS:-none provided}"
        echo ""
        echo "hooks:"
        __has_hooks=0
        for hook in "$REL_DIR"/hooks/*.d/[0-9a-zA-Z]*.sh; do
            [ -f "$hook" ] || continue
            __has_hooks=1
            echo "$hook"
        done
        if [ $__has_hooks -eq 0 ]; then
            echo "No custom hooks found."
        fi
        echo ""
        echo "commands:"
        __has_commands=0
        for command in "$REL_DIR"/commands/*.sh; do
            [ -f "$command" ] || continue
            __has_commands=1
            echo "$command"
        done
        if [ $__has_commands -eq 0 ]; then
            echo "No custom commands found."
        fi
        exit 0
        ;;
    *)
        __command_path="$REL_DIR/commands/$1"
        if [ -f "$__command_path" ]; then
            _check_cookie
            . "$__command_path"
        else
            echo "Usage: $REL_NAME {start|start_boot <file>|foreground|stop|restart|reboot|pid|ping|pingpeer|console|console_clean|console_boot <file>|attach|remote_console|upgrade|downgrade|install|escript|rpc|rpcterms|eval|command <module> <function> <args>}|describe"
            exit 1
        fi
        ;;
esac

exit 0


github note on home page

github note on home page

        It's Happening Again!

        Lucidboard is a kanban tool for organizing ideas.

  <%= unless signed_in?(@conn) do %>

    <%= login_button() %>

  <% end %>

A tool...

Lucidboard is a tool for teams or individuals looking to:

Run a retrospective or lean coffee style meeting

Organize ideas or brainstorm

Track task progress in a simple way

Whatever else you might imagine!

Find us on Github!

Lucidboard is
  MIT-licensed on Github.com. See the README for instructions that should
  get you a working dev environment in minutes.


[sent_email_viewer] Remove whitespaces inside pre tag (#493)

Inside <pre> tags, whitespaces are shown literally. Thus rendered text bodies were "indented".

This removes whitespaces for indentation in <pre> tag from HTML-EEx source code.

<!DOCTYPE html>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <title>Sent Email</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/4.0.0/normalize.css" charset="utf-8">

        <%= for email <- @emails do %>
          <a
            class="email-summary <%= Bamboo.SentEmailViewerPlug.Helper.selected_email_class(email, @selected_email) %>"
            href="<%= "#{@base_path}/#{Bamboo.SentEmail.get_id(email)}" %>">
            <%= email.subject %>

              <%= Bamboo.SentEmailViewerPlug.Helper.format_email_address(email.from) %>
              to <%= Bamboo.SentEmailViewerPlug.Helper.email_addresses(email) %>

            <%= email.text_body %>

        <% end %>

          <%= @selected_email.subject %>

            From <%= Bamboo.SentEmailViewerPlug.Helper.format_email_address(@selected_email.from) %>
            to <%= Bamboo.SentEmailViewerPlug.Helper.email_addresses(@selected_email) %>

            <%= for {header, value} <- @selected_email.headers do %>

                <%= header %> <%= Bamboo.SentEmailViewerPlug.Helper.format_headers(value) %>

            <% end %>

HTML body

            <iframe onload="adjustFrameHeight(this)" src="<%= "#{@base_path}/#{Bamboo.SentEmail.get_id(@selected_email)}/html" %>">

Text Body

<%= @selected_email.text_body %>


tweak zoom

tweak zoom

Show map

    Title:
    <%= @map.title %>

    Description:
    <%= @map.description %>

    Center lat:
    <%= @map.center_lat %>

    Center long:
    <%= @map.center_long %>

    Ovetrlay url:
    <%= @map.overlay_URL %>

    Overlay north:
    <%= @map.overlay_north %>

    Overlay south:
    <%= @map.overlay_south %>

    Overlay east:
    <%= @map.overlay_east %>

    Overlay west:
    <%= @map.overlay_west %>

<%= link "Edit", to: map_path(@conn, :edit, @map) %>
 |
<%= link "Back", to: map_path(@conn, :index) %>

<!- div id="coords"->


more layout stuff

more layout stuff

  <%= site_name() %>: The dumb publishing platform

  <%= form_for @changeset, page_path(@conn, :create_document), fn f -> %>
    <%=
      textarea f, :md_content,
        class: "monospace pa2 w-100 mb2 ba b--mid-gray",
        placeholder: "Markdown content here...",
        rows: "16"
    %>

      <%= submit "Create", class: "fc pa2 b dark-green bg-white ba bw1 b--dark-green br1 pointer dim " %>

  <% end %>

  <%= site_name() %>: The dumb publishing platform

  <%= form_for @changeset, page_path(@conn, :create_document), fn f -> %>
    <%=
      textarea f, :md_content,
        class: "monospace pa2 w-100 mb2 ba b--mid-gray",
        placeholder: "Markdown content here...",
        rows: "8"
    %>

    <%= submit "Create", class: "fl pa2 bg-white ba b--mid-gray br1 pointer dim " %>
  <% end %>


show tour icon always

show tour icon always

  <button type="button"
          class="navbar-toggle collapsed"
          data-toggle="collapse"
          data-target="#navbar"
          aria-expanded="false"
          aria-controls="navbar">
    Toggle navigation

  </button>

  Panoptikum.io

      <%= link fa_icon("home"), to: page_frontend_path(@conn, :home),
                                title: "Home", class: "hidden-xs" %>
      <%= link [fa_icon("home", class: "fa-fw"), raw("    Home")],
               to: page_frontend_path(@conn, :home),
               title: "Home",
               class: "visible-xs-inline" %>

      <%= link fa_icon("sitemap"), to: category_frontend_path(@conn, :index),
                                   id: "category_link", title: "Categories", class: "hidden-xs" %>
      <%= link [fa_icon("sitemap", class: "fa-fw"), raw("    Categories")],
               to: category_frontend_path(@conn, :index),
               id: "category_link",
               title: "Categories",
               class: "visible-xs-inline" %>

        <%= fa_icon("question-circle") %>

        <%= fa_icon("question-circle", class: "fa-fw") %>    About

        <%= fa_icon("newspaper-o") %>

        <%= fa_icon("newspaper-o", class: "fa-fw") %>    Blog

      <%= link fa_icon("user-o"), to: persona_frontend_path(@conn, :index),
                                  title: "Podcasters", class: "hidden-xs" %>
      <%= link [fa_icon("user-o", class: "fa-fw"), raw("    Podcasters")],
               to: persona_frontend_path(@conn, :index),
               title: "Podcasters",
               class: "visible-xs-inline" %>

      <%= link fa_icon("user"), to: user_frontend_path(@conn, :index),
                                title: "Users", class: "hidden-xs" %>
      <%= link [fa_icon("user", class: "fa-fw"), raw("    Users")],
          to: user_frontend_path(@conn, :index),
          title: "Users",
          class: "visible-xs-inline" %>

      <%= link fa_icon("magic"), to: recommendation_frontend_path(@conn, :random),
                                   title: "Random", class: "hidden-xs" %>
      <%= link [fa_icon("magic", class: "fa-fw"), raw("    Random")],
               to: recommendation_frontend_path(@conn, :random),
               title: "Random",
               class: "visible-xs-inline" %>

  <%= form_for @conn, search_frontend_path(@conn, :new),
                      [as: :search, class: "navbar-form navbar-left"],
                      fn f -> %>

         <%= text_input f, :searchstring, class: "form-control", placeholder: "Search" %>

    <%= submit fa_icon("search"), class: "btn", title: "Submit" %>
  <% end %>

        <%= fa_icon("bus") %>

        <%= fa_icon("bus", class: "fa-fw") %>    Tour

    <%= if @current_user do %>
      <%= render "_user_dropdown.html", conn: @conn, current_user: @current_user %>
      <%= render "_admin_dropdown.html", conn: @conn, current_user: @current_user %>

        <%= link fa_icon("sign-out"),
                 to: session_path(@conn, :delete, @current_user),
                 method: "delete",
                 title: "Log out",
                 style: "color: #aab2bd;",
                 class: "hidden-xs"%>
        <%= link [fa_icon("sign-out", class: "fa-fw"), raw("    Sign Out")],
                 to: session_path(@conn, :delete, @current_user),
                 method: "delete",
                 title: "Log out",
                 style: "color: #aab2bd;",
                 class: "visible-xs-inline"%>

    <% else %>

        <%= link fa_icon("pencil"), to: user_frontend_path(@conn, :new),
                                    title: "Sign up", class: "hidden-xs" %>
        <%= link [fa_icon("pencil", class: "fa-fw"), raw("    Sign Up")],
                 to: user_frontend_path(@conn, :new),
                 title: "Sign up",
                 class: "visible-xs-inline" %>

        <%= link fa_icon("sign-in"), to: session_path(@conn, :new),
                                     title: "Log In", class: "hidden-xs" %>
        <%= link [fa_icon("sign-in", class: "fa-fw"), raw("    Log In")],
                 to: session_path(@conn, :new),
                 title: "Log In",
                 class: "visible-xs-inline" %>

    <% end %>

  <button type="button"
          class="navbar-toggle collapsed"
          data-toggle="collapse"
          data-target="#navbar"
          aria-expanded="false"
          aria-controls="navbar">
    Toggle navigation

  </button>

  Panoptikum.io

      <%= link fa_icon("home"), to: page_frontend_path(@conn, :home),
                                title: "Home", class: "hidden-xs" %>
      <%= link [fa_icon("home", class: "fa-fw"), raw("    Home")],
               to: page_frontend_path(@conn, :home),
               title: "Home",
               class: "visible-xs-inline" %>

      <%= link fa_icon("sitemap"), to: category_frontend_path(@conn, :index),
                                   id: "category_link", title: "Categories", class: "hidden-xs" %>
      <%= link [fa_icon("sitemap", class: "fa-fw"), raw("    Categories")],
               to: category_frontend_path(@conn, :index),
               id: "category_link",
               title: "Categories",
               class: "visible-xs-inline" %>

        <%= fa_icon("question-circle") %>

        <%= fa_icon("question-circle", class: "fa-fw") %>    About

        <%= fa_icon("newspaper-o") %>

        <%= fa_icon("newspaper-o", class: "fa-fw") %>    Blog

      <%= link fa_icon("user-o"), to: persona_frontend_path(@conn, :index),
                                  title: "Podcasters", class: "hidden-xs" %>
      <%= link [fa_icon("user-o", class: "fa-fw"), raw("    Podcasters")],
               to: persona_frontend_path(@conn, :index),
               title: "Podcasters",
               class: "visible-xs-inline" %>

      <%= link fa_icon("user"), to: user_frontend_path(@conn, :index),
                                title: "Users", class: "hidden-xs" %>
      <%= link [fa_icon("user", class: "fa-fw"), raw("    Users")],
          to: user_frontend_path(@conn, :index),
          title: "Users",
          class: "visible-xs-inline" %>

      <%= link fa_icon("magic"), to: recommendation_frontend_path(@conn, :random),
                                   title: "Random", class: "hidden-xs" %>
      <%= link [fa_icon("magic", class: "fa-fw"), raw("    Random")],
               to: recommendation_frontend_path(@conn, :random),
               title: "Random",
               class: "visible-xs-inline" %>

  <%= form_for @conn, search_frontend_path(@conn, :new),
                      [as: :search, class: "navbar-form navbar-left"],
                      fn f -> %>

         <%= text_input f, :searchstring, class: "form-control", placeholder: "Search" %>

    <%= submit fa_icon("search"), class: "btn", title: "Submit" %>
  <% end %>

    <%= if @current_user do %>
      <%= render "_user_dropdown.html", conn: @conn, current_user: @current_user %>
      <%= render "_admin_dropdown.html", conn: @conn, current_user: @current_user %>

        <%= link fa_icon("sign-out"),
                 to: session_path(@conn, :delete, @current_user),
                 method: "delete",
                 title: "Log out",
                 style: "color: #aab2bd;",
                 class: "hidden-xs"%>
        <%= link [fa_icon("sign-out", class: "fa-fw"), raw("    Sign Out")],
                 to: session_path(@conn, :delete, @current_user),
                 method: "delete",
                 title: "Log out",
                 style: "color: #aab2bd;",
                 class: "visible-xs-inline"%>

    <% else %>

          <%= fa_icon("bus") %>

          <%= fa_icon("bus", class: "fa-fw") %>    Tour

        <%= link fa_icon("pencil"), to: user_frontend_path(@conn, :new),
                                    title: "Sign up", class: "hidden-xs" %>
        <%= link [fa_icon("pencil", class: "fa-fw"), raw("    Sign Up")],
                 to: user_frontend_path(@conn, :new),
                 title: "Sign up",
                 class: "visible-xs-inline" %>

        <%= link fa_icon("sign-in"), to: session_path(@conn, :new),
                                     title: "Log In", class: "hidden-xs" %>
        <%= link [fa_icon("sign-in", class: "fa-fw"), raw("    Log In")],
                 to: session_path(@conn, :new),
                 title: "Log In",
                 class: "visible-xs-inline" %>

    <% end %>


Update about page

Update about page

<%= raw gettext("What is Elixir Jobs?") %>

<%= raw gettext("Elixir Jobs is a site built to help developers to find their next Elixir job, and to help companies to reach the vibrant Elixir community.") %>

<%= raw gettext("Also, our aim is to gain visibility for the Elixir job market, showing potential offers to developers all around the world, and using the tools they like to use.") %>

<%= raw gettext("Why should I post my job offers here?") %>

<%= raw gettext("By posting your offer on our site, it will be distributed also using Telegram, RSS and Twitter (why not start %{following_us}?), so you will potentially reach more developers than using other ways. And more important: you will be reaching developers that want a new job.",
    following_us: "#{gettext("following us")}") %>

<%= raw gettext("Also, because you can post your offers for free.") %>

<%= raw gettext("Get in touch") %>

<%= raw gettext("If you need to contact us regarding a job offer, for commercial enquiries or just to say something, you can send us an email to hi@elixirjobs.net") %>

<%= raw gettext("Sponsors") %>

<%= raw gettext("Last but not least, we want to thanks the companies that are helping Elixir Jobs:") %>

        <%= img_tag(static_path(@conn, "/images/sponsors/appsignal.svg"), alt: "AppSignal", width: 250) %>

<%= raw gettext("What is this?") %>

<%= raw gettext("Elixir Jobs is a site built to help developers to find their next Elixir job, and to help companies to reach the vibrant Elixir community of developers.") %>

<%= raw gettext("Also, our aim is to gain visibility for the Elixir job market, showing potential offers to developers all around the world, and using the tools they like to use.") %>

<%= raw gettext("Why should I post my job offers here?") %>

<%= raw gettext("Because it's free and will provide your offers of a larger visibility.") %>

<%= raw gettext("By posting your offer on our site, it will be distributed also using RSS and Twitter (why not start %{following_us}?), so you will potentially reach more developers than using other ways. And more important: you will be reaching developers that want a new job.",
    following_us: "#{gettext("following us")}") %>

<%= raw gettext("Closing thoughts") %>

<%= raw gettext("Last but not least, Elixir Jobs is a web app written in Elixir + Phoenix running in production (you can check its %{source_code}), so it's also a live example that Elixir and Phoenix are production-ready.",
    source_code: "#{gettext("source code")}") %>

<%= raw gettext("Sponsors") %>

<%= raw gettext("Last but not least, we want to thanks the companies that are helping Elixir Jobs:"
    ) %>

        <%= img_tag(static_path(@conn, "/images/sponsors/appsignal.svg"), alt: "AppSignal", width: 250) %>


Wraps rss feed link and guid in CDATA elements

Currently https://elixirjobs.net/rss generates a invalid XML file
Reason for that are the following two job posts
- https://elixirjobs.net/offers/global-sports-betting-company-elixir-enthusiastsorbarcelonaoreuoron-site-39cd2c37
- https://elixirjobs.net/offers/derivco-elixir-tech-team-lead-in-barcelona-01abeb6d
or more in particular the their url's that include the "&"
this is a perfectly valid url, but not a parsable XML string.

This commit implements one way of solving the problem - wrapping
url's in with CDATA elements

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title><%= gettext("Elixir Jobs") %></title>
    <description><%= gettext "Find your next Elixir job." %></description>
    <link><%= offer_url(@conn, :index) %></link>
    <%= for offer <- @offers do %>
      <item>
        <title><![CDATA[<%= xml_strip_tags(offer.title) %>]]></title>
        <description><![CDATA[

              <%= gettext "Job place:" %> <%= HumanizeHelper.human_get_place(offer.job_place, gettext("Unknown")) %>

              <%= gettext "Job type:" %> <%= HumanizeHelper.human_get_type(offer.job_type, gettext("Unknown")) %>

              <%= gettext "Job location:" %> <%= xml_strip_tags(offer.location) %>

          <%= offer.summary %>
        ]]></description>
        <pubDate><%= xml_readable_date(offer.inserted_at) %></pubDate>
        <link><![CDATA[<%= offer.url %>]]></link>
        <guid><![CDATA[<%= offer.url %>]]></guid>
      </item>
    <% end %>
  </channel>
</rss>

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title><%= gettext("Elixir Jobs") %></title>
    <description><%= gettext "Find your next Elixir job." %></description>
    <link><%= offer_url(@conn, :index) %></link>
    <%= for offer <- @offers do %>
      <item>
        <title><![CDATA[<%= xml_strip_tags(offer.title) %>]]></title>
        <description><![CDATA[

              <%= gettext "Job place:" %> <%= HumanizeHelper.human_get_place(offer.job_place, gettext("Unknown")) %>

              <%= gettext "Job type:" %> <%= HumanizeHelper.human_get_type(offer.job_type, gettext("Unknown")) %>

              <%= gettext "Job location:" %> <%= xml_strip_tags(offer.location) %>

          <%= offer.summary %>
        ]]></description>
        <pubDate><%= xml_readable_date(offer.inserted_at) %></pubDate>
        <link><%= offer.url %></link>
        <guid><%= offer.url %></guid>
      </item>
    <% end %>
  </channel>
</rss>