1<!DOCTYPE html> 2<html lang="en"> 3 4 <!-- Head --> 5 <head> 6<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!-- Metadata, OpenGraph and Schema.org --> 7 8 <!-- Website verification --> 9 <meta name="google-site-verification" content="ReqWNUpMvQmxhYAQze5Cg1GjRrAn8ISy_jFvMkBXrMg"> 10<meta name="msvalidate.01" content=""> 11<!-- Avoid warning on Google Chrome 12 Error with Permissions-Policy header: Origin trial controlled feature not enabled: 'interest-cohort'. 13 see https://stackoverflow.com/a/75119417 14 --> 15 <meta http-equiv="Permissions-Policy" content="interest-cohort=()"> 16 17 <!-- Standard metadata --> 18 <meta charset="utf-8"> 19 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 20 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 21 <title></title> 22 <meta name="author" content="Connor Hashemi"> 23 <meta name="description" content="Personal website for Connor Hashemi."> 24 <meta name="keywords" content="connor hashemi, computational imaging, personal website, computational imaging, passive non-line-of-sight imaging, event-based imaging"> 25 26 27 <!-- Bootstrap & MDB --> 28 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha256-DF7Zhf293AJxJNTmh5zhoYYIMs2oXitRfBjY+9L//AY=" crossorigin="anonymous"> 29 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/mdb.min.css" integrity="sha256-jpjYvU3G3N6nrrBwXJoVEYI/0zw8htfFnhT9ljN3JJw=" crossorigin="anonymous"> 30 31 <!-- Fonts & Icons --> 32 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css" integrity="sha256-mUZM63G8m73Mcidfrv5E+Y61y7a12O5mW4ezU3bxqW4=" crossorigin="anonymous"> 33 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/academicons.min.css" integrity="sha256-i1+4qU2G2860dGGIOJscdC30s9beBXjFfzjWLjBRsBg=" crossorigin="anonymous"> 34 <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Slab:100,300,400,500,700|Material+Icons"> 35 36 <!-- Code Syntax Highlighting --> 37 <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/jwarby/jekyll-pygments-themes@master/github.css" media="" id="highlight_theme_light"> 38 39 <!-- Styles --> 40 41 <link rel="shortcut icon" href="/assets/img/CH_icon.PNG"> 42 43 <link rel="stylesheet" href="/assets/css/main.css"> 44 <link rel="canonical" href="https://hashe037.github.io/"> 45 46 <!-- Dark Mode --> 47 48 <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/jwarby/jekyll-pygments-themes@master/native.css" media="none" id="highlight_theme_dark"> 49 50
50<script src="/assets/js/theme.js"></script>
50 51
51<script src="/assets/js/dark_mode.js"></script>
51 52 53 54 </head> 55 56 <!-- Body --> 57 <body class="fixed-top-nav "> 58 59 <!-- Header --> 60 <header> 61 62 <!-- Nav Bar --> 63 <nav id="navbar" class="navbar navbar-light navbar-expand-sm fixed-top"> 64 <div class="container"> 65 66 <!-- Navbar Toggle --> 67 <button class="navbar-toggler collapsed ml-auto" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> 68 <span class="sr-only">Toggle navigation</span> 69 <span class="icon-bar top-bar"></span> 70 <span class="icon-bar middle-bar"></span> 71 <span class="icon-bar bottom-bar"></span> 72 </button> 73 74 <div class="collapse navbar-collapse text-right" id="navbarNav"> 75 <ul class="navbar-nav ml-auto flex-nowrap"> 76 77 <!-- About --> 78 <li class="nav-item active"> 79 <a class="nav-link" href="/">Home<span class="sr-only">(current)</span></a> 80 </li> 81 82 83 <!-- Other pages --> 84 <li class="nav-item "> 85 <a class="nav-link" href="/publications/">publications</a> 86 </li> 87 <li class="nav-item "> 88 <a class="nav-link" href="/projects/">projects</a> 89 </li> 90 <li class="nav-item "> 91 <a class="nav-link" href="/cv/">cv</a> 92 </li> 93 94 <!-- Toogle theme mode --> 95 <li class="toggle-container"> 96 <button id="light-toggle" title="Change theme"> 97 <i class="fas fa-moon"></i> 98 <i class="fas fa-sun"></i> 99 </button> 100 </li> 101 </ul> 102 </div> 103 </div> 104 </nav> 105 106 <!-- Scrolling Progress Bar --> 107 <progress id="progress" value="0"> 108 <div class="progress-container"> 109 <span class="progress-bar"></span> 110 </div> 111 </progress> 112 </header> 113 114 115 <!-- Content --> 116 <div class="container mt-5"> 117 <!-- about.html --> 118 <div class="post"> 119 <header class="post-header"> 120 <h1 class="post-title"> 121 122 </h1> 123 <p class="desc">About me</p> 124 </header> 125 126 <article> 127 <div class="profile float-right"> 128 129 <figure> 130 131 <picture> 132 133 <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/withdog-480.webp"></source> 134 <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/withdog-800.webp"></source> 135 <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/withdog-1400.webp"></source> 136 137 138 <!-- Fallback to the original file --> 139 <img src="/assets/img/withdog.jpg" class="img-fluid z-depth-1 rounded" width="auto" height="auto" alt="withdog.jpg" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"> 140 141 </picture> 142 143</figure> 144 145 </div> 146 147 <div class="clearfix"> 148 <p>I am a Senior Research and Development Researcher at <a href="https://www.kitware.com/" rel="external nofollow noopener" target="_blank">Kitware</a> in computational imaging and computer vision. I obtained my PhD in electrical engineering at the <a href="https://cse.umn.edu/ece" rel="external nofollow noopener" target="_blank">University of Minnesota ECE Department</a> under Dr. James Leger.</p> 149 150<p>My primary research is in the domain of computational imaging, which is the intersection between optics, signal processing, and computer vision. My thesis was focused on creating noiseless and clutterless reconstructions in passive non-line-of-sight (NLOS) imaging using information beyond what is typically used for conventional imaging. At Kitware, my primary work has been in event-based imaging with neuromorphic cameras, specifically for space awareness and star tracking applications. Our Gitlab for these projects is under <a href="https://gitlab.kitware.com/nest-public" rel="external nofollow noopener" target="_blank">NEST Public</a>. I also have experience developing foundational models in underwater acoustics and developing GenAI pipelines to improve test and evaluation of models through the open-source toolkits <a href="https://github.com/Kitware/pybsm" rel="external nofollow noopener" target="_blank">PyBSM</a> and <a href="https://github.com/Kitware/nrtk" rel="external nofollow noopener" target="_blank">NRTK</a>.</p> 151 152<p>I am open to new opportunities and collaborations, so please feel free to reach me at my email [email protected]</p> 153 154 </div> 155 156 <!-- News --> 157 <h2><a href="/news/" style="color: inherit;">news</a></h2> 158 <div class="news"> 159 <div class="table-responsive"> 160 <table class="table table-sm table-borderless"> 161 162 <tr> 163 <th scope="row">Dec 14, 2025</th> 164 <td> 165 Presented on âEvent-Based Vision for Space Navigationâ at the <a href="https://cse.umn.edu/ima" rel="external nofollow noopener" target="_blank">Institute for Mathematics and its Applications (IMA)</a> in the University of Minnesota. 166 167 </td> 168 </tr> 169 <tr> 170 <th scope="row">Nov 22, 2025</th> 171 <td> 172 Our workshop paper âQuantifying Accuracy of an Event-Based Star Tracker via Earthâs Rotationâ was presented at <a href="https://iccv.thecvf.com/" rel="external nofollow noopener" target="_blank">ICCV</a> conference in Hawaii. This work proposes a new way of evaluating event-based star trackers and shows that their overall accuracy is competitive with conventional state-of-the-art. 173 174 </td> 175 </tr> 176 <tr> 177 <th scope="row">Aug 21, 2025</th> 178 <td> 179 Presented our abstract on âLeveraging Spatiotemporal Event Distributions for Point-Object Trackingâ at the Optica Computational Optical Sensing and Imaging (<a href="https://www.optica.org/events/congress/imaging_and_applied_optics_congress/program/computational_optical_sensing_and_imaging/" rel="external nofollow noopener" target="_blank">COSI</a>) conference in Seattle. This helped summarize our groupâs work in event-based imaging over the last couple years. 180 181 </td> 182 </tr> 183 <tr> 184 <th scope="row">Jun 21, 2025</th> 185 <td> 186 Our paper âCentroiding Point-Objects With Event Camerasâ won the best paper award at the IEEE International Conference on Computational Photography (<a href="https://iccp2025.iccp-conference.org/" rel="external nofollow noopener" target="_blank">ICCP</a>) conference in Toronto! This continued our event-based star tracking work with a more general point-object tracking algorithm. 187 188 </td> 189 </tr> 190 <tr> 191 <th scope="row">May 12, 2025</th> 192 <td> 193 Our work titled âEBS-EKF: Accurate and High Frequency Event-based Star Trackingâ was presented as a highlight (2.98% of total papers) at <a href="https://cvpr.thecvf.com/Conferences/2025" rel="external nofollow noopener" target="_blank">CVPR 2025</a> in Tennessee! This paper encapsulates our work on neuromorphic star tracking and its advantages over traditional methods and previous state of the art. 194 195 </td> 196 </tr> 197 <tr> 198 <th scope="row">Dec 1, 2023</th> 199 <td>
200 Started my post-grad career at <a href="https://www.kitware.com/" rel="external nofollow noopener" target="_blank">Kitware</a> as a Senior R&D Researcher on the Computer Vision team in Minneapolis. 201 202 </td> 203 </tr> 204 <tr> 205 <th scope="row">Nov 30, 2023</th> 206 <td> 207 Presented and successfully defended my PhD defense titled âLow-Signal Passive Non-Line-of-Sight Imagingâ! 208 209 </td> 210 </tr> 211 <tr> 212 <th scope="row">Aug 16, 2023</th> 213 <td> 214 Presented my work on âBlind Unmixing of Passively-Scattered Multispectral Lightâ at the Optica Computational Optical Sensing and Imaging (<a href="https://www.optica.org/events/congress/imaging_and_applied_optics_congress/program/computational_optical_sensing_and_imaging/" rel="external nofollow noopener" target="_blank">COSI</a>) conference in Boston. 215 216 </td> 217 </tr> 218 <tr> 219 <th scope="row">Jul 30, 2023</th> 220 <td> 221 Presented and published two of my works at the IEEE International Conference on Computational Photography (<a href="https://iccp2023.iccp-conference.org/" rel="external nofollow noopener" target="_blank">ICCP</a>)conference in Madison, one on âParallax-Driven Denoising of Passive Non-Line-of-Sight Thermal Imageryâ and the other on âIsolating Signals in Passive Non-Line-of-Sight Imaging using Spectral Contentâ (which was also accepted into the TPAMI Special Issue). 222 223 </td> 224 </tr> 225 <tr> 226 <th scope="row">Jun 8, 2023</th> 227 <td> 228 Presented a poster on âRemoving Unwanted Signals using Spectral Content in Passively-Scattered Lightâ at the 3M poster session with UMN 229 230 </td> 231 </tr> 232 <tr> 233 <th scope="row">Jan 12, 2022</th> 234 <td> 235 Just finished my 7-month internship at Amazon in the as an Applied Scientist Intern on the Perfect Order Experience (POE) team! I was in charge of using computer vision and deep learning to detect fradulent marketplace items. 236 237 238 </td> 239 </tr> 240 <tr> 241 <th scope="row">Dec 5, 2021</th> 242 <td> 243 Amazon workshop paper on âExtracting Robust Representations of Invoice Images for 244Automated Forgery Detectionâ was presented 245 246 </td> 247 </tr> 248 <tr> 249 <th scope="row">Jan 26, 2021</th> 250 <td> 251 Was a winner in the the Naval Horizons Challenge. 252 253 </td> 254 </tr> 255 <tr> 256 <th scope="row">Aug 20, 2020</th> 257 <td> 258 Finished my summer internship with <a href="https://www.blackriversystems.com/" rel="external nofollow noopener" target="_blank">Black River Systems Inc.</a> as a systems engineer intern. I worked on collecting and performing unsupervised clustering of a variety of radio signals found in the field. 259 260 </td> 261 </tr> 262 <tr> 263 <th scope="row">Jun 23, 2020</th> 264 <td> 265 Oral presentation of âExploiting the Visible Spectrum to Look Around Cornersâ at the <a href="https://opg.optica.org/conference.cfm?meetingid=15&yr=2020" rel="external nofollow noopener" target="_blank"> Computational Optical Sensing and Imaging (COSI) </a> conference (if interested please email for paper/video) 266 267 </td> 268 </tr> 269 <tr> 270 <th scope="row">Oct 5, 2019</th> 271 <td> 272 Poster presentation of âExploiting Light Field Spectra for Passive NLoS Imagingâ at the IMA Workshop for Computational Imaging. <a href="/assets/pdf/imaposter.pdf"> Link to poster. </a> 273 274 </td> 275 </tr> 276 <tr> 277 <th scope="row">May 18, 2018</th> 278 <td> 279 Started PhD with the CSE Fellowship at the University of Minnesota. 280 281 </td> 282 </tr> 283 </table> 284 </div> 285 </div> 286 287 288 <!-- Latest posts --> 289 290 291 <!-- Selected papers --> 292 <h2><a href="/publications/" style="color: inherit;">selected publications</a></h2> 293 <div class="publications"> 294 <ol class="bibliography"> 295<li> 296<!-- _layouts/bib.html --> 297 <div class="row"> 298 <div class="col-sm-2 preview"> 299<figure> 300 301 <picture> 302 303 <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/publication_preview/plenoptic_imag-480.webp"></source> 304 <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/publication_preview/plenoptic_imag-800.webp"></source> 305 <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/publication_preview/plenoptic_imag-1400.webp"></source> 306 307 308 <!-- Fallback to the original file --> 309 <img src="/assets/img/publication_preview/plenoptic_imag.jpg" class="preview z-depth-1 rounded" width="auto" height="auto" alt="plenoptic_imag.jpg" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"> 310 311 </picture> 312 313</figure> 314</div> 315 316 <!-- Entry bib key --> 317 <div id="lin2020passive" class="col-sm-8"> 318 <!-- Title --> 319 <div class="title">Passive non-line-of-sight imaging using plenoptic information</div> 320 <!-- Author --> 321 <div class="author"> 322 323 324 Di Lin, <em>Connor Hashemi</em>, and James R Leger</div> 325 326 <!-- Journal/Book title and date --> 327 328 329 <div class="periodical"> 330 <em>JOSA A</em>, 2020 331 </div> 332 <div class="periodical"> 333 334 </div> 335 336 <!-- Links/Buttons --> 337 <div class="links"> 338 </div> 339 340 <div class="badges">
341 <span class="altmetric-embed" data-hide-no-mentions="true" data-hide-less-than="15" data-badge-type="2" data-badge-popover="right"></span> 342 <span class="__dimensions_badge_embed__" data-pmid="" data-hide-zero-citations="true" data-style="small_rectangle" data-legend="hover-right" style="margin-bottom: 3px;"></span> 343 </div> 344 345 346 </div> 347 </div> 348</li> 349<li> 350<!-- _layouts/bib.html --> 351 <div class="row"> 352 <div class="col-sm-2 preview"> 353<figure> 354 355 <picture> 356 357 <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/publication_preview/isolating_nlos_sigs-480.webp"></source> 358 <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/publication_preview/isolating_nlos_sigs-800.webp"></source> 359 <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/publication_preview/isolating_nlos_sigs-1400.webp"></source> 360 361 362 <!-- Fallback to the original file --> 363 <img src="/assets/img/publication_preview/isolating_nlos_sigs.png" class="preview z-depth-1 rounded" width="auto" height="auto" alt="isolating_nlos_sigs.png" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"> 364 365 </picture> 366 367</figure> 368</div> 369 370 <!-- Entry bib key --> 371 <div id="hashemi2023isolating" class="col-sm-8"> 372 <!-- Title --> 373 <div class="title">Isolating Signals in Passive Non-Line-of-Sight Imaging using Spectral Content</div> 374 <!-- Author --> 375 <div class="author"> 376 377 378 <em>Connor Hashemi</em>, Rafael Avelar, and James Leger</div> 379 380 <!-- Journal/Book title and date --> 381 382 383 <div class="periodical"> 384 <em>IEEE Transactions on Pattern Analysis and Machine Intelligence</em>, 2023 385 </div> 386 <div class="periodical"> 387 388 </div> 389 390 <!-- Links/Buttons --> 391 <div class="links"> 392 </div> 393 394 <div class="badges"> 395 <span class="altmetric-embed" data-hide-no-mentions="true" data-hide-less-than="15" data-badge-type="2" data-badge-popover="right"></span> 396 <span class="__dimensions_badge_embed__" data-pmid="" data-hide-zero-citations="true" data-style="small_rectangle" data-legend="hover-right" style="margin-bottom: 3px;"></span> 397 </div> 398 399 400 </div> 401 </div> 402</li> 403<li> 404<!-- _layouts/bib.html --> 405 <div class="row"> 406 <div class="col-sm-2 preview"> 407<figure> 408 409 <picture> 410 411 <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/publication_preview/cvpr_2025-480.webp"></source> 412 <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/publication_preview/cvpr_2025-800.webp"></source> 413 <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/publication_preview/cvpr_2025-1400.webp"></source> 414 415 416 <!-- Fallback to the original file --> 417 <img src="/assets/img/publication_preview/cvpr_2025.png" class="preview z-depth-1 rounded" width="auto" height="auto" alt="cvpr_2025.png" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"> 418 419 </picture> 420 421</figure> 422</div> 423 424 <!-- Entry bib key --> 425 <div id="reed2025ebs" class="col-sm-8"> 426 <!-- Title --> 427 <div class="title">EBS-EKF: Accurate and High Frequency Event-based Star Tracking</div> 428 <!-- Author --> 429 <div class="author"> 430 431 432 Albert W Reed, <em>Connor Hashemi</em>, Dennis Melamed, and 433 <span class="more-authors" title="click to view 3 more authors" onclick=" 434 var element = $(this); 435 element.attr('title', ''); 436 var more_authors_text = element.text() == '3 more authors' ? 'Nitesh Menon, Keigo Hirakawa, Scott McCloskey' : '3 more authors'; 437 var cursorPosition = 0; 438 var textAdder = setInterval(function(){ 439 element.text(more_authors_text.substring(0, cursorPosition + 1)); 440 if (++cursorPosition == more_authors_text.length){ 441 clearInterval(textAdder); 442 } 443 }, '10'); 444 ">3 more authors</span> 445</div> 446 447 <!-- Journal/Book title and date --> 448 449 450 <div class="periodical"> 451 <em>In Proceedings of the Computer Vision and Pattern Recognition Conference (CVPR) (Highlight)</em>, 2025 452 </div> 453 <div class="periodical"> 454 455 </div> 456 457 <!-- Links/Buttons --> 458 <div class="links"> 459 </div> 460 461 <div class="badges">
462 <span class="altmetric-embed" data-hide-no-mentions="true" data-hide-less-than="15" data-badge-type="2" data-badge-popover="right"></span> 463 <span class="__dimensions_badge_embed__" data-pmid="" data-hide-zero-citations="true" data-style="small_rectangle" data-legend="hover-right" style="margin-bottom: 3px;"></span> 464 </div> 465 466 467 </div> 468 </div> 469</li> 470<li> 471<!-- _layouts/bib.html --> 472 <div class="row"> 473 <div class="col-sm-2 preview"> 474<figure> 475 476 <picture> 477 478 <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/publication_preview/iccp_2025-480.webp"></source> 479 <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/publication_preview/iccp_2025-800.webp"></source> 480 <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/publication_preview/iccp_2025-1400.webp"></source> 481 482 483 <!-- Fallback to the original file --> 484 <img src="/assets/img/publication_preview/iccp_2025.png" class="preview z-depth-1 rounded" width="auto" height="auto" alt="iccp_2025.png" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"> 485 486 </picture> 487 488</figure> 489</div> 490 491 <!-- Entry bib key --> 492 <div id="hashemi2025centroiding" class="col-sm-8"> 493 <!-- Title --> 494 <div class="title">Centroiding Point-Objects With Event Cameras</div> 495 <!-- Author --> 496 <div class="author"> 497 498 499 <em>Connor Hashemi</em>, Dennis Melamed, Albert W Reed, and 500 <span class="more-authors" title="click to view 3 more authors" onclick=" 501 var element = $(this); 502 element.attr('title', ''); 503 var more_authors_text = element.text() == '3 more authors' ? 'Nitesh Menon, Keigo Hirakawa, Scott McCloskey' : '3 more authors'; 504 var cursorPosition = 0; 505 var textAdder = setInterval(function(){ 506 element.text(more_authors_text.substring(0, cursorPosition + 1)); 507 if (++cursorPosition == more_authors_text.length){ 508 clearInterval(textAdder); 509 } 510 }, '10'); 511 ">3 more authors</span> 512</div> 513 514 <!-- Journal/Book title and date --> 515 516 517 <div class="periodical"> 518 <em>IEEE Transactions on Pattern Analysis and Machine Intelligence (best paper at ICCP 2025)</em>, 2025 519 </div> 520 <div class="periodical"> 521 522 </div> 523 524 <!-- Links/Buttons --> 525 <div class="links"> 526 </div> 527 528 <div class="badges"> 529 <span class="altmetric-embed" data-hide-no-mentions="true" data-hide-less-than="15" data-badge-type="2" data-badge-popover="right"></span> 530 <span class="__dimensions_badge_embed__" data-pmid="" data-hide-zero-citations="true" data-style="small_rectangle" data-legend="hover-right" style="margin-bottom: 3px;"></span> 531 </div> 532 533 534 </div> 535 </div> 536</li> 537</ol> 538 </div> 539 540 541 <!-- Social --> 542 <div class="social"> 543 <div class="contact-icons"> 544 <a href="mailto:%63%6F%6E%6E%6F%72.%68%61%73%68%65%6D%69@%6B%69%74%77%61%72%65.%63%6F%6D" title="email"><i class="fas fa-envelope"></i></a> 545 <a href="https://scholar.google.com/citations?user=UrBXI4wAAAAJ" title="Google Scholar" rel="external nofollow noopener" target="_blank"><i class="ai ai-google-scholar"></i></a> 546 <a href="https://github.com/Hashe037" title="GitHub" rel="external nofollow noopener" target="_blank"><i class="fab fa-github"></i></a> 547 <a href="https://www.linkedin.com/in/connor-hashemi" title="LinkedIn" rel="external nofollow noopener" target="_blank"><i class="fab fa-linkedin"></i></a> 548 549 550 </div> 551 552 <div class="contact-note"> 553 Feel free to contact me at [email protected] 554 555 </div> 556 557 </div> 558 </article> 559 560</div> 561 562 </div> 563 564 <!-- Footer --> 565 <footer class="fixed-bottom"> 566 <div class="container mt-0"> 567 © Copyright 2025 Connor Hashemi. Powered by <a href="https://jekyllrb.com/" target="_blank" rel="external nofollow noopener">Jekyll</a> with <a href="https://github.com/alshedivat/al-folio" rel="external nofollow noopener" target="_blank">al-folio</a> theme. Hosted by <a href="https://pages.github.com/" target="_blank" rel="external nofollow noopener">GitHub Pages</a>. 568Last updated: December 03, 2025. 569 </div> 570 </footer> 571 572 <!-- JavaScripts --> 573 <!-- jQuery --> 574
574<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
574 575 576 <!-- Bootsrap & MDB scripts --> 577
577<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha256-fgLAgv7fyCGopR/gBNq2iW3ZKIdqIcyshnUULC4vex8=" crossorigin="anonymous"></script>
577 578
578<script src="https://cdn.jsdelivr.net/npm/[email protected]/js/mdb.min.js" integrity="sha256-NdbiivsvWt7VYCt6hYNT3h/th9vSTL4EDWeGs5SN3DA=" crossorigin="anonymous"></script>
578 579 580 <!-- Masonry & imagesLoaded --> 581
581<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/masonry.pkgd.min.js" integrity="sha256-Nn1q/fx0H7SNLZMQ5Hw5JLaTRZp0yILA/FRexe19VdI=" crossorigin="anonymous"></script>
581 582
582<script defer src="https://cdn.jsdelivr.net/npm/imagesloaded@4/imagesloaded.pkgd.min.js"></script>
582 583
583<script defer src="/assets/js/masonry.js" type="text/javascript"></script>
583 584 585 <!-- Medium Zoom JS --> 586
586<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/medium-zoom.min.js" integrity="sha256-7PhEpEWEW0XXQ0k6kQrPKwuoIomz8R8IYyuU1Qew4P8=" crossorigin="anonymous"></script>
586 587
587<script defer src="/assets/js/zoom.js"></script>
587<!-- Load Common JS --> 588
588<script defer src="/assets/js/common.js"></script>
588 589
589<script defer src="/assets/js/copy_code.js" type="text/javascript"></script>
589 590 591 592
592<script async src="https://d1bxh8uas1mnw7.cloudfront.net/assets/embed.js"></script>
592 593
593<script async src="https://badge.dimensions.ai/badge.js"></script>
593 594 595 <!-- MathJax --> 596
596<script type="text/javascript"> 597 window.MathJax = { 598 tex: { 599 tags: 'ams' 600 } 601 }; 602 </script>
602 603
603<script defer type="text/javascript" id="MathJax-script" src="https://cdn.jsdelivr.net/npm/[email protected]/es5/tex-mml-chtml.js"></script>
603 604
604<script defer src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
604 605 606 <!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 606-607
606 607<script async src="https://www.googletagmanager.com/gtag/js?id=
607G-QCT9DZE86V
vendor: 12 bytes, line 607
607"></script>
608<script> 609
vendor: 134 bytes, lines 609-613
609window.dataLayer = window.dataLayer || []; 610 function gtag(){dataLayer.push(arguments);} 611 gtag('js', new Date()); 612 613 gtag('config', '
613G-QCT9DZE86V
vendor: 4 bytes, line 613
613');
614</script>
614 615 616 617<!-- Scrolling Progress Bar -->
618<script type="text/javascript"> 619 /* 620 * This JavaScript code has been adapted from the article 621 * https://css-tricks.com/reading-position-indicator/ authored by Pankaj Parashar, 622 * published on the website https://css-tricks.com on the 7th of May, 2014. 623 * Couple of changes were made to the original code to make it compatible 624 * with the `al-foio` theme. 625 */ 626 const progressBar = $("#progress"); 627 /* 628 * We set up the bar after all elements are done loading. 629 * In some cases, if the images in the page are larger than the intended 630 * size they'll have on the page, they'll be resized via CSS to accomodate 631 * the desired size. This mistake, however, breaks the computations as the 632 * scroll size is computed as soon as the elements finish loading. 633 * To account for this, a minimal delay was introduced before computing the 634 * values. 635 */ 636 window.onload = function () { 637 setTimeout(progressBarSetup, 50); 638 }; 639 /* 640 * We set up the bar according to the browser. 641 * If the browser supports the progress element we use that. 642 * Otherwise, we resize the bar thru CSS styling 643 */ 644 function progressBarSetup() { 645 if ("max" in document.createElement("progress")) { 646 initializeProgressElement(); 647 $(document).on("scroll", function() { 648 progressBar.attr({ value: getCurrentScrollPosition() }); 649 }); 650 $(window).on("resize", initializeProgressElement); 651 } else { 652 resizeProgressBar(); 653 $(document).on("scroll", resizeProgressBar); 654 $(window).on("resize", resizeProgressBar); 655 } 656 } 657 /* 658 * The vertical scroll position is the same as the number of pixels that 659 * are hidden from view above the scrollable area. Thus, a value > 0 is 660 * how much the user has scrolled from the top 661 */ 662 function getCurrentScrollPosition() { 663 return $(window).scrollTop(); 664 } 665 666 function initializeProgressElement() { 667 let navbarHeight = $("#navbar").outerHeight(true); 668 $("body").css({ "padding-top": navbarHeight }); 669 $("progress-container").css({ "padding-top": navbarHeight }); 670 progressBar.css({ top: navbarHeight }); 671 progressBar.attr({ 672 max: getDistanceToScroll(), 673 value: getCurrentScrollPosition(), 674 }); 675 } 676 /* 677 * The offset between the html document height and the browser viewport 678 * height will be greater than zero if vertical scroll is possible. 679 * This is the distance the user can scroll 680 */ 681 function getDistanceToScroll() { 682 return $(document).height() - $(window).height(); 683 } 684 685 function resizeProgressBar() { 686 progressBar.css({ width: getWidthPercentage() + "%" }); 687 } 688 // The scroll ratio equals the percentage to resize the bar 689 function getWidthPercentage() { 690 return (getCurrentScrollPosition() / getDistanceToScroll()) * 100; 691 } 692</script>
692 693 694 </body> 695</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.