diff --git a/_activities/studentblogs.md b/_activities/studentblogs.md index be1de041..a25a3c34 100644 --- a/_activities/studentblogs.md +++ b/_activities/studentblogs.md @@ -1,81 +1,121 @@ --- -title: "Blogs" +title: "Student Blogs" author: "Emanuele Usai" layout: default +description: "Read blog posts written by HumanAI GSoC students about their research projects in AI and Arts & Humanities." --- +HumanAI Logo -HumanAI - -# Google Summer of Code blog posts +# Google Summer of Code — Student Blogs ## Introduction -This is a collection of blog posts from GSoC students who worked with HumanAI. +Each year, HumanAI students share their GSoC journey through blog posts, covering everything from their +first lines of code to final results. These are real stories from real researchers applying machine +learning to arts, humanities, music, literature, and more. + +--- ### Google Summer of Code 2025 - - - - + + + + + + + + + + + + + +
"Tool for Historical Text Recognition using Weighted CRNN Model" by Shashank Shekhar Singh
StudentProjectBlog Post
Shashank Shekhar SinghRenAIssance (OCR)Tool for Historical Text Recognition using Weighted CRNN Model →
+--- + ### Google Summer of Code 2024 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StudentProjectBlog Post
Domenico LacavallaDark Web Language EvolutionExamination of the Evolution of Language Among Dark Web Users →
Yukinori YamamotoRenAIssance (OCR)Historical OCR with Self-Supervised Learning →
Shashank Shekhar SinghRenAIssance (OCR)Historical Text Recognition using CRNN Model →
Soyoung ParkArtExtractArtExtract: Hidden Art Extraction with Siamese Networks →
Luis ZerkowskiChoreoAIChoreoAI: Dance Meets AI Again →
Zixuan WangChoreoAIAI-Generated Choreography — from Solos to Duets →
Rashi GuptaISSR / Social SciencesGender, Roles & Careers: Exploring Congruity Theories →
Shao JinISSR / Program EvaluationEnhancing Program Evaluation Research with AI for Mixed-Methods Data →
Aditya ArvindISSR / Fatigue DetectionFatigue Detection and Driver Distraction Monitoring →
Arsh Ahmed Faisal KhanRenAIssance (OCR)Text Recognition using Transformer Models →
Utsav RaiRenAIssance (OCR)Decoding History: Advancing Text Recognition →
- - "Examination of the evolution of language among Dark Web users" by Domenico Lacavalla - - - - "RenAIssance" by Yukinori Yamamoto - - - - "Historical Text Recognition using CRNN Model" by Shashank Shekhar Singh - - - - "ArtExtract" by Soyoung Park - - - - "ChoreoAI" by Luis Zerkowski - - - - "AI-Generated Choreography - from Solos to Duets" by Zixuan Wang - - - - "Gender, Roles & Careers: Exploring Congruity Theories" by Rashi Gupta - - - - "Enhancing Program Evaluation Research by Leveraging AI for Integrated Analysis of Mixed-Methods Data" by Shao Jin - - - - "Fatigue detection" by Aditya Arvind - - - - "Text Recognition using Transformer Models" by Arsh Ahmed Faisal Khan - - - - "Decoding History: Advancing Text Recognition" by Utsav Rai - - - +--- - +## Write Your Blog Post +Are you a current GSoC student with HumanAI? Share your experience! +Write about a challenge you solved, a surprising finding, or your overall journey. +Publish on [Medium](https://medium.com) or your personal site, then email the link to +[human-ai@cern.ch](mailto:human-ai@cern.ch) to have it added here. ## Contacts -*HumanAI GSoC Admins* [human-ai@cern.ch](mailto:human-ai@cern.ch) - +*HumanAI GSoC Admins* — [human-ai@cern.ch](mailto:human-ai@cern.ch) diff --git a/_includes/gsoc_project.ext b/_includes/gsoc_project.ext index 8cd2bdeb..86b52e22 100644 --- a/_includes/gsoc_project.ext +++ b/_includes/gsoc_project.ext @@ -26,6 +26,7 @@ Use the project name as the page title if none has been specified (they are typi ## Project Proposals +
{% for proposal in site.gsocproposals %} {% assign url_tokens = proposal.url | split: '/' %} {% assign year_position = url_tokens.size | minus: 2 %} @@ -35,9 +36,26 @@ Use the project name as the page title if none has been specified (they are typi {% capture u_proposal_project %}{{ project | upcase }}{% endcapture %} {% capture u_project %}{{ page.project | upcase }}{% endcapture %} {% if u_proposal_project == u_project %} -* [ {{ proposal.title }} ]( {{ proposal.url }} ) +
+

{{ proposal.title }}

+
+ {% if proposal.difficulty %} + {{ proposal.difficulty }} + {% endif %} + {% for req in proposal.requirements limit:5 %} + {{ req }} + {% endfor %} + {% for tag in proposal.tags limit:5 %} + {{ tag }} + {% endfor %} +
+ {% if proposal.duration %} +

⏱ {{ proposal.duration }}

+ {% endif %} +
{% endif %} {% endfor %} {% endif %} {% endfor %} +
diff --git a/_includes/gsoc_proposal.ext b/_includes/gsoc_proposal.ext index c92ac4c5..1e2ff6c6 100644 --- a/_includes/gsoc_proposal.ext +++ b/_includes/gsoc_proposal.ext @@ -21,6 +21,7 @@ grouping by organization and is case insensitive. ## Project List +
{% for proposal in site.gsocproposals %} {% assign url_tokens = proposal.url | split: '/' %} {% assign year_position = url_tokens.size | minus: 2 %} @@ -30,9 +31,26 @@ grouping by organization and is case insensitive. {% capture u_proposal_org %}{{ organization | upcase }}{% endcapture %} {% capture u_org %}{{ page.organization | upcase }}{% endcapture %} {% if u_proposal_org == u_org %} -* [ {{ proposal.title }} ]( {{ proposal.url }} ) +
+

{{ proposal.title }}

+
+ {% if proposal.difficulty %} + {{ proposal.difficulty }} + {% endif %} + {% for req in proposal.requirements limit:5 %} + {{ req }} + {% endfor %} + {% for tag in proposal.tags limit:5 %} + {{ tag }} + {% endfor %} +
+ {% if proposal.duration %} +

⏱ {{ proposal.duration }}

+ {% endif %} +
{% endif %} {% endfor %} {% endif %} {% endfor %} +
diff --git a/_includes/navbar.ext b/_includes/navbar.ext index 01ac4d7c..ab8d9cc9 100644 --- a/_includes/navbar.ext +++ b/_includes/navbar.ext @@ -1,27 +1,35 @@ - diff --git a/_layouts/main.html b/_layouts/main.html index 10189509..2be4441e 100644 --- a/_layouts/main.html +++ b/_layouts/main.html @@ -40,34 +40,9 @@
{% endif %} - - - - - - - - - - - + + +

HumanAI in GSoC 2026

The HumanAI open source umbrella organization plans to participate in the 2026 Google Summer of Code. If you are a student interested in our projects please check our ideas page. @@ -77,19 +52,11 @@

HumanAI in GSoC 2026

alt="GSoC-logo" style="display: block; width:15%; margin-left: auto; margin-right: auto;">

Please take a look at our GSoC Page for more details.

- +

You can also find us on Gitter.

- +

Organization administrators:
@@ -102,20 +69,7 @@

HumanAI in GSoC 2026

- - - - {{ content }} diff --git a/css/hsf.css b/css/hsf.css index 069e3984..021cf9ae 100644 --- a/css/hsf.css +++ b/css/hsf.css @@ -1,264 +1,360 @@ -/* Boostrap blog theme */ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); + +:root { + /* Brand colors inspired by TDS clean design */ + --color-primary: #2563eb; + --color-accent: #f97316; + --color-danger: #cc5555; + + /* Surfaces */ + --color-bg: #ffffff; + --color-surface: #f8fafc; + --color-border: #e2e8f0; + + /* Text */ + --color-text: #334155; + --color-muted: #64748b; + + /* Navbar */ + --color-nav-bg: #1e293b; + --color-nav-text: #f1f5f9; + + /* Typography */ + --font-base: 'Inter', system-ui, -apple-system, sans-serif; + --radius: 8px; + --shadow-sm: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.05); +} + +@media (prefers-color-scheme: dark) { + :root { + --color-bg: #0f172a; + --color-surface: #1e293b; + --color-border: #334155; + --color-text: #e2e8f0; + --color-muted: #94a3b8; + --color-nav-bg: #020617; + } -/* - * Globals - */ + body { + background-color: var(--color-bg); + } -p { -font-family: Helvetica, sans-serif; -} -H1 { -font-family: Helvetica, sans-serif; -} -H2 { -font-family: Helvetica, sans-serif; -} -H3 { -font-family: Helvetica, sans-serif; -} + .navbar { + background-color: var(--color-nav-bg) !important; + border-color: var(--color-border); + } + .navbar-default .navbar-nav > li > a { + color: var(--color-text); + } -/* - * Override Bootstrap's default container. - */ + .blog-main { + background-color: var(--color-bg); + } -@media (min-width: 1200px) { - .container { - width: 970px; + .alert-warning { + background-color: #451a03; + border-color: #78350f; + color: #fef3c7; } -} + .alert-info { + background-color: #1e3a5f; + border-color: #1e40af; + color: #dbeafe; + } -/* - * Centered image - */ + .jumbotron { + background-color: var(--color-surface); + color: var(--color-text); + } -.centered-image { - margin: 0 auto; - display: block; -} + hr { + border-color: var(--color-border); + } + .lead { + color: var(--color-text); + } -/* - * Masthead for nav - */ + h1, h2, h3, h4, h5, h6 { + color: var(--color-text); + } -.blog-masthead { - background-color: #428bca; - -webkit-box-shadow: inset 0 -2px 5px rgba(0,0,0,.1); - box-shadow: inset 0 -2px 5px rgba(0,0,0,.1); -} + .panel { + background-color: var(--color-surface); + border-color: var(--color-border); + } -/* Nav links */ -.blog-nav-item { - position: relative; - display: inline-block; - padding: 10px; - font-weight: 500; - color: #fff; -} -.blog-nav-item:hover, -.blog-nav-item:focus { - color: #fff; - text-decoration: none; -} + .panel-heading { + background-color: var(--color-nav-bg); + border-color: var(--color-border); + color: var(--color-text); + } -/* Active state gets a caret at the bottom */ -.blog-nav .active { - color: #fff; -} -.blog-nav .active:after { - position: absolute; - bottom: 0; - left: 50%; - width: 0; - height: 0; - margin-left: -5px; - vertical-align: middle; - content: " "; - border-right: 5px solid transparent; - border-bottom: 5px solid; - border-left: 5px solid transparent; -} + .panel-body { + color: var(--color-text); + } + + .list-group-item { + background-color: var(--color-surface); + border-color: var(--color-border); + color: var(--color-text); + } + .well { + background-color: var(--color-surface); + border-color: var(--color-border); + color: var(--color-text); + } -/* - * Blog name and description - */ + pre { + background-color: #1e1e1e; + border-color: var(--color-border); + color: #d4d4d4; + } -.blog-header { - padding-top: 20px; - padding-bottom: 20px; -} -.blog-title { - margin-top: 30px; - margin-bottom: 0; - font-size: 50px; - font-weight: normal; -} -.blog-description { - font-size: 20px; - color: #999; -} + code { + background-color: var(--color-surface); + color: #e0e7ff; + } + blockquote { + border-left-color: var(--color-primary); + color: var(--color-muted); + } -/* - * Main column and sidebar layout - */ + .dropdown-menu { + background-color: var(--color-surface); + border-color: var(--color-border); + } -.blog-main { - font-size: 14px; - line-height: 1.5; -} + .dropdown-menu > li > a { + color: var(--color-text); + } -/* Sidebar modules for boxing content */ -.sidebar-module { - padding: 15px; - margin: 0 -15px 15px; + .dropdown-menu > li > a:hover, + .dropdown-menu > li > a:focus { + background-color: rgba(255,255,255,0.1); + color: #e0e7ff; + } + + .tag { background: #312e81; color: #e0e7ff; } + .tag-difficulty { background: #78350f; color: #fef3c7; } } -.sidebar-module-inset { - padding: 15px; - background-color: #f5f5f5; - border-radius: 4px; + +body { + font-family: var(--font-base); + color: var(--color-text); + background-color: var(--color-bg); + line-height: 1.6; } -.sidebar-module-inset p:last-child, -.sidebar-module-inset ul:last-child, -.sidebar-module-inset ol:last-child { - margin-bottom: 0; + +p, h1, h2, h3, h4, h5, h6 { + font-family: var(--font-base); + color: var(--color-text); } +/* Override Bootstrap's default container */ +@media (min-width: 1200px) { + .container { + width: 970px; + } +} -/* Pagination */ -.pager { - margin-bottom: 60px; - text-align: left; +/* Centered image */ +.centered-image { + margin: 0 auto; + display: block; } -.pager > li > a { - width: 140px; - padding: 10px 20px; - text-align: center; - border-radius: 30px; + +/* Navigation Links */ +.navbar { + font-weight: 500; + background-color: var(--color-nav-bg); + min-height: 50px; + border: none; + box-shadow: var(--shadow-sm); } +.navbar-brand { + color: var(--color-nav-text) !important; + font-weight: 600; +} -/* - * Blog posts - */ +.navbar-default .navbar-nav > li > a { + color: var(--color-nav-text); +} -.blog-post { - margin-bottom: 30px; - padding: 10px 20px; /* I don't understand why this is needed... */ +.navbar-default .navbar-nav > li > a:focus, +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-brand:hover { + color: var(--color-accent) !important; } -.blog-post-title { - margin-bottom: 5px; - font-size: 24px; + +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:focus, +.navbar-default .navbar-nav > .open > a:hover { + background-color: rgba(255, 255, 255, 0.1); + color: var(--color-nav-text); } -.blog-post-meta { - margin-bottom: 20px; - color: #999; + +.dropdown-menu { + background-color: var(--color-surface); + border: 1px solid var(--color-border); } +.dropdown-menu > li > a { + color: var(--color-text); +} -/* - * Footer - */ +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: rgba(0,0,0,0.05); + color: var(--color-primary); +} -.blog-footer { - padding: 40px 0; - color: #999; - text-align: center; - background-color: #f9f9f9; - border-top: 1px solid #e5e5e5; +/* Links */ +a { + color: var(--color-primary); + text-decoration: none; + transition: color 0.15s ease; } -.blog-footer p:last-child { - margin-bottom: 0; + +a:hover { + color: var(--color-accent); + text-decoration: underline; } -.navbar-nav { - padding-top: 0px; - padding-bottom: 0px; +a:focus-visible, button:focus-visible { + outline: 2px solid var(--color-primary); + outline-offset: 3px; + border-radius: 3px; } -.navbar { - font-weight: 500; - background-color: #555555; - min-height: 40px; +/* Proposal Grid & Cards */ +.proposal-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 1.5rem; + margin: 1.5rem 0; } -.navbar-brand { - height: 40px; - padding: 12.5px 15px; - font-size: 15px; +.proposal-card { + border: 1px solid var(--color-border); + border-radius: var(--radius); + padding: 1.5rem; + background: var(--color-surface); + transition: box-shadow 0.2s, transform 0.2s; + display: flex; + flex-direction: column; } -.navbar-default .navbar-nav > li > a:focus, -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-brand:hover{ - color: #f39c12; +.proposal-card h4 { + margin-top: 0; + font-size: 1.1rem; + font-weight: 600; + line-height: 1.4; + margin-bottom: 1rem; } -.navbar-nav>li>a { - padding-top: 9.5px; - padding-bottom: 9.5px +.proposal-card:hover { + box-shadow: var(--shadow-sm); + transform: translateY(-2px); + border-color: var(--color-primary); } -a { - color: #cc5555; +.card-meta { + margin-bottom: 1rem; + flex-grow: 1; } -a:hover { - color: #f39c12; +.tag { + display: inline-block; + background: #e0e7ff; + color: #3730a3; + font-size: 0.75rem; + font-weight: 600; + padding: 3px 10px; + border-radius: 99px; + margin: 2px 2px 6px 0; +} +.tag-difficulty { + background: #fef3c7; + color: #92400e; +} + +@media (prefers-color-scheme: dark) { + .tag { background: #312e81; color: #e0e7ff; } + .tag-difficulty { background: #78350f; color: #fef3c7; } + .dropdown-menu > li > a:hover { + background-color: rgba(255,255,255,0.05); + } } -body { - color: #333333; +.card-duration { + font-size: 0.85rem; + color: var(--color-muted); + font-weight: 500; + margin: 0; } -.btn-primary { - background-color: #555555; - border-color: #555555; +/* Alerts and announcements */ +.alert { + padding: 1rem; + border-radius: var(--radius); } .announcement { - background-color: #f39c12; - border-color: #f39c12; - color: #ffffff; - padding: 15px; - margin-bottom: 21px; - border: 1px solid transparent; - border-radius: 4px; - margin-left: -15px; - margin-right: -15px; + background-color: var(--color-accent); + color: #ffffff; + padding: 15px; + margin-bottom: 21px; + border-radius: var(--radius); + border: none; } -.lead { - font-size: 20px; +.event-announce > a { + color: white; + text-decoration: underline; } + .event-announce > a:hover { - color: #333333; + color: rgba(255, 255, 255, 0.8); } - -.alert { - padding: 8px; +.lead { + font-size: 20px; + color: var(--color-text); + font-weight: 400; } -.list-simple { - padding-left: 15px; +/* Markdown tables */ +.table { + background-color: var(--color-bg); + color: var(--color-text); } - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-color: #555555; +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: var(--color-surface); } - -[role="button"] { - font-size: 17px; +.table-hover > tbody > tr:hover { + background-color: rgba(0,0,0,0.03); +} +@media (prefers-color-scheme: dark) { + .table-hover > tbody > tr:hover { + background-color: rgba(255,255,255,0.03); + } } -.alignleft { - float: left; +/* Footer */ +.blog-footer { + padding: 40px 0; + color: var(--color-muted); + text-align: center; + background-color: var(--color-surface); + border-top: 1px solid var(--color-border); + margin-top: 60px; } -.alignright { - float: right; +.blog-footer a { + color: var(--color-primary); } diff --git a/gsoc/how-to-apply.md b/gsoc/how-to-apply.md new file mode 100644 index 00000000..cf0870ea --- /dev/null +++ b/gsoc/how-to-apply.md @@ -0,0 +1,136 @@ +--- +title: "How to Apply for GSoC with HumanAI" +author: "HumanAI Admins" +layout: default +description: "A step-by-step guide for students applying to Google Summer of Code 2026 with the HumanAI Foundation." +--- + +# How to Apply for GSoC with HumanAI + +This guide walks you through every step of applying to [Google Summer of Code](https://summerofcode.withgoogle.com/) +with the HumanAI Foundation — from finding the right project to submitting your final proposal. + +--- + +## Step 1 — Understand What HumanAI Does + +HumanAI is an umbrella organization that applies machine learning to **Arts and Humanities** research. +Projects span music, dance, choreography, historical text recognition (OCR), social sciences, epidemiology, +cultural heritage preservation, and more. + +You do **not** need a background in humanities. You need strong ML/programming skills and genuine +curiosity about one of the project domains. + +--- + +## Step 2 — Browse the Project Ideas + +Read the [Full List of 2026 Proposals](/gsoc/2026/summary.html). For each project that interests you: + +- Read the full proposal page carefully +- Note the **Requirements** section — can you meet them honestly? +- Note the **Difficulty level** (Easy / Medium / Hard) +- Read the **Task ideas** and **Expected results** — can you picture yourself doing this work? + +**Narrow down to 1–2 projects** you genuinely want to work on. Applying to too many spreads you thin. + +--- + +## Step 3 — Complete the Evaluation Test + +Every HumanAI project requires an **evaluation test** before you can submit a proposal. +Each proposal page links to its specific test (look for the `## Tests` section). + +- The test demonstrates you have the technical skills the project needs +- **Do not skip this** — proposals without a completed test are not considered +- Tests usually involve Python, ML frameworks (PyTorch / TensorFlow), or domain-specific tasks + +Allow **3–7 days** to complete a test properly. + +--- + +## Step 4 — Make Contact + +Once you have completed (or are close to completing) the evaluation test, email the admins: + +📧 **[human-ai@cern.ch](mailto:human-ai@cern.ch)** + +Include in your email: +- Your **name and university** +- The **project title(s)** you are interested in +- Your **CV** (PDF preferred) +- Your **evaluation test results** (or a note that you are completing them) + +> **Do NOT email mentors directly.** All first contact goes through `human-ai@cern.ch`. +> Mentors will reach out to you after reviewing your submission. + +--- + +## Step 5 — Write Your Proposal + +Once you are in contact with mentors, write your proposal on the +[official GSoC portal](https://summerofcode.withgoogle.com/) during the application window. + +A strong HumanAI proposal includes: + +| Section | What to Include | +|---|---| +| **Project summary** | What you will build, in 2–3 sentences | +| **Motivation** | Why this project, why you, why HumanAI | +| **Technical approach** | Specific methods, models, tools, datasets you plan to use | +| **Week-by-week timeline** | 12–14 week breakdown, one milestone per week | +| **Deliverables** | Concrete outputs — code, model, dataset, documentation | +| **About you** | Relevant skills, past projects, links to code (GitHub) | +| **Availability** | Hours per week, any planned breaks | + +**Length:** 3–5 pages is typical. Quality over quantity. + +### Tips from past students + +- Reference the evaluation test in your proposal — show you already understand the domain +- Be specific: "I will use Whisper v3 for transcription" beats "I will use a speech recognition model" +- Include a risk section — what could go wrong and how will you handle it? +- Proposals submitted early are read more carefully + +--- + +## Step 6 — GSoC Timeline (2026) + +| Date | Milestone | +|---|---| +| Now → April 8 | **Application window open** — submit via GSoC portal | +| April 8 | ⚠️ **Proposal submission deadline** | +| May 1–26 | Community Bonding Period — meet your mentor, set up tools | +| May 27 – July 14 | Coding Period 1 | +| July 14 | Midterm evaluation | +| July 14 – September 1 | Coding Period 2 | +| September 1 | Final evaluation & code submission | + +See the [official GSoC timeline](https://summerofcode.withgoogle.com/how-it-works/) for exact dates. + +--- + +## Common Mistakes to Avoid + +- ❌ Sending a generic proposal — mentors read dozens; personalize yours +- ❌ Skipping the evaluation test — automatic disqualification +- ❌ Emailing mentors directly — always go through `human-ai@cern.ch` +- ❌ Applying to 5+ projects without depth — focus wins +- ❌ Vague timelines — "Week 5: do ML work" is not a plan + +--- + +## Useful Links + +- [All 2026 Proposals](/gsoc/2026/summary.html) +- [Full Mentor List](/gsoc/2026/mentors.html) +- [GSoC 2026 Overview](/activities/gsoc2026.html) +- [Student Blogs from Past Years](/activities/studentblogs.html) +- [Official GSoC Rules](https://summerofcode.withgoogle.com/rules/) +- [Official GSoC How It Works](https://summerofcode.withgoogle.com/how-it-works/) + +--- + +## Questions? + +Email [human-ai@cern.ch](mailto:human-ai@cern.ch) — include your name, university, and the project you're interested in.