Compare commits
10 commits
53822b241a
...
644a906945
Author | SHA1 | Date | |
---|---|---|---|
644a906945 | |||
56a38b63b2 | |||
be40df4abc | |||
0f530dfbba | |||
24decfd955 | |||
272be07f0f | |||
24590b299d | |||
c07bfb70d1 | |||
ce85ef590e | |||
23e7d09877 |
25 changed files with 371 additions and 73 deletions
|
@ -92,13 +92,14 @@ button a:hover {
|
|||
text-decoration: none; }
|
||||
|
||||
blockquote {
|
||||
font-size: 23px;
|
||||
font-family: "Times New Roman", Times, serif;
|
||||
border: none;
|
||||
padding: 0;
|
||||
height: 130px;
|
||||
margin: 0 0 30px;
|
||||
line-height: 28px; }
|
||||
blockquote p {
|
||||
font-size: 23px;
|
||||
font-family: "Times New Roman", Times, serif; }
|
||||
blockquote:before {
|
||||
content: '“';
|
||||
font-family: "Times New Roman", Times, serif;
|
||||
|
@ -332,6 +333,13 @@ blockquote {
|
|||
right: 0;
|
||||
bottom: 0;
|
||||
max-width: 20vw; }
|
||||
.about-us-page .section-1 .member-description p {
|
||||
padding-top: 0;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
.about-us-page .section-1 .member-description a {
|
||||
color: #000;
|
||||
}
|
||||
.about-us-page .section-2 {
|
||||
color: #141a24;
|
||||
background-color: #FFF;
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 226 KiB |
Binary file not shown.
Before Width: | Height: | Size: 45 KiB |
|
@ -1,3 +1 @@
|
|||
<p class="header">Contact us</p>
|
||||
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean posuere, tortor vitae dignissim elementum, dolor nulla semper felis, vitae feugiat tellus diam quis purus. Ut id nulla magna.
|
||||
|
|
12
pages/funding.md
Normal file
12
pages/funding.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
## Funding
|
||||
|
||||
At Robur our focus is on the software we develop. We are passionate about our work and believe in the importance of creating and maintaining secure digital infrastructure.
|
||||
|
||||
We get our funding through three avenues: grants for particular open-source projects, contracts for specific work including development and auditing, and public donations that help allow us to continue the work that isn't otherwise funded.
|
||||
|
||||
We spend most of our funding on salaries, ensuring Robur keeps developing the software we think is important. We do not spend money on fancy parties or first class business trips. Our general breakdown of spending per year is:
|
||||
- 83% on salaries
|
||||
- 7% on necessary travel
|
||||
- 10% on inecitable adminitrative costs
|
||||
|
||||
If you are considering donating to us, hiring us, or giving us a grant you can be assured your money will be well spent on the actual end result of delivering the robust and secure digital infrastructure we strive for.
|
9
pages/network.md
Normal file
9
pages/network.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
## Network
|
||||
|
||||
![center-for-cultivation-of-technology](../images/center_for_cultivation_of_technology.png)
|
||||
|
||||
**THE CENTER FOR THE CULTIVATION OF TECHNOLOGY**
|
||||
|
||||
The [Center for the Cultivation of Technology](https://techcultivation.org) is a "back-end provider" for the open source community. They work with Robur to assist us in our financial processes and administration.
|
||||
|
||||
> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quis ipsum
|
8
pages/our_work.md
Normal file
8
pages/our_work.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
title: Our Work
|
||||
description: The Robur Cooperative
|
||||
synopsis: |
|
||||
We are a nonprofit open source software cooperative whose mission is to develop robust and secure digital infrastructure. We strive to enable more people to reliably run their own infrastructure by producing correct, surprise-free software to be deployed in real environments. Our software aims to meet the needs of anyone working in an environment where security and dependability is vital.
|
||||
---
|
||||
|
||||
{% include "templates/our_work.html" %}
|
7
pages/retreats.md
Normal file
7
pages/retreats.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
## Retreats
|
||||
|
||||
Twice a year the Robur team meet with others from the OCaml and MirageOS community at a week long hack retreat in Marrakesh, Morocco.
|
||||
|
||||
We use these times to discuss and learn about new developments in the MirageOS ecosystem and meet in person about our Robur projects. And of course we have fun whilst we are at it!
|
||||
|
||||
The retreats are held in a hostel in the center of the city, which we wholly rent out for the period, with food provided. If you are interested in participating in the next retreat please see the [retreat website](https://retreat.mirage.io) for more details and sign-up method.
|
3
pages/services.md
Normal file
3
pages/services.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
## Services offered
|
||||
|
||||
We can work with you to design, develop and audit software and infrastructure to assist you in enhancing your technical security and reliability. Whilst we are not a service provider, and so can not offer to host applications, we can assist you in deploying MirageOS and OCaml services.
|
5
pages/technologies.md
Normal file
5
pages/technologies.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## Technology employed
|
||||
|
||||
Nous utilisons une super technologie!
|
||||
|
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
|
41
src/model.ml
41
src/model.ml
|
@ -58,6 +58,32 @@ module Index = struct
|
|||
@ (Metadata.Page.inject (module D) (Metadata.Page.make t.title t.description))
|
||||
end
|
||||
|
||||
module Our_work = struct
|
||||
type t =
|
||||
{ title : string
|
||||
; description : string
|
||||
; synopsis : string
|
||||
; technologies : string
|
||||
; services : string }
|
||||
|
||||
let make ~technologies ~services (title, description, synopsis )=
|
||||
{ title
|
||||
; description
|
||||
; synopsis
|
||||
; technologies
|
||||
; services }
|
||||
|
||||
let inject (type a) (module D : Key_value.DESCRIBABLE with type t = a) t =
|
||||
D.[ "active", object_ $ [ "page", string "our_work" ]
|
||||
; "page", object_ $ [ "title", string t.title
|
||||
; "description", string t.description ]
|
||||
; "synopsis", string t.synopsis
|
||||
; "title", string t.title
|
||||
; "description", string t.description
|
||||
; "technologies", object_ $ [ "body", string t.technologies ]
|
||||
; "services", object_ $ [ "body", string t.services ] ]
|
||||
end
|
||||
|
||||
module Person = struct
|
||||
type t =
|
||||
{ name : string
|
||||
|
@ -91,18 +117,27 @@ module About_us = struct
|
|||
{ title : string option
|
||||
; description : string option
|
||||
; current_members : (Person.t * string) list
|
||||
; former_members : (Person.t * string) list }
|
||||
; former_members : (Person.t * string) list
|
||||
; retreats : string
|
||||
; network : string
|
||||
; funding : string }
|
||||
|
||||
let make ~current_members ~former_members page =
|
||||
let make ~retreats ~network ~funding ~current_members ~former_members page =
|
||||
{ title= Metadata.Page.title page
|
||||
; description= Metadata.Page.description page
|
||||
; current_members
|
||||
; former_members }
|
||||
; former_members
|
||||
; retreats
|
||||
; network
|
||||
; funding }
|
||||
|
||||
let inject (type a) (module D : Key_value.DESCRIBABLE with type t = a) t =
|
||||
D.[ "active", object_ $ [ "page", string "about_us" ]
|
||||
; "page", object_ $ [ "title", string (Option.value ~default:"" t.title)
|
||||
; "description", string (Option.value ~default:"" t.description) ]
|
||||
; "retreats", object_ $ [ "body", string t.retreats ]
|
||||
; "network", object_ $ [ "body", string t.network ]
|
||||
; "funding", object_ $ [ "body", string t.funding ]
|
||||
; "team", object_ $ [ "body", string "FIXME"
|
||||
; "current_members", list (List.map (fun (p, desc) ->
|
||||
object_ (("description", string desc) :: Person.inject (module D) p)) t.current_members)
|
||||
|
|
|
@ -15,6 +15,14 @@ module Index : sig
|
|||
include Metadata.INJECTABLE with type t := t
|
||||
end
|
||||
|
||||
module Our_work : sig
|
||||
type t
|
||||
|
||||
val make : technologies:string -> services:string ->
|
||||
(string * string * string) -> t
|
||||
include Metadata.INJECTABLE with type t := t
|
||||
end
|
||||
|
||||
module Person : sig
|
||||
type t
|
||||
|
||||
|
@ -27,7 +35,13 @@ end
|
|||
module About_us : sig
|
||||
type t
|
||||
|
||||
val make : current_members:(Person.t * string) list -> former_members:(Person.t * string) list -> Metadata.Page.t -> t
|
||||
val make :
|
||||
retreats:string
|
||||
-> network:string
|
||||
-> funding:string
|
||||
-> current_members:(Person.t * string) list
|
||||
-> former_members:(Person.t * string) list
|
||||
-> Metadata.Page.t -> t
|
||||
include Metadata.INJECTABLE with type t := t
|
||||
end
|
||||
|
||||
|
|
|
@ -8,7 +8,8 @@ let program ~target =
|
|||
let* () = Task.move_css target in
|
||||
let* () = Task.move_images target in
|
||||
let* () = Task.generate_index target in
|
||||
Task.generate_about_us target
|
||||
let* () = Task.generate_about_us target in
|
||||
Task.generate_our_work target
|
||||
|
||||
let local_build _quiet target =
|
||||
Yocaml_unix.execute (program ~target:(Fpath.to_string target))
|
||||
|
|
42
src/task.ml
42
src/task.ml
|
@ -7,6 +7,7 @@ let css_target target = "css" |> into target
|
|||
let images_target target = "images" |> into target
|
||||
let index_html target = "index.html" |> into target
|
||||
let about_us_html target = "about_us.html" |> into target
|
||||
let our_work_html target = "our_work.html" |> into target
|
||||
|
||||
let move_css target =
|
||||
process_files
|
||||
|
@ -50,21 +51,52 @@ let generate_index target =
|
|||
Model.Index.make ~cooperative ~what_we_do page, content in
|
||||
with_layout (module Model.Index) read_model (index_html target)
|
||||
|
||||
module Page' = struct
|
||||
type t =
|
||||
{ title : string
|
||||
; description : string
|
||||
; synopsis : string }
|
||||
|
||||
let from_string (module V : Metadata.VALIDABLE) = function
|
||||
| None -> Validate.error $ Error.Required_metadata [ "Page'" ]
|
||||
| Some str ->
|
||||
let open Validate.Monad in
|
||||
V.from_string str >>= V.object_and @@ fun assoc ->
|
||||
let* title = V.(required_assoc string) "title" assoc in
|
||||
let* description = V.(required_assoc string) "description" assoc in
|
||||
let* synopsis = V.(required_assoc string) "synopsis" assoc in
|
||||
return { title; description; synopsis; }
|
||||
end
|
||||
|
||||
let generate_about_us target =
|
||||
let open Build in
|
||||
let read_members dir =
|
||||
Build.collection
|
||||
(read_child_files dir (with_extension "md"))
|
||||
(fun member ->
|
||||
Metaformat.read_file_with_metadata (module Model.Person) member
|
||||
>>> Markup.content_to_html ())
|
||||
(fun path ->
|
||||
Metaformat.read_file_with_metadata (module Model.Person) path
|
||||
>>> Build.snd Markup.to_html)
|
||||
(fun x () -> x) in
|
||||
let* current_members = read_members "team/current_members" in
|
||||
let* former_members = read_members "team/former_members" in
|
||||
let read_model =
|
||||
current_members
|
||||
&&& former_members
|
||||
&&& (Build.read_file "pages/retreats.md" >>> Markup.to_html)
|
||||
&&& (Build.read_file "pages/network.md" >>> Markup.to_html)
|
||||
&&& (Build.read_file "pages/funding.md" >>> Markup.to_html)
|
||||
&&& (Metaformat.read_file_with_metadata (module Metadata.Page) "pages/about_us.md")
|
||||
>>^ fun ((current_members, former_members), (page, content)) ->
|
||||
Model.About_us.make ~current_members ~former_members page, content in
|
||||
>>^ fun (((((current_members, former_members), retreats), network), funding), (page, content)) ->
|
||||
Model.About_us.make ~retreats ~network ~funding ~current_members ~former_members page, content in
|
||||
with_layout (module Model.About_us) read_model (about_us_html target)
|
||||
|
||||
let generate_our_work target =
|
||||
let open Build in
|
||||
let read_model =
|
||||
(Build.read_file "pages/technologies.md" >>> Markup.to_html)
|
||||
&&& (Build.read_file "pages/services.md" >>> Markup.to_html)
|
||||
&&& (Metaformat.read_file_with_metadata (module Page') "pages/our_work.md")
|
||||
>>^ fun ((technologies, services), (page, content)) ->
|
||||
Model.Our_work.make ~technologies ~services
|
||||
Page'.(page.title, page.description, page.synopsis), content in
|
||||
with_layout (module Model.Our_work) read_model (our_work_html target)
|
||||
|
|
|
@ -2,3 +2,4 @@ val move_css : string -> unit Yocaml.Effect.t
|
|||
val move_images : string -> unit Yocaml.Effect.t
|
||||
val generate_index : string -> unit Yocaml.Effect.t
|
||||
val generate_about_us : string -> unit Yocaml.Effect.t
|
||||
val generate_our_work : string -> unit Yocaml.Effect.t
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
---
|
||||
name: dinosaure
|
||||
website: https://blog.osau.re
|
||||
website: https://blog.osau.re/
|
||||
---
|
||||
<p class="brødtekst">Dinosaure wants the majority of its services to be unikernels in OCaml. A big reader of RFCs, it implements protocols and formats in OCaml. He has been participating in MirageOS for quite some time and continues to promote its use and develop usable unikernels such as [paste.osau.re](https://paste.osau.re), [bob](https://bob.osau.re), and his [blog](https://blog.osau.re).</p>
|
||||
|
||||
Dinosaure wants the majority of its services to be unikernels in OCaml. A big reader of RFCs, it implements protocols and formats in OCaml. He has been participating in MirageOS for quite some time and continues to promote its use and develop usable unikernels such as [paste.osau.re][paste], [bob][bob], and his [blog][blog].
|
||||
|
||||
[paste]: https://paste.osau.re/
|
||||
[bob]: https://bob.osau.re/
|
||||
[blog]: https://blog.osau.re/
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
name: Hannes
|
||||
website: https://hannes.robur.coop
|
||||
---
|
||||
<p class="brødtekst">Hannes enjoys living in Berlin, Germany. Until end of 2017, he used to be a research associate at the University of Cambridge in the rems project. He enjoys to write code, and also traveling and repairing his recumbent bicycle, and being a barista.</p>
|
||||
|
||||
<p class="brødtekst">Hannes did his PhD in computer science about formal verification of imperative code (using a higher-order separation logic and the theorem prover Coq). Hannes co-authored not-quite-so-broken TLS, a TLS implementation from the ground up in OCaml, and contributes to the MirageOS project as a core team member. He is working on various projects, including opam signing and [netsem](https://github.com/rems-project/netsem), an executable formal model of TCP/IP which can act as a test validator.</p>
|
||||
Hannes enjoys living in Berlin, Germany. Until end of 2017, he used to be a research associate at the University of Cambridge in the rems project. He enjoys to write code, and also traveling and repairing his recumbent bicycle, and being a barista.
|
||||
|
||||
Hannes did his PhD in computer science about formal verification of imperative code (using a higher-order separation logic and the theorem prover Coq). Hannes co-authored not-quite-so-broken TLS, a TLS implementation from the ground up in OCaml, and contributes to the MirageOS project as a core team member. He is working on various projects, including opam signing and [netsem][netsem], an executable formal model of TCP/IP which can act as a test validator.
|
||||
|
||||
[netsem]: https://github.com/rems-project/netsem
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
name: rand
|
||||
website: https://r7p5.earth/
|
||||
---
|
||||
<p class="brødtekst">rand fell in love with OCaml and functional programming since university, where he studied philosophy and computer science on a humanistic/technological BSc. He especially likes solving problems in elegant and interesting new ways. Been part of the Functional Copenhageners meetup for a range of years - where he's also held several talks.</p>
|
||||
|
||||
<p class="brødtekst">He's worked fullstack with with OCaml and Scala since university - working on a varied set of things like entity clustering, entity merging, custom data visualizations, service oriented architecture, PostgreSQL, Elasticsearch, natural language parsing, Linux, server management.</p>
|
||||
rand fell in love with OCaml and functional programming since university, where he studied philosophy and computer science on a humanistic/technological BSc. He especially likes solving problems in elegant and interesting new ways. Been part of the Functional Copenhageners meetup for a range of years - where he's also held several talks.
|
||||
|
||||
<p class="brødtekst">Spends much of his time with his daughter and doing experimental art with his video synthesizer `niseq`, of course written using pure FRP in OCaml (:</p>
|
||||
He's worked fullstack with with OCaml and Scala since university - working on a varied set of things like entity clustering, entity merging, custom data visualizations, service oriented architecture, PostgreSQL, Elasticsearch, natural language parsing, Linux, server management.
|
||||
|
||||
Spends much of his time with his daughter and doing experimental art with his video synthesizer `niseq`, of course written using pure FRP in OCaml (:
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
name: Reynir
|
||||
website: https://reynir.dk/
|
||||
---
|
||||
<p class="brødtekst">Reynir goes foraging, sniffing and picking interesting plants found in nature, cycling with one, two or more wheels, and knits now and then. Based in Århus, Denmark he goes winterbathing in the cold sea.</p>
|
||||
|
||||
<p class="brødtekst">Reynir studied computer science at Aarhus University with an interest in programming languages and formal verification. After some years working in industry with heterogenous unix systems followed by two years of various volunteer work he joined Robur in 2020. He is still heavily involved as a developer and system administrator in [data.coop](https://data.coop/), an association that collectively owns and run servers offering digital services for their members.</p>
|
||||
Reynir goes foraging, sniffing and picking interesting plants found in nature, cycling with one, two or more wheels, and knits now and then. Based in Århus, Denmark he goes winterbathing in the cold sea.
|
||||
|
||||
Reynir studied computer science at Aarhus University with an interest in programming languages and formal verification. After some years working in industry with heterogenous unix systems followed by two years of various volunteer work he joined Robur in 2020. He is still heavily involved as a developer and system administrator in [data.coop][data.coop], an association that collectively owns and run servers offering digital services for their members.
|
||||
|
||||
[data.coop]: https://data.coop/
|
||||
|
|
|
@ -2,10 +2,11 @@
|
|||
name: Joe
|
||||
website: https://robur.coop/
|
||||
---
|
||||
<p class="brødtekst">Joe is an independent IT consultant located in Copenhagen.</p>
|
||||
|
||||
<p class="brødtekst">Joe has a background in penetration testing, protocol design, applied cryptography, and architectural IT security system design for customers, especially in the banking, insurance, and pension fund sectors. He has been consulting on BPAY integration in Australia, and conducting web and network security assessments for customers throughout the world.</p>
|
||||
Joe is an independent IT consultant located in Copenhagen.
|
||||
|
||||
<p class="brødtekst">Lately he has spent the last couple of years writing OCaml and has been working with IT security, dev-ops and automated deployment for customers specializing in Enterprise Resource Planning, Internet of Things, and medical technology.</p>
|
||||
Joe has a background in penetration testing, protocol design, applied cryptography, and architectural IT security system design for customers, especially in the banking, insurance, and pension fund sectors. He has been consulting on BPAY integration in Australia, and conducting web and network security assessments for customers throughout the world.
|
||||
|
||||
<p class="brødtekst">In his spare time he dabbles in research into similar topics and serialization frameworks, in addition to the enjoyable pursuit of tabletop roleplaying and social interactions in smoky pubs - two disciplines that he excels in, but that have somehow not been of particular interest to paying customers (yet).</p>
|
||||
Lately he has spent the last couple of years writing OCaml and has been working with IT security, dev-ops and automated deployment for customers specializing in Enterprise Resource Planning, Internet of Things, and medical technology.
|
||||
|
||||
In his spare time he dabbles in research into similar topics and serialization frameworks, in addition to the enjoyable pursuit of tabletop roleplaying and social interactions in smoky pubs - two disciplines that he excels in, but that have somehow not been of particular interest to paying customers (yet).
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
name: Martin
|
||||
website: https://robur.coop
|
||||
---
|
||||
<p class="brødtekst">Martin has been programming since before programming was trendy, eating Sharp SC61860A machine code for breakfast since before it was healthy, and using Linux way back when it was just Linus Torvalds’ glorified terminal emulator.</p>
|
||||
|
||||
<p class="brødtekst">A founding member of Unikernel Systems (later acquired by Docker), Martin has been involved in a number of library operating system projects since 2014, including the Rumprun unikernel and MirageOS. He is a co-author of Solo5, a secure execution environment for unikernels, and joins Robur in 2018 to continue his work towards creating secure software that “just works” and other ambitious projects.</p>
|
||||
Martin has been programming since before programming was trendy, eating Sharp SC61860A machine code for breakfast since before it was healthy, and using Linux way back when it was just Linus Torvalds’ glorified terminal emulator.
|
||||
|
||||
<p class="brødtekst">Martin lives with his family in Bratislava, Slovakia and in his spare time enjoys hiking, yachting and the arts.</p>
|
||||
A founding member of Unikernel Systems (later acquired by Docker), Martin has been involved in a number of library operating system projects since 2014, including the Rumprun unikernel and MirageOS. He is a co-author of Solo5, a secure execution environment for unikernels, and joins Robur in 2018 to continue his work towards creating secure software that “just works” and other ambitious projects.
|
||||
|
||||
Martin lives with his family in Bratislava, Slovakia and in his spare time enjoys hiking, yachting and the arts.
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
name: Mindy
|
||||
website: https://robur.coop/
|
||||
---
|
||||
<p class="brødtekst">Mindy ran the first MirageOS unikernel in the public cloud in 2014. Mindy has worked extensively on the MirageOS TCP/IP network stack and various protocol implementations, and is a member of the project's core team. She managed the release of MirageOS's latest major version.</p>
|
||||
|
||||
<p class="brødtekst">Mindy is interested in freeing software from unnecessary dependencies, including monolithic kernels. While she finds testing and bug-fixing rewarding, her true goal is to apply techniques that remove entire bug classes to broader classes of computation. Memory safety isn't just for application code!</p>
|
||||
Mindy ran the first MirageOS unikernel in the public cloud in 2014. Mindy has worked extensively on the MirageOS TCP/IP network stack and various protocol implementations, and is a member of the project's core team. She managed the release of MirageOS's latest major version.
|
||||
|
||||
<p class="brødtekst">In her free time, Mindy enjoys bothering cats, playing board games, riding bicycles, and embroidery. She lives in beautiful Madison, Wisconsin in the United States.</p>
|
||||
Mindy is interested in freeing software from unnecessary dependencies, including monolithic kernels. While she finds testing and bug-fixing rewarding, her true goal is to apply techniques that remove entire bug classes to broader classes of computation. Memory safety isn't just for application code!
|
||||
|
||||
In her free time, Mindy enjoys bothering cats, playing board games, riding bicycles, and embroidery. She lives in beautiful Madison, Wisconsin in the United States.
|
||||
|
|
|
@ -2,10 +2,11 @@
|
|||
name: Stefanie
|
||||
website: https://robur.coop/
|
||||
---
|
||||
<p class="brødtekst">Stefanie is an infrastructure software engineer and a researcher.</p>
|
||||
|
||||
<p class="brødtekst">She studied Applied Computer Science in the Natural Sciences, and developed a typechecker for a compiler of a language for optimization problems. In her PhD project she developed metrics to compare forest data structures, with an application in molecular structure comparison. Working as a postdoc in cancer research on molecular structure prediction, she found her way to Brooklyn and Berlin.</p>
|
||||
Stefanie is an infrastructure software engineer and a researcher.
|
||||
|
||||
<p class="brødtekst">In the US tech industry, she works on infrastructure problems with distributed systems at a large scale with millions of users, developing API infrastructure and search infrastructure, with a focus on stateless systems.</p>
|
||||
She studied Applied Computer Science in the Natural Sciences, and developed a typechecker for a compiler of a language for optimization problems. In her PhD project she developed metrics to compare forest data structures, with an application in molecular structure comparison. Working as a postdoc in cancer research on molecular structure prediction, she found her way to Brooklyn and Berlin.
|
||||
|
||||
<p class="brødtekst">Her Erdős number is 4.</p>
|
||||
In the US tech industry, she works on infrastructure problems with distributed systems at a large scale with millions of users, developing API infrastructure and search infrastructure, with a focus on stateless systems.
|
||||
|
||||
Her Erdős number is 4.
|
||||
|
|
|
@ -22,39 +22,39 @@
|
|||
<div class="container-fluid p0">
|
||||
<div class="container">
|
||||
<div class="col-md-12">
|
||||
<h2>The current team</h2>
|
||||
<h2>The current team</h2>
|
||||
</div>
|
||||
<div class="tekst-element">
|
||||
{% for row in batch(2, team.current_members, fill_with="member") %}
|
||||
<div class="col-md-12 p0">
|
||||
{% for member in row %}
|
||||
<div class="col-md-6">
|
||||
<p class="underoverskrift">{{ member.name }}</p>
|
||||
{% for member in row %}
|
||||
<div class="member-description col-md-6">
|
||||
<p class="underoverskrift">{{ member.name }}</p>
|
||||
{%- autoescape false -%}
|
||||
{{ member.description }}
|
||||
{% endautoescape -%}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<h2>Former members</h2>
|
||||
<h2>Former members</h2>
|
||||
</div>
|
||||
<div class="tekst-element">
|
||||
<div class="col-md-12 p0">
|
||||
{% for row in batch(2, team.former_members, fill_with="member") %}
|
||||
{% for row in batch(2, team.former_members, fill_with="member") %}
|
||||
<div class="col-md-12 p0">
|
||||
{% for member in row %}
|
||||
{% for member in row %}
|
||||
<div class="col-md-6">
|
||||
<p class="underoverskrift">{{ member.name }}</p>
|
||||
{%- autoescape false -%}
|
||||
{{ member.description }}
|
||||
{% endautoescape -%}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -66,22 +66,19 @@
|
|||
<div class="container-fluid">
|
||||
<div class="container flex">
|
||||
<div class="col-md-6 column-1">
|
||||
<h2>Retreats</h2>
|
||||
<p>Twice a year the Robur team meet with others from the OCaml and MirageOS community at a week long hack retreat in Marrakesh, Morocco.</p>
|
||||
<p>We use these times to discuss and learn about new developments in the MirageOS ecosystem and meet in person about our Robur projects. And of course we have fun whilst we are at it!</p>
|
||||
<p>The retreats are held in a hostel in the center of the city, which we wholly rent out for the period, with food provided. If you are interested in participating in the next retreat please see the MirageOS site for more details and sign-up method.</p>
|
||||
{%- autoescape false -%}
|
||||
{{ retreats.body }}
|
||||
{% endautoescape -%}
|
||||
|
||||
<div class="button-bottom">
|
||||
<button class="mirage-btn"><a href="static.php">Go to MirageOS</a></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 column-2">
|
||||
<h2>Network</h2>
|
||||
<img src="{{ root }}/images/center_for_cultivation_of_technology.png" alt="center-for-cultivation-of-technology">
|
||||
<p class="underoverskrift"><b>THE CENTER FOR TECHNICAL CULTIVATION</b></p>
|
||||
<p>The Center For Technical Cultivation is a "back-end provider" for the open source community. They work with Robur to assist us in our financial processes and administration.</p>
|
||||
<blockquote>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quis ipsum
|
||||
</blockquote>
|
||||
{%- autoescape false -%}
|
||||
{{ network.body }}
|
||||
{% endautoescape -%}
|
||||
|
||||
<div class="button-bottom">
|
||||
<button class="collab-btn"><a href="network.php">See all collaborations and grant Funders</a></button>
|
||||
</div>
|
||||
|
@ -93,20 +90,9 @@
|
|||
<div class="section-3">
|
||||
<div class="container-fluid">
|
||||
<div class="container">
|
||||
<div class="col-md-12">
|
||||
<h2>Funding</h2>
|
||||
<p class="manchet">At Robur our focus is on the software we develop. We are passionate about our work and believe in the importance of creating and maintaining secure digital infrastructure.</p>
|
||||
</div>
|
||||
<div class="col-md-12 columns-2">
|
||||
<p>We get our funding through three avenues: grants for particular open-source projects, contracts for specific work including development and auditing, and public donations that help allow us to continue the work that isn't otherwise funded.</p>
|
||||
<p>We spend most of our funding on salaries, ensuring Robur keeps developing the software we think is important. We do not spend money on fancy parties or first class business trips. Our general breakdown of spending per year is:</p>
|
||||
<ul>
|
||||
<li>83% on salaries</li>
|
||||
<li>7% on necessary travel</li>
|
||||
<li>10% on inecitable administrative costs</li>
|
||||
</ul>
|
||||
<p>If you are considering donating to us, hiring us, or giving us a grant you can be assured your money will be well spent on the actual end result of delivering the robust and secure digital infrastructure we strive for.</p>
|
||||
</div>
|
||||
{%- autoescape false -%}
|
||||
{{ funding.body }}
|
||||
{% endautoescape -%}
|
||||
<div class="col-md-12 button-pair">
|
||||
<button class="contact-btn"><a href="#contact">Contact us</a></button>
|
||||
<button class="donate-btn"><a href="donate.php">Donate now</a></button>
|
||||
|
|
163
templates/our_work.html
Normal file
163
templates/our_work.html
Normal file
|
@ -0,0 +1,163 @@
|
|||
<div class="our-work-page">
|
||||
<div class="section-header">
|
||||
<div class="container-fluid dark">
|
||||
<div class="container">
|
||||
<div class="col-md-12">
|
||||
<h2>Our approach</h2>
|
||||
<span class="manchet">
|
||||
<p>{{ synopsis }}</p>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="button-pair">
|
||||
<button class="read-more"><a href="#">Read more</a></button>
|
||||
<button class="contact-us"><a href="#contact">Contact us</a></button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="background-image">
|
||||
<img src="{{ root }}/images/our_work_grafik.png" alt="pentagon-graphics">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section-1">
|
||||
<div class="container-fluid p0">
|
||||
<div class="container">
|
||||
<div class="col-md-12">
|
||||
{%- autoescape false -%}
|
||||
{{ technologies.body }}
|
||||
{% endautoescape -%}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section-2">
|
||||
<div class="container-fluid">
|
||||
<div class="container">
|
||||
<div class="col-md-12 p0">
|
||||
<div class="col-md-6 column-1">
|
||||
<img src="{{ root }}/images/our_work_triangle.png" alt="triangle">
|
||||
<p class="underoverskrift"><b>OCaml</b></p>
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis</p>
|
||||
<button class="read-more-btn"><a href="static.php">Read more</a></button>
|
||||
</div>
|
||||
<div class="col-md-6 column-2">
|
||||
<img src="{{ root }}/images/our_work_triangle.png" alt="triangle">
|
||||
<p class="underoverskrift"><b>MirageOS</b></p>
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis</p>
|
||||
<button class="read-more-btn"><a href="static.php">Read more</a></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-3">
|
||||
<div class="container-fluid dark">
|
||||
<div class="container">
|
||||
{%- autoescape false -%}
|
||||
{{ service.body }}
|
||||
{% endautoescape -%}
|
||||
<div class="col-md-12 p0 img-row">
|
||||
<div class="col-md-4 p0">
|
||||
<object data="images/our_work.svg" type="image/svg+xml">
|
||||
<img src="{{ root }}/images/our_work.svg" alt="design-graphics" />
|
||||
</object>
|
||||
<p><b>Design</b></p>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 p0">
|
||||
<img src="{{ root }}/images/our_work_graphics_2.png" alt="develop-graphics">
|
||||
<p><b>Develop</b></p>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 p0">
|
||||
<img src="{{ root }}/images/our_work_graphics_3.png" alt="audit-graphics">
|
||||
<p><b>Audit</b></p>
|
||||
</div>
|
||||
</div>
|
||||
<button class="read-more-btn"><a href="static.php">Read more</a></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section-4">
|
||||
<div class="container-fluid">
|
||||
<div class="container">
|
||||
|
||||
<div class="col-md-12 p0">
|
||||
<h2>Our projects</h2>
|
||||
<span class="manchet">
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu</p>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-md-12 p0 buttons">
|
||||
<button><a href="#">Bitcoin Piñata</a></button>
|
||||
<button><a href="#">DNS</a></button>
|
||||
<button><a href="#">OpenPGP</a></button>
|
||||
<button><a href="#">OpenVPN</a></button>
|
||||
<button><a href="#">CalDAV Server</a></button>
|
||||
<button><a href="#">Solo5</a></button>
|
||||
<button><a href="#">Firewall</a></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section-5">
|
||||
<div class="container-fluid dark">
|
||||
<div class="container">
|
||||
|
||||
<div class="col-md-12 p0">
|
||||
<h2>Publications and talks</h2>
|
||||
<span class="manchet">
|
||||
<p>We regularly give talks and write publications about our work, OCaml and MirageOS and other aspects of coding, security and computer science that we have expertise in. Below are some examples of these, if you are interested in having a Robur member speak at your event please reach out to us.</p>
|
||||
</span>
|
||||
<a href="talks_and_publications.php">See all publications and talks</a>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12 p0 first-block">
|
||||
|
||||
<div class="col-md-6 p0 element-1">
|
||||
<p class="underoverskrift">HANNES MEHNERT</p>
|
||||
<p class="brødtekst"><b>Engineering with Logic: Rigorous Test-Oracle Specification and Validation for TCP/IP and the Sockets API (JACM vol 66, January 2019)</b></p>
|
||||
<a href="#" class="button">
|
||||
<figure><img src="{{ root }}/images/download-pil.png"></figure>
|
||||
<div class="text">Download</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 p0 element-2">
|
||||
<video poster="images/video-screenshot.png" controls>
|
||||
<div class="video-overlay"><img src="{{ root }}/images/video-dark-layer.png" alt="video-overlay"></div>
|
||||
<source src="#" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12 p0 second-block">
|
||||
|
||||
<div class="col-md-6 p0 element-1">
|
||||
<p class="underoverskrift">MARTIN LUCINA</p>
|
||||
<p class="brødtekst"><b>Unikernels as Processes - ACM Symposium on Cloud Computing 2018</b></p>
|
||||
<a href="#" class="button">
|
||||
<figure><img src="{{ root }}/images/download-pil.png"></figure>
|
||||
<div class="text">Download</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 p0 element-2">
|
||||
<p class="underoverskrift">HANNES MEHNERT</p>
|
||||
<p class="brødtekst"><b>MirageOS: robust and secure services for the cloud</b></p>
|
||||
<p class="underoverskrift">CERN COMPUTING SEMINAR 2019</p>
|
||||
<p class="brødtekst">Presenting MirageOS and its advantages along with explaining several applications being developed within it.</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
Loading…
Reference in a new issue