Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
149919 stories
·
33 followers

Developer’s Guide to AI Agent Protocols

1 Share
This blog post introduces a suite of six protocols, such as MCP and A2A, designed to eliminate custom integration code by standardizing how AI agents access data and communicate. Using a "kitchen manager" agent as a practical example, it demonstrates how these tools handle complex tasks like real-time inventory checks, wholesale commerce via UCP, and secure payment authorization through AP2. By leveraging the Agent Development Kit (ADK), developers can also implement A2UI and AG-UI to deliver interactive dashboards and seamless streaming interfaces to users.
Read the whole story
alvinashcraft
just a second ago
reply
Pennsylvania, USA
Share this story
Delete

Finding Your Most Popular Bluesky Followers

1 Share

A long time, like, a really long time ago, I created a web app that would take your Twitter followers and then sort them by the number of followers they had. This was, of course, next to useless but was a fun excursion into the Twitter API and kinda cool to see "big names" following me. We all know what happened to the Twitter API, and Twitter itself, but last night I decided to take a stab at building something similar for Bluesky. If you don't care about the how and just want to see the result, you can play with it here: https://happy-mountain-lamb.codepen.app/

Still here? Ok, let's talk turkeycode!

The Bluesky API

I've built a number of demos already using Bluesky's APIs, and for the most part, they're easy to use and "just work" - which is all you want from an API. That was my expectation going into this little demo, but what I was really surprised by was the fact that everything I needed to do could be done without any authentication at all. I didn't need oAuth, I didn't need an API key, I just hit public endpoints and everything just worked.

My demo makes use of a few different endpoints:

app.bsky.actor.getProfile is used to return information about the user you are generating a report on. As an example, this is what it returns for me:

{
    "did": "did:plc:4tan3ugu55i2u3hmtblu7wf5",
    "handle": "raymondcamden.com",
    "displayName": "Raymond Camden",
    "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:4tan3ugu55i2u3hmtblu7wf5/bafkreiepx6pemul5jmnbmplgt5nfv43qaaab3admth4hlgt7foondje46m",
    "associated": {
        "lists": 0,
        "feedgens": 0,
        "starterPacks": 0,
        "labeler": false,
        "chat": {
            "allowIncoming": "all"
        },
        "activitySubscription": {
            "allowSubscriptions": "followers"
        }
    },
    "labels": [],
    "createdAt": "2023-04-27T14:26:21.272Z",
    "description": "Developer Advocate who spends all his time building demos involving cats. ",
    "indexedAt": "2024-01-20T05:45:01.638Z",
    "banner": "https://cdn.bsky.app/img/banner/plain/did:plc:4tan3ugu55i2u3hmtblu7wf5/bafkreidia27zaotxjebruhsjfkrkwaho4jxzkm6gipkx62ggtnerdmvvfq",
    "followersCount": 2145,
    "followsCount": 476,
    "postsCount": 1379
}

app.bsky.graph.getFollowers - the getFollowers endpoint returns a paginated list of an account's followers. This returns basic information about the account, but not how many followers the account has.

app.bsky.actor.getProfiles - this endpoint is like the first, returning detailed information about a profile, but it lets you pass in 25 accounts at once. I use this to 'enhance' the results from getFollowers and add their follower count.

Now let's look at how I put this together.

The App

The application is just vanilla HTML, JavaScript, and CSS. The HTML is pretty simple as JavaScript is handling most of the content output:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="./style.css">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Popular Followers</title>
		<link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css">
  </head>
  <body>

		<p>
		<label for="username">
			Enter the username to check: 
			<input type="search" id="username" value="">
		</label>
		</p>
		<button id="executeUser">Execute!</button>
		<span id="status"></span>
		
		<div id="userProfile"></div>
		<!-- this should be CSS I believe... -->
		<br clear="left">
		<div id="report"></div>
    <script src="./script.js"></script>
  </body>
</html>

On the JavaScript side, I begin with a bunch of DOM grabbing and I listen for click events on my button:

document.addEventListener('DOMContentLoaded', init, false);

let $username, $executeUser, $status, $userProfile, $report;

async function init() {
	$username = document.querySelector('#username');
	$executeUser = document.querySelector('#executeUser');
	$status = document.querySelector('#status');
	$userProfile = document.querySelector('#userProfile');
	$report = document.querySelector('#report');
	$executeUser.addEventListener('click', executeUser);
}

Yes, executeUser is a horrible name for a function. I'm ok with that. That function is pretty intense, so let's check it out:

