Just a tiny change

Just a tiny change

There are no dashes in this composed word.

        Vous connaissez les règles, n'est-ce pas ?

Chercher des paires de cartes en en retournant 2 à la fois. Si vous trouvez un correspondance, vous obtenez un point - et vous serez invité à tourner deux autres cartes. Celui qui trouve le plus de correspondances gagne la partie.

Jouer avec n'importe qui

            Quelqu'un vous attend sûrement pour jouer maintenant !

          <a class="btn btn btn-option-go btn-success" href="/<%= locale %>/games/random">Un joueur au hasard

    <form class="game-option option-two" method=post action="/<%= locale %>/games">

Jouer avec un ami

            Envoyer simplement un lien à votre ami en ligne pour commencer !

            <input type="hidden" name="_csrf_token" value="<%= get_csrf_token %>">
            <input type="hidden" name="game[theme]" value="eighties">
            <input type="hidden" name="game[board_size]" value="6">
            <input type="hidden" name="game[players_number]" value="2">
            <input type="hidden" name="game[visibility]" value="private">

            <button type="submit" class="btn btn-option-go btn-primary">Jouer à deux</button>

    </form>

    <form class="game-option option-three" method=post action="/<%= locale %>/games">

Jouer en local

            Jouez avec votre ami sur le même ordinateur !

            <input type="hidden" name="_csrf_token" value="<%= get_csrf_token %>">
            <input type="hidden" name="game[theme]" value="eighties">
            <input type="hidden" name="game[board_size]" value="6">
            <input type="hidden" name="game[players_number]" value="2">
            <input type="hidden" name="game[visibility]" value="local">

          <button type="submit" class="btn btn-option-go btn-info">Jouer côte à côte</button>

    </form>

    <form class="game-option option-four" method=post action="/<%= locale %>/games">

Jouer en solo

            Jouez en solo pour augmenter votre précision !

            <input type="hidden" name="_csrf_token" value="<%= get_csrf_token %>">
            <input type="hidden" name="game[theme]" value="eighties">
            <input type="hidden" name="game[board_size]" value="6">
            <input type="hidden" name="game[players_number]" value="1">
            <input type="hidden" name="game[visibility]" value="private">

          <button type="submit" class="btn btn-option-go btn-warning">Démarrer une partie solo</button>

    </form>

       Plus d'options

démarrez une partie personnalisée

  <div class="elm-game-selector" data-themes='<%= raw @themes %>' data-csrf='<%= get_csrf_token %>'>

        Vous connaissez les règles, n'est-ce pas ?

Chercher des paires de cartes en en retournant 2 à la fois. Si vous trouvez un correspondance, vous obtenez un point - et vous serez invité à tourner deux autres cartes. Celui qui trouve le plus de correspondances gagne la partie.

Jouer avec n'importe qui

            Quelqu'un vous attend sûrement pour jouer maintenant !

          <a class="btn btn btn-option-go btn-success" href="/<%= locale %>/games/random">Un joueur au hasard

    <form class="game-option option-two" method=post action="/<%= locale %>/games">

Jouer avec un ami

            Envoyer simplement un lien à votre ami en ligne pour commencer !

            <input type="hidden" name="_csrf_token" value="<%= get_csrf_token %>">
            <input type="hidden" name="game[theme]" value="eighties">
            <input type="hidden" name="game[board_size]" value="6">
            <input type="hidden" name="game[players_number]" value="2">
            <input type="hidden" name="game[visibility]" value="private">

            <button type="submit" class="btn btn-option-go btn-primary">Jouer à deux</button>

    </form>

    <form class="game-option option-three" method=post action="/<%= locale %>/games">

Jouer en local

            Jouez avec votre ami sur le même ordinateur !

            <input type="hidden" name="_csrf_token" value="<%= get_csrf_token %>">
            <input type="hidden" name="game[theme]" value="eighties">
            <input type="hidden" name="game[board_size]" value="6">
            <input type="hidden" name="game[players_number]" value="2">
            <input type="hidden" name="game[visibility]" value="local">

          <button type="submit" class="btn btn-option-go btn-info">Jouer côte-à-côte</button>

    </form>

    <form class="game-option option-four" method=post action="/<%= locale %>/games">

Jouer en solo

            Jouez en solo pour augmenter votre précision !

            <input type="hidden" name="_csrf_token" value="<%= get_csrf_token %>">
            <input type="hidden" name="game[theme]" value="eighties">
            <input type="hidden" name="game[board_size]" value="6">
            <input type="hidden" name="game[players_number]" value="1">
            <input type="hidden" name="game[visibility]" value="private">

          <button type="submit" class="btn btn-option-go btn-warning">Démarrer une partie solo</button>

    </form>

       Plus d'options

démarrez une partie personnalisée

  <div class="elm-game-selector" data-themes='<%= raw @themes %>' data-csrf='<%= get_csrf_token %>'>


move tags to extra content area of the card

  <%= for post <- @posts do %>
  <% img_src = hd(post.json_metadata["image"]) %>
    <div class="ui card" href="/post/<%= post.permlink %>">

        <img src="<%= img_src %>">

         <%= post.title %>

            <%= for tag <- post.tags do %>
              <a class="ui small label" href="/tag/<%=tag%>">
                <%= format_tag(tag, @conn.assigns.lang) %>

            <% end %>

  <% end %>


Minor update

Minor update

      Free & Premium Bootstrap Templates

      We provide high quality design & web resources at an affordable price.

  <%= render Ap.ProductView, "list.html", conn: @conn, products: @products %>

  <%= render Ap.SharedView, "footer_subscribe_widget.html", conn: @conn %>

      Free & Premium Bootstrap Templates

      Hello, we provide high quality design & web resources at an affordable price.

  <%= render Ap.ProductView, "list.html", conn: @conn, products: @products %>

  <%= render Ap.SharedView, "footer_subscribe_widget.html", conn: @conn %>


Remove Bootstrap theme

Remove Bootstrap theme

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>TapRacer</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
    <!-- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous"> -->
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">
  </head>

  <body data-js-view-name="<%= js_view_name(@conn, @view_template) %>">
    <div class="container">
      <main role="main">
        <%= render @view_module, @view_template, assigns %>
      </main>
    </div> <!-- /container -->
    <script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
    <!-- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script> -->
    <script src="<%= static_path(@conn, "/js/app.js") %>"></script>
  </body>
</html>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>TapRacer</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">
  </head>

  <body data-js-view-name="<%= js_view_name(@conn, @view_template) %>">
    <div class="container">
      <main role="main">
        <%= render @view_module, @view_template, assigns %>
      </main>
    </div> <!-- /container -->
    <script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
    <!-- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script> -->
    <script src="<%= static_path(@conn, "/js/app.js") %>"></script>
  </body>
</html>


Style "Forgot password?" link in form

Style "Forgot password?" link in form

<%= 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), class: "pull-right"
            %>

        <%= 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 %>

<%= 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 %>


Fix cache.appcache in mobile layout

Fix cache.appcache in mobile layout

<!DOCTYPE html>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="format-detection" content="telephone=no">
    <meta name="csrf" content="<%= Plug.CSRFProtection.get_csrf_token %>">
    <%= if Guardian.Plug.current_token(@conn) do %>
      <meta name='guardian_token' content="<%= Guardian.Plug.current_token(@conn) %>">
    <% end %>
    <link href="/images/startup.png"
          media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)"
          rel="apple-touch-startup-image">
    <link rel="apple-touch-icon" sizes="120x120" href="/images/apple-touch-icon.png">
    <title>ExMoney</title>

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

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


Removing Phoenix banner

Removing Phoenix banner

<!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>Price Tracker</title>
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">

Tracker

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

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

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

<!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>Hello PriceTracker!</title>
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">

Get Started

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

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

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


IE11: add Element.closest polyfill for action-items toggle

<%= if Enum.count(@retros) == 0 do %>

Welcome, <%= assigns[:current_user].given_name %>!

        You're about to take part in your first RemoteRetro, traversing the following stages:

The Lobby

Gather the team!

The Retrospective Prime Directive

Frame the retro as a safe, collaborative space

Idea Generation

Invite ideas from participants

Voting

Vote anonymously to discuss ideas

Action Item Generation

Generate and commit to action items

Retrospective Close

Distribute action items and depart!

    <%= form_for @conn, Routes.retro_path(@conn, :create), [as: :retro, class: "ui form content"], fn _f -> %>
      <button type="submit" class="ui blue right labeled fluid icon button">
        Let's Create Your First Retrospective!

      </button>
    <% end %>

<% else %>
  <%= form_for @conn, Routes.retro_path(@conn, :create), [as: :retro, class: "ui tiny modal retro-format-modal"], fn _f -> %>

Select format:

      <input type="radio" class="visually-hidden" id="happy-sad-confused" name="format"  value="Happy/Sad/Confused" checked />

          <img src="<%= Routes.static_path(@conn, "/images/happy.svg") %>" />

Happy/Sad/Confused

              Standard iteration retrospective for teams new to retrospectives. Ideal for unearthing wins, concerns, and painpoints in a collaborative setting where the team can decide the most impactful changes they can make to their process.

            Suggested time allotment: 1 hour

      <input type="radio" class="visually-hidden" id="start-stop-continue" name="format" value="Start/Stop/Continue" />

          <img src="<%= Routes.static_path(@conn, "/images/traffic_light.svg") %>" />

Start/Stop/Continue

              A format focused on the rapid brainstorming of possible action items, and honing the ones most likely to drive positive change in the team.

            Suggested time allotment: 45 - 60 minutes

      <button type="submit" class="ui blue right labeled fluid icon button">
        Let's do it!

      </button>

  <% end %>

My Retros:

      <%= for retro <- @retros do %>

          <a href="<%= Routes.retro_path @conn, :show, retro %>">
            created <%= Timex.format!(retro.inserted_at, "{relative}", :relative) %>

          <%= if Enum.count(retro.ideas) > 0 do %>

                Action Items

                <%# ideas retrieved via association are scoped to action_items %>
                <%= for idea <- retro.ideas do %>

<%= action_item_to_string(idea) %>

                <% end %>

          <% end %>

      <% end %>

    <button type="submit" class="ui blue right labeled icon initiate-retro-creation button">
      Create a Retrospective!

    </button>

<% end %>

<%# prefetch retro javascript for faster loading on retro creation :) %>
<link rel="prefetch" href="<%= Routes.static_path(@conn, "/js/dll/dll.vendor.js")%>">
<link rel="prefetch" href="<%= app_js(@conn) %>">


Add flash info and error messages to layout

