PageSourceSearch

https://haironthecircuits.net/brain/

html haironthecircuits.net collected 2026-10-09 22:08:46 UTC 13,948 bytes, 506 lines download raw bytes

1<!doctype html>
2<html lang="en">
3  <head>
4    <meta charset="utf-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    
7    
7<script>document.documentElement.classList.add('js');</script>
7
8    <title>hair on the circuits - brain</title>
9    <link rel="icon" type="image/x-icon" href="/img/favicon.ico">
10    
11    
12    
13    <meta name="description" content="Eduardo Hernández (saucesaft) writes about robotics, machine learning, computer vision and embedded systems.">
14    <link rel="canonical" href="https://haironthecircuits.net/brain/">
15
16    
17    <meta property="og:site_name" content="hair on the circuits">
18    <meta property="og:title" content="brain">
19    <meta property="og:description" content="Eduardo Hernández (saucesaft) writes about robotics, machine learning, computer vision and embedded systems.">
20    <meta property="og:url" content="https://haironthecircuits.net/brain/">
21    <meta property="og:locale" content="en">
22    
23    <meta property="og:type" content="website">
24    
25    
26    <meta name="twitter:card" content="summary">
27    
28    <meta name="twitter:site" content="@saucesaft">
29    <meta name="twitter:creator" content="@saucesaft">
30    <meta name="generator" content="Eleventy v1.0.1">
31
32    
33    
34    
35
36    <link href="https://fonts.googleapis.com/css?family=PT+Serif:400,400i,700,700i" rel="stylesheet">
37
38    <link rel="stylesheet" href="/css/code.css">
39    <link rel="stylesheet" href="/css/base.css">
40    <link rel="stylesheet" href="/css/system.css">
41    <link rel="stylesheet" href="/css/katex.min.css">
42
43    <link rel="alternate" href="/feed.xml" type="application/atom+xml" title="hair on the circuits">
44  </head>
45  <body>
46
47    
47<script type="text/javascript">
48      
49      function isElementOverflowing(element) {
50        
51        // get the width of the element
52        var width = element.clientWidth;
53        // get the scroll width (the full content width)
54        var scrollWidth = element.scrollWidth;
55        
56        // if the scroll width is greater than the visible width, it's overflowing
57        return scrollWidth > width;
58      }
59
60      function wrapContentsInMarquee(element) {
61        var marquee = document.createElement('marquee');
62        var contents = element.innerText;
63
64        marquee.innerText = contents;
65        element.innerHTML = '';
66        element.appendChild(marquee);
67      }
68
69      document.addEventListener("DOMContentLoaded", function(e) {
70        let titles = document.getElementsByClassName("title");
71
72        for (let i = 0; i < titles.length; i++) {
73          if (isElementOverflowing(titles[i])) {
74            wrapContentsInMarquee(titles[i]);
75          }
76        }
77
78        // Two-column masonry layout for tablets
79        const projectsContainer = document.getElementById('projects');
80        if (!projectsContainer) return;
81
82        // Store original column assignments
83        const originalColumns = new Map();
84        const allProjects = Array.from(projectsContainer.querySelectorAll('.project-item'));
85        allProjects.forEach(project => {
86          originalColumns.set(project, project.parentElement);
87        });
88
89        function redistributeProjects() {
90          const width = window.innerWidth;
91          const col1 = projectsContainer.querySelector('.column-1');
92          const col2 = projectsContainer.querySelector('.column-2');
93          const col3 = projectsContainer.querySelector('.column-3');
94
95          if (!col1 || !col2 || !col3) return;
96
97          // Tablet layout (736px - 1200px): Redistribute into 2 columns
98          if (width >= 736 && width <= 1200) {
99            // Get all projects and sort by data-index
100            const sorted = Array.from(allProjects).sort((a, b) => {
101              return parseInt(a.dataset.index) - parseInt(b.dataset.index);
102            });
103
104            // Clear columns
105            col1.innerHTML = '';
106            col2.innerHTML = '';
107            col3.innerHTML = '';
108            col3.style.display = 'none';
109
110            // Distribute: even indices to col1, odd to col2
111            sorted.forEach((project, idx) => {
112              if (idx % 2 === 0) {
113                col1.appendChild(project);
114              } else {
115                col2.appendChild(project);
116              }
117            });
118          }
119          // Desktop/Mobile: Restore original structure
120          else {
121            col3.style.display = '';
122            allProjects.forEach(project => {
123              const originalParent = originalColumns.get(project);
124              if (originalParent && project.parentElement !== originalParent) {
125                originalParent.appendChild(project);
126              }
127            });
128          }
129        }
130
131        // Run on load and resize
132        redistributeProjects();
133        let resizeTimer;
134        window.addEventListener('resize', function() {
135          clearTimeout(resizeTimer);
136          resizeTimer = setTimeout(redistributeProjects, 100);
137        });
138      });
139
140    </script>
140
141
142    <div class="sidebar_layout">
143
144
145
146    
147
148
149<div id="head">
150
151    
152    <a id="title" href="/">hair on the circuits</a>
153
154    
155    <a id="scroller">
156        <marquee loop="infinite" behavior="scroll" direction="left">
157            enjoy your stay :)
158        </marquee>
159    </a>
160</div>
161
162
163<div id="subhead">
164    <a id="subtitle">a blog by eduardo hdz - saucesaft</a>
165</div>
166
167
168<div id="menu">
169    <div class="breaking">
170
171            
172
173                <div class="sidebar">
174                    
175                        <a href=/brain/
176
177                         id = "selected" 
178                        
179                        > brain </a>
180                    
181                </div>
182
183            
184
185                <div class="sidebar">
186                    
187                        <a href=/wiki/
188
189                        
190                        
191                        > wiki </a>
192                    
193                </div>
194
195            
196
197                <div class="sidebar">
198                    
199                        <a href=/about/
200
201                        
202                        
203                        > about </a>
204                    
205                </div>
206
207            
208
209                <div class="sidebar">
210                    
211                        <a href=/files/resume.pdf
212
213                        
214                        
215                        > hire me </a>
216                    
217                </div>
218
219            
220
221    </div>
222
223</div>
224
225</div>
226
227    <div class="layout">
228
229      
230<div class="window">
231  <div class="title-bar">
232    <button aria-label="Close" class="close"></button>
233    <h1 class="title">recent thoughts</h1>
234    <button aria-label="Resize" class="resize"></button>
235  </div>
236  <div class="separator"></div>
237
238  <div class="window-pane">
239    
240
241    
242      <div class="alert-box outer-border scale-down" style="width:30rem;">
243        <div class="inner-border">
244          <div class="alert-contents">
245            <section class="field-row" style="justify-content: flex-start">
246              <h2 class="post-card-title">software changeling</h2>
247            </section>
248            <section>
249              <p class="alert-text">Talking about Star Trek, AI and the future of software.
250
251</p>
252            </section>
253            <section class="field-row" style="justify-content: space-between">
254              <small class="post-card-date" style="padding-left:10px;">Oct 4, 2026</small>
255              <a class="btn" href="/brain/software changeling.html" style="width:95px;">read</a>
256            </section>
257          </div>
258        </div>
259      </div>
260      <div style="margin-bottom: 1rem;"></div>
261    
262      <div class="alert-box outer-border scale-down" style="width:30rem;">
263        <div class="inner-border">
264          <div class="alert-contents">
265            <section class="field-row" style="justify-content: flex-start">
266              <h2 class="post-card-title">Differentiable Robotics</h2>
267            </section>
268            <section>
269              <p class="alert-text">I really find this method of training policies really intersting.
270
271</p>
272            </section>
273            <section class="field-row" style="justify-content: space-between">
274              <small class="post-card-date" style="padding-left:10px;">Sep 29, 2026</small>
275              <a class="btn" href="/brain/Differentiable Robotics.html" style="width:95px;">read</a>
276            </section>
277          </div>
278        </div>
279      </div>
280      <div style="margin-bottom: 1rem;"></div>
281    
282      <div class="alert-box outer-border scale-down" style="width:30rem;">
283        <div class="inner-border">
284          <div class="alert-contents">
285            <section class="field-row" style="justify-content: flex-start">
286              <h2 class="post-card-title">Contrastive Loss</h2>
287            </section>
288            <section>
289              <p class="alert-text">Some things i did to make 2 (or more) latent encoders talk to each other.
290
291</p>
292            </section>
293            <section class="field-row" style="justify-content: space-between">
294              <small class="post-card-date" style="padding-left:10px;">Sep 28, 2026</small>
295              <a class="btn" href="/brain/Contrastive Loss.html" style="width:95px;">read</a>
296            </section>
297          </div>
298        </div>
299      </div>
300      <div style="margin-bottom: 1rem;"></div>
301    
302      <div class="alert-box outer-border scale-down" style="width:30rem;">
303        <div class="inner-border">
304          <div class="alert-contents">
305            <section class="field-row" style="justify-content: flex-start">
306              <h2 class="post-card-title">Extended Kalman Filters, intuitively</h2>
307            </section>
308            <section>
309              <p class="alert-text">
310I keep coming back to the Extended Kalman Filter (EKF) every time I touch state estimation on a drone or a rover. It&#39;s one of those algorithms that looks like alphabet soup the first time you read it, but is actually a pretty simple idea wearing a trench coat of linear algebra.
311
312</p>
313            </section>
314            <section class="field-row" style="justify-content: space-between">
315              <small class="post-card-date" style="padding-left:10px;">Aug 6, 2026</small>
316              <a class="btn" href="/brain/EKF.html" style="width:95px;">read</a>
317            </section>
318          </div>
319        </div>
320      </div>
321      <div style="margin-bottom: 1rem;"></div>
322    
323      <div class="alert-box outer-border scale-down" style="width:30rem;">
324        <div class="inner-border">
325          <div class="alert-contents">
326            <section class="field-row" style="justify-content: flex-start">
327              <h2 class="post-card-title">GAE</h2>
328            </section>
329            <section>
330              <p class="alert-text">Bias vs. Variance (When talking about Reinforcement Learning) The λ parameter is like a dial to balance bias and variance. This determines how quickly...</p>
331            </section>
332            <section class="field-row" style="justify-content: space-between">
333              <small class="post-card-date" style="padding-left:10px;">Mar 19, 2026</small>
334              <a class="btn" href="/brain/GAE.html" style="width:95px;">read</a>
335            </section>
336          </div>
337        </div>
338      </div>
339      
340    
341
342    <div style="margin-top: 1.5rem;">
343      <a href="/brain/archive.html" class="btn">see all posts →</a>
344    </div>
345  </div>
346</div>
347
348<div class="window">
349  <div class="title-bar">
350    <button aria-label="Close" class="close"></button>
351    <h1 class="title">browse by tag</h1>
352    <button aria-label="Resize" class="resize"></button>
353  </div>
354  <div class="separator"></div>
355
356  <div class="window-pane">
357    <div class="tag-cloud">
358      
359      
360      
361        
362          
363            
364          
365        
366      
367        
368          
369            
370          
371        
372      
373        
374          
375            
376          
377            
378          
379        
380      
381        
382          
383            
384          
385        
386      
387        
388          
389            
390          
391        
392      
393        
394          
395            
396          
397            
398          
399        
400      
401        
402          
403            
404          
405            
406          
407            
408          
409            
410          
411        
412      
413        
414          
415            
416          
417            
418          
419            
420          
421        
422      
423        
424          
425            
426          
427        
428      
429        
430          
431            
432          
433            
434          
435        
436      
437      
438      
439      
440      
441        <div class="sidebar">
442          <a href="/tags/ai/">AI</a>
443        </div>
444      
445        <div class="sidebar">
446          <a href="/tags/alone-among-the-stars/">alone among the stars</a>
447        </div>
448      
449        <div class="sidebar">
450          <a href="/tags/braindump/">braindump</a>
451        </div>
452      
453        <div class="sidebar">
454          <a href="/tags/brainstorm/">brainstorm</a>
455        </div>
456      
457        <div class="sidebar">
458          <a href="/tags/clip/">CLIP</a>
459        </div>
460      
461        <div class="sidebar">
462          <a href="/tags/ekf/">EKF</a>
463        </div>
464      
465        <div class="sidebar">
466          <a href="/tags/gae/">GAE</a>
467        </div>
468      
469        <div class="sidebar">
470          <a href="/tags/maths/">maths</a>
471        </div>
472      
473        <div class="sidebar">
474          <a href="/tags/pytorch/">pytorch</a>
475        </div>
476      
477        <div class="sidebar">
478          <a href="/tags/random/">random</a>
479        </div>
480      
481        <div class="sidebar">
482          <a href="/tags/rl/">RL</a>
483        </div>
484      
485        <div class="sidebar">
486          <a href="/tags/robotics/">robotics</a>
487        </div>
488      
489        <div class="sidebar">
490          <a href="/tags/roleplaying/">roleplaying</a>
491        </div>
492      
493    </div>
494  </div>
495</div>
496
497    </div>
498
499
500
501    <!-- Current page: /brain/ -->
502  </body>
503
504  <div class="footer"></div>
505
506</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.