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 = `
`;
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();