<!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>Hello Phoenix!</title>
    <link rel="stylesheet" href="<%%= static_path(@conn, "/css/app.css") %>">

Get Started

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

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

      <%%= @inner %>

phoenixframework.org

<!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>Hello Phoenix!</title>
    <link rel="stylesheet" href="<%%= static_path(@conn, "/css/app.css") %>">

Get Started

      <%%= @inner %>

phoenixframework.org


Build: eliminate flakiness in new user experience test

  - the first_time_user_experience_test occasionally triggered occasional failures due to the JS animation delaying visibility of the modal that allows users to create their first retro
    - the fix is to short circuit the animation in test environments


pedago

pedago

<%= render Matrice.PageView, "_section_header.html", title: "pédagogie" %>

Un programme de formation à l’innovation développant intuition et leadership

Matrice est un programme de formation sans cours et sans professeurs.

Son objectif est de transmettre l’esprit d’entreprendre et d’innover aux étudiants, pour apporter des réponses ingénieuses et nouvelles aux différentes problématiques de la société à l’ère du numérique.

Pour acquérir cet esprit, l’étudiant doit prendre conscience que, dans le cadre du programme, il n’est plus un élève, mais un acteur autonome garant de son apprentissage, de ses objectifs et des moyens qu'il va utiliser pour les atteindre.

          <img src="<%= static_path(@conn, "/images/1.jpg") %>" alt="Un programme de formation">

        <quote>“Matrice n’est pas une énième formation à l’entrepreneuriat. Sa pédagogie valorise le collectif et la réflexivité, conditions pour que l’apprentissage soit réel et que les projets développés par les étudiants aient du sens.”</quote>

Comment former des innovateurs ?

Les formations à l’innovation actuelles voient l’innovateur comme un individu réunissant un ensemble de compétences (créativité, communication, stratégie, management, etc.). Cette approche par  compétences conduit à une formation par compétences : différents cours et projets distincts.

Notre vision est tout autre : l’innovation passe d’abord par la construction d’une identité d’innovateur. Cette identité repose sur une capacité à écouter son intuition, sa voix intérieure, puis à transmettre cette voix vers l’extérieur (leadership) afin de s’appuyer sur une structure collective pour la réaliser.

Notre projet pédagogique consiste donc en premier lieu à développer cette identité chez des étudiants engagés dans leur apprentissage et l'action au sein d'un collectif.

Les 6 piliers de notre pédagogie

1. L’apprentissage par l’action

L’action est le moyen de l’apprentissage. Le travail pédagogique repose sur les actions effectivement menées, car c’est à partir de ces actions que nous développons un processus de réflexivité menant aux apprentissages concrets.

2. Le travail en équipe

Un projet ambitieux et original passe par une équipe, un collectif. Apprendre à faire équipe est l’enjeu principal de notre formation à l’innovation.

3. L’appropriation complète du projet

L'apprenant ne peut s'engager complètement dans un travail que s'il a choisi, conçu et développé un projet dont il est propriétaire.

4. L’interdisciplinarité

Les équipes sont constituées d’étudiants venant d’écoles et de disciplines différentes. Ils apprennent mutuellement de leurs différences et compétences variées.

5. L’immersion et le dialogue avec les acteurs du terrain

C’est par un dialogue continu avec les acteurs sociaux, économiques, institutionnels que les étudiants pourront trouver des idées nouvelles, comprendre la culture et les modes de fonctionnement du milieu permettant l’appropriation des innovations et leur diffusion.

6. Le respect de l’autonomie de l’apprenant

Ne jamais refuser à la personne le droit de résoudre son problème par elle-même.

        <quote>Ces 6 principes forment un cadre qui va créer les conditions de l’éclosion d’innovateurs et d’idées innovantes. C’est en posant un cadre respectueux que l’on permet un sentiment de confiance réciproque aboutissant à l’engagement de tous.</quote>

Un accompagnement pédagogique transversal

Une direction pédagogique, pour implémenter le programme et continuer à innover par l’action.

Des coachs, pour des séances régulières afin de développer les compétences globales et apprendre à utiliser les potentialités du collectif.

Des  ouvreurs, pour aider à la compréhension des codes spécifiques aux milieux professionnels visés.

Des experts techniques, (entrepreneuriat/sciences de gestion, programmation/code, 	scientifique) mobilisables lorsque des besoins précis sont mis à jour.

Une community manager, pour les questions de calendrier, salles et matériels, etc.

          <img src="<%= static_path(@conn, "/images/arts.jpg") %>" alt="Un programme de formation">

Un dispositif unique

Nous avons conçu ce programme à la pointe de la recherche sur la formation à l’innovation.

Pour développer ce dispositif radicalement original et unique, nous synthétisons trois champs éducatifs :  l’équipe apprenante (P. Senge, Team Academy), le  connectivisme (Siemens, Varela), et la  pédagogie de la liberté  (P. Freire).

Team Academy est une méthode développée en Finlande pour former des jeunes à l’esprit d’entreprendre. Elle est basée sur le concept d’équipe apprenante (P. Senge) et sur  l’action learning (R. Revans). C’est par le collectif, à travers le dialogue et la pratique, que l’individu est amené à progresser et à apprendre. Le Bachelor Jeune Entrepreneur (EM Strasbourg) est, à ce jour, la seule formation française qui applique ce modèle finlandais.

Le connectivisme est une théorie de l’apprentissage, développée en premier lieu par G. Siemens et appuyée sur les théories cognitivistes de F. Varela, reconnaissant que la connaissance émerge de la diversité des sources et de leurs confrontations. La connaissance est ainsi toujours « située ». Elle se construit dans et par les interactions sociales, grâce à la notion de  réseau. La finalité de l’apprentissage est d’apprendre à apprendre.

La pédagogie de la liberté où  méthode de conscientisation a été théorisée par P. Freire. La conscientisation consiste à acquérir un esprit critique sur les réalités sociales. L’individu ne peut transformer le monde dans lequel il vit s’il ne se sent pas en capacité de le comprendre et d’analyser ses relations avec son environnement. C’est par la prise de conscience de ce qui le limite et l’opprime qu’il peut devenir acteur de son futur. Le but n’est donc pas d’enseigner quelque chose à un interlocuteur, mais de l’amener à trouver les moyens de la transformation de son environnement.

Cela constitue la différence fondamentale entre un objectif de formation (transmission d’outils et méthodes à appliquer dans des situations-types) plutôt que de transformation (la transformation réciproque coach/étudiants permet un changement dans le rapport à l’autre). Ce qui signifie que nous nous situons nous-mêmes comme une  équipe apprenante, amenée à faire évoluer notre démarche.

<%= render Matrice.PageView, "_section_header.html", title: "pédagogie" %>

Un programme de formation à l’innovation développant intuition et leadership

Matrice est un programme de formation sans cours et sans professeurs.

Son objectif est de transmettre l’esprit d’entreprendre et d’innover aux étudiants, pour apporter des réponses ingénieuses et nouvelles aux différentes problématiques de la société à l’ère du numérique.

Pour acquérir cet esprit, l’étudiant doit prendre conscience que, dans le cadre du programme, il n’est plus un élève, mais un acteur autonome garant de son apprentissage, de ses objectifs et des moyens qu'il va utiliser pour les atteindre.

          <img src="<%= static_path(@conn, "/images/1.jpg") %>" alt="Un programme de formation">

        <quote>“Matrice n’est pas une énième formation à l’entrepreneuriat. Sa pédagogie valorise le collectif et la réflexivité, conditions pour que l’apprentissage soit réel et que les projets développés par les étudiants aient du sens.”</quote>

Comment former des innovateurs ?

Les formations à l’innovation actuelles voient l’innovateur comme un individu réunissant un ensemble de compétences (créativité, communication, stratégie, management, etc.). Cette approche par  compétences conduit à une formation par compétences : différents cours et projets distincts.

Notre vision est tout autre : l’innovation passe d’abord par la construction d’une identité d’innovateur. Cette identité repose sur une capacité à écouter son intuition, sa voix intérieure, puis à transmettre cette voix vers l’extérieur (leadership) afin de s’appuyer sur une structure collective pour la réaliser.

Notre projet pédagogique consiste donc en premier lieu à développer cette identité chez des étudiants engagés dans leur apprentissage et l'action au sein d'un collectif.

Les 6 piliers de notre pédagogie

1. L’apprentissage par l’action

L’action est le moyen de l’apprentissage. Le travail pédagogique repose sur les actions effectivement menées, car c’est à partir de ces actions que nous développons un processus de réflexivité menant aux apprentissages concrets.

2. Le travail en équipe

Un projet ambitieux et original passe par une équipe, un collectif. Apprendre à faire équipe est l’enjeu principal de notre formation à l’innovation.

3. L’appropriation complète du projet

L'apprenant ne peut s'engager complètement dans un travail que s'il a choisi, conçu et développé un projet dont il est propriétaire.

4. L’interdisciplinarité

Les équipes sont constituées d’étudiants venant d’écoles et de disciplines différentes. Ils apprennent mutuellement de leurs différences et compétences variées.

5. L’immersion et le dialogue avec les acteurs du terrain

C’est par un dialogue continu avec les acteurs sociaux, économiques, institutionnels que les étudiants pourront trouver des idées nouvelles, comprendre la culture et les modes de fonctionnement du milieu permettant l’appropriation des innovations et leur diffusion.

6. Le respect de l’autonomie de l’apprenant

Ne jamais refuser à la personne le droit de résoudre son problème par elle-même.

        <quote>Ces 6 principes forment un cadre qui va créer les conditions de l’éclosion d’innovateurs et d’idées innovantes. C’est en posant un cadre respectueux que l’on permet un sentiment de confiance réciproque aboutissant à l’engagement de tous.</quote>

Un accompagnement pédagogique transversal

Une direction pédagogique, pour implémenter le programme et continuer à innover par l’action.

Des coachs, pour des séances régulières afin de développer les compétences globales et apprendre à utiliser les potentialités du collectif.

Des  ouvreurs, pour aider à la compréhension des codes spécifiques aux milieux professionnels visés.

Des experts techniques, (entrepreneuriat/sciences de gestion, programmation/code, 	scientifique) mobilisables lorsque des besoins précis sont mis à jour.

Une community manager, pour les questions de calendrier, salles et matériels, etc.

          <img src="<%= static_path(@conn, "/images/1.jpg") %>" alt="Un programme de formation">

Un dispositif unique

Nous avons conçu ce programme à la pointe de la recherche sur la formation à l’innovation.

Pour développer ce dispositif radicalement original et unique, nous synthétisons trois champs éducatifs :  l’équipe apprenante (P. Senge, Team Academy), le  connectivisme (Siemens, Varela), et la  pédagogie de la liberté  (P. Freire).