async function executeUser() {
	let nick = $username.value.trim();
	if(nick === '') return;
	console.log(`going to do ${nick}`);
	$status.innerHTML = `Looking up ${nick}...`;
	$executeUser.setAttribute('disabled','disabled');

	let user = await getUser(nick);
	if(user.error) {
		$status.innerHTML = `Unable to load this user: ${user.message}`;
			$executeUser.removeAttribute('disabled');
			return;
	}
	console.log(user);

	// yes it is only blank for a sec, but... 
	$status.innerHTML = ''; 
	$userProfile.innerHTML = `
	<p>
	<img src="${user.avatar}">
	The user, ${nick} has the display name: ${user.displayName}. They are followed by ${numberFormat(user.followersCount)} users. Generating top follower count now.
	</p>
	`;

	$status.innerHTML = 'Loading followers (this may take a while)';

	let followers = [];
	let fList = await getFollowers(nick);
	console.log(fList);

	$status.innerHTML = 'Now loading info on these users.';

	fList = await inflateUsers(fList);

	fList.sort((a,b) => {
		return b.followersCount - a.followersCount;
	});
	console.table(fList);

	$status.innerHTML = ''; 
	let report = `
	<h3>Report (Top 100)</h3>
	<table>
		<thead>
		<tr>
			<th>Avatar</th><th>Name</th><th>Followers</th>
		</tr>
		</thead>
		<tbody>
	`;

	fList.slice(0,100).forEach(f => {
		report += `
<tr>
	<td><img src="${f.avatar}" class="reportAvatar"></td>
	<td><a href="https://bsky.app/profile/${f.handle}" target="_blank">${f.handle}${f.displayName?' (' + f.displayName + ')':''}</a></td>
	<td>${numberFormat(f.followersCount)}</td>
</tr>
		`;
	});

	report += '</tbody></table>';
	$report.innerHTML = report;
	$executeUser.removeAttribute('disabled');

}

This is the primary portion of the application. It handles validating your input and ensuring you entered a real user account. After rendering a little bit about the account, it kicks off the process to get your followers and then enhance those results so we know the follower count.

