Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions _includes/github_profile_readme.liquid
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{% assign readme_offset = include.offset | default: 0 %}
{% assign readme_limit = include.limit | default: 100 %}
{% assign readme_content = include.github | github_profile_readme: readme_offset, readme_limit %}
{% if readme_content and readme_content != "" %}
<div class="github-readme mt-4">
{{ readme_content | markdownify }}
</div>
{% endif %}
45 changes: 35 additions & 10 deletions _includes/team_member.liquid
Original file line number Diff line number Diff line change
@@ -1,17 +1,42 @@
<div class="col mb-4">
{% assign avatar_url = nil %}
{% assign avatar_path = nil %}
{% if project.github %}
{% assign github_handle = project.github | replace: "@", "" %}
{% assign avatar_url = "https://avatars.githubusercontent.com/" | append: github_handle | append: "?s=200" %}
{% elsif project.img %}
{% if project.img contains "://" %}
{% assign avatar_url = project.img %}
{% else %}
{% assign avatar_path = project.img %}
{% endif %}
{% endif %}
<a href="{% if project.redirect %}{{ project.redirect }}{% else %}{{ project.url | relative_url }}{% endif %}" style="text-decoration: none; color: inherit;">
<div class="card h-100 hoverable border-0 bg-transparent">
{% if project.img %}
{% if avatar_url or avatar_path %}
<div class="text-center mt-3">
{%
include figure.liquid
loading="eager"
path=project.img
sizes = "150px"
alt="project thumbnail"
class="rounded-circle img-fluid z-depth-1"
style="width: 150px; height: 150px; object-fit: cover;"
%}
{% if avatar_url %}
{%
include figure.liquid
loading="eager"
url=avatar_url
sizes = "150px"
alt="project thumbnail"
class="rounded-circle img-fluid z-depth-1"
style="width: 150px; height: 150px; object-fit: cover;"
avoid_scaling=true
%}
{% else %}
{%
include figure.liquid
loading="eager"
path=avatar_path
sizes = "150px"
alt="project thumbnail"
class="rounded-circle img-fluid z-depth-1"
style="width: 150px; height: 150px; object-fit: cover;"
%}
{% endif %}
</div>
{% endif %}
<div class="card-body text-center p-2">
Expand Down
46 changes: 46 additions & 0 deletions _layouts/page.liquid
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,60 @@ layout: default
</style>
{% endif %}

{% assign is_team_page = false %}
{% if page.collection == "team" %}
{% assign is_team_page = true %}
{% elsif page.path and page.path contains "_team/" %}
{% assign is_team_page = true %}
{% endif %}

{% assign profile_image_url = nil %}
{% assign profile_image_path = nil %}
{% if is_team_page %}
{% if page.github %}
{% assign github_handle = page.github | replace: "@", "" %}
{% assign profile_image_url = "https://avatars.githubusercontent.com/" | append: github_handle | append: "?s=400" %}
{% elsif page.img %}
{% if page.img contains "://" %}
{% assign profile_image_url = page.img %}
{% else %}
{% assign profile_image_path = page.img %}
{% endif %}
{% endif %}
{% endif %}

<div class="post">
<header class="post-header">
<h1 class="post-title">{{ page.title }}</h1>
<p class="post-description">{{ page.description }}</p>
</header>

<article>
{% if is_team_page %}
{% if profile_image_url or profile_image_path %}
{% unless content contains 'profile mb-3' %}
<div class="profile mb-3 float-right mb-3">
<img src="{% if profile_image_url %}{{ profile_image_url }}{% else %}{{ profile_image_path | relative_url }}{% endif %}" class="img-fluid z-depth-1 rounded"/>
</div>
{% endunless %}
{% endif %}
{% endif %}
{{ content }}
{% if is_team_page and page.github and page.github_readme != false %}
{% assign raw_content = page.content | default: "" %}
{% assign has_manual_readme = false %}
{% if raw_content contains "remote_include" %}
{% assign has_manual_readme = true %}
{% endif %}
{% if raw_content contains "github_profile_readme" %}
{% assign has_manual_readme = true %}
{% endif %}
{% unless has_manual_readme %}
{% assign readme_offset = page.github_readme_offset | default: 0 %}
{% assign readme_limit = page.github_readme_limit | default: 100 %}
{% include github_profile_readme.liquid github=page.github offset=readme_offset limit=readme_limit %}
{% endunless %}
{% endif %}
</article>

{% if page.related_publications %}
Expand Down
2 changes: 1 addition & 1 deletion _pages/team.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ title: Team
description: Current and previous members of the lab
nav: true
nav_order: 6
display_categories: [Lab, Collaborators, Alumni]
display_categories: [Lab, Collaborators, PhD Alumni, Alumni]
horizontal: true
---

Expand Down
59 changes: 59 additions & 0 deletions _plugins/github-profile-readme.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
require 'open-uri'

module Jekyll
module GithubProfileReadme
@@readme_cache = {}

def github_profile_readme(username, offset = 0, limit = nil)
handle = sanitize_github_handle(username)
return '' if handle.empty?

content = fetch_readme(handle)
return '' if content.nil? || content.strip.empty?

lines = content.split(/\r?\n/)
offset_i = offset.to_i
limit_i = limit.nil? ? nil : limit.to_i

lines = lines.drop(offset_i) if offset_i.positive?
lines = lines.take(limit_i) if limit_i && limit_i.positive?

lines.join("\n")
end

private

def sanitize_github_handle(username)
return '' if username.nil?
username.to_s.strip.sub(/\A@/, '')
end

def fetch_readme(handle)
return @@readme_cache[handle] if @@readme_cache.key?(handle)

urls = [
"https://raw.githubusercontent.com/#{handle}/#{handle}/refs/heads/main/README.md",
"https://raw.githubusercontent.com/#{handle}/#{handle}/refs/heads/master/README.md"
]

content = nil
urls.each do |url|
begin
content = URI.open(url, "User-Agent" => "Jekyll").read

Check failure

Code scanning / CodeQL

Use of `Kernel.open` or `IO.read` or similar sinks with a non-constant value Critical

Call to URI.open with a non-constant value. Consider replacing it with URI().open.

Copilot Autofix

AI 26 days ago

In general, the fix is to avoid URI.open with a dynamic argument and instead either (a) construct a URI object explicitly and call open on it, which avoids the Kernel.open resolution that static analysis tools complain about, or (b) use a dedicated HTTP client (such as Net::HTTP) to fetch remote content. Both approaches make the intent explicit and avoid the ambiguous URI.open shortcut.

For this specific code, the minimal, behavior-preserving change is to replace URI.open(url, "User-Agent" => "Jekyll").read with URI(url).open("User-Agent" => "Jekyll").read. This continues to use open-uri (already required at the top of the file), preserves the custom User-Agent header, and keeps the same exception-handling behavior, while addressing the CodeQL complaint. No other parts of the file need to change, and no new imports are required because require 'open-uri' already brings in URI extensions.

Concretely, in _plugins/github-profile-readme.rb, inside fetch_readme(handle), change line 42 from content = URI.open(url, "User-Agent" => "Jekyll").read to content = URI(url).open("User-Agent" => "Jekyll").read. No additional methods, helper functions, or definitions are needed.

Suggested changeset 1
_plugins/github-profile-readme.rb

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/_plugins/github-profile-readme.rb b/_plugins/github-profile-readme.rb
--- a/_plugins/github-profile-readme.rb
+++ b/_plugins/github-profile-readme.rb
@@ -39,7 +39,7 @@
       content = nil
       urls.each do |url|
         begin
-          content = URI.open(url, "User-Agent" => "Jekyll").read
+          content = URI(url).open("User-Agent" => "Jekyll").read
           break if content && !content.strip.empty?
         rescue OpenURI::HTTPError, SocketError, Timeout::Error, Errno::ECONNRESET,
                Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::EHOSTUNREACH,
EOF
@@ -39,7 +39,7 @@
content = nil
urls.each do |url|
begin
content = URI.open(url, "User-Agent" => "Jekyll").read
content = URI(url).open("User-Agent" => "Jekyll").read
break if content && !content.strip.empty?
rescue OpenURI::HTTPError, SocketError, Timeout::Error, Errno::ECONNRESET,
Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::EHOSTUNREACH,
Copilot is powered by AI and may make mistakes. Always verify output.
break if content && !content.strip.empty?
rescue OpenURI::HTTPError, SocketError, Timeout::Error, Errno::ECONNRESET,
Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::EHOSTUNREACH,
Errno::ENETUNREACH
content = nil
rescue StandardError
content = nil
end
end

@@readme_cache[handle] = content
content
end
end
end

Liquid::Template.register_filter(Jekyll::GithubProfileReadme)
4 changes: 2 additions & 2 deletions _team/alvarez.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
layout: page
title: Marcelo Álvarez
description: MS in Architecture (Design Computation)
img: assets/img/team/Alvarez.jpg
img: # assets/img/team/Alvarez.jpg
importance: 41
category: Lab
category: Alumni
---

<div class="profile mb-3">
Expand Down
12 changes: 12 additions & 0 deletions _team/carroll.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
layout: page
title: Aura Carroll # https://github.com/Aura-Carroll
description: BArch Architecture
img: https://avatars.githubusercontent.com/u/256623668?v=4
importance: 74
category: Lab
---

<div class="profile mb-3">
<img src="https://avatars.githubusercontent.com/u/256623668?v=4" class="img-fluid z-depth-1 rounded"/>
</div>
2 changes: 1 addition & 1 deletion _team/mallika.md → _team/champaneria.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ layout: page
title: Mallika Champaneria
description: MArch Architecture
img: # https://avatars.githubusercontent.com/u/213637183?v=4
importance: 43
importance: 50
category: Alumni
---

Expand Down
4 changes: 2 additions & 2 deletions _team/cohen.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
layout: page
title: Joshua Cohen
description: # BS Civil Engineering
description: BS Civil Engineering
img: # assets/img/team/Cohen.jpg
importance: 1
importance: 78
category: Alumni
---

Expand Down
4 changes: 2 additions & 2 deletions _team/dogan.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
layout: page
title: Dr. Timur Dogan
description: Associate Professor at Cornell University
img: https://aap.cornell.edu/sites/default/files/styles/portrait-medium/public/person/prov-DSC_0263_2_270x270.jpg
img: https://aap.cornell.edu/wp-content/uploads/2025/05/prov-DSC_0263_2_270x270.jpg
importance: 1
category: Collaborators
---

<div class="profile mb-3">
<img src="https://aap.cornell.edu/sites/default/files/styles/portrait-medium/public/person/prov-DSC_0263_2_270x270.jpg" class="img-fluid z-depth-1 rounded"/>
<img src="https://aap.cornell.edu/wp-content/uploads/2025/05/prov-DSC_0263_2_270x270.jpg" class="img-fluid z-depth-1 rounded"/>
</div>
<br>

Expand Down
4 changes: 2 additions & 2 deletions _team/gomez.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
layout: page
title: Dr. Paula Gomez
description: Senior Research Engineer at Georgia Tech Research Institute
title: Dr. Paula Gómez
description: Principal Research Engineer at Georgia Tech Research Institute
img: https://energy.gtri.gatech.edu/files/2023/11/gomez-paula_1-1.jpg
importance: 1
category: Collaborators
Expand Down
12 changes: 12 additions & 0 deletions _team/hayashi.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
layout: page
title: Aiko Hayashi
description: BArch Architecture
img: https://avatars.githubusercontent.com/u/188734734?v=4
importance: 71
category: Lab
---

<div class="profile mb-3">
<img src="https://avatars.githubusercontent.com/u/188734734?v=4" class="img-fluid z-depth-1 rounded"/>
</div>
11 changes: 3 additions & 8 deletions _team/kastner.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,8 @@
layout: page
title: Dr. Patrick Kastner
description: Assistant Professor and Director of the Sustainable Urban Systems Lab at Georgia Tech.
img: assets/img/team/Kastner.jpg
github: kastnerp
github_readme: true
importance: 1
category: Lab
---

<div class="profile mb-3 float-right mb-3">
<img src="/assets/img/team/Kastner.jpg" class="img-fluid z-depth-1 rounded"/>
</div>

{% remote_include https://raw.githubusercontent.com/kastnerp/kastnerp/refs/heads/main/README.md %}
---
4 changes: 2 additions & 2 deletions _team/li.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
layout: page
title: Jiayi Li
description: BArch Architecture
img: assets/img/team/Li.jpg
img: # assets/img/team/Li.jpg
importance: 70
category: Lab
category: Alumni
---


Expand Down
2 changes: 1 addition & 1 deletion _team/rahimi.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ title: Sina Rahimi
description: PhD Student in Building Science at TMU (co-advisee)
img: assets/img/team/Rahimi.jpg
importance: 33
category: Lab
category: PhD Alumni
---

Co-advisee together with [Prof. Russell Richman](https://www.torontomu.ca/architectural-science/people/faculty/russell-richman/) and [Prof. Umberto Berardi](https://sites.google.com/site/umbertoberardihomepage/).
Expand Down
2 changes: 1 addition & 1 deletion _team/rothe.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ layout: page
title: Chinmay Rothe
description: MS in Architecture (High Performance Building)
img: # https://arch.gatech.edu/sites/default/files/2023-11/Rothe.jpeg
importance: 1
importance: 40
category: Alumni
---

Expand Down
20 changes: 20 additions & 0 deletions _team/thach.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
layout: page
title: Arthur Thach
description: MS Computer Science
img: https://avatars.githubusercontent.com/u/109921292?v=4
importance: 44
category: Lab
---

<div class="profile mb-3 float-right mb-3">
<img src="https://avatars.githubusercontent.com/u/109921292?v=4" class="img-fluid z-depth-1 rounded"/>
</div>


{% capture remote_content %}{% remote_include https://raw.githubusercontent.com/AtharvaBeesen/AtharvaBeesen/refs/heads/main/README.md %}{% endcapture %}
{% assign lines = remote_content | split: '
' %}
{% for line in lines offset: 1 limit: 100 %}
{{ line }}
{% endfor %}
2 changes: 1 addition & 1 deletion _team/vangelova.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ layout: page
title: Silvia Vangelova
description: OMS in Analytics (ISyE)
img: # assets/img/team/Vangelova.jpg
importance: 1
importance: 40
category: Alumni
---

Expand Down
3 changes: 2 additions & 1 deletion _team/yang.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ importance: 1
category: Collaborators
---

<div class="profile">
<div class="profile mb-3">
<img src="https://avatars.githubusercontent.com/u/47015598?v=4" class="img-fluid z-depth-1 rounded"/>
</div>
<br>

[Link to Website](https://yangyang.page/about.html)
11 changes: 8 additions & 3 deletions serve-compose.bat
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
REM Stop all running Docker containers
FOR /f "tokens=*" %%i IN ('docker ps -q') DO docker stop %%i
@echo off
setlocal

REM Stop only this project's containers
docker compose down --remove-orphans

REM Pull latest base images, then build and serve
docker compose pull
docker compose build
docker compose up
PAUSE
Loading
Loading