Team Academy est une méthode développée en Finlande pour former des jeunes à l’esprit d’entreprendre. Elle est basée sur le concept d’équipe apprenante (P. Senge) et sur  l’action learning (R. Revans). C’est par le collectif, à travers le dialogue et la pratique, que l’individu est amené à progresser et à apprendre. Le Bachelor Jeune Entrepreneur (EM Strasbourg) est, à ce jour, la seule formation française qui applique ce modèle finlandais.

Le connectivisme est une théorie de l’apprentissage, développée en premier lieu par G. Siemens et appuyée sur les théories cognitivistes de F. Varela, reconnaissant que la connaissance émerge de la diversité des sources et de leurs confrontations. La connaissance est ainsi toujours « située ». Elle se construit dans et par les interactions sociales, grâce à la notion de  réseau. La finalité de l’apprentissage est d’apprendre à apprendre.

La pédagogie de la liberté où  méthode de conscientisation a été théorisée par P. Freire. La conscientisation consiste à acquérir un esprit critique sur les réalités sociales. L’individu ne peut transformer le monde dans lequel il vit s’il ne se sent pas en capacité de le comprendre et d’analyser ses relations avec son environnement. C’est par la prise de conscience de ce qui le limite et l’opprime qu’il peut devenir acteur de son futur. Le but n’est donc pas d’enseigner quelque chose à un interlocuteur, mais de l’amener à trouver les moyens de la transformation de son environnement.

Cela constitue la différence fondamentale entre un objectif de formation (transmission d’outils et méthodes à appliquer dans des situations-types) plutôt que de transformation (la transformation réciproque coach/étudiants permet un changement dans le rapport à l’autre). Ce qui signifie que nous nous situons nous-mêmes comme une  équipe apprenante, amenée à faire évoluer notre démarche.


tweak links on edit map page

tweak links on edit map page

Show map

    Public URL:
    <%= link readonly_map_url(@conn, :show, @map), to: readonly_map_url(@conn, :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 %>

-------------------------

Markers

      Name
      Img url
      Text
      Lat
      Long

    <%= for marker <- @map.markers do %>

        <%= marker.name %>
        <img src="<%= marker.img_URL %>" width="150px">

            <%= marker.img_URL %>

        <%= marker.text %>
        <%= marker.lat %>
        <%= marker.long %>

          <%= link "Show", to: edit_map_marker_path(@conn, :show, @map, marker), class: "btn btn-default btn-xs" %>
      <%= link "Edit", to: edit_map_marker_path(@conn, :edit, @map, marker), class: "btn btn-default btn-xs" %>
      <%= link "Delete", to: edit_map_marker_path(@conn, :delete, @map, marker), method: :delete, data: [confirm: "Are you sure?"], class: "btn btn-danger btn-xs" %>

<% end %>

<%= link "New marker", to: edit_map_marker_path(@conn, :new, @map) %>

<%= link "Edit map", to: edit_map_path(@conn, :edit, @map) %>
 |
<%= link "List maps", to: edit_map_path(@conn, :index) %>

<%= render EnhancedMap.SharedView, "google_map.html", map: @map, is_edit: true %>

Show map

    Public URL:
    <%= link readonly_map_url(@conn, :show, @map), to: readonly_map_url(@conn, :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 %>

-------------------------

Markers

      Name
      Img url
      Text
      Lat
      Long

    <%= for marker <- @map.markers do %>

        <%= marker.name %>
        <img src="<%= marker.img_URL %>" width="150px">

            <%= marker.img_URL %>

        <%= marker.text %>
        <%= marker.lat %>
        <%= marker.long %>

          <%= link "Show", to: edit_map_marker_path(@conn, :show, @map, marker), class: "btn btn-default btn-xs" %>
      <%= link "Edit", to: edit_map_marker_path(@conn, :edit, @map, marker), class: "btn btn-default btn-xs" %>
      <%= link "Delete", to: edit_map_marker_path(@conn, :delete, @map, marker), method: :delete, data: [confirm: "Are you sure?"], class: "btn btn-danger btn-xs" %>

<% end %>

<%= link "New marker", to: edit_map_marker_path(@conn, :new, @map) %>

<%= link "Edit", to: edit_map_path(@conn, :edit, @map) %>
|
<%= link "Back", to: edit_map_path(@conn, :index) %>
i
<%= render EnhancedMap.SharedView, "google_map.html", map: @map, is_edit: true %>


Add version to intercom user attributes

Add version to intercom user attributes

Talk to us

Ask your question in the chat box and Jo or Gina will reply as soon as they are free.

        <%= if @conn.assigns.version == "talk" do %>
          Leave your email address if you don't get a response straight away and we'll let you know when we're free.
        <% else %>
          Leave your email address and a message so we can get back to you and let you know when we're online to answer your questions.
        <% end %>

To speak to us again and carry on your conversation, make a not of the code below:

Your Code: <%= @user.uuid %>

      <%= if @conn.assigns.version == "talk" do %>

If you want to speak to us on the phone, arrange a time that is convenient for you.

        <%= link to: user_callback_path(@conn, :show, @user)  do %>
          <button class="<%= red_button() %>">Arrange a call</button>
        <% end %>
      <% end %>

      <%= if @conn.assigns.version == "talk" do %>
        <%= link to: page_path(@conn, :practitioners) do %>
          <button class="<%= "#{red_button()} mb2" %>">Meet our staff</button>
        <% end %>
      <% end %>

      <%= if @conn.assigns.version == "talk" do %>

We are non-judgemental, inclusive, friendly and approachable.

You can ask us any parenting or family question and we will do our best to make you feel comfortable, understood and helped.

It can be about development, behaviour, feeding, family life, wellbeing, understanding your child, sleeping etc. We really don't mind what you ask us about, we are here to help you.

So that we can best support you, please provide some context about your question.

For example, if you need advice around your child's sleeping, let us know their age and bedtime routine. This means we can give you advice really specific to you and your situation.

You might also find it useful to read some general parenting information written by Action for Children practitioners.

      <% else %>

We are friendly, don’t judge, will help everyone and easy to talk to.

You can ask us any parent, relationship or family question and we will do our best to make you feel comfortable, understood and helped.

It can be about your child's behaviour, understanding your child, arguments, your relationship with your partner/the other parent, child care, family life, wellbeing, looking for work, etc. We really don't mind what you ask us about. We are here to help you.

So that we can help you, please give us as much information about your question as you can.

For example, if your child’s behaviour has recently changed, tell us their age and if there have been any changes in your family. This means we can give you advice specific to you and your situation.

You might also want to read some general parenting and family information and parents and carers of children aged 0-5 can visit our Dots advice site.

      <% end %>


Fix manigest route

Fix manigest route

<!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="">
    <meta name="apple-mobile-web-app-title" content="ElixirJobs">
    <meta name="application-name" content="ElixirJobs">
    <meta name="theme-color" content="#8652ad">
    <title>ElixirJobs</title>
    <link rel="apple-touch-icon" sizes="180x180" href="<%= static_path(@conn, "/icons/apple-touch-icon.png") %>">
    <link rel="icon" type="image/png" sizes="32x32" href="<%= static_path(@conn, "/icons/favicon-32x32.png") %>">
    <link rel="icon" type="image/png" sizes="16x16" href="<%= static_path(@conn, "/icons/favicon-16x16.png") %>">
    <link rel="manifest" href="/manifest.json">
    <link rel="mask-icon" href="<%= static_path(@conn, "/icons/safari-pinned-tab.svg") %>" color="#8652ad">
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">

    <%= render_shared "_sidebar.html", conn: @conn %>

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

    <%= render_shared "_footer.html", conn: @conn %>

<!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="">
    <meta name="apple-mobile-web-app-title" content="ElixirJobs">
    <meta name="application-name" content="ElixirJobs">
    <meta name="theme-color" content="#8652ad">
    <title>ElixirJobs</title>
    <link rel="apple-touch-icon" sizes="180x180" href="<%= static_path(@conn, "/icons/apple-touch-icon.png") %>">
    <link rel="icon" type="image/png" sizes="32x32" href="<%= static_path(@conn, "/icons/favicon-32x32.png") %>">
    <link rel="icon" type="image/png" sizes="16x16" href="<%= static_path(@conn, "/icons/favicon-16x16.png") %>">
    <link rel="manifest" href="<%= static_path(@conn, "/manifest.json") %>">
    <link rel="mask-icon" href="<%= static_path(@conn, "/icons/safari-pinned-tab.svg") %>" color="#8652ad">
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">

    <%= render_shared "_sidebar.html", conn: @conn %>

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

    <%= render_shared "_footer.html", conn: @conn %>


Change page title

Change page title

<!DOCTYPE html>
<html lang="en">
  <head>
    <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="Dylan C. Kendal">

    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <script src="<%= static_path(@conn, "/js/runtime.js") %>"></script>
    <script src="<%= static_path(@conn, "/js/vendor.js") %>"></script>
    <script src="<%= static_path(@conn, "/js/index.js") %>"></script>

    <title>Snake AI</title>
  </head>

  <body>
    <main role="main">
      <%= render @view_module, @view_template, assigns %>
    </main>
  </body>
</html>

<!DOCTYPE html>
<html lang="en">
  <head>
    <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="Dylan C. Kendal">

    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <script src="<%= static_path(@conn, "/js/runtime.js") %>"></script>
    <script src="<%= static_path(@conn, "/js/vendor.js") %>"></script>
    <script src="<%= static_path(@conn, "/js/index.js") %>"></script>

    <title>BattleSnake 2018</title>
  </head>

  <body>
    <main role="main">
      <%= render @view_module, @view_template, assigns %>
    </main>
  </body>
</html>


Update home page for 2021 LW season

Update home page for 2021 LW season

Landeswettbewerbe 2021

Die Landeswettbewerbe finden dieses Jahr in San Sebastián, in Kopenhagen (digital) und in Rom (digital) statt.

Genauere Infos zum Hochladen der Vorspiele zu den digitalen Wettbewerben folgen in den nächsten Wochen.

Aktuelle Infos

Vorspielpläne und Ergebnisse findest du rund um den jeweiligen Wettbewerb in der Jumu-App:

      <%= app_link :ios %> <%= app_link :android %>

Landeswettbewerbe 2020

Der Landeswettbewerb des Verbunds 1 fand dieses Jahr in Valencia statt.

      Die Landeswettbewerbe in Warschau und Rom mussten wegen der derzeitigen COVID-19-Pandemie leider abgesagt werden.

Aktuelle Infos

Vorspielpläne und Ergebnisse findest du rund um den jeweiligen Wettbewerb in der Jumu-App:

      <%= app_link :ios %> <%= app_link :android %>


extra hr :-)

extra hr :-)

