Skip to content

Commit 4fb854c

Browse files
authored
Merge pull request #155 from arm-university/main
Changes
2 parents e091f84 + 33cbfe7 commit 4fb854c

File tree

5 files changed

+140
-58
lines changed

5 files changed

+140
-58
lines changed

Projects/Projects/Edge-AI-On-Mobile.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
title: "SME2 on vivo X300: Mobile Edge AI Projects for multi-modal inference, built on Arm Lumex"
3-
description: "Leverage the latest SME2 (Scalable Matrix Extension 2) available on the newest vivo X300 smartphones (built on Arm Lumex CSS) for advanced image/video, audio and text processing edge AI. Explore how SME2, via KleidiAI, enables larger matrix workloads, higher throughput, and novel applications on device without cloud connectivity required."
2+
title: "SME2 on vivo X300 and other devices: Mobile Edge AI Projects for multi-modal inference."
3+
description: "Leverage the latest SME2 (Scalable Matrix Extension 2) available on the newest vivo X300 smartphones (built on Arm Lumex CSS) or other SME2-enabled devices for advanced image/video, audio and text processing edge AI. Explore how SME2, via KleidiAI, enables larger matrix workloads, higher throughput, and novel applications on device without cloud connectivity required."
44
subjects:
55
- "ML"
66
- "Performance and Architecture"
@@ -23,6 +23,7 @@ status:
2323
badges:
2424
- trending
2525
- recently_added
26+
donation:
2627
---
2728

2829
## Description
@@ -37,6 +38,8 @@ The vivo X300 is built on Arm Lumex. SME2 now enables AI compute that previously
3738

