Link to YouTube recording is coming soon…
If you want to set up your own home server, check out our repo with a config to follow along after the talk.
You can download the rendered HTML file here or check out the Markdown source code here.
]]>I came upon Mr. Decurtins under the most unusual circumstances. My highschool physics teacher got fired mid-year after some overblown consequences for some things he said. My school scrambled to replace our physics teacher without any notice. Mr. Decurtins swooped in out of retirement to teach my physics class. Because Mr. Decurtins came out of retirement, his teaching license was expired. Our class had to have a substitute teacher monitoring Mr. Decurtins until he could get his license renewed.
Mr. Decurtins overflows with curiosity and has truly inspired me with his motto of instilling a sense of wonder. Each class started with a “sense of wonder” section where he would pull up a student submitted image. Mr. Decurtins would ask the class questions and try to explain the pictured phenomenon. I wish more teachers would motivate their classes and teach students to wonder.
Source: Stefan Krause, Germany, FAL, via Wikimedia Commons
Mr. Decurtins sometimes told stories. I’ll do my best to share my favorite story.
Let me tell you all a story back from when I was in college at the University of Oregon. I was working in my room one evening, and I looked out of the window. As the sun started coming through the window and was making a weird pattern on the floor of my dorm. I turned off the lights and started trying to find the angle from which the light was coming in from the window; but it wasn’t making sense. I inspected the thickness of the glass to see if there was something causing the pattern. I kept trying to figure it out for a few hours. As the shadows grew longer through the evening, the light was still there on the floor. As the pattern was not growing dim, I realized the light was not coming from the window. The light was coming from the floor itself. I looked closely and saw a gap between the floorboards. The light was coming from beneath the floor. Well that’s how I discovered my roommates had an illicit weed growing setup under my room.
Without a doubt, Mr. Decurtins is the most amazing teacher I have ever had. He put every ounce of energy he had into teaching the class. Mr. Decurtins had us do online homework assignments so that we could get feedback in real time. Online homework is much more common now, but I spent all of my schooling years submitting paper homeworks, handwriting essays, and printing out research papers. Mr. Decurtins was famous for responding to emails at any hour of the day, within minutes. His experiment-driven teaching style is the most fun I have ever had. He started the tradition of cardboard boat races in the physics class. At the end of the year, students make boats out of cardboard and duct tape, sit in them, and race them across the pool1.
Source: InMenlo
I still remember his hands-on labs, hilarious stories, and dedication to teaching.
(Several months after the class) Me: I legitimately cannot stop thinking of CSE 120 and Pasquale
Friend: Do you need help
Not a week goes by without me thinking of Professor Pasquale. I have dubbed Professor Pasquale as the “optimal professor.” Professor Pasquale is a teaching professor, and it shows. I took his Operating Systems class. Professor Pasquale has knack for clearly presenting topics. It’s abundantly clear that he has spent several decades fine tuning his Operating Systems class.
Professor Pasquale created his own teaching operating system that you develop with for the class. The great part is how he simulates real kernel development on the assignments. You write different modules of the Operating System for each assignment in C. Just like a real system, it’s on you to thoroughly test your code, otherwise his autograder will find every issue and mark you down.
Professor Pasquale makes Operating Systems approachable for anyone. His diagrams and the manner in which he presents material makes even the most complicated seem obvious. He is a man of dry humor and is extremely responsive to students’ message board questions. His course has changed the trajectory of my life. In another life, I would have loved to take his slide rule class.
In the words of my esteemed classmate Anonymous Atom on the course discussion board, “God is real, and his name is Professor Pasquale.”
Professor Tesler is an amazing teacher. He is very intelligent at understanding student misunderstandings and correcting them. Professor Tesler’s teaching is extremely precise—he starts and ends class exactly on time and always keeps the tempo of the course in sync. He does so much behind the scenes to make sure everything in the class ran smoothly, such as testing all technology before hand.
Professor Tesler brings life to Graph Theory. He has a shirt with the Königsberg bridge and does a neat demo in class by drawing a graph on a balloon and then flattening it.
Joe is unbelievably kind and cares so much about teaching. He has changed the course of my life. Joe is among very few people who care about their students beyond the confines of the experience in his classroom.
He is a teaching professor and it shows. His classes are so polished, even though he was teaching the compilers course in Rust for the first time. Joe “pole eats” Politz had some amazing assigments. His project writeups are so readable compared to other classes. As my friend hypothesizes, “he dreams of compilers and the programming assignment writeups are just dream logs.” He puts so much effort into teaching. He treats his classes as his research projects and is constantly looking for ways to improve his course.
Perhaps the nicest human I have ever encountered. Pat is kind beyond belief. He is a self-described ‘pushover’. Pat says yes to everything people ask of him, at a great cost to himself. I can certify that he is a real life superstar. Pat has helped me out so much, expecting nothing in return. He is so humble and refuses to acknowledge how amazing he is.
The nicest human I have ever met. Professor Kelting puts his students first, even before his own life and his own marriage. It is crazy how much work Professor Kelting puts in his classes to know every student (among hundreds!) and give every student feedback.
I am indebted to so many other amazing teachers whom I cannot hope to list. Specifically, I would like to thank Mrs. Liane Strub, Mrs. Lisa Otsuka, Mr. Mike Dumbra, Mrs. Kristen Bryan, Mrs. Crystal Mcrae, Professor Gary Cottrell, and Professor Ruth Luo.
Jamie might be the only person who cared among the required history classes I had to take. Despite getting abused by the department and having to deal with reading perhaps a thousand essays over the course of a quarter, he still read and gave timely feedback on every assignment. Jamie is so kind and cared about doing the right thing for the students, even if he wasn’t being paid to do so.
Harsh Gondaliya, Calvin Lee, and Shreyas Ramaprasad saved me from one of the hardest classes I have taken. All three of these guys went leagues beyond what was required of them to help me and other students. These students collectively stayed after their office hours for several hours to help out every student. Shreyas held a special office hours to help me out when I couldn’t attend his time slot due to a class scheduling conflict. Harsh is a human C compiler. I don’t know how he does it. All these TAs were amazing and somehow held out despite the mob of students needing help.
Aidan is an intellectual who really knows his stuff. He somehow made the esoteric philosophies of Haskell make sense.
Scott is the Math advising head. He is the most responsive administrator I have come across. He is probably the only administrator I have seen who goes beyond what his job requires to ensure students’ issues are resolved.
The CS department advisors are so efficient and helpful.
It’s so disappointing that I will never get to do this due to COVID. ↩
First some background. I lost two years of university to Covid, which prevented me from meeting professors and getting involved with campus life. I had been interested in working on teaching computers to understand language for several years. But, I got rejected by the two main natural language processing professors after talking to them. One told me to take his graduate class first. Taking his class would have taken me a year to wait for the next offering and then take it without even being enrolled in the class, due to its popularity.
A few months later, I randomly came across a new junior professor who I decided to email; I got an acceptance email 17 minutes later.
I spent a lot of time1 tweaking this email, and I would recommend taking it and modifying it for your needs. If this helps you, I’d love to know! I still believe cold emailing is the best method as it is too difficult to get in touch with established faculty at a large school. Reaching out through public office hours or through a grad student can work, but I have never heard of this working. However, I have seen people get onto projects by asking at the end of classes they did well in.
Hello Professor Elsherief,
I hope you are having a good summer.
My name is Samir Rashid and I am a third year Math-CS major at UCSD. I read your latent hatred benchmark paper and am intrigued by the research you are doing. I would really appreciate an opportunity to get involved with your research if you are still looking for undergraduates.
I am interested in the effects these social media models are having on society. I saw the daunting task of social media moderation firsthand when I interned at Twitter last year. This area is a hugely unsolved issue, and I can see how current limitations are causing huge issues in the world.
I finished CSE 156 with Nakashole last quarter and loved the content. Since finishing 156 I have been following Berg’s 291 to get more practice with NLP topics and to get a better grasp on using PyTorch. I really liked the projects from 156, and the 291 assignments are allowing me to see how to approach more open ended goals. I would love to gain research experience because I cannot fully grasp topics from reading papers alone.
It is my ambition to pursue a PhD degree in CS studying NLP. I have always been interested in language as I studied Latin for 6 years in school and made a program to read Latin poetry in the correct rhythm using Google TTS and some custom audio processing. During the last few years I have seen the acceleration of advancements in language modelling, which has made me want to join the frontiers of language modelling even more. Your research matches perfectly with my interests. I think I am uniquely qualified to work in your lab as evidenced from my course rigor (attached) and my internship at Twitter.
I am able to work full-time over summers and up to 20 hours/wk during the quarter. I just finished my second year and if given the opportunity I plan to commit 2+ years to this position depending on if I continue with the masters program here. I have experience working with robotics with the Unmanned Aerial Systems (UAS) club at UCSD. I worked on making visualizations and writing path planning code for an autonomous plane. I have debugged everything from hardware issues to docker networking to profiling our code to experimenting with different algorithms to see what works best. We ranked 5th at the international competition last month (#1 among US universities). Previously I’ve also worked on building an end-to-end Monte-Carlo localization system for autonomous driving. I have attached my resume and transcript. I would love to speak with you. I am free any day except Tuesday.
I look forward to hearing from you!
Thank you,
Samir Rashid
This post is certified® human written. I wrote this email before ChatGPT was launched. ↩
Email me if you know of more.
Someone made a similar collection of songs that sample a bed squeaking sound.
Found these amazing songs by Lil Windex while looking for some additional songs: Cleanin Up, Bitcoin Ca$h.
A random crazy song by Ugly God that samples the iPhone ringtone.
]]>Fall was my first in person quarter and it started off very good. I was finally meeting UCSD students and got to see the campus. In person school finally made me realize that my professors are real people. I didn’t know you could just interact with them. School in person is so much better than online. For the first time, I finally know my way around campus. I discovered I don’t like being on campus since everything is so oversubscribed. The library is useless as it is so busy, unpeaceful, and has bad wifi. I ended up spending a lot of time in my lab room doing work.
I was looking forward to my first all in person quarter of university… which was cut short by the graduate student union strike during the fall, which forced classes online. Instead of my tuition money going towards TAs, it funded UCSD’s union busting.
Here is my schedule from the past year. Deep learning was very interesting and implementing deep learning models from scratch got me to learn things better than any online course could. The operating systems course by Joseph Pasquale was the best constructed course I have ever experienced. The content was so interesting and has definitely revolutionized how I think about computers. Lastly, History of Mathematics was a hidden gem. The professor Adam Bowers brought joy to the class and reminded me why I love math.
Fall | Winter | Spring |
---|---|---|
Algorithms | Principals Operating Systems | Modern Cryptography |
Software Engineering | Computer Networks | Compiler Construction |
Deep Learning | Functional Programming | Digital Logic Design |
Programming for the Humanities | Digital Systems Laboratory | |
Latin Drama - Roman Comedy | Latin Directed Group Study | |
History of Mathematics |
I also joined a natural language processing research lab and contributed toward two papers. It was enlightening to see inside the processes for producing academic papers.
I volunteered for the local robotics team.
I switched my interest to Operating Systems.
Got sick for the first time during university. Falling behind even by a bit is extremely punishing under a quarter system.
It was the inaugural year for the classics club. It was exciting to see all the people interested in classics. However, I was not able to be an active member as it conflicted with the club I am active in, Triton UAS.
TUAS plane crashed, so we were not able to go to competition.
I went to UCSD’s Sun God and animefest.
I got a car and a job.
Went outside more on hikes and runs.
My review of 3 years at UCSD. Overall, I am quite happy with UCSD. Almost all my professors are amazing beyond belief. The weather, location, access to public transport, and campus are all nice. Being at a school of 50k students is good because there are so many resources, but it means you basically never see the same person again, making it hard to interact with people.
Goals for the upcoming year. I would like to solidify some post-grad plans, finish exploring the main SoCal attractions, and continue whatever I did this year, better.
]]>I looked into ways to do this, and it seemed like no one has made a way to do this properly only using Github. I found two methods to do this. One blog post did this by using a Personal Action Token to automatically create a branch, clone the repo, and deploy to GitHub Pages so that you could see the previewed build and changes by invoking the command on a PR or on a commit. The other way just added the commit hash and deployed it to GitHub Pages at that subfolder. I did not like that the first approach sort of abuses GitHub APIs and is quite a hacky solution. The second violates the idea that staging should be completely independent from prod, which I did not like.
The main issue I ran into is that GitHub does not (currently) allow for multiple Pages environments of same repo. The solution I decided to go with was to let the GitHub build the code and then deploy it to a subfolder or subdomain. I really like this since you can easily modify the action to rsync the files over to your own server. This lets you take both use the convenience of Actions and own the hosting server. And since you own the server, you can keep these sites private and keep them for as long as you like. Naturally, this only works for static sites such as the project I was working on. For versioned backends you would definitely want a hosting service such as Netlify to manage all the networking and artifacts.
My approach is a little bit different than this since I can’t directly control GitHub, so I use a second skeleton repo and a github submodule to link to original code without duplicating files and wasting GitHub resources.
Try it yourself: PR trigger and build and deploy action
Overview: You trigger the action by commenting .deploy
on any PR, which kicks off the runner that will build and deploy to staging, commenting on its progress as it goes.
Let’s go through and see how the code works
name: Manual branch staging site deploy
on:
issue_comment:
types: [created]
# Permissions needed for reacting and adding comments for IssueOps commands
permissions:
pull-requests: write
deployments: write
contents: write # you might only need 'read' here
First, I specify that this action should run when a comment is added and add the necessary permissions to the action runner. Next, I will need to filter the trigger to only process comments on a PR.
jobs:
deploy:
name: deploy
runs-on: ubuntu-latest
if: ${{ github.event.issue.pull_request }} # only run on pull request comments
steps:
# The branch-deploy Action
- name: branch-deploy
id: branch-deploy
uses: github/branch-deploy@v3.0.3
with: # bypass branch approval protection in order to deploy
admins: cse110-fa22-group23/staging-deploy-permission
The job:
information defines the environment of the action and tells it when to run.
I used GitHub’s branch-deploy action. This is a great action that takes care of a bunch of edge cases and also enforces repo protections. By default, you can only deploy after all automated checks and code review requirements pass, which prevents random people from opening PRs and triggering the action from trying to run malicious code. We bypass this for trusted contributors with the permission group.
# clone staging repository
- name: checkout staging
continue-on-error: true # git may return error code if nothing to push
# (prev deployment from this PR)
# If the branch-deploy Action was triggered, run the deployment (i.e. '.deploy')
if: ${{ steps.branch-deploy.outputs.continue == 'true' && steps.branch-deploy.outputs.noop != 'true' }}
uses: actions/checkout@v2.5.0
with:
repository: cse110-fa22-group23/staging
path: 'staging'
token: ${{ secrets.ACTION_PAT }}
Checkout repo and set git auth.
# push change, triggering staging github pages action rerun
- name: trigger staging redeploy
if: ${{ steps.branch-deploy.outputs.continue == 'true' && steps.branch-deploy.outputs.noop != 'true' }}
run: |
git config --global user.name github-actions
git config --global user.email github-actions@github.com
cd staging
echo ${CURR_BRANCH}
git config -f .gitmodules submodule.cse110-fa22-group23.branch ${CURR_BRANCH}
git submodule update --remote
echo $GITHUB_SHA > force_pages_deploy.txt
git diff
git add .
git commit -m $GITHUB_SHA
git status
git push
echo "DEPLOY_MESSAGE=Deployed to staging!\nhttps://cse110-fa22-group23.github.io/staging/" >> $GITHUB_ENV
env:
CURR_BRANCH: ${{ steps.branch-deploy.outputs.ref }}
Trigger the update on the staging Pages environment. Fail if same code is already deployed.
# Simple workflow for deploying static content to GitHub Pages
name: Deploy static content to Pages
on:
# Runs on pushes targeting the default branch
push:
branches: ["main"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: true
Setup for permissions and config.
jobs:
# Single deploy job since we're just deploying
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
# submodules: 'true' # this does not work bc git does a shallow copy and you can't switch branches
path: 'staging'
token: ${{ secrets.ACTION_PAT }}
Get the code
- name: Update and commit new submodule reference
continue-on-error: true
run: |
cd staging
git config --global user.name github-actions
git config --global user.email github-actions@github.com
git submodule update --init --recursive
git submodule status
git submodule sync
git submodule update --remote
git submodule status
git diff
git add .
git commit -m $GITHUB_SHA
git status
git push
Update the submodule and get the new code. You would have to add a step here to build the code if your files are not already static.
- name: Setup Pages
uses: actions/configure-pages@v2
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
# Upload site folder static files from submodule
path: './staging/cse110-fa22-group23/source/'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
Upload the static folder to Pages and publish it.
Funnily enough, the GitHub engineer who wrote the branch-deploy action actually made an issue to reach out on our repo. That was quite exciting to see.
One problem was I only made a commit to change the action and did not change the reference of the submodule. So when it gets copied by the default github pages deploy action, it is only a shallow copy of that one ref and you can’t checkout another commit or branch. I made it clone the entire repo which is a suboptimal approach. In the future, I would instead just checkout the hash that I put in the file or in the future I would just deploy it my own static hosting server. Also the admin permissions to bypass commit checks did not work and I did not get around to debugging that.
This was a fun, brief foray into CI. It proved quite helpful as we were having some problems checking PWA and service worker stuff without deploying first. I wouldn’t really recommend anyone use this since commercial deployment tools work a lot better and GitHub is going to add this as a first party feature soon anyway. I can also recommend Cloudflare Pages, which works really well. I really liked working with GitHub Actions and in combination with the pre-commit hook I wrote, it made development a lot faster to run the same checks locally as the things being verified by our other action checks. The only problem I had was that it was a bit frustrating to work with the GitHub’s runner since I had to keep committing directly to main and then making empty commits to retrigger PR checks. In the future, I would try to spend more time looking at action examples. Or maybe I would just have ChatGPT write it for me 🤖💭1,2
It enjoyed trying out git submodules and seeing the shallow clone optimizations GitHub uses for their actions.
Although I have been doing a lot of work and making a lot of very cool things in the past two years, I have been having a hard time pushing some projects and especially blog posts to completion. I am hoping releasing this will lead to a deluge of posts from me. I have many posts stuck in the editing stage that I have not gotten around to cleaning up and feeling good enough to release. This post is quite rough, but I think it has some value in releasing for me and others.
Some interesting related links I found in the process of making this. Surprisingly, I couldn’t find anything that accomplishes what this action does the way that I do it. Similar actions also made to use GitHub Pages don’t work as cleanly as the way I have done it.
https://www.netlify.com/github-pages-vs-netlify/
https://poetryincode.dev/multi-environment-flutter-deployments-using-github-pages
]]>Jekyll build
(or really bundle exec jekyll liveserve
)
Thanks to Stuart Geiger of UCSD for his beautiful Jekyll website template.
]]>