Your Podcast Recommendations

        <%= for recommendation <- @podcast_recommendations do %>

            <%= link [fa_icon("podcast"), " ", recommendation.podcast.title],
                to: podcast_frontend_path(@conn, :show, recommendation.podcast),
                class: "btn btn-default btn-xs",
                style: "color: #666;" %>
            <%= recommendation.inserted_at %>

            <%= recommendation.comment %>

        <% end %>

Unrecommended Podcasts

        <%= for podcast <- @unrecommended_podcasts do %>
          <%= link [fa_icon("podcast"), " ", podcast.title],
                   to: podcast_frontend_path(@conn, :show, podcast),
                   class: "btn btn-default",
                   style: "color: #666;" %>
          <%= render Pan.PodcastFrontendView, "_recommend_form.html",
                     current_user: @current_user,
                     changeset: @changeset,
                     conn: @conn,
                     podcast_id: podcast.id %>

        <% end %>


apply p stylings to li

apply p stylings to li

<meta name="description" content="<%=@title%>" />
<meta name="keywords" content="<%=@title <> "" <> copyright(@brand)%>" />
<meta name="author" content="copyright(@brand)%>" />
<meta name="copyright" content="copyright(@brand)%>" />

<meta property="og:url" content="<%= core_deployment(@brand) <> "/petition/" <> @slug%>" />
<meta property="og:title" content="<%=@title%>" />
<meta property="og:type" content="article" />
<meta property="og:image" content="<%=@share_image%>" />
<meta property="og:description" content="<%=@content%>" />

<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="<%=@title%>" />
<meta name="twitter:description" content="<%=@content%>" />
<meta name="twitter:image" content="<%=@share_image%>" />

    <%= if not @signed do %>

        <%= raw(@content) %>

      <%= if @count do %>

          <div class="count-bar" style="width: <%= @progress %>%;">

           <%= @count %> people have signed. Help us get to <%= @target %>!

      <% end %>

      <%= form_tag("/petition/#{@slug}", method: :post, id: "main-form") %>

          <input type="hidden" name="_csrf_token" value="<%= csrf_token() %>" />

          <fieldset style="margin-top: 20px;">
            <legend style="color:white;">Your Info</legend>

              Name
              <input type="text" name="name" required="required"/>

              Email
              <input type="email" name="email" required="required"/>

              Mobile Phone Number
              <input type="tel" name="phone" />

              Zip
              <input type="text" name="zip" maxlength="5" required="required" />

              <%= if @brand == "jd" do %>
                <button onclick="fbq('track', 'Lead'); document.querySelector('#main-form').submit();" type="submit" class="button-block"><%=@sign_button_text%></button>
              <% else %>
                <button type="submit" class="button-block"><%=@sign_button_text%></button>
              <% end %>

          </fieldset>

            By signing this petition, I consent to receiving emails from
            <%= if @slug == "jd-stop-war" do %>
              <a target="_blank" href="<%=homepage(@brand)%>"><%=copyright(@brand)%> and
              Ro Khanna.
            <% else %>
              <a target="_blank" href="<%=homepage(@brand)%>"><%=copyright(@brand)%>.
            <% end %>

      </form>

    <% else %>

        <%= raw(@post_sign_text) %>

 Next Steps

      <fieldset style="margin-top: 20px; color: white;">
        <legend style="color:white;">Help us get to <%= @target %> signatures by sharing on social media</legend>

        <a class="twitter-share-button" href="<%=@twitter_href%>" data-size="large">
          Tweet

        <div class="fb-share-button" data-href="<%=@url%>" data-layout="button_count" data-size="large" style="float:right;">
          <a class="fb-xfbml-parse-ignore" target="_blank"
            style="background-color: #3b5998; color: white; padding: 5px; text-decoration: none; margin-top: 5px;"
            href="<%=@fb_href%>"
          >
            Share on Facebook

      </fieldset>

      <%= if @call_power_campaign_id != nil and @call_power_campaign_id != "" do %>

        <fieldset style="color:white;">
          <legend> <%= @call_power_header %> </legend>

            <%= raw(@call_power_prompt) %>

          <form id="call_form">
            <input id="phone_id" type="hidden" value="<%= @submitted_phone %>"/>
            <input id="location_id" type="hidden" value="<%= @submitted_zip %>" />
            <button type="submit" style="width: 100%; margin-top: 10px;" id="call-power-go"> Call Me At <%= @submitted_phone %> </button>
          </form>

          <%= form_tag("/petition/#{@slug}", method: :post, id: "number-replace-form", style: "margin-top: 10px;") %>
            <input name="name" value="<%= @submitted_name %>" type="hidden" />
            <input name="email" value="<%= @submitted_email %>" type="hidden" />
            <input name="zip" value="<%= @submitted_zip %>" type="hidden" />

              Different Number
              <input type="tel" name="phone" />

              <button id="number-replace-button" class="button-block">Call Me at a Different Number</button>

          </form>
        </fieldset>
      <% end %>

    <% end %>

<%= if @brand == "jd" do %>

<% end %>


Clarify 'Guidance' feature copy on landing page

  <iframe scrolling="no" frameborder="0" allowtransparency="true" class="twitter-share-button twitter-share-button-rendered twitter-tweet-button" style="position: static; visibility: visible; width: 61px; height: 20px;" title="Twitter Tweet Button" src="https://platform.twitter.com/widgets/tweet_button.2e798283373a8137c24e277b9b9620d6.en.html#dnt=false&id=twitter-widget-0&lang=en&original_referer=https%3A%2F%2Fsemantic-ui.com%2F&size=m&text=I%20%E2%9D%A4%20RemoteRetro!%20Like,%20big%20time.&time=1519956156939&type=share&url=http%3A%2F%2Fremoteretro.org&via=StrideDev&hashtags=myelixirstatus,opensource" data-url="http://remoteretro.org">

    Remote

    Retro

    Powerful retrospectives for distributed teams

RemoteRetro helps teams come together and improve, even when they're far apart.

    Sign in with Google to Get Started

            Free!

Costs less than a song!

            Collaborative!

Interact with teammates in real time!

            Stage-by-Stage Guidance!

Best practices instilled every step of the way.

            Completely Open Source!

            GitHub

Trusted By

        Sign in with Google to Get Started

        F.A.Q.

<%# prefetch first-time-user-experience javascript during idle time on homepage for immediate execution on login %>
<link rel="prefetch" href="<%= static_path(@conn, "/js/jquery.min.js") %>">
<link rel="prefetch" href="<%= static_path(@conn, "/js/semantic.min.js") %>">

  <iframe scrolling="no" frameborder="0" allowtransparency="true" class="twitter-share-button twitter-share-button-rendered twitter-tweet-button" style="position: static; visibility: visible; width: 61px; height: 20px;" title="Twitter Tweet Button" src="https://platform.twitter.com/widgets/tweet_button.2e798283373a8137c24e277b9b9620d6.en.html#dnt=false&id=twitter-widget-0&lang=en&original_referer=https%3A%2F%2Fsemantic-ui.com%2F&size=m&text=I%20%E2%9D%A4%20RemoteRetro!%20Like,%20big%20time.&time=1519956156939&type=share&url=http%3A%2F%2Fremoteretro.org&via=StrideDev&hashtags=myelixirstatus,opensource" data-url="http://remoteretro.org">

    Remote

    Retro

    Powerful retrospectives for distributed teams

RemoteRetro helps teams come together and improve, even when they're far apart.

    Sign in with Google to Get Started

            Free!

Costs less than a song!

            Collaborative!

Interact with teammates in real time!

            Guided!

A retro on rails!

            Completely Open Source!

            GitHub

Trusted By

        Sign in with Google to Get Started

        F.A.Q.

<%# prefetch first-time-user-experience javascript during idle time on homepage for immediate execution on login %>
<link rel="prefetch" href="<%= static_path(@conn, "/js/jquery.min.js") %>">
<link rel="prefetch" href="<%= static_path(@conn, "/js/semantic.min.js") %>">


Text update

Text update

<%= email_greeting(@user) %>,

Danke das Sie bei vutuv mitmachen. Zum Einloggen klicken Sie bitte auf
diesen Link:
<%= @url %>magic/login/<%=@link%>

Der Link verfällt nach 60 Minuten. Sie können aber jederzeit einen
neuen unter der folgenden URL abrufen:
https://www.vutuv.de/sessions/new

Bitte erzählen Sie Ihren Freunden und Geschäftspartnern von vutuv!

Mit freundlichen Grüßen
Ihr vutuv Team

--
vutuv is a service provided by AMOOMA GmbH. https://www.amooma.de
AMOOMA GmbH - Bachstr. 124 - 56566 Neuwied - Germany
Geschäftsführer: Stefan Wintermeyer, Handelsregister Montabaur B14998
Updates about vutuv: https://twitter.com/vutuv

<%= email_greeting(@user) %>,

Danke das Sie bei vutuv mitmachen. Zum Einloggen klicken Sie bitte auf
diesen Link:
<%= @url %>magic/login/<%=@link%>

Der Link verfällt nach 60 Minuten. Sie können aber jederzeit einen
neuen unter der folgenden URL abrufen:
https://www.vutuv.de/sessions/new

Bitte erzählen Sie Ihren Freunden und Geschäftspartnern von vutuv!

Mit freundlichen Grüßen
Ihr vutuv Team

PS: Wir arbeiten noch an der Anrede. Deshalb erst mal Vorname und Sie.

--
vutuv is a service provided by AMOOMA GmbH. https://www.amooma.de
AMOOMA GmbH - Bachstr. 124 - 56566 Neuwied - Germany
Geschäftsführer: Stefan Wintermeyer, Handelsregister Montabaur B14998
Updates about vutuv: https://twitter.com/vutuv


Fixes the formatting of the class time

Fixes the formatting of the class time

Since starting_at and finishes_at are Ecto.Time format it cannot be directly formatted by Timex.

Timex first need to convert them to naive_datetime and that need a full DateTime.

To solve this issue we need to use the class date to convert class times to DateTime and then format them as we wish


Draw each graph in its own function

Draw each graph in its own function

* better separation and scoping
* also fix some missing vars and ;s (too much CoffeeScript)

<!DOCTYPE html>

    <meta http-equiv="content-type" content="text/html; charset=utf8">

Comparison

