Skip to content

Commit

Permalink
Add Outreachy winter 2023 round (#2244)
Browse files Browse the repository at this point in the history
* Add Outreachy winter 2023 round

* line editing

* Convert Outreachy descriptions to HTML from markdown

* Update data/outreachy.yml

---------

Co-authored-by: Christine Rose <christinerose@users.noreply.github.com>
Co-authored-by: Cuihtlauac Alvarado <cuihtlauac@users.noreply.github.com>
  • Loading branch information
3 people committed Mar 28, 2024
1 parent edba7b3 commit 886ee6b
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 18 deletions.
96 changes: 92 additions & 4 deletions data/outreachy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ rounds:
and which are not so. Developers will be helped to see where it is
needed to add new tests, and in the process of improving coverage,
it is possible to find unexplored bugs and fix them.
It might help to make OCaml and its libraries more reliable.
It might help to make OCaml and its libraries more reliable.
mentee: "Oxana Kostikova"
blog: "https://lereenadem.wixsite.com/personal"
source: https://github.com/ocaml/ocaml
Expand Down Expand Up @@ -155,7 +155,7 @@ rounds:
Statistics such as (check if GDPR compliant first!) Requested URIs,
User agents, Language, Logs.
This project consists of mostly two parts: a frontend and a backend.
The backend consists of building a high-level library to collect data
The backend consists of building a high-level library to collect data
and get statistics on them. The frontend will use this library to display
graphs of the metrics, statistics, and other data we want to collect.
mentee: "Jiae Kam"
Expand Down Expand Up @@ -275,7 +275,7 @@ rounds:
- title: "Improving Error Reporting in Existing PPXLIB-Based PPXs"
description: >
In the past, when 'ppxlib' encountered an exception in a transformation, it stopped the rewriting process, causing the rewriters after to not be processed.
Also multiple errors could not be reported at the same time there were multiple failing rewriters as just the first raising rewriter
Also multiple errors could not be reported at the same time there were multiple failing rewriters as just the first raising rewriter
will raise, and the compilation process stops there. But now, a raising rewriter does not stop the preceding rewriter from running, allowing multiple
to be raised both in the context-free phase and all the other phases.
mentee: "Abongwa Bonalais"
Expand All @@ -287,7 +287,7 @@ rounds:
- title: "MIDI Over Ethernet With MirageOS"
description: >
MIDI, which stands for Musical Instrument Digital Interface, is a widely used protocol in the world of music and audio technology.
MirageOS is a library operating system that specialises in creating lightweight, secure, and efficient unikernels. Unikernels are highly-specialised,
MirageOS is a library operating system that specialises in creating lightweight, secure, and efficient unikernels. Unikernels are highly-specialised,
single-purpose virtual machine images designed for specific applications, and it is written in OCaml.
The project focussed on implementing the rtpMIDI protocol for serialising-deserialising of MIDI messages over Ethernet and implementing use cases like
a publisher-subcriber based server-client model for MIDI messages.
Expand All @@ -299,3 +299,91 @@ rounds:
- Sonja Heinze
- Moazzam Moriani
video: https://watch.ocaml.org/w/kTwq4AVQtRtFuQx9R5cPro
- name: Winter 2023
projects:
- title: "Develop a Geometric Creative Coding Library for OCaml"
description: >
OCaml is an industrial-strength functional programming language that's
been around for nearly three decades.
While functional programming itself is not new, it has not dominated
mainstram programming languages. Recently, more mainstram languages
have been adopting concepts from functional programming. Now more than
ever is a good time to have various types of learning material
pertaining to functional programming.
Creative coding is a type of computer programming that focuses on
generating artistic, expressive, and creative outputs using software
and digital tools. It has its applications in places such as game
development. Above all, it is a great pedagogical tool that gives
visual outputs to its readers.
Joy is a tiny creative coding library in Python. Joy builds heavily on
functional programming concepts with very little reference to Python
syntax.
This project aims to implement a geometric creative coding library in
OCaml. It is heavily inspired by Joy. When done, it will serve as a
means to do geometric creative coding in OCaml.
mentee: "Fay Carsons"
source: https://github.com/Sudha247/ocaml-joy
blog: "https://www.faycarsons.xyz/articles#joy"
mentors:
- Sudha Parimala
- Kaustubh M
video: https://watch.ocaml.org/w/b7sv1LQSVZQH6trf4xpwFX?start=3m8s
- title: "Implement a Dark Mode for OCaml.org"
description: >
OCaml is a powerful, statically-typed programming language known for
its efficiency and expressiveness. OCaml.org serves as the central hub
for the OCaml community, providing resources, documentation, and news.
In today's digital age, users expect a more personalised and
comfortable web experience. One such expectation is the availability
of a dark mode, which has become a popular feature on websites and
applications. This project outlines the plan to implement a dark mode
for OCaml.org, enhancing user experience and modernising the platform.
As OCaml continues gaining traction in various industries, it is
essential to modernise its online presence to meet users' expectations
worldwide.
The current styles and colors for light mode already exist so
implementing a dark mode will involve adding contrasting colors and
styles according to the Figma design. It will also consider accessibility
standards and create a button that toggles between the light
and dark mode.
mentee: "Oluwaseun Oyenuga"
source: https://github.com/ocaml-ppx/ppxlib
blog: "https://dev.to/burnleydev"
mentors:
- Sayo Bamigbade
- punchagan
video: https://watch.ocaml.org/w/b7sv1LQSVZQH6trf4xpwFX?start=21m12s
- title: "Improve the GUI Experience for OCaml Users"
description: >
Inspired by [Rust's "Are we GUI yet?"](https://areweguiyet.com/), we want the same work done on the
OCaml GUI libraries. A similar work has been done for the OCaml web
libraries: ["Is OCaml web yet?"](https://ocaml.org/docs/is-ocaml-web-yet) (see the pull request). This work would
allow to tackle "Are we game yet?" in the future.
The survey must take into account the targeted platforms of these
libraries, dependencies, (in)compatibilities, features, last updates,
etc. A list is available in OCamlVerse but is not complete or detailed
enough. Interns having previous knowledge of GUI libraries available
in other languages can also compare them to the equivalent OCaml
libraries.
This work must result in a guide on OCaml.org, similar to the ["Is OCaml web yet?"](https://ocaml.org/docs/is-ocaml-web-yet) page.
mentee: "PrincessIddy"
source: https://github.com/ocaml/ocaml.org
blog: "https://idaranabuk.com"
mentors:
- Guillaume Petiot
- Moazzam Moriani
video: https://watch.ocaml.org/w/b7sv1LQSVZQH6trf4xpwFX?start=34m6s
2 changes: 1 addition & 1 deletion src/ocamlorg_data/data.mli
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ end
module Outreachy : sig
type project = {
title : string;
description : string;
description_html : string;
mentee : string;
blog : string option;
source : string;
Expand Down
16 changes: 8 additions & 8 deletions src/ocamlorg_frontend/pages/outreachy.eml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
let render (metadata : Data.Outreachy.t list)
=
=
Layout.render
~title:"OCaml Outreachy Internships"
~description:"Records Of OCaml Community Past Outreachy Internship Projects"
Expand All @@ -18,25 +18,25 @@ Layout.render
<h2 class="text-title dark:text-dark-title border-b border-primary dark:border-dark-primary p-6 my-2 font-bold"><%s rounds.name %></h2>
<div class="grid gap-10 prose dark:prose-invert max-w-4xl">
<% rounds.projects |> List.iter (fun (project : Data.Outreachy.project) -> %>
<div x-data="{'is_shown': false}" class="p-5 flex flex-col gap-2">
<div x-data="{'is_shown': false}" class="p-5 flex flex-col gap-2">
<h3 class="text-title dark:text-dark-title "><%s project.title %></h3>
<div class="text-content dark:text-dark-content">Mentee: <i class="text-content dark:text-dark-content"><%s project.mentee %></i></div>
<div class="text-content dark:text-dark-content">Mentor(s): <i class="text-content dark:text-dark-content"><%s Fmt.(str "%a" (list ~sep:comma string) project.mentors) %></i></div>
<% if String.length project.description > 240 then ( %>
<% if String.length project.description_html > 240 then ( %>
<div :class="is_shown ? '' : 'relative max-h-20 overflow-hidden'">
<div :class="is_shown? 'hidden' : ''" class="absolute bottom-0 h-10 left-0 right-0 bg-gradient-to-t from-white dark:from-dark-background dark:to-separator_20"></div>
<p> <%s project.description %> </p>
<div :class="is_shown? 'hidden' : ''" class="absolute bottom-0 h-10 left-0 right-0 bg-gradient-to-t from-white dark:from-dark-background dark:to-separator_20"></div>
<%s! project.description_html %>
</div>
<button x-on:click="is_shown= !is_shown" class='text-left hover:underline text-primary font-semibold dark:text-dark-primary hover:text-primary dark:hover:text-dark-primary' x-text="is_shown ? 'Show Less' : 'Show More'"></button>
<% ) else ( %>
<p> <%s project.description %> </p>
<%s! project.description_html %>
<% ); %>
<div class='flex flex-row gap-4'>
<% (match project.blog with None -> () | Some blog -> %>
<a href="<%s blog %>" target="_blank" class="">Blog</a>
<% ); %>
<% (match project.video with None -> () | Some video -> %>
<a href="<%s video %>" target="_blank">Video</a>
<% (match project.video with None -> () | Some video -> %>
<a href="<%s video %>" target="_blank">Video</a>
<% ); %>
<a href="<%s project.source %>" target="_blank">Source</a>
</div>
Expand Down
40 changes: 35 additions & 5 deletions tool/ood-gen/lib/outreachy.ml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
type project = {
type project_metadata = {
title : string;
description : string;
mentee : string;
Expand All @@ -9,22 +9,52 @@ type project = {
}
[@@deriving of_yaml, show { with_path = false }]

type metadata = { name : string; projects : project list }
type project = {
title : string;
description_html : string;
mentee : string;
blog : string option;
source : string;
mentors : string list;
video : string option;
}
[@@deriving of_yaml, show { with_path = false }]

type metadata = { name : string; projects : project_metadata list }
[@@deriving of_yaml, show { with_path = false }]

type t = { name : string; projects : project list }
[@@deriving stable_record ~version:metadata, show { with_path = false }]
[@@deriving
stable_record ~version:metadata ~modify:[ projects ],
show { with_path = false }]

let of_metadata m = of_metadata m
let decode s = Result.map of_metadata (metadata_of_yaml s)

let modify_projects : project_metadata list -> project list =
fun v ->
List.map
(fun (p : project_metadata) ->
{
title = p.title;
description_html =
Cmarkit.Doc.of_string p.description |> Cmarkit_html.of_doc ~safe:true;
mentee = p.mentee;
blog = p.blog;
source = p.source;
mentors = p.mentors;
video = p.video;
})
v

let decode s = Result.map (of_metadata ~modify_projects) (metadata_of_yaml s)
let all () = Utils.yaml_sequence_file ~key:"rounds" decode "outreachy.yml"

let template () =
Format.asprintf
{|
type project =
{ title : string
; description : string
; description_html : string
; mentee : string
; blog : string option
; source : string
Expand Down

0 comments on commit 886ee6b

Please sign in to comment.