@@ -49,21 +49,18 @@ Here you can find insights about our Cloud Native Computing Linz meetups includi
49
49
</div >
50
50
</div >
51
51
52
- ### Recent Speakers (Last 15 Events)
52
+ ### Top 15 Speakers
53
53
<div class =" chart-container " >
54
54
<canvas id =" topSpeakersChart " ></canvas >
55
55
<div id =" topSpeakersFallback " style =" display : none ;" >
56
- <div class="chart-title">🎤 Recent Speakers</div>
56
+ <div class="chart-title">🎤 Top Speakers</div>
57
57
<table class="stats-table">
58
58
<thead>
59
- <tr><th>Speaker</th><th>Most Recent Event</th><th> Presentations</th><th>Visual</th></tr>
59
+ <tr><th>Speaker</th><th>Presentations</th><th>Visual</th></tr>
60
60
</thead>
61
61
<tbody>
62
- {% comment %} Get the last 15 events (most recent) {% endcomment %}
63
- {% assign recent_events = site.data.events | reverse | slice: 0, 15 %}
64
62
{% assign speakers = "" | split: "|" %}
65
- {% assign speaker_events = "" | split: "|" %}
66
- {% for event in recent_events %}
63
+ {% for event in site.data.events %}
67
64
{% if event.talks %}
68
65
{% for talk in event.talks %}
69
66
{% if talk.speaker and talk.speaker != '' %}
@@ -79,7 +76,6 @@ Here you can find insights about our Cloud Native Computing Linz meetups includi
79
76
{% assign single_speaker = part | strip %}
80
77
{% if single_speaker != '' %}
81
78
{% assign speakers = speakers | push: single_speaker %}
82
- {% assign speaker_events = speaker_events | push: single_speaker | append: '###' | append: event.date | append: '###' | append: event.title %}
83
79
{% endif %}
84
80
{% endfor %}
85
81
{% endif %}
@@ -90,47 +86,27 @@ Here you can find insights about our Cloud Native Computing Linz meetups includi
90
86
{% assign speaker_rows = "" | split: "|" %}
91
87
{% for speaker in unique_speakers %}
92
88
{% assign count = 0 %}
93
- {% assign most_recent_date = '' %}
94
- {% assign most_recent_title = '' %}
95
89
{% for s in speakers %}
96
90
{% if s == speaker %}
97
91
{% assign count = count | plus: 1 %}
98
92
{% endif %}
99
93
{% endfor %}
100
- {% comment %} Find the most recent event for this speaker {% endcomment %}
101
- {% for entry in speaker_events %}
102
- {% assign parts = entry | split: '###' %}
103
- {% if parts[0] == speaker %}
104
- {% if most_recent_date == '' or parts[1] > most_recent_date %}
105
- {% assign most_recent_date = parts[1] %}
106
- {% assign most_recent_title = parts[2] %}
107
- {% endif %}
108
- {% endif %}
109
- {% endfor %}
110
- {% assign speaker_rows = speaker_rows | push: speaker | append: '|||' | append: count | append: '|||' | append: most_recent_date | append: '|||' | append: most_recent_title %}
111
- {% endfor %}
112
- {% comment %} Sort by most recent date (descending) {% endcomment %}
113
- {% assign sorted_speaker_rows = speaker_rows | sort %}
114
- {% assign final_sorted_rows = "" | split: "|" %}
115
- {% for row in sorted_speaker_rows %}
116
- {% assign final_sorted_rows = final_sorted_rows | unshift: row %}
94
+ {% assign speaker_rows = speaker_rows | push: speaker | append: '|||' | append: count %}
117
95
{% endfor %}
118
- {% for entry in final_sorted_rows %}
96
+ {% assign sorted_speaker_rows = speaker_rows | sort_natural %}
97
+ {% for entry in sorted_speaker_rows %}
119
98
{% assign parts = entry | split: '|||' %}
120
99
{% assign speaker = parts[0] %}
121
100
{% assign count = parts[1] %}
122
- {% assign event_date = parts[2] %}
123
- {% assign event_title = parts[3] %}
124
101
<tr>
125
102
<td>{{ speaker }}</td>
126
- <td><strong>{{ event_date }}</strong><br><small>{{ event_title }}</small></td>
127
103
<td class="number-cell">{{ count }}</td>
128
104
<td><span class="host-bar" style="width: {{ count | times: 10 }}px;"></span> {{ count }}</td>
129
105
</tr>
130
106
{% endfor %}
131
107
</tbody>
132
108
</table>
133
- <div class="fallback-note">🎤 This shows speakers from our 15 most recent events, sorted by their latest presentation date .</div>
109
+ <div class="fallback-note">🎤 This data shows which speakers have presented most often at our events .</div>
134
110
</div >
135
111
</div >
136
112
@@ -144,7 +120,7 @@ Here you can find insights about our Cloud Native Computing Linz meetups includi
144
120
<tr><th>Date</th><th>Event</th><th>Participants</th><th>Popularity</th></tr>
145
121
</thead>
146
122
<tbody>
147
- {% for event in site.data.events reversed %}
123
+ {% for event in site.data.events %}
148
124
{% assign part_str = event.participants | strip %}
149
125
{% assign part_num = part_str | plus: 0 %}
150
126
{% if part_str != '' and part_num > 0 %}
@@ -339,6 +315,10 @@ function initializeChartsWithoutTime() {
339
315
// Process data for charts
340
316
const processEventsData = (events ) => {
341
317
// Host frequency data (exclude 'online' and sort desc)
318
+ // Reverse events for chronological order (oldest to newest)
319
+ const reversedEvents = [... events].reverse ();
320
+ events = reversedEvents;
321
+
342
322
const hostCount = {};
343
323
events .forEach (event => {
344
324
if (event .host && event .host !== ' ' && event .host .toLowerCase () !== ' online' ) {
@@ -352,12 +332,9 @@ function initializeChartsWithoutTime() {
352
332
const hostLabels = sortedHosts .map (([host ]) => host);
353
333
const hostData = sortedHosts .map (([, count ]) => count);
354
334
355
- // Recent speakers data (from last 15 events)
356
- const recentEvents = events .slice (- 15 ); // Get last 15 events
335
+ // Top speakers data
357
336
const speakerCount = {};
358
- const speakerLastEvent = {};
359
-
360
- recentEvents .forEach (event => {
337
+ events .forEach (event => {
361
338
if (event .talks && event .talks .length > 0 ) {
362
339
event .talks .forEach (talk => {
363
340
if (talk .speaker ) {
@@ -382,34 +359,27 @@ function initializeChartsWithoutTime() {
382
359
.map (s => s .trim ()) // Trim whitespace
383
360
.filter (s => s); // Remove empty strings
384
361
385
- // Count each speaker and track their most recent event
362
+ // Count each speaker
386
363
speakers .forEach (speaker => {
387
364
if (speaker) {
388
365
speakerCount[speaker] = (speakerCount[speaker] || 0 ) + 1 ;
389
- // Update last event if this event is more recent
390
- if (! speakerLastEvent[speaker] || event .date > speakerLastEvent[speaker]) {
391
- speakerLastEvent[speaker] = event .date ;
392
- }
393
366
}
394
367
});
395
368
}
396
369
});
397
370
}
398
371
});
399
372
400
- // Sort speakers by most recent event date (descending)
373
+ // Sort speakers by count desc
401
374
const sortedSpeakers = Object .entries (speakerCount)
402
- .sort ((a , b ) => {
403
- const dateA = speakerLastEvent[a[0 ]];
404
- const dateB = speakerLastEvent[b[0 ]];
405
- return dateB .localeCompare (dateA); // Most recent first
406
- })
407
- .slice (0 , 15 ); // Get top 15 most recent speakers
375
+ .sort ((a , b ) => b[1 ] - a[1 ])
376
+ .slice (0 , 15 ); // Get top 20 speakers for better visualization
408
377
const speakerLabels = sortedSpeakers .map (([speaker ]) => speaker);
409
378
const speakerData = sortedSpeakers .map (([, count ]) => count);
410
379
411
380
// Participants trends (strict numeric filtering)
412
- const participantsData = events
381
+
382
+ const participantsData = events .reverse ()
413
383
.filter (event => {
414
384
// Only include events where participants is a valid number
415
385
if (! event .participants ) return false ;
@@ -549,7 +519,7 @@ function initializeChartsWithoutTime() {
549
519
}
550
520
});
551
521
552
- // Recent Speakers Chart
522
+ // Top Speakers Chart
553
523
const speakersCtx = document .getElementById (' topSpeakersChart' ).getContext (' 2d' );
554
524
new Chart (speakersCtx, {
555
525
type: ' bar' ,
@@ -565,13 +535,6 @@ function initializeChartsWithoutTime() {
565
535
},
566
536
options: {
567
537
... commonOptions,
568
- plugins: {
569
- ... commonOptions .plugins ,
570
- title: {
571
- display: true ,
572
- text: ' Recent Speakers (Last 15 Events)'
573
- }
574
- },
575
538
scales: {
576
539
y: {
577
540
beginAtZero: true ,
@@ -688,6 +651,10 @@ function initializeCharts() {
688
651
try {
689
652
// Process data for charts
690
653
const processEventsData = (events ) => {
654
+ // Reverse events for chronological order (oldest to newest)
655
+ const reversedEvents = [... events].reverse ();
656
+ events = reversedEvents;
657
+
691
658
// Host frequency data (exclude 'online' and sort desc)
692
659
const hostCount = {};
693
660
events .forEach (event => {
@@ -701,12 +668,9 @@ function initializeCharts() {
701
668
const hostLabels = sortedHosts .map (([host ]) => host);
702
669
const hostData = sortedHosts .map (([, count ]) => count);
703
670
704
- // Recent speakers data (from last 15 events)
705
- const recentEvents = events .slice (- 15 ); // Get last 15 events
671
+ // Top speakers data
706
672
const speakerCount = {};
707
- const speakerLastEvent = {};
708
-
709
- recentEvents .forEach (event => {
673
+ events .forEach (event => {
710
674
if (event .talks && event .talks .length > 0 ) {
711
675
event .talks .forEach (talk => {
712
676
if (talk .speaker ) {
@@ -726,29 +690,21 @@ function initializeCharts() {
726
690
.map (s => s .trim ())
727
691
.filter (s => s && s .length > 0 );
728
692
729
- // Count each speaker and track their most recent event
693
+ // Count each speaker
730
694
speakers .forEach (speaker => {
731
695
if (speaker) {
732
696
speakerCount[speaker] = (speakerCount[speaker] || 0 ) + 1 ;
733
- // Update last event if this event is more recent
734
- if (! speakerLastEvent[speaker] || event .date > speakerLastEvent[speaker]) {
735
- speakerLastEvent[speaker] = event .date ;
736
- }
737
697
}
738
698
});
739
699
}
740
700
});
741
701
}
742
702
});
743
703
744
- // Sort speakers by most recent event date (descending)
704
+ // Sort speakers by count desc
745
705
const sortedSpeakers = Object .entries (speakerCount)
746
- .sort ((a , b ) => {
747
- const dateA = speakerLastEvent[a[0 ]];
748
- const dateB = speakerLastEvent[b[0 ]];
749
- return dateB .localeCompare (dateA); // Most recent first
750
- })
751
- .slice (0 , 15 ); // Get top 15 most recent speakers
706
+ .sort ((a , b ) => b[1 ] - a[1 ])
707
+ .slice (0 , 20 ); // Get top 20 speakers for better visualization
752
708
const speakerLabels = sortedSpeakers .map (([speaker ]) => speaker);
753
709
const speakerData = sortedSpeakers .map (([, count ]) => count);
754
710
@@ -892,7 +848,7 @@ function initializeCharts() {
892
848
}
893
849
});
894
850
895
- // Recent Speakers Chart
851
+ // Top Speakers Chart
896
852
const speakersCtx = document .getElementById (' topSpeakersChart' ).getContext (' 2d' );
897
853
new Chart (speakersCtx, {
898
854
type: ' bar' ,
@@ -908,13 +864,6 @@ function initializeCharts() {
908
864
},
909
865
options: {
910
866
... commonOptions,
911
- plugins: {
912
- ... commonOptions .plugins ,
913
- title: {
914
- display: true ,
915
- text: ' Recent Speakers (Last 15 Events)'
916
- }
917
- },
918
867
scales: {
919
868
y: {
920
869
beginAtZero: true ,
0 commit comments