Data Table

              Name
              Iterations per Second
              Average
              Deviation
              median

            <%= for {name, statistics} <- suite.statistics do %>

                <%= name %>
                <%= statistics.ips %>
                <%= statistics.average %>
                <%= statistics.std_dev_ratio %>%
                <%= statistics.median %>

            <% end %>

    <%= for {name, _} <- suite.run_times do %>

 <%= name %>

          <div class="sorted-run-times" data-job-name="<%= name %>">

          <div class="raw-run-times" data-job-name="<%= name %>">

    <% end %>


Use consolidated protocols when installing windows service with erlsrv

Closes #344

:: This batch file handles managing an Erlang node as a Windows service.
::
:: Check the :usage section for information about what this script provides

@echo off

:: Set variables that describe the release
set rel_name=<%= release_name %>
set rel_vsn=<%= release_version %>
set erts_vsn=<%= erts_vsn %>
set erl_opts=<%= erl_opts %>

:: Discover the release root directory from the directory
:: of this script
set script_dir=%~dp0
for %%A in ("%script_dir%\..\..") do (
  set release_root_dir=%%~fA
)
set rel_dir=%release_root_dir%\releases\%rel_vsn%

if "%RELEASE_MUTABLE_DIR%"=="" (
  set mutable_dir=%release_root_dir%\var
) else (
  set mutable_dir=%RELEASE_MUTABLE_DIR%
)

if "%RELEASE_CONFIG_DIR%"=="" (
  set config_dir=%release_root_dir%
) else (
  set config_dir=%RELEASE_CONFIG_DIR%
)

set log_dir=%mutable_dir%\log

:: Create directories which don't exist
if not exist %mutable_dir% mkdir %mutable_dir%
if not exist %config_dir% mkdir %config_dir%
if not exist %log_dir% mkdir %log_dir%

call :find_erts_dir
call :find_sys_config
call :find_vm_args
call :set_boot_script_var

set service_name=%rel_name%_%rel_vsn%
set bindir=%erts_dir%\bin
set progname=erl.exe
set clean_boot_script=%release_root_dir%\bin\start_clean
set erlsrv="%bindir%\erlsrv.exe"
set epmd="%bindir%\epmd.exe"
set escript="%bindir%\escript.exe"
set werl="%bindir%\werl.exe"
set nodetool="%release_root_dir%\bin\nodetool"
set consolidated_dir=%rootdir%\lib\%rel_name%-%rel_vsn%\consolidated
set hook_dir=%rel_dir%\hooks
set command_dir=%rel_dir%\commands

:: Extract node type and name from vm.args
for /f "usebackq tokens=1-2" %%I in (`findstr /b "\-name \-sname" "%vm_args%"`) do (
  set node_type=%%I
  set node_name=%%J
)

:: Extract cookie from vm.args
for /f "usebackq tokens=1-2" %%I in (`findstr /b \-setcookie "%vm_args%"`) do (
  set cookie=%%J
)

:: Write the erl.ini file to set up paths relative to this script
call :write_ini

:: If a start.boot file is not present, copy one from the named .boot file
if not exist "%rel_dir%\start.boot" (
  copy "%rel_dir%\%rel_name%.boot" "%rel_dir%\start.boot" >nul
)

set taskname="%1"
shift /1
set args=

setlocal EnableDelayedExpansion
:parse_args
set param=%1
if "!param!"=="" goto :args_parsed
if "!largs!"=="" (
  set largs=%param%
) else (
  set largs=%largs% %param%
)
set "delim= "
shift /1
goto :parse_args
:args_parsed
endlocal & set args=%largs%

if %taskname%=="install" goto install
if %taskname%=="uninstall" goto uninstall
if %taskname%=="start" goto start
if %taskname%=="foreground" goto foreground
if %taskname%=="console" goto console
if %taskname%=="stop" goto stop
if %taskname%=="restart" call :stop && goto start
if %taskname%=="reboot" call :stop && goto start
if %taskname%=="reload_config" goto reload_config
if %taskname%=="upgrade" goto upgrade
if %taskname%=="downgrade" goto upgrade
if %taskname%=="attach" goto remote_console
if %taskname%=="remote_console" goto remote_console
if %taskname%=="pid" goto pid
if %taskname%=="ping" goto ping
if %taskname%=="pingpeer" goto pingpeer
if %taskname%=="escript" goto escript
if %taskname%=="rpc" goto rpc
if %taskname%=="rpcterms" goto rpcterms
if %taskname%=="eval" goto eval
if %taskname%=="command" goto command
if %taskname%=="describe" goto describe
if %taskname%=="" goto usage
if exist "%command_dir%\%taskname%.bat" (
  "%command_dir%\%taskname%.bat" %*
) else (
  echo Unknown command: %taskname%
)
goto :eof

:: Find the ERTS dir
:find_erts_dir
if "%erts_vsn%"=="" (
  call :use_system_erts
) else (
  call :use_bundled_erts
)
goto :eof

:: Load system ERTS info
:use_system_erts
for /f "delims=" %%i in ('where erl') do set system_erl="%%i"
if %system_erl%=="" (
  echo failed to locate the Erlang Runtime System!
  exit /b 1
)
set system_root_dir_cmd=%system_erl% -noshell -eval "io:format(\"~s\", [filename:nativename(code:root_dir())])." -s init stop
for /f "delims=" %%i in (`%%system_root_dir_cmd%%`) do set system_root=%%i
set system_erts_vsn_cmd=%system_erl% -noshell -eval "Ver=erlang:system_info(version),io:format(\"~s\", [Ver])" -s init stop
for /f "delims=" %%i in (`%%system_erts_vsn_cmd%%`) do set system_erts_vsn=%%i
set erl=%system_erl%
set erts_vsn=%system_erts_vsn%
set rootdir=%system_root%
set erts_dir=%rootdir%\erts-%erts_vsn%
goto :eof

:: Load bundled ERTS info
:use_bundled_erts
set erts_dir=%release_root_dir%\erts-%erts_vsn%
set erl=%erts_dir%\bin\erl
set rootdir=%release_root_dir%
goto :eof

:: Find the sys.config file
:find_sys_config
set possible_sys=%release_config_dir%\sys.config
if exist %possible_sys% (
  set sys_config_src=%possible_sys%
) else (
  set sys_config_src=%rel_dir%\sys.config
)
set sys_config_target=%config_dir%\sys.config
:: Replace environment variables
powershell -command "$content = get-content %sys_config_src%; [regex]::matches($content, '\${[\w\d_-]+}') | foreach { $content = $content.Replace($_.value, [System.Environment]::GetEnvironmentVariable($_.value)) }; out-file -filepath %sys_config_target% -inputobject $content -encoding ascii"
set sys_config=%sys_config_target%
goto :eof

:find_vm_args
set possible_vmargs=%release_config_dir%\vm.args
if exist %possible_vmargs% (
  set vmargs_src=%possible_vmargs%
) else (
  set vmargs_src=%rel_dir%\vm.args
)
set vmargs_target=%config_dir%\vm.args
:: Replace environment variables
powershell -command "$content = get-content %vmargs_src%; [regex]::matches($content, '\${[\w\d_-]+}') | foreach { $content = $content.Replace($_.value, [System.Environment]::GetEnvironmentVariable($_.value)) }; out-file -filepath %vmargs_target% -inputobject $content -encoding ascii"
set vm_args=%vmargs_target%
goto :eof

:: set boot_script variable
:set_boot_script_var
if exist %rel_dir%\%rel_name%.boot (
  set boot_script=%rel_dir%\%rel_name%
) else (
  set boot_script=%rel_dir%\start
)
goto :eof

:: Write the erl.ini file
:write_ini
set erl_ini=%erts_dir%\bin\erl.ini
set converted_bindir=%bindir:\=\\%
set converted_rootdir=%rootdir:\=\\%
echo [erlang] > "%erl_ini%"
echo Bindir=%converted_bindir% >> "%erl_ini%"
echo Progname=%progname% >> "%erl_ini%"
echo Rootdir=%converted_rootdir% >> "%erl_ini%"
goto :eof

:: Display usage information
:usage
echo Usage: %~n0 ^<task^>
echo.
echo Service Control
echo =====================
echo install                             # installs the release as a service
echo uninstall                           # uninstalls the release service
echo start                               # starts the service
echo start_boot                          # not implemented
echo foreground                          # start the release in the foreground
echo console                             # run the release in a local shell
echo console_clean                       # not implemented
echo stop                                # stops the service
echo restart                             # restarts the release service
echo reboot                              # alias for restart on Windows
echo reload_config                       # reload the current system's configuration from disk
echo.
echo Upgrades
echo =====================
echo upgrade ^<version^>                   # upgrade the current release service
echo downgrade ^<version^>                 # downgrade the current release service
echo.
echo Utilities
echo =====================
echo attach                              # alias for remote_console on Windows
echo remote_console                      # open a remote console connected to the release
echo pid                                 # get the process id of the running release
echo ping                                # ping the current release service, pong is returned if ok
echo pingpeer ^<peer^>                     # check if a peer node is running, pong is returned if ok
echo escript ^<file^>                      # execute an escript
echo rpc ^<mod^> ^<fun^> ^[^<args..^>^]          # execute an RPC call using the given MFA
echo rpcterms ^<mod^> ^<fun^> ^[^<expr^>^]       # execute an RPC call using the given Erlang expr for args
echo eval ^<expr^>                         # execute the given Erlang expr on the running node
echo command ^<mod^> ^<fun^> ^[^<args..^>^]      # execute the given module/function in a clean VM
echo describe                            # list details about the release
echo.
echo Custom Commands
echo ======================
for %%i in (%command_dir%\*.bat) do (
  echo %%~ni
)
goto :eof

:: Install the release as a Windows service
:: or install the specified version passed as argument
:install
setlocal EnableDelayedExpansion
set service_args=%erl_opts% -setcookie "!cookie!" ^
       -pa "%consolidated_dir%" ++ ^
       -rootdir "%rootdir%" ^
       -reldir "%release_root_dir%\releases"
set start_erl=%erts_dir%\bin\start_erl.exe
set description=Erlang node %node_name% in %rootdir%
if "" == "%args%" (
  :: Install the service
  %erlsrv% add %service_name% ^
            -c "%description%" ^
            %node_type% "%node_name%" ^
            -w "%mutable_dir%" ^
            -m "%start_erl%" ^
            -args "!service_args!" ^
            -debugtype new ^
            -stopaction "init:stop()."
  endlocal
) else (
  :: relup and reldown
  endlocal
  goto upgrade
)
goto :eof

:: Uninstall the Windows service
:uninstall
%erlsrv% remove %service_name%
%epmd% -kill
goto :eof

