Travels & Observations

Travels & Observations

Think of this as my ongoing journal of conference takeaways, industry insights, and research commentary. When I attend events or stumble upon emerging trends, I’ll share my notes, analysis, and personal reflections here. You can browse by categories—like “Conferences,” “Research Insights,” or “Industry Trends”—to quickly find posts that match your interests.

Browse by Category

[Categories block: Insert “Categories” block from the block inserter to show links to your categories]

AI Conference Atlas html,body{height:100%;margin:0} #app{display:flex;height:100%} #timeline{width:340px;max-width:45vw;border-right:1px solid #ddd;padding:14px;overflow:auto} #map{flex:1} .event{padding:10px 8px;border-radius:8px;margin:8px 0;border:1px solid #eee;cursor:pointer} .event.active{border-color:#444} .controls{display:flex;gap:8px;align-items:center;margin:10px 0} .chip{padding:4px 8px;border:1px solid #ccc;border-radius:999px;cursor:pointer;font-size:12px} .chip.active{background:#111;color:#fff;border-color:#111}
https://unpkg.com/leaflet@1.9.4/dist/leaflet.js const DATA = [ { id:”ismir-2025″, title:”ISMIR 2025 (San Francisco)”, date:”2025-10-30″, year:2025, lat:37.7749, lng:-122.4194, city:”San Francisco, CA”, links:{ transcript:”#”, slides:”#”, post:”https://www.linkedin.com/” }, notes:”Music IR + GenAI; met Anna Huang; MI-for-music transformers.” }, { id:”harvard-workshop-2025″, title:”Harvard Formal Reasoning Workshop”, date:”2025-09-12″, year:2025, lat:42.3770, lng:-71.1167, city:”Cambridge, MA”, links:{ transcript:”#”, slides:”#”, post:”https://www.linkedin.com/” }, notes:”LLM formal reasoning & SAT; ICML follow-up discussions.” }, { id:”madison-ml-meetups-2025″, title:”Madison ML Meetups”, date:”2025-08-15″, year:2025, lat:43.0731, lng:-89.4012, city:”Madison, WI”, links:{ transcript:”#”, slides:”#”, post:”https://www.linkedin.com/” }, notes:”OSPool, WAN-scale training ideas; pleasant town vibes.” } ]; const map = L.map(‘map’, {worldCopyJump:true}).setView([20,0], 2); L.tileLayer(‘https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png’,{ maxZoom:19, attribution:’© OpenStreetMap’ }).addTo(map); const markers = new Map(); function pinIcon(active=false){ return L.divIcon({ className:’pin’, html:`
` }); } // Build year chips const yearsEl = document.getElementById(‘years’); const years = […new Set(DATA.map(d=>d.year))].sort((a,b)=>b-a); let activeYear = null; function renderYears(){ yearsEl.innerHTML=”; const all = document.createElement(‘div’); all.className = ‘chip’+(activeYear===null?’ active’:”); all.textContent = ‘All’; all.onclick = ()=>{ activeYear=null; render(); }; yearsEl.appendChild(all); years.forEach(y=>{ const c=document.createElement(‘div’); c.className=’chip’+(activeYear===y?’ active’:”); c.textContent=y; c.onclick=()=>{ activeYear=y; render(); }; yearsEl.appendChild(c); }); } renderYears(); // Build timeline list + markers const eventsEl = document.getElementById(‘events’); function render(){ eventsEl.innerHTML=”; const filtered = activeYear? DATA.filter(d=>d.year===activeYear) : DATA; // clear/add markers markers.forEach(m=>map.removeLayer(m)); markers.clear(); filtered .sort((a,b)=>new Date(b.date)-new Date(a.date)) .forEach(evt=>{ // card const div=document.createElement(‘div’); div.className=’event’; div.innerHTML = ` ${evt.title}
${evt.date} • ${evt.city}

${evt.notes}

Transcript · Slides · Post

`; div.onclick = ()=>{ const m = markers.get(evt.id); if(m){ m.openPopup(); map.setView([evt.lat, evt.lng], 6, {animate:true}); } document.querySelectorAll(‘.event’).forEach(e=>e.classList.remove(‘active’)); div.classList.add(‘active’); }; eventsEl.appendChild(div); // marker const popup = `
${evt.title}
${evt.date} • ${evt.city}

${evt.notes}

Transcript · Slides · Post

`; const marker = L.marker([evt.lat, evt.lng], {icon:pinIcon()}).bindPopup(popup); marker.addTo(map); marker.on(‘popupopen’, ()=>{ document.querySelectorAll(‘.event’).forEach(e=>e.classList.remove(‘active’)); div.classList.add(‘active’); }); markers.set(evt.id, marker); }); // auto-fit if(filtered.length){ const group = L.featureGroup([…markers.values()]); map.fitBounds(group.getBounds().pad(0.25)); } } render();