The final step is to sort and render it out in a basic table. I filter to the top 100 but dump the entire result in your console if you want to see. (If you didn't know about console.table, it is hella useful for cases like this.)

My three Bluesky API wrappers are pretty trivial outside of intelligently handling both pagination and sending 25 users at a time in slices:

async function getUser(u) {	
	let uReq = await fetch(`https://api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=${u}`);
	return await uReq.json();
}

/*
I grab all the followers, looping over each page
*/
async function getFollowers(u) {
	let result = [];
	let hasMore = true;
	let cursor = '';
	
	while(hasMore) {
		console.log(`loading for cursor ${cursor}`);
		let fReq = await fetch(`https://api.bsky.app/xrpc/app.bsky.graph.getFollowers?actor=${u}&cursor=${cursor}&limit=100`);
		let thisResult = await fReq.json();
		result.push(...thisResult.followers);
		if(!thisResult.cursor) hasMore = false;
		else cursor = thisResult.cursor;
		// tempf for testing
		//if(result.length >= 200) hasMore = false;
	}	
	return result;
}

/*
Given an array of users, I need to get more info about them, specifically just how many followers they have. 
BSky supports getting 25 at a time, so we will use that
to lower the # of network calls
*/
async function inflateUsers(users) {
	for(let i=0; i<users.length;i+=25) {
		let slice = users.slice(i,i+25);
		let uList = slice.reduce((list, u) => {
			list.push(`&actors=${u.handle}`);
			return list;
		},[]);

		let uReq = await fetch(`https://api.bsky.app/xrpc/app.bsky.actor.getProfiles?${uList.join('')}`);
		let uData = await uReq.json();
		console.log('uData!!!', uData);
		for(let x=0;x<uData.profiles.length;x++) {
			users[i+x].followersCount = uData.profiles[x].followersCount;
		}
		console.log(`slice starting at ${i} has len ${slice.length}`); 
	}
	return users;
}

If you don't want to test this yourself, here's a screen shot of it in action.

App view showing the form

Finally, this was maybe my second or third time using the new CodePen. You can check it out in the embed below. I'm really digging it, especially the new editing experience. I much prefer having tabs so I can focus on one file at a time. Sure, you could minimize the panels in CodePen before, but this UX just feels closer to Visual Studio Code and is just more enjoyable to me.

Also, as I said in the beginning, this is kind of a pointless tool and mostly exists to stroke your ego a bit, but I can see some usefulness in reporting on your followers. Not for a personal account like my own, but for brand or larger media accounts perhaps. It wouldn't be difficult to add different types of sorting or filtering for example. If you end up forking my code, let me know!

See the Pen Top BS Followers by Raymond Camden (@cfjedimaster) on CodePen.

Read the whole story
alvinashcraft
18 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Help Shape Uno Platform’s 2026 Roadmap

1 Share
&&
Announcement Community
Your Input

Our annual developer survey is the single most important input into how Uno Platform is built, prioritized, and evolved. The features you asked for in previous surveys became real things developers ship with today: C# Markup, .NET MAUI Embedding, the Startup Wizard, Hot Design, and more. Each of those started as a signal in survey responses.

Every year, we pause to ask the question that matters most: what do you actually need?

Take the 2026 Survey →
10 minutes max
What's New

A Survey Built for Where Development Is Heading

The developer landscape has shifted considerably since our last survey, and the survey has moved with it.

This year's survey dedicates an entire section to AI development workflows. Whether you have not adopted AI tools at all, work with a copilot-style assistant that you review and approve, operate at a fully agentic level, or coordinate multiple agents across parallel tasks. We want to understand where you are in that spectrum and how it shapes the tools you need from us.

That is not a small question for us internally. Your responses will tell us whether we are building the right things, for the right developers, for the stage of AI adoption you are in. Yes, even if you are not using or considering using AI. It is about understanding what you need next.

The questions are designed to surface behavioral patterns that inform product decisions: which platform targets matter most to you, how you approach UI development today, how much you trust AI-generated code.

Take the 2026 Survey →
10 minutes max
Beyond

Beyond the Survey

For more targeted feature requests (specific controls, framework behaviors, documentation gaps), our GitHub repository remains the right place. The survey captures direction; GitHub captures detail. Both matter.

Take the 2026 Survey →
10 minutes max

Thank you for building with Uno Platform. Every response shapes what comes next.

The post Help Shape Uno Platform’s 2026 Roadmap appeared first on Uno Platform.

Read the whole story
alvinashcraft
44 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

How to query your Copilot CLI session history | Advanced tips & tricks

1 Share
From: GitHub
Duration: 1:11
Views: 341

Evan Boyle from the GitHub Copilot CLI team shares advanced tips to level up your terminal workflow. Learn how to query your local SQLite database to pull up session history and recover context from past bug fixes. You can even ask Copilot to analyze your prompting habits to help you write better commands.

#CopilotCLI #GitHubCopilot #GitHub

Work with Copilot CLI: https://github.com/features/copilot/cli?utm_source=social-youtube-memory&utm_medium=social&utm_campaign=copilot-cli-ga-phase-two-2026

Stay up-to-date on all things GitHub by connecting with us:

YouTube: https://gh.io/subgithub
Blog: https://github.blog
X: https://twitter.com/github
LinkedIn: https://linkedin.com/company/github
Insider newsletter: https://resources.github.com/newsletter/
Instagram: https://www.instagram.com/github
TikTok: https://www.tiktok.com/@github

About GitHub
It’s where over 180 million developers create, share, and ship the best code possible. It’s a place for anyone, from anywhere, to build anything—it’s where the world builds software. https://github.com

Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

Are We Screwed If AI Works? — With Andrew Ross Sorkin

1 Share

Andrew Ross Sorkin is an anchor at CNBC, columnist at The New York Times, and author of 1929, a bestselling book about the worst market crash in history. Sorkin joins Big Technology Podcast to discuss whether AI achieving its potential could lead to a similar crash, either via a labor shock or the disruption of software. Stay tuned for the second half where we discuss private credit risks, prediction market gambling, and the SpaceX IPO. Hit play for a dynamic conversation about where AI could lead, and its potential economic benefits or consequences.


---

Enjoying Big Technology Podcast? Please rate us five stars ⭐⭐⭐⭐⭐ in your podcast app of choice.

Want a discount for Big Technology on Substack + Discord? Here’s 25% off for the first year: https://www.bigtechnology.com/subscribe?coupon=0843016b


Chapters:

0:00 Introduction

3:37 Could AI's Success Cause a Market Crash?

7:02 The Mass Unemployment Question

34:39 Private Credit Explained

39:09 Private Credit Alarm Bells

42:43 The AI Debt Risk

47:14 The Prison of Financial Mediocrity

54:38 Could We Have a 1929-Scale Crash?

56:11 Fed Independence

1:03:08 The SpaceX IPO

Learn more about your ad choices. Visit megaphone.fm/adchoices





Download audio: https://pdst.fm/e/tracking.swap.fm/track/t7yC0rGPUqahTF4et8YD/pscrb.fm/rss/p/traffic.megaphone.fm/AMPP1656307785.mp3?updated=1773844375
Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

BONUS How to Build Teams That Think, Own, and Execute Without Burnout With Sid Jashnani

1 Share

BONUS: How to Build Teams That Think, Own, and Execute Without Burnout

What if the problem isn't your people—but how your leadership shows up? In this episode, Sid Jashnani unpacks how Agile thinking, EOS (the Entrepreneurial Operating System), and his DELTA Delegation Ladder can help leaders build teams that truly own outcomes, execute without micromanagement, and grow the business—without burning out leaders or teams.

The Breaking Point: When Smart People Don't Own Outcomes

"I realized that I was the system, I was the bottleneck. And I was the one orchestrating everything. And if I were to step away for just going for dinner with my family, I would still get a call from someone."

 

Around 2014, Sid was running a thriving systems integration company with great people—people he trusted and loved working with. But they weren't owning outcomes. They were busy, but not always productive. Every decision fell back on Sid, and when the calls kept coming during family dinners, he started responding with irritation and sarcasm—a leadership pattern he knew was unsustainable. That moment of self-awareness became the catalyst for change. Sid realized the problem wasn't his team's competence; it was his inability to get them aligned, accountable, and clear on expectations. 

That's when he discovered EOS—a business operating system created by Gino Wickman that orchestrates how you set priorities, run meetings, connect with your team, and track your numbers. Over the next few years, implementing EOS across his organization brought the clarity, accountability, and discipline his business needed.

Where Agile and EOS Overlap: Trust Through Structure

"The real overlap is trust through structure. If there's no structure, then I'm not accountable to you. I can do whatever."

 

Sid sees deep parallels between Agile and EOS. Both are allergic to hero culture. Both push decisions as close to the work as possible. Both rely on cadence—sprints, weekly meetings, daily stand-ups—to create rhythm without micromanagement. And both use visibility, numbers, and scorecards to keep teams aligned. But the real overlap, as Sid frames it, is trust through structure. In EOS, teams are structured through an accountability chart: who owns what outcome, who reports to whom, and how success is defined for each role. Without that structure, accountability becomes optional, and without accountability, trust never forms. Sid connects this directly to Patrick Lencioni's The Five Dysfunctions of a Team—where trust sits at the base of the pyramid, enabling healthy conflict, commitment, accountability, and ultimately results. The key anti-pattern Sid warns about: people picking only the comfortable parts of a system and relaxing the parameters so much that it becomes "SOS—Sid's Operating System—which is just an emergency call for help."

In this episode, we also refer to Traction, by Gino Wickman, a foundational book for Sid in his career. 

The DELTA Delegation Ladder: From Command-and-Control to Co-Founder Mode

"Delegation fails because leaders skip levels."

 

Sid introduces his DELTA Delegation Ladder—a five-level framework for understanding where your team members sit and how to delegate accordingly:

 

  • D — Do as I say: Pure execution of instructions. Sid notes this level is increasingly being replaced by AI.

  • E — Explore the possible solutions: Research and present options, but the leader still makes the decision. Also increasingly delegable to AI.

  • L — Lead with a recommendation: The entry point for real human value. The person researches, forms a hypothesis, and recommends a path forward. Sid considers this the minimum hiring bar.

  • T — Take action with oversight: The person takes decisions and acts, keeping the leader in the loop. Trust has been built through coaching and mentoring.

  • A — Autonomous execution: Co-founder mode. The person owns the outcome end-to-end. Full trust, full ownership.

 

Delegation fails when leaders skip levels—expecting someone at "D" to operate at "A." It also fails when leaders abdicate rather than delegate, throwing someone into a role without investing time in coaching, clarifying expectations, or showing them what "great" looks like. As Sid puts it: delegation only works if you spend time with the person you're delegating to.

Remote Teams: Written Clarity Beats Verbal Alignment

"Trust comes from predictability, not proximity. I can be 1,000 miles across the world from you and trust you, because I can predict what your actions are gonna be."

 

For distributed and cross-timezone teams, Sid's non-negotiables are clear: get good at writing, and over-communicate. Written clarity beats verbal alignment every time, especially across cultures where tone and directness vary widely—from British politeness to Dutch directness. Over-communication isn't a flaw; it's the standard for remote teams. Without it, accountability vanishes and culture erodes. Sid points out that trust in remote settings comes from predictability—can you predict that someone will hit their milestones, complete their to-dos, and follow through?—not from physical proximity. Someone sitting next to you who consistently misses deadlines will never earn your trust, while someone across the world who reliably delivers will.

 

Self-reflection Question: Where on the DELTA Delegation Ladder are the people you're currently delegating to—and are you investing the time and coaching they need to move up, or are you skipping levels and hoping for miracles?

 

About Sid Jashnani

Sid is a founder, operator, and growth advisor who scaled a systems integration firm into a portfolio of IT businesses. After struggling with delegation and predictability, EOS transformed how he led. Through Outgrow, Sid helps founders drive 15–30% predictable growth with disciplined execution and proactive customer communication.

 

You can link with Sid Jashnani on LinkedIn.

 

You can also read his weekly newsletter, Leadership Bytes Weekly on Substack.





Download audio: https://traffic.libsyn.com/secure/scrummastertoolbox/20260318_Sid_Jashnani_W.mp3?dest-id=246429
Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories