Compare commits
64 Commits
hugo-netli
...
eleventy-m
Author | SHA1 | Date | |
---|---|---|---|
|
3016fd8d5b | ||
|
6beea310df | ||
|
6f506c4273 | ||
|
32444ba72a | ||
|
6fd5369daf | ||
|
2d6be05eae | ||
|
a73d30d52f | ||
|
c08adab41c | ||
|
c8cf9dd738 | ||
|
041164f1d2 | ||
|
660c328c86 | ||
|
cd4e714cb6 | ||
|
df2d33e32a | ||
|
87ae00354d | ||
|
668a89a276 | ||
|
f612212911 | ||
|
914636e5fe | ||
|
3431132901 | ||
|
1798624bce | ||
|
40028ed830 | ||
|
6fe01ca1f8 | ||
|
a72c989a7d | ||
|
dd4671b7b8 | ||
|
46db1fd2e0 | ||
|
43157146e8 | ||
|
c4eaa3d82b | ||
|
c37990b434 | ||
|
be269cf9b5 | ||
|
b21d04854e | ||
|
2ebfb8ef48 | ||
|
fff17e62a1 | ||
|
6808d71ca5 | ||
|
91528d99a4 | ||
|
ceea34cb51 | ||
|
b94cfbdf76 | ||
|
255d6b1920 | ||
|
7fbedea388 | ||
|
f044b27a34 | ||
|
b10995bbef | ||
|
01298d0249 | ||
|
87f653243a | ||
|
d8cc6f8ef6 | ||
|
dbba94a679 | ||
|
2973477f69 | ||
|
942040d68b | ||
|
bc54bf81f7 | ||
|
bcca7464c3 | ||
|
f9f6b9331c | ||
|
94c8db5975 | ||
|
fdf342e205 | ||
|
c78fb4b0af | ||
|
4b02f3ef81 | ||
|
bacf147758 | ||
|
be4b6857fa | ||
|
13919c27e5 | ||
|
b5d59fec5e | ||
|
53f23794d4 | ||
|
c032f1ded8 | ||
|
46f7e466ec | ||
|
3e1d17c406 | ||
|
a2d4b78a37 | ||
|
0ac764778d | ||
|
0eab7a5df1 | ||
|
e31b13191b |
25
.editorconfig
Normal file
@@ -0,0 +1,25 @@
|
||||
# EditorConfig is awesome: https://editorconfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
insert_final_newline = false
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
# JSON Files
|
||||
[*.{json}]
|
||||
indent_size = 2
|
||||
|
||||
# Markdown Files
|
||||
[*.{md,mdx}]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
# Web Files
|
||||
[*.{html,js,css}]
|
||||
indent_size = 2
|
64
.eleventy.js
Normal file
@@ -0,0 +1,64 @@
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.addPassthroughCopy("./src/style.css");
|
||||
eleventyConfig.addPassthroughCopy("./src/assets");
|
||||
eleventyConfig.addPassthroughCopy("./src/scripts");
|
||||
|
||||
eleventyConfig.addFilter(
|
||||
"findAssociation",
|
||||
function (entries, associatedEntry) {
|
||||
return entries.filter(function (entry) {
|
||||
return entry.data.associatedEntry == associatedEntry;
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
eleventyConfig.addCollection("professionalExperience", (collection) => {
|
||||
return collection
|
||||
.getFilteredByGlob("./src/portfolio/professionalExperience/*.md")
|
||||
.sort((a, b) =>
|
||||
Number(a.data.displayOrder) < Number(b.data.displayOrder) ? 1 : -1,
|
||||
);
|
||||
});
|
||||
|
||||
eleventyConfig.addCollection("education", (collection) => {
|
||||
return collection
|
||||
.getFilteredByGlob("./src/portfolio/education/*.md")
|
||||
.sort((a, b) =>
|
||||
Number(a.data.displayOrder) < Number(b.data.displayOrder) ? 1 : -1,
|
||||
);
|
||||
});
|
||||
|
||||
eleventyConfig.addCollection("highlights", (collection) => {
|
||||
return collection
|
||||
.getFilteredByGlob("./src/portfolio/highlights/*.md")
|
||||
.sort((a, b) =>
|
||||
Number(a.data.displayOrder) > Number(b.data.displayOrder) ? 1 : -1,
|
||||
);
|
||||
});
|
||||
|
||||
eleventyConfig.addCollection("software", (collection) => {
|
||||
return collection
|
||||
.getFilteredByGlob("./src/personal/software/*.md")
|
||||
.sort((a, b) =>
|
||||
Number(a.data.displayOrder) > Number(b.data.displayOrder) ? 1 : -1,
|
||||
);
|
||||
});
|
||||
|
||||
eleventyConfig.addCollection("hardware", (collection) => {
|
||||
return collection
|
||||
.getFilteredByGlob("./src/personal/hardware/*.md")
|
||||
.sort((a, b) =>
|
||||
Number(a.data.displayOrder) > Number(b.data.displayOrder) ? 1 : -1,
|
||||
);
|
||||
});
|
||||
|
||||
return {
|
||||
markdownTemplateEngine: "njk",
|
||||
dataTemplateEngine: "njk",
|
||||
htmlTemplateEngine: "njk",
|
||||
dir: {
|
||||
input: "src",
|
||||
output: "dist",
|
||||
},
|
||||
};
|
||||
};
|
3
.envrc
Normal file
@@ -0,0 +1,3 @@
|
||||
source_url "https://raw.githubusercontent.com/cachix/devenv/82c0147677e510b247d8b9165c54f73d32dfd899/direnvrc" "sha256-7u4iDd1nZpxL4tCzmPG0dQgC5V+/44Ba+tHkPob1v2k="
|
||||
|
||||
use devenv
|
15
.gitignore
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
# eleventy output
|
||||
dist
|
||||
|
||||
# Devenv
|
||||
.devenv*
|
||||
devenv.local.nix
|
||||
|
||||
# direnv
|
||||
.direnv
|
||||
|
||||
# pre-commit
|
||||
.pre-commit-config.yaml
|
||||
|
||||
# NodeJS
|
||||
node_modules/
|
@@ -4,8 +4,8 @@ This is the repository for my personal website, which can be found at [sravanbal
|
||||
|
||||
## Development Progress
|
||||
|
||||
You can follow my current development plans for this website on my [GitHub project](https://github.com/balajsra/balajsra.github.io/projects/1).
|
||||
You can follow the development of this website on my [GitHub project](https://github.com/balajsra/sravanbalaji.com).
|
||||
|
||||
## Feedback & Suggestions
|
||||
|
||||
If you find any issues or have suggestions for ways to improve my website, please submit a bug or enhancement request on [GitHub](https://github.com/balajsra/balajsra.github.io/issues).
|
||||
If you find any issues or have suggestions for ways to improve my website, please submit a bug or enhancement request on [GitHub](https://github.com/balajsra/sravanbalaji.com/issues).
|
||||
|
Before Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 432 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 198 KiB |
Before Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 196 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 155 KiB |
@@ -1,179 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<script language="javascript" type="text/javascript" src="../common/header.txt"></script>
|
||||
<title>Docker</title>
|
||||
|
||||
<style>
|
||||
img {
|
||||
max-height: 500px;
|
||||
margin: auto;
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<script language="javascript" type="text/javascript" src="../common/navbar.txt"></script>
|
||||
|
||||
<body>
|
||||
<div class="container-fluid px-md-6">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-2">
|
||||
<!-- Nothing -->
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<!-- Title -->
|
||||
<h1>Getting Started with Docker</h1>
|
||||
|
||||
<!-- Author & Date/Time -->
|
||||
<p class="lead">
|
||||
Updated on March 18, 2020
|
||||
</p>
|
||||
|
||||
<!-- Preview Image -->
|
||||
<img class="img-fluid rounded" src="https://cdn.vox-cdn.com/thumbor/fbrTLtxuP2D29o8VJUaE-u3NKfU=/0x0:792x613/1200x800/filters:focal(300x237:426x363)/cdn.vox-cdn.com/uploads/chorus_image/image/59850273/Docker_logo_011.0.png" alt="">
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Post Content -->
|
||||
<h2><a name="introduction">Introduction</a></h2>
|
||||
<p>
|
||||
Throughout my college career in computer science, I have found the need to develop applications that will be deployed in a Linux environment. As a windows user, I have usually turned to a couple of different options: virtual machines, <a href="https://docs.microsoft.com/en-us/windows/wsl/about" target="_blank">Windows Subsystem for Linux</a>, or <a href="https://www.cygwin.com" target="_blank">Cygwin</a>. Recently, I discovered an alternative method for building and testing Linux apps that is especially useful for collaboration and deployment. Docker allows you to package an OS and all the necessary dependencies into a <b>docker image</b>. You can then spin up an instance of this image called a <b>docker container</b> in which you can run your source code. Jake Wright's video was incredibly helpful in my understanding of what docker is, how it's different from virtual machines, and how to use it.
|
||||
</p>
|
||||
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<iframe class="embed-responsive-item" src="https://www.youtube-nocookie.com/embed/YFl2mCHdv24" allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2><a name="installing_docker">Installing Docker</a></h2>
|
||||
<p>
|
||||
Depending on your host machine's operating system, you will install one of the following Docker products. If you have macOS or Windows, your first option should be Docker Desktop. Check if you meet the system requirements. If you do not, Docker Toolbox is the legacy option that uses Oracle VirtualBox rather than Hyper-V or HyperKit for virtualization. I am using a computer with Windows 10 Home, so I use Docker Toolbox for Windows. This blog post will discuss some solutions to edge-case issues with Docker Toolbox that Docker Desktop users will hopefully not have to deal with.
|
||||
</p>
|
||||
<ul>
|
||||
<li>macOS</li>
|
||||
<ul>
|
||||
<li><a href="https://docs.docker.com/docker-for-mac/install/" target="_blank">Docker Desktop for Mac</a></li>
|
||||
<li><a href="https://docs.docker.com/toolbox/toolbox_install_mac/" target="_blank">Docker Toolbox for macOS</a> (Legacy)</li>
|
||||
</ul>
|
||||
|
||||
<li>Windows</li>
|
||||
<ul>
|
||||
<li><a href="https://docs.docker.com/docker-for-windows/install/" target="_blank">Docker Desktop for Windows</a></li>
|
||||
<ul>
|
||||
<li><a href="https://chocolatey.org/packages/docker-desktop/2.2.0.4" target="_blank">Chocolatey</a>: <code>choco install docker-desktop</code></li>
|
||||
</ul>
|
||||
|
||||
<li><a href="https://docs.docker.com/toolbox/toolbox_install_windows/" target="_blank">Docker Toolbox for Windows</a> (Legacy)</li>
|
||||
<ul>
|
||||
<li><a href="https://chocolatey.org/packages/docker-toolbox" target="_blank">Chocolatey</a>: <code>choco install docker-toolbox</code></li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<li>Linux</li>
|
||||
<ul>
|
||||
<li><a href="https://docs.docker.com/install/linux/docker-ce/centos/" target="_blank">Docker Engine - Community for CentOS</a></li>
|
||||
<li><a href="https://docs.docker.com/install/linux/docker-ce/debian/" target="_blank">Docker Engine - Community for Debian</a></li>
|
||||
<li><a href="https://docs.docker.com/install/linux/docker-ce/fedora/" target="_blank">Docker Engine - Community for Fedora</a></li>
|
||||
<li><a href="https://docs.docker.com/install/linux/docker-ce/ubuntu/" target="_blank">Docker Engine - Community for Ubuntu</a></li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<h3>Docker Toolbox & WSL</h3>
|
||||
<p>
|
||||
As mentioned previously, I am using Docker Toolbox since Windows 10 Home does not support Hyper-V for virtualization with Docker Desktop. You can run docker toolbox in a command prompt or powershell terminal, but I personally prefer to use WSL because I am more familiar with bash terminal commands. If you are interested in this setup, continue reading this section. Otherwise, you can skip ahead.
|
||||
</p>
|
||||
|
||||
<h4>Installing WSL</h4>
|
||||
<p>
|
||||
The default way to install WSL is through the <a href="https://docs.microsoft.com/en-us/windows/wsl/about" target="_blank">Microsoft Store</a>. This will install WSL on your system drive (e.g. C:\). If you are like me and don't want to install it on your system drive, follow the instructions <a href="https://kontext.tech/column/tools/308/how-to-install-windows-subsystem-for-linux-on-a-non-c-drive" target="_blank">here</a>.
|
||||
</p>
|
||||
|
||||
<h4>Setting Up Docker Toolbox with WSL</h4>
|
||||
<p>
|
||||
After installing WSL, follow the instructions in <a href="https://medium.com/@joaoh82/setting-up-docker-toolbox-for-windows-home-10-and-wsl-to-work-perfectly-2fd34ed41d51" target="_blank">Setting Up Docker Toolbox for Windows Home 10 and WSL to Work Perfectly!</a> starting with <b>Install Docker and Docker Compose within WSL</b>. As you will have seen near the end of that post, there are some extra steps needed to ensure that volume mounts work. After setting <code>root = /</code>, you will need to configure shared folders for the <code>default</code> docker machine in VirtualBox.
|
||||
</p>
|
||||
|
||||
<h4>Shared Folder Configuration for Volume Mounting</h4>
|
||||
<p>
|
||||
I configured all of my drives as shared folders so I can mount any folders on my host machine to any docker containers I run. In your WSL terminal, run <code>docker-machine.exe start</code> to start the <code>default</code> docker machine created by the Docker Quickstart Terminal. After your docker machine is running, open the shared folder settings as shown in <a href="https://medium.com/@Charles_Stover/fixing-volumes-in-docker-toolbox-4ad5ace0e572" target="_blank">Fixing Volumes in Docker Toolbox</a>. The image below shows how <code>C:\</code> on my host computer is mounted at <code>/</code> in folder <code>c</code> on my docker machine such that <code>C:\</code> maps to <code>/c</code>. Make sure you have enabled <code>Auto-mount</code> and <code>Make Permanent</code>. Click <b>OK</b> to save all settings, then go back to the WSL terminal and run <code>docker-machine.exe restart default</code>. Now your docker machine should be properly configured to allow volume mounting.
|
||||
</p>
|
||||
<img class="img-fluid mx-auto d-block" src="../assets/blog_posts/Docker/virtual_box_shared_folder.jpg">
|
||||
|
||||
<h4>Increase Docker Machine Resources</h4>
|
||||
<p>
|
||||
One issue I ran into with the default settings for the <code>default</code> docker machine is the amount of RAM allocated to it. I attempted to build the <a href="https://github.com/borglab/gtsam" target="_blank">GTSAM</a> library inside a docker container and ran into an <i>internal compiler error: Killed (program cc1plus)</i>. As mentioned <a href="https://github.com/docker/for-win/issues/403" target="_blank">here</a>, the solution is to increase the RAM allocated to the docker machine in VirtualBox. In the WSL terminal, run <code>docker-machine.exe stop</code> to shutdown the docker machine. When this is complete, right click on the <code>default</code> docker machine in VirtualBox and open <b>Settings</b>. In the <b>System</b> tab, increase <i>Base Memory</i>. Similar to virtual machines, I would not recommend allocating more than half of your system's RAM. For example, my computer has 16 GB of RAM, so I would only recommend allocating up to 8 GB of RAM to the docker machine. You can look through the other options, such as number of allocated processor cores, as well if you wish.
|
||||
</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2><a name="building_images_and_running_containers">Building Images & Running Containers</a></h2>
|
||||
<p>
|
||||
To learn about Dockerfiles and a basic example, check out the video in the <a href="#introduction">introduction</a>. To learn about Docker Compose, check out Jake Wright's video on the topic.
|
||||
</p>
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<iframe class="embed-responsive-item" src="https://www.youtube-nocookie.com/embed/Qw9zlE3t8Ko" allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2><a name="x_forwarding">X Forwarding for GUI Applications</a></h2>
|
||||
<p>
|
||||
In a virtual machine, you can easily run GUI applications such as a web browser, text editor, etc. In a docker container, the process is a little bit different. You will need to download an X Server such as <a href="https://sourceforge.net/projects/vcxsrv/" target="_blank">VcXsrv Windows X Server</a>. If you are using <a href="https://chocolatey.org/packages/vcxsrv" target="_blank">chocolatey</a>, you can run <code>choco install vcxsrv</code>.
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://dev.to/darksmile92/run-gui-app-in-linux-docker-container-on-windows-host-4kde" target="_blank">Run GUI app in linux docker container on windows host</a> provides a great explanation of why you would want to do this and how to run your docker container. The post discusses how to set your IP address as the <code>DISPLAY</code> environment variable that is passed to docker via the <code>-e DISPLAY=$DISPLAY</code> command line argument. You can alternatively pass your IP address as an environment variable in your docker compose file. This is shown in <a href="https://github.com/MAAV-Software/ros-tutorial" target="_blank">MAAV's ROS Tutorial</a> (reproduced below). The main settings to look at below are <code>environment</code> and <code>network_mode</code>. Set the <code>DISPLAY</code> environment variable to <code>[ip_address]:0.0</code> and set <code>network_mode: "host"</code>.
|
||||
</p>
|
||||
<pre>
|
||||
<code>
|
||||
# docker-compose.yml
|
||||
version: "2"
|
||||
|
||||
services:
|
||||
ros-demo:
|
||||
image: ros-demo
|
||||
privileged: true
|
||||
volumes:
|
||||
# Mount the current directory do everything in /tutorial within docker
|
||||
- .:/tutorial:rw
|
||||
environment:
|
||||
- DISPLAY=1.1.1.1:0.0 # Change 1.1.1.1 to your IP Address
|
||||
network_mode: "host"
|
||||
container_name: ros-demo
|
||||
command: "/bin/bash --init-file scripts/source-ros.sh" #source ros automatically
|
||||
</code>
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2><a name="helpful_commands">Helpful Docker Commands</a></h2>
|
||||
<p>
|
||||
<ul>
|
||||
<li>System Prune to clear space on Docker Machine</li>
|
||||
<ul>
|
||||
<li><code>docker system prune --volumes</code></li>
|
||||
</ul>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2><a name="conclusion">Conclusion</a></h2>
|
||||
<p>
|
||||
Hopefully by this point, you have a better understanding of what docker is, why you might want to use it, and how to get a docker machine setup so you can build and run docker containers. If you have any questions or suggestions for improvement, feel free to <a href="../web_pages/about.html#contact_me">contact me</a>.
|
||||
</p>
|
||||
|
||||
<hr>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<!-- Nothing -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<footer>
|
||||
<script language="javascript" type="text/javascript" src="../common/footer.txt"></script>
|
||||
</footer>
|
||||
</html>
|
@@ -1,9 +0,0 @@
|
||||
<div class="container-fluid px-md-6">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-12">
|
||||
<small>
|
||||
Copyright © 2019 Sravan Balaji under <a rel="license" href="https://docs.google.com/gview?url=https://github.com/balajsra/balajsra.github.io/raw/master/LICENSE" target="_blank">MIT License</a>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@@ -1 +0,0 @@
|
||||
document.write('<div class="container-fluid px-md-6"> <div class="row align-items-center"> <div class="col-md-12"> <small> Copyright © 2019 Sravan Balaji under <a rel="license" href="https://docs.google.com/gview?url=https://github.com/balajsra/balajsra.github.io/raw/master/LICENSE" target="_blank">MIT License</a> </small> </div> </div> </div>')
|
@@ -1,22 +0,0 @@
|
||||
<!--Required meta tags-->
|
||||
<meta charset="utf-8">
|
||||
<meta name="author" content="Sravan Balaji">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- Latest compiled and minified CSS -->
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
|
||||
|
||||
<!-- jQuery library -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
|
||||
|
||||
<!-- Popper JS -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
|
||||
|
||||
<!-- Latest compiled JavaScript -->
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
|
||||
|
||||
<!-- Stylesheet -->
|
||||
<link rel="stylesheet" type="text/css" href="../common/styles.css"/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" href="../assets/branding/favicon.ico" type="image/x-icon"/>
|
@@ -1 +0,0 @@
|
||||
document.write('<!--Required meta tags--> <meta charset="utf-8"> <meta name="author" content="Sravan Balaji"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"> <!-- jQuery library --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <!-- Popper JS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <!-- Latest compiled JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script> <!-- Stylesheet --> <link rel="stylesheet" type="text/css" href="../common/styles.css"/> <!-- Favicon --> <link rel="icon" href="../assets/branding/favicon.ico" type="image/x-icon"/>')
|
@@ -1,111 +0,0 @@
|
||||
<nav class="navbar my-nav navbar-expand-md fixed-top">
|
||||
<!-- Brand -->
|
||||
<a class="navbar-brand" href="../web_pages/index.html">
|
||||
<img src="../assets/branding/logo.png" alt="Icon" width="30px" height="30px" class="d-inline-block align-top">
|
||||
<img src="../assets/branding/name.png" alt="Name" height="30px" class="d-inline-block align-center">
|
||||
</a>
|
||||
|
||||
<!-- Toggler/collapsibe Button -->
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<!-- Navbar links -->
|
||||
<div class="collapse navbar-collapse" id="collapsibleNavbar">
|
||||
<ul class="navbar-nav">
|
||||
<!-- About -->
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="../web_pages/about.html" id="navbardrop" data-toggle="dropdown">
|
||||
About
|
||||
</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="../web_pages/about.html#bio">
|
||||
Bio
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/about.html#contact_me">
|
||||
Contact Me
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- Portfolio -->
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="../web_pages/portfolio.html" id="navbardrop" data-toggle="dropdown">
|
||||
Portfolio
|
||||
</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="../web_pages/portfolio.html#resume">
|
||||
Resume
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/portfolio.html#education">
|
||||
Education
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/portfolio.html#professional_experience">
|
||||
Professional Experience
|
||||
</a>
|
||||
<!-- <a class="dropdown-item" href="../web_pages/portfolio.html#research">
|
||||
Research
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/portfolio.html#projects">
|
||||
Projects
|
||||
</a> -->
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- Personal -->
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="../web_pages/personal.html" id="navbardrop" data-toggle="dropdown">
|
||||
Personal
|
||||
</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="../web_pages/personal.html#software">
|
||||
Software
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/personal.html#hardware">
|
||||
Hardware
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/personal.html#video_games">
|
||||
Video Games
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/personal.html#podcasts">
|
||||
Podcasts
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/personal.html#music">
|
||||
Music
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- Blog -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="../web_pages/blog.html">
|
||||
Blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<!-- Documentation -->
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="../web_pages/documentation.html" id="navbardrop" data-toggle="dropdown">
|
||||
Documentation
|
||||
</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="../web_pages/documentation.html#introduction">
|
||||
Introduction
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/documentation.html#website_hosting">
|
||||
Website Hosting
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/documentation.html#web_design">
|
||||
Web Design
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/documentation.html#aesthetics">
|
||||
Aesthetics
|
||||
</a>
|
||||
<a class="dropdown-item" href="../web_pages/documentation.html#inspiration">
|
||||
Inspiration
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
@@ -1 +0,0 @@
|
||||
document.write('<nav class="navbar my-nav navbar-expand-md fixed-top"> <!-- Brand --> <a class="navbar-brand" href="../web_pages/index.html"> <img src="../assets/branding/logo.png" alt="Icon" width="30px" height="30px" class="d-inline-block align-top"> <img src="../assets/branding/name.png" alt="Name" height="30px" class="d-inline-block align-center"> </a> <!-- Toggler/collapsibe Button --> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> <!-- Navbar links --> <div class="collapse navbar-collapse" id="collapsibleNavbar"> <ul class="navbar-nav"> <!-- About --> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="../web_pages/about.html" id="navbardrop" data-toggle="dropdown"> About </a> <div class="dropdown-menu"> <a class="dropdown-item" href="../web_pages/about.html#bio"> Bio </a> <a class="dropdown-item" href="../web_pages/about.html#contact_me"> Contact Me </a> </div> </li> <!-- Portfolio --> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="../web_pages/portfolio.html" id="navbardrop" data-toggle="dropdown"> Portfolio </a> <div class="dropdown-menu"> <a class="dropdown-item" href="../web_pages/portfolio.html#resume"> Resume </a> <a class="dropdown-item" href="../web_pages/portfolio.html#education"> Education </a> <a class="dropdown-item" href="../web_pages/portfolio.html#professional_experience"> Professional Experience </a> <!-- <a class="dropdown-item" href="../web_pages/portfolio.html#research"> Research </a> <a class="dropdown-item" href="../web_pages/portfolio.html#projects"> Projects </a> --> </div> </li> <!-- Personal --> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="../web_pages/personal.html" id="navbardrop" data-toggle="dropdown"> Personal </a> <div class="dropdown-menu"> <a class="dropdown-item" href="../web_pages/personal.html#software"> Software </a> <a class="dropdown-item" href="../web_pages/personal.html#hardware"> Hardware </a> <a class="dropdown-item" href="../web_pages/personal.html#video_games"> Video Games </a> <a class="dropdown-item" href="../web_pages/personal.html#podcasts"> Podcasts </a> <a class="dropdown-item" href="../web_pages/personal.html#music"> Music </a> </div> </li> <!-- Blog --> <li class="nav-item"> <a class="nav-link" href="../web_pages/blog.html"> Blog </a> </li> <!-- Documentation --> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="../web_pages/documentation.html" id="navbardrop" data-toggle="dropdown"> Documentation </a> <div class="dropdown-menu"> <a class="dropdown-item" href="../web_pages/documentation.html#introduction"> Introduction </a> <a class="dropdown-item" href="../web_pages/documentation.html#website_hosting"> Website Hosting </a> <a class="dropdown-item" href="../web_pages/documentation.html#web_design"> Web Design </a> <a class="dropdown-item" href="../web_pages/documentation.html#aesthetics"> Aesthetics </a> <a class="dropdown-item" href="../web_pages/documentation.html#inspiration"> Inspiration </a> </div> </li> </ul> </div> </nav>')
|
@@ -1,67 +0,0 @@
|
||||
/***********
|
||||
* General *
|
||||
***********/
|
||||
body {
|
||||
background-color: #E8EEF2;
|
||||
padding-top: 65px;
|
||||
font-family: Arial, Verdana, Tahoma, sans-serif;
|
||||
}
|
||||
|
||||
/****************
|
||||
* Main Content *
|
||||
****************/
|
||||
.my-nav {
|
||||
background: #00274C;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.my-nav .nav-link {
|
||||
color: #FFCB05;
|
||||
}
|
||||
|
||||
.my-nav .nav-link:hover {
|
||||
color: #30C5FF;
|
||||
}
|
||||
|
||||
.my-nav .navbar-toggler-icon {
|
||||
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 39, 76, 1)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.my-nav .navbar-toggler {
|
||||
background: #FFCB05; /* pick your color */
|
||||
}
|
||||
|
||||
.container-fluid {
|
||||
color: #000000;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.container-fluid h1 {
|
||||
padding: 10px 10px;
|
||||
background: #00274C;
|
||||
color: #FFCB05;
|
||||
}
|
||||
|
||||
.row {
|
||||
/* border: 1px solid red; */
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* Add an invisible target before
|
||||
anchor links so navbar doesn't
|
||||
block content */
|
||||
:target::before {
|
||||
content: "";
|
||||
display: block;
|
||||
margin-top: -80px;
|
||||
height: 80px;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
/* Side Padding */
|
||||
@media (min-width: 768px) {
|
||||
.px-md-6 {
|
||||
padding-left: 12.5% !important;
|
||||
padding-right: 12.5% !important;
|
||||
}
|
||||
}
|
103
devenv.lock
Normal file
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"nodes": {
|
||||
"devenv": {
|
||||
"locked": {
|
||||
"dir": "src/modules",
|
||||
"lastModified": 1739444039,
|
||||
"owner": "cachix",
|
||||
"repo": "devenv",
|
||||
"rev": "1235cd13f47df6ad19c8a183c6eabc1facb7c399",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"dir": "src/modules",
|
||||
"owner": "cachix",
|
||||
"repo": "devenv",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1733328505,
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"git-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1737465171,
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"gitignore": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"git-hooks",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1709087332,
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1733477122,
|
||||
"owner": "cachix",
|
||||
"repo": "devenv-nixpkgs",
|
||||
"rev": "7bd9e84d0452f6d2e63b6e6da29fe73fac951857",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"ref": "rolling",
|
||||
"repo": "devenv-nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"devenv": "devenv",
|
||||
"git-hooks": "git-hooks",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"pre-commit-hooks": [
|
||||
"git-hooks"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
20
devenv.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{ pkgs, lib, config, inputs, ... }:
|
||||
|
||||
{
|
||||
# https://devenv.sh/packages/
|
||||
packages = [
|
||||
pkgs.git
|
||||
pkgs.yaml-language-server
|
||||
pkgs.typescript-language-server
|
||||
pkgs.nodePackages.prettier
|
||||
];
|
||||
|
||||
# https://devenv.sh/languages/
|
||||
# languages.rust.enable = true;
|
||||
languages.javascript = {
|
||||
enable = true;
|
||||
npm.enable = true;
|
||||
npm.install.enable = true;
|
||||
};
|
||||
languages.nix.enable = true;
|
||||
}
|
15
devenv.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json
|
||||
inputs:
|
||||
nixpkgs:
|
||||
url: github:cachix/devenv-nixpkgs/rolling
|
||||
|
||||
# If you're using non-OSS software, you can set allowUnfree to true.
|
||||
# allowUnfree: true
|
||||
|
||||
# If you're willing to use a package that's vulnerable
|
||||
# permittedInsecurePackages:
|
||||
# - "openssl-1.1.1w"
|
||||
|
||||
# If you have more than one devenv you can merge them
|
||||
#imports:
|
||||
# - ./backend
|
@@ -1,4 +0,0 @@
|
||||
<!--Dummy File to Redirect to index.html in Web Pages Folder-->
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0; url=https://balajsra.github.io/web_pages/index.html">
|
||||
</head>
|
22
justfile
Normal file
@@ -0,0 +1,22 @@
|
||||
set shell := ["bash", "-c"]
|
||||
|
||||
PORT := "1280"
|
||||
|
||||
# List just commands by default
|
||||
default:
|
||||
@just --list
|
||||
|
||||
# Update development environment
|
||||
update:
|
||||
devenv update && \
|
||||
npm update
|
||||
|
||||
# Run development server
|
||||
dev:
|
||||
npx @11ty/eleventy \
|
||||
--serve \
|
||||
--port={{ PORT }};
|
||||
|
||||
# Build static site files
|
||||
build-site:
|
||||
npx @11ty/eleventy
|
2201
package-lock.json
generated
Normal file
5
package.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"@11ty/eleventy": "latest"
|
||||
}
|
||||
}
|
28
src/_data/contact.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"label": "Email",
|
||||
"icon": "/assets/about/email.png",
|
||||
"link": "mailto:balajsra@umich.edu",
|
||||
"displayText": "balajsra@umich.edu"
|
||||
},
|
||||
{
|
||||
"label": "LinkedIn",
|
||||
"icon": "/assets/about/linkedin.png",
|
||||
"link": "https://www.linkedin.com/in/sravan-balaji",
|
||||
"displayText": "sravan-balaji"
|
||||
},
|
||||
{
|
||||
"label": "GitHub",
|
||||
"icon": "/assets/about/github.png",
|
||||
"link": "https://github.com/balajsra",
|
||||
"displayText": "balajsra"
|
||||
},
|
||||
{
|
||||
"label": "YouTube",
|
||||
"icon": "/assets/about/youtube.png",
|
||||
"link": "https://www.youtube.com/channel/UC-xFJ4IKdogbpoQdQf2mgaA",
|
||||
"displayText": "Sravan Balaji"
|
||||
}
|
||||
]
|
||||
}
|
37
src/_data/navigation.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"text": "About",
|
||||
"url": "/about/",
|
||||
"sections": [
|
||||
"Bio",
|
||||
"Contact Me"
|
||||
]
|
||||
},
|
||||
{
|
||||
"text": "Portfolio",
|
||||
"url": "/portfolio/",
|
||||
"sections": [
|
||||
"Resume",
|
||||
"Professional Experience",
|
||||
"Education",
|
||||
"Research"
|
||||
]
|
||||
},
|
||||
{
|
||||
"text": "Personal",
|
||||
"url": "/personal/",
|
||||
"sections": []
|
||||
},
|
||||
{
|
||||
"text": "Blog",
|
||||
"url": "/blog/",
|
||||
"sections": []
|
||||
},
|
||||
{
|
||||
"text": "Documentation",
|
||||
"url": "/documentation/",
|
||||
"sections": []
|
||||
}
|
||||
]
|
||||
}
|
7
src/_data/site.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"author": "Sravan Balaji",
|
||||
"url": "https://sravanbalaji.com",
|
||||
"copyrightYear": 2019,
|
||||
"licenseFile": "https://github.com/balajsra/sravanbalaji.com/blob/master/LICENSE",
|
||||
"licenseName": "MIT License"
|
||||
}
|
38
src/_includes/layouts/about.html
Normal file
@@ -0,0 +1,38 @@
|
||||
<!doctype html>
|
||||
{% extends "layouts/base.html" %}
|
||||
{% from "macros.html" import sectionHeading %}
|
||||
{% block content %}
|
||||
<div class="container-fluid px-md-6">
|
||||
{{ sectionHeading("Bio") }}
|
||||
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-3">
|
||||
<img
|
||||
class="img-fluid mx-auto d-block"
|
||||
src="{{ profilePicture }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
{{ content | safe }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ sectionHeading("Contact Me") }}
|
||||
|
||||
<div class="row align-items-center">
|
||||
{% for item in contact.items %}
|
||||
<div class="col-md-{{ 12//contact.items.length }} text-center">
|
||||
<a href="{{ item.link }}" target="_blank">
|
||||
<img
|
||||
class="img-fluid mx-auto d-block"
|
||||
width=50%
|
||||
alt="{{ item.label }}"
|
||||
src="{{ item.icon }}"
|
||||
/>
|
||||
</a>
|
||||
<p><br /><b>{{ item.label }}:</b> {{ item.displayText }}</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
15
src/_includes/layouts/base.html
Normal file
@@ -0,0 +1,15 @@
|
||||
<!doctype html>
|
||||
<html lang="en" color-mode="light">
|
||||
<head>
|
||||
{% include "partials/site-head.html" %}
|
||||
{% include "partials/navigation.html" %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main tabindex="-1" id="main-content">{% block content %}{% endblock %}</main>
|
||||
</body>
|
||||
|
||||
<footer>
|
||||
{% include "partials/footer.html" %}
|
||||
</footer>
|
||||
</html>
|
14
src/_includes/layouts/home.html
Normal file
@@ -0,0 +1,14 @@
|
||||
<!doctype html>
|
||||
{% extends "layouts/base.html" %}
|
||||
{% from "macros.html" import sectionHeading %}
|
||||
{% block content %}
|
||||
<div class="container-fluid px-md-6">
|
||||
{{ sectionHeading("Welcome") }}
|
||||
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-12">
|
||||
{{ content | safe }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
8
src/_includes/layouts/personal.html
Normal file
@@ -0,0 +1,8 @@
|
||||
<!doctype html>
|
||||
{% extends "layouts/base.html" %}
|
||||
{% block content %}
|
||||
<div class="container-fluid px-md-6">
|
||||
{% include "partials/software.html" %}
|
||||
{% include "partials/hardware.html" %}
|
||||
</div>
|
||||
{% endblock %}
|
10
src/_includes/layouts/portfolio.html
Normal file
@@ -0,0 +1,10 @@
|
||||
<!doctype html>
|
||||
{% extends "layouts/base.html" %}
|
||||
{% block content %}
|
||||
<div class="container-fluid px-md-6">
|
||||
{% include "partials/resume.html" %}
|
||||
{% include "partials/professionalExperience.html" %}
|
||||
{% include "partials/education.html" %}
|
||||
<!-- {% include "partials/research.html" %} -->
|
||||
</div>
|
||||
{% endblock %}
|
79
src/_includes/macros.html
Normal file
@@ -0,0 +1,79 @@
|
||||
<!doctype html>
|
||||
{% macro sectionHeading(name) %}
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-12">
|
||||
<h1>
|
||||
<a name="{{ name | slugify }}">{{ name }}</a>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
||||
{% macro portfolioWithHighlights(portfolio, highlights) %}
|
||||
{% for entry in portfolio %}
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<a href="{{ entry.data.url }}" target="_blank">
|
||||
<img
|
||||
class="img-fluid mx-auto d-block"
|
||||
width="100%"
|
||||
src="{{ entry.data.logo }}"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<h2><b>{{ entry.data.association }}</b></h2>
|
||||
<h3>{{ entry.data.entryTitle }}</h3>
|
||||
<h4>{{ entry.data.location }}</h4>
|
||||
<h5><i>{{ entry.data.startDate }} - {{ entry.data.endDate }}</i></h5>
|
||||
{{ entry.content | safe }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% set associatedHighlights = (highlights | findAssociation(entry.data.id)) %}
|
||||
{% if associatedHighlights.length > 0 %}
|
||||
<div class="col-md-6">
|
||||
<div class="accordion accordion-flush" id="{{ entry.data.id }}">
|
||||
{% for highlight in associatedHighlights %}
|
||||
{% set highlightSlug = (entry.data.id + '-' + highlight.data.name | slugify) %}
|
||||
<div class="accordion-item">
|
||||
<div class="accordion-header"">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#{{ highlightSlug }}">
|
||||
<b>{{ highlight.data.name }}</b>
|
||||
</button>
|
||||
</div>
|
||||
<div id="{{ highlightSlug }}" class="accordion-collapse collapse" data-bs-parent="#{{ entry.data.id }}">
|
||||
<div class="accordion-body">
|
||||
{{ highlight.content | safe }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endmacro %}
|
||||
|
||||
{% macro personalItems(personal) %}
|
||||
{% for entry in personal %}
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<a href="{{ entry.data.url }}" target="_blank">
|
||||
<img
|
||||
class="img-fluid mx-auto d-block"
|
||||
width="50%"
|
||||
src="{{ entry.data.logo }}"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<h2><b>{{ entry.data.category }}: <a href="{{ entry.data.url }}" target="_blank">{{ entry.data.name }}</a></b></h2>
|
||||
{{ entry.content | safe }}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endmacro %}
|
6
src/_includes/partials/education.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<!doctype html>
|
||||
{% from "macros.html" import sectionHeading %}
|
||||
{{ sectionHeading("Education") }}
|
||||
|
||||
{% from "macros.html" import portfolioWithHighlights %}
|
||||
{{ portfolioWithHighlights(collections.education, collections.highlights) }}
|
15
src/_includes/partials/footer.html
Normal file
@@ -0,0 +1,15 @@
|
||||
<!doctype html>
|
||||
<div class="container-fluid px-md-6">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-12">
|
||||
<small>
|
||||
Copyright © {{ site.copyrightYear }} {{ site.author }} under
|
||||
<a
|
||||
rel="license"
|
||||
href="{{ site.licenseFile }}"
|
||||
target="_blank"
|
||||
>{{ site.licenseName }}</a>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
6
src/_includes/partials/hardware.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<!doctype html>
|
||||
{% from "macros.html" import sectionHeading %}
|
||||
{{ sectionHeading("Hardware") }}
|
||||
|
||||
{% from "macros.html" import personalItems %}
|
||||
{{ personalItems(collections.hardware) }}
|
48
src/_includes/partials/navigation.html
Normal file
@@ -0,0 +1,48 @@
|
||||
<!doctype html>
|
||||
<header role="banner" class="site-head">
|
||||
<nav class="navbar my-nav navbar-expand-md fixed-top">
|
||||
<div class="container-fluid">
|
||||
<!-- Brand -->
|
||||
<a class="navbar-brand" href="/">
|
||||
<img src="/assets/branding/logo.png" alt="Icon" width="30px" height="30px"
|
||||
class="d-inline-block align-top" />
|
||||
<img src="/assets/branding/name.png" alt="Name" height="30px" class="d-inline-block align-center" />
|
||||
</a>
|
||||
|
||||
<!-- Toggler/collapsible Button -->
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarToggler">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<!-- Navbar links -->
|
||||
<div class="collapse navbar-collapse" id="navbarToggler">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
{% for item in navigation.items %}
|
||||
{% if item.sections.length > 0 %}
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" id="{{ item.text | slugify }}" role="button" data-bs-toggle="dropdown" href="{{ item.url }}"><b>{{ item.text }}</b></a>
|
||||
<ul class="dropdown-menu">
|
||||
{% for section in item.sections %}
|
||||
<li><a class="dropdown-item" href="{{ item.url }}#{{ section | slugify }}">{{ section }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ item.url }}"><b>{{ item.text }}</b></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Dark Mode Toggle -->
|
||||
<!-- Reference: https://github.com/coliff/dark-mode-switch -->
|
||||
<div class="form-check form-switch">
|
||||
<input type="checkbox" class="form-check-input" id="darkSwitch" />
|
||||
<label class="form-check-label" for="darkSwitch" id="darkSwitchLabel">Dark Mode</label>
|
||||
</div>
|
||||
<script src="/scripts/dark-mode-switch.min.js"></script>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
6
src/_includes/partials/professionalExperience.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<!doctype html>
|
||||
{% from "macros.html" import sectionHeading %}
|
||||
{{ sectionHeading("Professional Experience") }}
|
||||
|
||||
{% from "macros.html" import portfolioWithHighlights %}
|
||||
{{ portfolioWithHighlights(collections.professionalExperience, collections.highlights) }}
|
3
src/_includes/partials/research.html
Normal file
@@ -0,0 +1,3 @@
|
||||
<!doctype html>
|
||||
{% from "macros.html" import sectionHeading %}
|
||||
{{ sectionHeading("Research") }}
|
16
src/_includes/partials/resume.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<!doctype html>
|
||||
{% from "macros.html" import sectionHeading %}
|
||||
{{ sectionHeading("Resume") }}
|
||||
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-12">
|
||||
<p>
|
||||
The latest version of my resume is hosted on
|
||||
<a
|
||||
href="https://github.com/balajsra/resume/blob/master/sravan_balaji_resume.pdf"
|
||||
target="_blank"
|
||||
>GitHub</a
|
||||
>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
33
src/_includes/partials/site-head.html
Normal file
@@ -0,0 +1,33 @@
|
||||
<!doctype html>
|
||||
<!--Required meta tags-->
|
||||
<meta charset="utf-8" />
|
||||
<meta name="author" content="{{ site.author }}" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<!-- Bootstrap -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
|
||||
integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.min.js"
|
||||
integrity="sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy"
|
||||
crossorigin="anonymous"></script>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"
|
||||
integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.slim.min.js"
|
||||
integrity="sha256-kmHvs0B+OpCW5GVHUNjv9rOmY0IvSIRcf7zGUDTDQM8=" crossorigin="anonymous"></script>
|
||||
|
||||
<!-- highlight.js -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
||||
<script>hljs.highlightAll();</script>
|
||||
|
||||
<!-- Stylesheet -->
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" href="/assets/branding/favicon.ico" type="image/x-icon" />
|
||||
|
||||
<!-- Title -->
|
||||
<title>{{ title }}</title>
|
6
src/_includes/partials/software.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<!doctype html>
|
||||
{% from "macros.html" import sectionHeading %}
|
||||
{{ sectionHeading("Software") }}
|
||||
|
||||
{% from "macros.html" import personalItems %}
|
||||
{{ personalItems(collections.software) }}
|
11
src/about.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: About
|
||||
layout: "layouts/about.html"
|
||||
profilePicture: "/assets/about/profile_picture.jpg"
|
||||
---
|
||||
|
||||
Sravan Balaji completed his undergraduate and graduate degrees at the [University of Michigan, Ann Arbor](https://umich.edu). He earned dual B.S.E.'s in [Mechanical Engineering](https://me.engin.umich.edu) and [Computer Science](https://cse.engin.umich.edu) in December 2020 and an M.S. in [Robotics](https://robotics.umich.edu) in December 2021.
|
||||
|
||||
Sravan worked as a Graduate Navigation Intern at [MITRE](https://www.mitre.org) during summer 2021. You can learn more about this and his other work experiences in the [professional experience](/portfolio#professional_experience) section of the [portfolio](/portfolio) page. He later returned to [MITRE](https://www.mitre.org) full-time to work as an Autonomous Systems Engineer in McLean, VA. He currently works at [Metron](https://metsci.com) as a Software Engineer in Reston, VA.
|
||||
|
||||
Sravan's professional and academic interests are in controls, motion planning, robotic perception & manipulation, autonomous & connected vehicles, software development, and GNU/Linux among other things. His personal interests include video games, podcasts, music, cooking, football, soccer, formula 1, and productivity software.
|
BIN
src/assets/about/email.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
src/assets/about/github.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
src/assets/about/linkedin.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
src/assets/about/profile_picture.jpg
Normal file
After Width: | Height: | Size: 4.4 MiB |
BIN
src/assets/about/youtube.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
src/assets/blog_posts/Docker/cover_docker.png
Normal file
After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
BIN
src/assets/blog_posts/oryx_pro_review/01_oryp7.jpg
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
src/assets/blog_posts/oryx_pro_review/02_oryp7.jpg
Normal file
After Width: | Height: | Size: 3.3 MiB |
BIN
src/assets/blog_posts/oryx_pro_review/03_oryp7.jpg
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
src/assets/blog_posts/oryx_pro_review/04_oryp7.jpg
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
src/assets/blog_posts/oryx_pro_review/05_oryp7.jpg
Normal file
After Width: | Height: | Size: 1.4 MiB |
BIN
src/assets/blog_posts/oryx_pro_review/06_oryp7.jpg
Normal file
After Width: | Height: | Size: 1.0 MiB |
BIN
src/assets/blog_posts/oryx_pro_review/07_oryp7.jpg
Normal file
After Width: | Height: | Size: 6.0 MiB |
BIN
src/assets/blog_posts/oryx_pro_review/08_oryp7.jpg
Normal file
After Width: | Height: | Size: 5.6 MiB |
BIN
src/assets/blog_posts/oryx_pro_review/09_oryp7.jpg
Normal file
After Width: | Height: | Size: 5.5 MiB |
BIN
src/assets/blog_posts/oryx_pro_review/10_oryp7.jpg
Normal file
After Width: | Height: | Size: 4.8 MiB |
BIN
src/assets/blog_posts/oryx_pro_review/11_oryp7.jpg
Normal file
After Width: | Height: | Size: 4.8 MiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 796 KiB |
BIN
src/assets/branding/color_palette.png
Normal file
After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
BIN
src/assets/education/logo-robotics.png
Normal file
After Width: | Height: | Size: 15 KiB |