3839
[vivo X300, built on Arm Lumex](https://www.arm.com/company/success-library/vivo-x300-smartphones)
3940

41+
Other devices also support SME2, including both Apple and Android - [see the full list here](https://learn.arm.com/learning-paths/cross-platform/multiplying-matrices-with-sme2/1-get-started#devices)
42+
4043
### Project Summary
4144

4245
Select a **mobile edge AI application** that benefits from large matrix operations, multi-modal fusion, or transformer-based processing enabled by SME2. Build and optimize a proof-of-concept application on a vivo X300 phone or other device supporting SME2.
@@ -71,9 +74,10 @@ This project is designed to be self-serve but comes with opportunity of some com
7174

7275
## Benefits
7376

74-
Standout project contributions to the community will earn digital badges. These badges can support CV or resumé building and demonstrate earned recognition.
77+
Standout project contributions will result in digital badges for CV building, recognised by Arm Talent Acquisition. We are currently discussing with national agencies the potential for funding streams for Arm Developer Labs projects, which would flow to you, not us.
78+
7579

7680
To receive the benefits, you must show us your project through our [online form](https://forms.office.com/e/VZnJQLeRhD). Please do not include any confidential information in your contribution. Additionally if you are affiliated with an academic institution, please ensure you have the right to share your material.
7781

78-
---
7982

83+
---

docs/Challenge_Page.html

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,24 @@ <h1>Bharat AI-SoC Student Challenge</h1>
5858
</div>
5959
</header>
6060

61+
<div style="background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%); border-left: 4px solid #dc2626; padding: 20px 24px; margin: 24px 0; border-radius: 8px; box-shadow: 0 4px 12px rgba(220, 38, 38, 0.1);">
62+
<div style="display: flex; align-items: flex-start; gap: 12px;">
63+
<div style="flex-shrink: 0; margin-top: 2px;">
64+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#dc2626" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
65+
<circle cx="12" cy="12" r="10"></circle>
66+
<line x1="12" y1="8" x2="12" y2="12"></line>
67+
<line x1="12" y1="16" x2="12.01" y2="16"></line>
68+
</svg>
69+
</div>
70+
<div style="flex: 1;">
71+
<h3 style="margin: 0 0 8px 0; color: #991b1b; font-size: 18px; font-weight: 600;">Registration Closed</h3>
72+
<p style="margin: 0 0 8px 0; color: #7f1d1d; font-size: 15px; line-height: 1.5;">
73+
The registration period for the Bharat AI-SoC Student Challenge has ended.
74+
</p>
75+
</div>
76+
</div>
77+
</div>
78+
6179
<main class="ch-main">
6280
<!-- LEFT COLUMN -->
6381
<div>
@@ -192,6 +210,7 @@ <h2>Frequently Asked Questions (FAQ)</h2>
192210
</main>
193211
</div>
194212

213+
195214
<!-- FAQ Popup Modal -->
196215
<div id="faqPopup" style="display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.6); z-index:1100; justify-content:center; align-items:center;">
197216
<div style="background:#fff; padding:30px; border-radius:16px; max-width:700px; width:90%; max-height:85vh; overflow-y:auto; position:relative; box-shadow: 0 10px 40px rgba(0,0,0,0.2);">

docs/_data/navigation.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,10 +343,10 @@ projects:
343343
- Published
344344
- title: Edge-AI-On-Mobile
345345
description: Leverage the latest SME2 (Scalable Matrix Extension 2) available
346-
on the newest vivo X300 smartphones (built on Arm Lumex CSS) for advanced image/video,
347-
audio and text processing edge AI. Explore how SME2, via KleidiAI, enables larger
348-
matrix workloads, higher throughput, and novel applications on device without
349-
cloud connectivity required.
346+
on the newest vivo X300 smartphones (built on Arm Lumex CSS) or other SME2-enabled
347+
devices for advanced image/video, audio and text processing edge AI. Explore
348+
how SME2, via KleidiAI, enables larger matrix workloads, higher throughput,
349+
and novel applications on device without cloud connectivity required.
350350
url: /2025/11/27/Edge-AI-On-Mobile.html
351351
subjects:
352352
- ML

docs/_layouts/article.html

Lines changed: 96 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -178,68 +178,115 @@ <h2 class="project-group-title">{{ category.title }}</h2>
178178
{%- endfor -%}
179179
</div>
180180

181-
<script>
182-
// Put projects with badge key "recently_added" first (per category list)
183-
function hasRecentlyAddedBadge(li) {
184-
let badges = [];
181+
<script>
182+
(function () {
183+
let isSorting = false;
184+
let observer = null;
185+
let debounceTimer = null;
186+
187+
function safeParseBadges(raw) {
188+
raw = raw == null ? '' : String(raw).trim();
189+
if (!raw) return [];
185190
try {
186-
badges = JSON.parse(li.dataset.badges || '[]');
187-
} catch (e) {
188-
badges = [];
189-
}
190-
return Array.isArray(badges) && badges.includes('recently_added');
191+
const j = JSON.parse(raw);
192+
if (Array.isArray(j)) return j.map(x => String(x).trim()).filter(Boolean);
193+
} catch (e) {}
194+
// comma-separated fallback
195+
const cleaned = raw.replace(/^[\[\]'" ]+|[\[\]'" ]+$/g, '');
196+
return cleaned.split(',').map(s => s.trim()).filter(Boolean);
197+
}
198+
199+
function badgesFromDOM(li) {
200+
const badgesEl = li.querySelector('.project-badges');
201+
if (!badgesEl) return [];
202+
// collect visible badge labels
203+
return Array.from(badgesEl.querySelectorAll('*'))
204+
.map(n => (n.textContent || '').trim())
205+
.filter(Boolean);
206+
}
207+
208+
function normalize(arr) {
209+
return (arr || []).map(x => String(x).trim().toLowerCase());
210+
}
211+
212+
function badgeRank(normed) {
213+
const isTrending = normed.includes('trending');
214+
const isRecent =
215+
normed.includes('recently_added') ||
216+
normed.includes('recently-added') ||
217+
normed.includes('recentlyadded');
218+
219+
if (isTrending && isRecent) return 0; // Trending + Recently added
220+
if (isRecent) return 1; // Recently added
221+
if (isTrending) return 2; // Trending
222+
return 3; // Neither
191223
}
192224

193-
function sortProjectsRecentlyAddedFirst() {
225+
function getBadgesForItem(li) {
226+
const raw = li.getAttribute('data-badges') || li.dataset.badges || '';
227+
let parsed = safeParseBadges(raw);
228+
if (parsed.length === 0) parsed = badgesFromDOM(li);
229+
return normalize(parsed);
230+
}
231+
232+
function sortProjectLists() {
233+
if (isSorting) return;
234+
isSorting = true;
235+
236+
// Prevent observer loop while we move nodes
237+
if (observer) observer.disconnect();
238+
194239
document.querySelectorAll('.project-list').forEach(ul => {
195240
const items = Array.from(ul.querySelectorAll(':scope > .project-item'));
196241

197-
// stable sort: decorate with original index
198-
const decorated = items.map((el, idx) => ({
199-
el,
200-
idx,
201-
isRecent: hasRecentlyAddedBadge(el)
202-
}));
203-
204-
decorated.sort((a, b) => {
205-
if (a.isRecent !== b.isRecent) return a.isRecent ? -1 : 1; // recent first
206-
return a.idx - b.idx; // preserve original order otherwise
242+
const decorated = items.map((el, idx) => {
243+
const badges = getBadgesForItem(el);
244+
return { el, idx, rank: badgeRank(badges) };
207245
});
208246

247+
decorated.sort((a, b) => (a.rank - b.rank) || (a.idx - b.idx));
209248
decorated.forEach(d => ul.appendChild(d.el));
210249
});
250+
251+
// Reconnect observer after we're done moving nodes
252+
startObserving();
253+
254+
isSorting = false;
211255
}
212256

213-
document.addEventListener('DOMContentLoaded', () => {
214-
sortProjectsRecentlyAddedFirst();
215-
});
257+
function scheduleSort() {
258+
if (debounceTimer) clearTimeout(debounceTimer);
259+
debounceTimer = setTimeout(sortProjectLists, 100);
260+
}
216261

217-
// --- Existing filtering (unchanged) ---
218-
function filterProjects() {
219-
const checks = Array.from(document.querySelectorAll('.filter-checkbox:checked'));
220-
if (checks.length === 0) {
221-
document.querySelectorAll('.project-item').forEach(el => el.style.display = '');
222-
return;
223-
}
224-
const activeFilters = checks.map(cb => ({ cat: cb.dataset.category, val: cb.value }));
225-
document.querySelectorAll('.project-item').forEach(li => {
226-
const plats = JSON.parse(li.dataset.platforms || '[]');
227-
const subs = JSON.parse(li.dataset.subjects || '[]');
228-
const swhws = JSON.parse(li.dataset.swhw || '[]');
229-
const levels = JSON.parse(li.dataset.supportLevel || '[]');
230-
const ok = activeFilters.every(f => {
231-
switch (f.cat) {
232-
case 'platform': return plats.includes(f.val);
233-
case 'subject': return subs.includes(f.val);
234-
case 'sw-hw': return swhws.includes(f.val);
235-
case 'support-level': return levels.includes(f.val);
236-
default: return true;
237-
}
262+
function startObserving() {
263+
const container = document.querySelector('.project-results');
264+
if (!container) return;
265+
266+
if (!observer) {
267+
observer = new MutationObserver(() => {
268+
// Only schedule if we aren't already sorting
269+
if (!isSorting) scheduleSort();
238270
});
239-
li.style.display = ok ? '' : 'none';
240-
});
271+
}
272+
273+
// IMPORTANT: only observe childList changes, not attributes on the whole subtree.
274+
// Observing attributes widely can cause lots of extra triggers.
275+
observer.observe(container, { childList: true, subtree: true });
241276
}
277+
278+
document.addEventListener('DOMContentLoaded', () => {
279+
sortProjectLists();
280+
// Optional second pass for late-rendered badges
281+
setTimeout(sortProjectLists, 300);
282+
});
283+
284+
// Expose for manual debugging
285+
window.__arm_sortProjectLists = sortProjectLists;
286+
})();
242287
</script>
288+
289+
243290
{%- endif -%}
244291
</div>
245292

@@ -253,3 +300,6 @@ <h2 class="project-group-title">{{ category.title }}</h2>
253300
</div>
254301

255302

303+
304+
305+

docs/_posts/2025-11-27-Edge-AI-On-Mobile.md

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
title: 'SME2 on vivo X300: Mobile Edge AI Projects for multi-modal inference, built on Arm Lumex'
3-
description: Leverage the latest SME2 (Scalable Matrix Extension 2) available on the newest vivo X300 smartphones (built on Arm Lumex CSS) for advanced image/video, audio and text processing edge AI. Explore how SME2, via KleidiAI, enables larger matrix workloads, higher throughput, and novel applications on device without cloud connectivity required.
2+
title: 'SME2 on vivo X300 and other devices: Mobile Edge AI Projects for multi-modal inference.'
3+
description: Leverage the latest SME2 (Scalable Matrix Extension 2) available on the newest vivo X300 smartphones (built on Arm Lumex CSS) or other SME2-enabled devices for advanced image/video, audio and text processing edge AI. Explore how SME2, via KleidiAI, enables larger matrix workloads, higher throughput, and novel applications on device without cloud connectivity required.
44
subjects:
55
- ML
66
- Performance and Architecture
@@ -23,6 +23,7 @@ status:
2323
badges:
2424
- trending
2525
- recently_added
26+
donation:
2627
layout: article
2728
sidebar:
2829
nav: projects
@@ -39,6 +40,8 @@ full_description: |-
3940
4041
[vivo X300, built on Arm Lumex](https://www.arm.com/company/success-library/vivo-x300-smartphones)
4142
43+
Other devices also support SME2, including both Apple and Android - [see the full list here](https://learn.arm.com/learning-paths/cross-platform/multiplying-matrices-with-sme2/1-get-started#devices)
44+
4245
### Project Summary
4346
4447
Select a **mobile edge AI application** that benefits from large matrix operations, multi-modal fusion, or transformer-based processing enabled by SME2. Build and optimize a proof-of-concept application on a vivo X300 phone or other device supporting SME2.
@@ -73,10 +76,12 @@ full_description: |-
7376
7477
## Benefits
7578
76-
Standout project contributions to the community will earn digital badges. These badges can support CV or resumé building and demonstrate earned recognition.
79+
Standout project contributions will result in digital badges for CV building, recognised by Arm Talent Acquisition. We are currently discussing with national agencies the potential for funding streams for Arm Developer Labs projects, which would flow to you, not us.
80+
7781
7882
To receive the benefits, you must show us your project through our [online form](https://forms.office.com/e/VZnJQLeRhD). Please do not include any confidential information in your contribution. Additionally if you are affiliated with an academic institution, please ensure you have the right to share your material.
7983
84+
8085
---
8186
---
8287

@@ -92,6 +97,8 @@ The vivo X300 is built on Arm Lumex. SME2 now enables AI compute that previously
9297

9398
[vivo X300, built on Arm Lumex](https://www.arm.com/company/success-library/vivo-x300-smartphones)
9499

100+
Other devices also support SME2, including both Apple and Android - [see the full list here](https://learn.arm.com/learning-paths/cross-platform/multiplying-matrices-with-sme2/1-get-started#devices)
101+
95102
### Project Summary
96103

97104
Select a **mobile edge AI application** that benefits from large matrix operations, multi-modal fusion, or transformer-based processing enabled by SME2. Build and optimize a proof-of-concept application on a vivo X300 phone or other device supporting SME2.
@@ -126,8 +133,10 @@ This project is designed to be self-serve but comes with opportunity of some com
126133

127134
## Benefits
128135

129-
Standout project contributions to the community will earn digital badges. These badges can support CV or resumé building and demonstrate earned recognition.
136+
Standout project contributions will result in digital badges for CV building, recognised by Arm Talent Acquisition. We are currently discussing with national agencies the potential for funding streams for Arm Developer Labs projects, which would flow to you, not us.
137+
130138

131139
To receive the benefits, you must show us your project through our [online form](https://forms.office.com/e/VZnJQLeRhD). Please do not include any confidential information in your contribution. Additionally if you are affiliated with an academic institution, please ensure you have the right to share your material.
132140

141+
133142
---

0 commit comments

Comments
 (0)