:: Start the Windows service
:start
call :pre_configure_hooks
call :post_configure_hooks
call :pre_start_hooks
%erlsrv% start %service_name%
call :post_start_hooks
goto :eof

:: Stop the Windows service
:stop
call :pre_stop_hooks
%erlsrv% stop %service_name%
call :post_stop_hooks
goto :eof

:: Upgrade this release
:upgrade
setlocal EnableDelayedExpansion
if "" == "%args%" (
  echo Missing version argument
  echo Usage: %rel_name% %taskname% {version}
  set ERRORLEVEL=1
  exit /b %ERRORLEVEL%
)
set source_version=%rel_vsn%
set target_version=%args%
:: Unpack
%escript% "%release_root_dir%\bin\release_utils.escript" ^
    unpack_release %rel_name% "%node_type%" "%node_name%" "!cookie!" "%target_version%"
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
:: Update env
set rel_vsn=%target_version%
set rel_dir=%release_root_dir\releases\%target_version%
:: TODO: init_configs
if exist "%rel_dir%\sys.config.bak" do (
  move /Y "%rel_dir%\sys.config.bak" "%rel_dir%\sys.config"
)
if exist "%rel_dir%\vm.args.bak" do (
  move /Y "%rel_dir%\vm.args.bak" "%rel_dir%\vm.args"
)
copy /B /Y "%rel_dir%/sys.config" "%rel_dir%\sys.config.bak"
copy /B /Y "%rel_dir%/vm.args" "%rel_dir%\vm.args.bak"
copy /B /Y "%sys_config" "%rel_dir%/sys.config"
copy /B /Y "%vm_args%" "%rel_dir%/vm.args"
:: Run pre hooks
call :pre_configure_hooks
call :post_configure_hooks
call :pre_upgrade_hooks
:: Perform upgrade
%escript% "%rootdir%/bin/release_utils.escript" ^
    install_release "%rel_name%" "%node_type%" "%node_name%" "!cookie!" "%target_version%"
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
:: Cleanup
move /Y "%rel_dir%\sys.config.bak" "%rel_dir%\sys.config"
move /Y "%rel_dir%\vm.args.bak" "%rel_dir%\vm.args"
:: Run post hooks
call :post_upgrade_hooks
endlocal
goto :eof

:: Start a console
:console
call :pre_configure_hooks
call :post_configure_hooks
call :pre_start_hooks
start "%rel_name% console" %werl% -boot "%boot_script%" ^
       -config "%sys_config%"  ^
       -args_file "%vm_args%" ^
       -user Elixir.IEx.CLI ^
       -extra --no-halt +iex
goto :eof

:: Start the release in the foreground
:foreground
call :pre_configure_hooks
call :post_configure_hooks
call :pre_start_hooks
set EMU=beam
set PROGNAME=%~n0
start "" /B "%erl%" -noshell -noinput +Bd ^
       -boot "%boot_script%" ^
       -boot_var ERTS_LIB_DIR "%erts_dir%\..\lib" ^
       -env ERL_LIBS "%release_root_dir%\lib%" ^
       -pa "%consolidated_dir%" ^
       -args_file "%vm_args%" ^
       -config "%sys_config%" ^
       %erl_opts% ^
       -extra %extra_opts%
call :set_pid
call :post_start_hooks

:wait_for_exit
tasklist /FI "PID eq %pid%" | find /I "erl.exe" > nul
if %ERRORLEVEL% geq 1 (
  :: Process has shutdown
  call :post_stop_hooks
) else (
  timeout /T 5 /nobreak > nul
  goto :wait_for_exit
)
goto :eof

:: Ping the running node
:ping
setlocal EnableDelayedExpansion
%escript% %nodetool% ping %node_type% "%node_name%" -setcookie "!cookie!"
endlocal
goto :eof

:: Ping a peer node
:: Ping a peer node
:pingpeer
setlocal EnableDelayedExpansion
if "%args"=="" (
  echo "Peer name is required!"
  exit /b 1
) else (
  %escript% %nodetool% ping %node_type% "%args%" -setcookie "!cookie!"
)
endlocal
goto :eof

:: Execute an escript
:escript
%escript% %args%
goto :eof

:: Execute an RPC command
:rpc
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
%escript% %nodetool% rpc %node_type% %node_name% -setcookie "!cookie!" %args%
endlocal
goto :eof

:: Execute an RPC command where args are expressed
:: in the form of an Erlang expression
:rpcterms
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
%escript% %nodetool% rpcterms %node_type% %node_name% -setcookie "!cookie!" %args%
endlocal
goto :eof

:: Eval an expression on the running node
:eval
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
%escript% %nodetool% eval %node_type% %node_name% -setcookie "!cookie!" !args!
endlocal
goto :eof

:: Execute a command in a clean Erlang VM
:command
setlocal EnableDelayedExpansion
for /f "tokens=1-2*" %%a in ("%args%") do (
  set module=%%a
  set function=%%b
  set command_args=%%c
)
%erl% -boot_var ERTS_LIB_DIR "%erts_dir%\..\lib" ^
       -config %sys_config% ^
       -hidden -noshell -boot start_clean ^
       -pa "%consolidated_dir%" ^
       -s %module% %function% -s init stop ^
       -extra %command_args%
endlocal
goto :eof

:: Get the process id of the running node
:pid
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
%escript% %nodetool% eval %node_type% %node_name% -setcookie "!cookie!" "erlang:list_to_integer(os:getpid())."
endlocal
goto :eof

:set_pid
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
set get_pid_cmd=%escript% %nodetool% eval %node_type% %node_name% -setcookie "!cookie!" "erlang:list_to_integer(os:getpid())."
for /f "usebackq delims=" %%i in (`%%get_pid_cmd%%`) do set pid=%%i
endlocal & set pid=%pid%
goto :eof

:: Reload the running configuration
:reload_config
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
call :pre_configure_hooks
call :post_configure_hooks
setlocal EnableDelayedExpansion
%escript% %nodetool% reload_config %node_type% %node_name% -setcookie "!cookie!" "%sys_config%"
endlocal
goto :eof

:: Describe this release
:describe
setlocal EnableDelayedExpansion
echo Service Information
echo =====================
%erlsrv% list %service_name%
echo.
echo Release Metadata
echo =====================
echo ERTS                %erts_vsn%
echo Release Directory   %rel_dir%
echo Config File         %sys_config%
echo Args File           %vm_args%
echo Name Type           %node_type%
echo Node Name           %node_name%
echo Node Cookie         !cookie!
echo Extra Opts          %erl_opts%
echo.
echo Hooks:
for %%i in (%hook_dir%\*.d\*.bat) do (
  echo %%i
)
echo.
echo Commands:
for %%i in (%command_dir%\*.bat) do (
  echo %%i
)
endlocal
goto :eof

:: Remote shell to a running node
:remote_console
call :ping
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
set id=remsh%RANDOM%-%node_name%
start "%node_name% attach" %werl% -hidden -noshell -boot "%clean_boot_script%" ^
       -user Elixir.IEx.CLI %node_type% %id% -setcookie "!cookie!" ^
       -extra --no-halt +iex -%node_type% %id% --cookie "!cookie!" --remsh %node_name%
endlocal
goto :eof

:: Hook helpers
:execute_hooks
for /r "%hook_dir%\%1.d" %%f in (*.bat) do (
  echo Running %1 hook: %%f
  %%f
  if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
)
goto :eof

:pre_configure_hooks
call :execute_hooks pre_configure
goto :eof

:post_configure_hooks
call :execute_hooks post_configure
goto :eof

:pre_start_hooks
call :execute_hooks pre_start
goto :eof

:post_start_hooks
call :execute_hooks post_start
goto :eof

:pre_stop_hooks
call :execute_hooks pre_stop
goto :eof

:post_stop_hooks
call :execute_hooks post_stop
goto :eof

:pre_upgrade_hooks
call :execute_hooks pre_upgrade
goto :eof

:post_upgrade_hooks
call :execute_hooks post_upgrade
goto :eof

:: This batch file handles managing an Erlang node as a Windows service.
::
:: Check the :usage section for information about what this script provides

@echo off

:: Set variables that describe the release
set rel_name=<%= release_name %>
set rel_vsn=<%= release_version %>
set erts_vsn=<%= erts_vsn %>
set erl_opts=<%= erl_opts %>

:: Discover the release root directory from the directory
:: of this script
set script_dir=%~dp0
for %%A in ("%script_dir%\..\..") do (
  set release_root_dir=%%~fA
)
set rel_dir=%release_root_dir%\releases\%rel_vsn%

if "%RELEASE_MUTABLE_DIR%"=="" (
  set mutable_dir=%release_root_dir%\var
) else (
  set mutable_dir=%RELEASE_MUTABLE_DIR%
)

if "%RELEASE_CONFIG_DIR%"=="" (
  set config_dir=%release_root_dir%
) else (
  set config_dir=%RELEASE_CONFIG_DIR%
)

set log_dir=%mutable_dir%\log

:: Create directories which don't exist
if not exist %mutable_dir% mkdir %mutable_dir%
if not exist %config_dir% mkdir %config_dir%
if not exist %log_dir% mkdir %log_dir%

call :find_erts_dir
call :find_sys_config
call :find_vm_args
call :set_boot_script_var

set service_name=%rel_name%_%rel_vsn%
set bindir=%erts_dir%\bin
set progname=erl.exe
set clean_boot_script=%release_root_dir%\bin\start_clean
set erlsrv="%bindir%\erlsrv.exe"
set epmd="%bindir%\epmd.exe"
set escript="%bindir%\escript.exe"
set werl="%bindir%\werl.exe"
set nodetool="%release_root_dir%\bin\nodetool"
set consolidated_dir=%rootdir%\lib\%rel_name%-%rel_vsn%\consolidated
set hook_dir=%rel_dir%\hooks
set command_dir=%rel_dir%\commands

:: Extract node type and name from vm.args
for /f "usebackq tokens=1-2" %%I in (`findstr /b "\-name \-sname" "%vm_args%"`) do (
  set node_type=%%I
  set node_name=%%J
)

:: Extract cookie from vm.args
for /f "usebackq tokens=1-2" %%I in (`findstr /b \-setcookie "%vm_args%"`) do (
  set cookie=%%J
)

:: Write the erl.ini file to set up paths relative to this script
call :write_ini

:: If a start.boot file is not present, copy one from the named .boot file
if not exist "%rel_dir%\start.boot" (
  copy "%rel_dir%\%rel_name%.boot" "%rel_dir%\start.boot" >nul
)

set taskname="%1"
shift /1
set args=

setlocal EnableDelayedExpansion
:parse_args
set param=%1
if "!param!"=="" goto :args_parsed
if "!largs!"=="" (
  set largs=%param%
) else (
  set largs=%largs% %param%
)
set "delim= "
shift /1
goto :parse_args
:args_parsed
endlocal & set args=%largs%

if %taskname%=="install" goto install
if %taskname%=="uninstall" goto uninstall
if %taskname%=="start" goto start
if %taskname%=="foreground" goto foreground
if %taskname%=="console" goto console
if %taskname%=="stop" goto stop
if %taskname%=="restart" call :stop && goto start
if %taskname%=="reboot" call :stop && goto start
if %taskname%=="reload_config" goto reload_config
if %taskname%=="upgrade" goto upgrade
if %taskname%=="downgrade" goto upgrade
if %taskname%=="attach" goto remote_console
if %taskname%=="remote_console" goto remote_console
if %taskname%=="pid" goto pid
if %taskname%=="ping" goto ping
if %taskname%=="pingpeer" goto pingpeer
if %taskname%=="escript" goto escript
if %taskname%=="rpc" goto rpc
if %taskname%=="rpcterms" goto rpcterms
if %taskname%=="eval" goto eval
if %taskname%=="command" goto command
if %taskname%=="describe" goto describe
if %taskname%=="" goto usage
if exist "%command_dir%\%taskname%.bat" (
  "%command_dir%\%taskname%.bat" %*
) else (
  echo Unknown command: %taskname%
)
goto :eof

:: Find the ERTS dir
:find_erts_dir
if "%erts_vsn%"=="" (
  call :use_system_erts
) else (
  call :use_bundled_erts
)
goto :eof

:: Load system ERTS info
:use_system_erts
for /f "delims=" %%i in ('where erl') do set system_erl="%%i"
if %system_erl%=="" (
  echo failed to locate the Erlang Runtime System!
  exit /b 1
)
set system_root_dir_cmd=%system_erl% -noshell -eval "io:format(\"~s\", [filename:nativename(code:root_dir())])." -s init stop
for /f "delims=" %%i in (`%%system_root_dir_cmd%%`) do set system_root=%%i
set system_erts_vsn_cmd=%system_erl% -noshell -eval "Ver=erlang:system_info(version),io:format(\"~s\", [Ver])" -s init stop
for /f "delims=" %%i in (`%%system_erts_vsn_cmd%%`) do set system_erts_vsn=%%i
set erl=%system_erl%
set erts_vsn=%system_erts_vsn%
set rootdir=%system_root%
set erts_dir=%rootdir%\erts-%erts_vsn%
goto :eof

:: Load bundled ERTS info
:use_bundled_erts
set erts_dir=%release_root_dir%\erts-%erts_vsn%
set erl=%erts_dir%\bin\erl
set rootdir=%release_root_dir%
goto :eof

:: Find the sys.config file
:find_sys_config
set possible_sys=%release_config_dir%\sys.config
if exist %possible_sys% (
  set sys_config_src=%possible_sys%
) else (
  set sys_config_src=%rel_dir%\sys.config
)
set sys_config_target=%config_dir%\sys.config
:: Replace environment variables
powershell -command "$content = get-content %sys_config_src%; [regex]::matches($content, '\${[\w\d_-]+}') | foreach { $content = $content.Replace($_.value, [System.Environment]::GetEnvironmentVariable($_.value)) }; out-file -filepath %sys_config_target% -inputobject $content -encoding ascii"
set sys_config=%sys_config_target%
goto :eof

:find_vm_args
set possible_vmargs=%release_config_dir%\vm.args
if exist %possible_vmargs% (
  set vmargs_src=%possible_vmargs%
) else (
  set vmargs_src=%rel_dir%\vm.args
)
set vmargs_target=%config_dir%\vm.args
:: Replace environment variables
powershell -command "$content = get-content %vmargs_src%; [regex]::matches($content, '\${[\w\d_-]+}') | foreach { $content = $content.Replace($_.value, [System.Environment]::GetEnvironmentVariable($_.value)) }; out-file -filepath %vmargs_target% -inputobject $content -encoding ascii"
set vm_args=%vmargs_target%
goto :eof

:: set boot_script variable
:set_boot_script_var
if exist %rel_dir%\%rel_name%.boot (
  set boot_script=%rel_dir%\%rel_name%
) else (
  set boot_script=%rel_dir%\start
)
goto :eof

:: Write the erl.ini file
:write_ini
set erl_ini=%erts_dir%\bin\erl.ini
set converted_bindir=%bindir:\=\\%
set converted_rootdir=%rootdir:\=\\%
echo [erlang] > "%erl_ini%"
echo Bindir=%converted_bindir% >> "%erl_ini%"
echo Progname=%progname% >> "%erl_ini%"
echo Rootdir=%converted_rootdir% >> "%erl_ini%"
goto :eof

:: Display usage information
:usage
echo Usage: %~n0 ^<task^>
echo.
echo Service Control
echo =====================
echo install                             # installs the release as a service
echo uninstall                           # uninstalls the release service
echo start                               # starts the service
echo start_boot                          # not implemented
echo foreground                          # start the release in the foreground
echo console                             # run the release in a local shell
echo console_clean                       # not implemented
echo stop                                # stops the service
echo restart                             # restarts the release service
echo reboot                              # alias for restart on Windows
echo reload_config                       # reload the current system's configuration from disk
echo.
echo Upgrades
echo =====================
echo upgrade ^<version^>                   # upgrade the current release service
echo downgrade ^<version^>                 # downgrade the current release service
echo.
echo Utilities
echo =====================
echo attach                              # alias for remote_console on Windows
echo remote_console                      # open a remote console connected to the release
echo pid                                 # get the process id of the running release
echo ping                                # ping the current release service, pong is returned if ok
echo pingpeer ^<peer^>                     # check if a peer node is running, pong is returned if ok
echo escript ^<file^>                      # execute an escript
echo rpc ^<mod^> ^<fun^> ^[^<args..^>^]          # execute an RPC call using the given MFA
echo rpcterms ^<mod^> ^<fun^> ^[^<expr^>^]       # execute an RPC call using the given Erlang expr for args
echo eval ^<expr^>                         # execute the given Erlang expr on the running node
echo command ^<mod^> ^<fun^> ^[^<args..^>^]      # execute the given module/function in a clean VM
echo describe                            # list details about the release
echo.
echo Custom Commands
echo ======================
for %%i in (%command_dir%\*.bat) do (
  echo %%~ni
)
goto :eof

:: Install the release as a Windows service
:: or install the specified version passed as argument
:install
setlocal EnableDelayedExpansion
set service_args=%erl_opts% -setcookie "!cookie!" ++ ^
       -rootdir "%rootdir%" ^
       -reldir "%release_root_dir%\releases"
set start_erl=%erts_dir%\bin\start_erl.exe
set description=Erlang node %node_name% in %rootdir%
if "" == "%args%" (
  :: Install the service
  %erlsrv% add %service_name% ^
            -c "%description%" ^
            %node_type% "%node_name%" ^
            -w "%mutable_dir%" ^
            -m "%start_erl%" ^
            -args "!service_args!" ^
            -debugtype new ^
            -stopaction "init:stop()."
  endlocal
) else (
  :: relup and reldown
  endlocal
  goto upgrade
)
goto :eof

:: Uninstall the Windows service
:uninstall
%erlsrv% remove %service_name%
%epmd% -kill
goto :eof

:: Start the Windows service
:start
call :pre_configure_hooks
call :post_configure_hooks
call :pre_start_hooks
%erlsrv% start %service_name%
call :post_start_hooks
goto :eof

:: Stop the Windows service
:stop
call :pre_stop_hooks
%erlsrv% stop %service_name%
call :post_stop_hooks
goto :eof

:: Upgrade this release
:upgrade
setlocal EnableDelayedExpansion
if "" == "%args%" (
  echo Missing version argument
  echo Usage: %rel_name% %taskname% {version}
  set ERRORLEVEL=1
  exit /b %ERRORLEVEL%
)
set source_version=%rel_vsn%
set target_version=%args%
:: Unpack
%escript% "%release_root_dir%\bin\release_utils.escript" ^
    unpack_release %rel_name% "%node_type%" "%node_name%" "!cookie!" "%target_version%"
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
:: Update env
set rel_vsn=%target_version%
set rel_dir=%release_root_dir\releases\%target_version%
:: TODO: init_configs
if exist "%rel_dir%\sys.config.bak" do (
  move /Y "%rel_dir%\sys.config.bak" "%rel_dir%\sys.config"
)
if exist "%rel_dir%\vm.args.bak" do (
  move /Y "%rel_dir%\vm.args.bak" "%rel_dir%\vm.args"
)
copy /B /Y "%rel_dir%/sys.config" "%rel_dir%\sys.config.bak"
copy /B /Y "%rel_dir%/vm.args" "%rel_dir%\vm.args.bak"
copy /B /Y "%sys_config" "%rel_dir%/sys.config"
copy /B /Y "%vm_args%" "%rel_dir%/vm.args"
:: Run pre hooks
call :pre_configure_hooks
call :post_configure_hooks
call :pre_upgrade_hooks
:: Perform upgrade
%escript% "%rootdir%/bin/release_utils.escript" ^
    install_release "%rel_name%" "%node_type%" "%node_name%" "!cookie!" "%target_version%"
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
:: Cleanup
move /Y "%rel_dir%\sys.config.bak" "%rel_dir%\sys.config"
move /Y "%rel_dir%\vm.args.bak" "%rel_dir%\vm.args"
:: Run post hooks
call :post_upgrade_hooks
endlocal
goto :eof

:: Start a console
:console
call :pre_configure_hooks
call :post_configure_hooks
call :pre_start_hooks
start "%rel_name% console" %werl% -boot "%boot_script%" ^
       -config "%sys_config%"  ^
       -args_file "%vm_args%" ^
       -user Elixir.IEx.CLI ^
       -extra --no-halt +iex
goto :eof

:: Start the release in the foreground
:foreground
call :pre_configure_hooks
call :post_configure_hooks
call :pre_start_hooks
set EMU=beam
set PROGNAME=%~n0
start "" /B "%erl%" -noshell -noinput +Bd ^
       -boot "%boot_script%" ^
       -boot_var ERTS_LIB_DIR "%erts_dir%\..\lib" ^
       -env ERL_LIBS "%release_root_dir%\lib%" ^
       -pa "%consolidated_dir%" ^
       -args_file "%vm_args%" ^
       -config "%sys_config%" ^
       %erl_opts% ^
       -extra %extra_opts%
call :set_pid
call :post_start_hooks

:wait_for_exit
tasklist /FI "PID eq %pid%" | find /I "erl.exe" > nul
if %ERRORLEVEL% geq 1 (
  :: Process has shutdown
  call :post_stop_hooks
) else (
  timeout /T 5 /nobreak > nul
  goto :wait_for_exit
)
goto :eof

:: Ping the running node
:ping
setlocal EnableDelayedExpansion
%escript% %nodetool% ping %node_type% "%node_name%" -setcookie "!cookie!"
endlocal
goto :eof

:: Ping a peer node
:: Ping a peer node
:pingpeer
setlocal EnableDelayedExpansion
if "%args"=="" (
  echo "Peer name is required!"
  exit /b 1
) else (
  %escript% %nodetool% ping %node_type% "%args%" -setcookie "!cookie!"
)
endlocal
goto :eof

:: Execute an escript
:escript
%escript% %args%
goto :eof

:: Execute an RPC command
:rpc
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
%escript% %nodetool% rpc %node_type% %node_name% -setcookie "!cookie!" %args%
endlocal
goto :eof

:: Execute an RPC command where args are expressed
:: in the form of an Erlang expression
:rpcterms
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
%escript% %nodetool% rpcterms %node_type% %node_name% -setcookie "!cookie!" %args%
endlocal
goto :eof

:: Eval an expression on the running node
:eval
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
%escript% %nodetool% eval %node_type% %node_name% -setcookie "!cookie!" !args!
endlocal
goto :eof

:: Execute a command in a clean Erlang VM
:command
setlocal EnableDelayedExpansion
for /f "tokens=1-2*" %%a in ("%args%") do (
  set module=%%a
  set function=%%b
  set command_args=%%c
)
%erl% -boot_var ERTS_LIB_DIR "%erts_dir%\..\lib" ^
       -config %sys_config% ^
       -hidden -noshell -boot start_clean ^
       -pa "%consolidated_dir%" ^
       -s %module% %function% -s init stop ^
       -extra %command_args%
endlocal
goto :eof

:: Get the process id of the running node
:pid
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
%escript% %nodetool% eval %node_type% %node_name% -setcookie "!cookie!" "erlang:list_to_integer(os:getpid())."
endlocal
goto :eof

:set_pid
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
set get_pid_cmd=%escript% %nodetool% eval %node_type% %node_name% -setcookie "!cookie!" "erlang:list_to_integer(os:getpid())."
for /f "usebackq delims=" %%i in (`%%get_pid_cmd%%`) do set pid=%%i
endlocal & set pid=%pid%
goto :eof

:: Reload the running configuration
:reload_config
call :ping>NUL
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
call :pre_configure_hooks
call :post_configure_hooks
setlocal EnableDelayedExpansion
%escript% %nodetool% reload_config %node_type% %node_name% -setcookie "!cookie!" "%sys_config%"
endlocal
goto :eof

:: Describe this release
:describe
setlocal EnableDelayedExpansion
echo Service Information
echo =====================
%erlsrv% list %service_name%
echo.
echo Release Metadata
echo =====================
echo ERTS                %erts_vsn%
echo Release Directory   %rel_dir%
echo Config File         %sys_config%
echo Args File           %vm_args%
echo Name Type           %node_type%
echo Node Name           %node_name%
echo Node Cookie         !cookie!
echo Extra Opts          %erl_opts%
echo.
echo Hooks:
for %%i in (%hook_dir%\*.d\*.bat) do (
  echo %%i
)
echo.
echo Commands:
for %%i in (%command_dir%\*.bat) do (
  echo %%i
)
endlocal
goto :eof

:: Remote shell to a running node
:remote_console
call :ping
if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
setlocal EnableDelayedExpansion
set id=remsh%RANDOM%-%node_name%
start "%node_name% attach" %werl% -hidden -noshell -boot "%clean_boot_script%" ^
       -user Elixir.IEx.CLI %node_type% %id% -setcookie "!cookie!" ^
       -extra --no-halt +iex -%node_type% %id% --cookie "!cookie!" --remsh %node_name%
endlocal
goto :eof

:: Hook helpers
:execute_hooks
for /r "%hook_dir%\%1.d" %%f in (*.bat) do (
  echo Running %1 hook: %%f
  %%f
  if %ERRORLEVEL% GEQ 1 exit /b %ERRORLEVEL%
)
goto :eof

:pre_configure_hooks
call :execute_hooks pre_configure
goto :eof

:post_configure_hooks
call :execute_hooks post_configure
goto :eof

:pre_start_hooks
call :execute_hooks pre_start
goto :eof

:post_start_hooks
call :execute_hooks post_start
goto :eof

:pre_stop_hooks
call :execute_hooks pre_stop
goto :eof

:post_stop_hooks
call :execute_hooks post_stop
goto :eof

:pre_upgrade_hooks
call :execute_hooks pre_upgrade
goto :eof

:post_upgrade_hooks
call :execute_hooks post_upgrade
goto :eof


Add audio control back

Add audio control back

<%= link(@episode.podcast.title, to: podcast_url(@conn, @episode.podcast)) %>

<%= @episode.title %>

          <img src="<%= podcast_image(@conn, @episode.podcast, :large) %>" height="300" width="300">

<%= @episode.pub_date |> format_date %>

        <%= Podcatcher.Web.ComponentsView.render "categories.html", conn: @conn, categories: @episode.podcast.categories %>

          <%= for keyword <- keywords(@episode.keywords) do %>
          <%= link raw(" #{keyword}"), to: episodes_path(@conn, :search, q: keyword), class: "label secondary" %>
          <% end %>

          <%= Podcatcher.Web.ComponentsView.render "download_button.html", conn: @conn, episode: @episode %>
          <%= Podcatcher.Web.ComponentsView.render "bookmark_button.html", conn: @conn, episode: @episode %>
          <%= Podcatcher.Web.ComponentsView.render "subscribe_button.html", conn: @conn, podcast: @episode.podcast %>

          <%= if @episode.explicit or @episode.podcast.explicit do %>
           Explicit
          <% end %>
          <%= unless @episode.link == "" do %><a class="label" href="<%= @episode.link %>"> Link
<% end %>
          <a class="label" href="<%= @episode.podcast.website %>"> Website
          <a class="label" href="<%= @episode.podcast.rss_feed %>"> RSS

        <%= if @episode.podcast.copyright do %>

          © <%= @episode.podcast.copyright %>

        <% end %>

    <audio controls>
      <source src="<%= safe_protocol(@episode.content_url) %>" type="<%= audio_mimetype(@episode.content_url) %>">
    </audio>

<form method="GET" action="<%= podcast_url(@conn, @episode.podcast) %>">

    <input class="input-group-field" type="search" name="q" placeholder="Find other episodes in this podcast">

  <button type="submit" class="button primary expanded"> Find other episodes</button>
</form>

<%= if @episode.podcast.description do %>

 <%= @episode.podcast.description |> markdown %>

<% end %>

  <%= (@episode.description || @episode.summary) |> markdown %>

<%= link(@episode.podcast.title, to: podcast_url(@conn, @episode.podcast)) %>

<%= @episode.title %>

          <img src="<%= podcast_image(@conn, @episode.podcast, :large) %>" height="300" width="300">

<%= @episode.pub_date |> format_date %>

        <%= Podcatcher.Web.ComponentsView.render "categories.html", conn: @conn, categories: @episode.podcast.categories %>

          <%= for keyword <- keywords(@episode.keywords) do %>
          <%= link raw(" #{keyword}"), to: episodes_path(@conn, :search, q: keyword), class: "label secondary" %>
          <% end %>

          <%= Podcatcher.Web.ComponentsView.render "download_button.html", conn: @conn, episode: @episode %>
          <%= Podcatcher.Web.ComponentsView.render "bookmark_button.html", conn: @conn, episode: @episode %>
          <%= Podcatcher.Web.ComponentsView.render "subscribe_button.html", conn: @conn, podcast: @episode.podcast %>

          <%= if @episode.explicit or @episode.podcast.explicit do %>
           Explicit
          <% end %>
          <%= unless @episode.link == "" do %><a class="label" href="<%= @episode.link %>"> Link
<% end %>
          <a class="label" href="<%= @episode.podcast.website %>"> Website
          <a class="label" href="<%= @episode.podcast.rss_feed %>"> RSS

        <%= if @episode.podcast.copyright do %>

          © <%= @episode.podcast.copyright %>

        <% end %>

<form method="GET" action="<%= podcast_url(@conn, @episode.podcast) %>">

    <input class="input-group-field" type="search" name="q" placeholder="Find other episodes in this podcast">

  <button type="submit" class="button primary expanded"> Find other episodes</button>
</form>

<%= if @episode.podcast.description do %>

 <%= @episode.podcast.description |> markdown %>

<% end %>

  <%= (@episode.description || @episode.summary) |> markdown %>


Optimized VM.args for containers

Optimized VM.args for containers

## Name of the node
-name <%= release_name %>@${POD_IP}

## Cookie for distributed erlang
-setcookie ${ERLANG_COOKIE}

## Enable kernel poll (good when many file descriptors is in use)
+K true

# Set few async threads in pool on VM start (good for IO operations)
+A 15

# Double the default maximum ports value
+Q 131072

# Bind shedulers to CPU's (good when there are no other processes in OS that bind to processors)
+stbt db

# Disable schedulers compaction of load (don't disable schedulers that is out of work)
+scl false

# Enable port parallelism (good for parallelism, bad for latency)
+spp true

# Doubles the distribution buffer busy limit (good for latency, increases memory consumption)
+zdbbl 2048

# Tweak GC to run more often
#-env ERL_FULLSWEEP_AFTER 10

# Enable SMP automatically based on availability
-smp auto

# Set min and max ports for EPMD
-kernel inet_dist_listen_min ${LISTEN_DIST_MIN} inet_dist_listen_max ${LISTEN_DIST_MAX}

## Name of the node
-name <%= release_name %>@${POD_IP}

## Cookie for distributed erlang
-setcookie ${ERLANG_COOKIE}

## Heartbeat management; auto-restarts VM if it dies or becomes unresponsive
## (Disabled by default..use with caution!)
##-heart

## Enable kernel poll and a few async threads
##+K true
##+A 5

## Increase number of concurrent ports/sockets
##-env ERL_MAX_PORTS 4096

## Tweak GC to run more often
##-env ERL_FULLSWEEP_AFTER 10

# Enable SMP automatically based on availability
-smp auto

-kernel inet_dist_listen_min ${LISTEN_DIST_MIN} inet_dist_listen_max ${LISTEN_DIST_MAX}