PageSourceSearch

https://johnliu.net/

html johnliu.net collected 2026-10-02 05:34:51 UTC 115,387 bytes, 250 lines download raw bytes

1<!DOCTYPE html><html lang="en" class="theme-scholarly-monolith" data-theme="scholarly-monolith"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Newsreader:ital,opsz,wght@0,6..72,200..800;1,6..72,200..800&family=Space+Grotesk:wght@400;500;700&family=Material+Symbols+Outlined:wght,FILL,GRAD,opsz@400,0,0,20&display=swap"><link rel="icon" type="image/x-icon" href="/favicon.ico"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="manifest" href="/site.webmanifest"><link rel="alternate" type="application/rss+xml" title="John Liu .NET" href="/rss.xml"><meta name="generator" content="Astro v5.18.1">
1<script>
2      (function() {
3        var saved = localStorage.getItem('theme');
4        if (saved === 'dark' || (!saved && matchMedia('(prefers-color-scheme: dark)').matches)) {
5          document.documentElement.classList.add('dark');
6        }
7      })();
8    </script>
8<script>
9      (function () {
10        var url = new URL(window.location.href);
11        var path = url.pathname.replace(/\/+$/, '');
12        var search = url.searchParams;
13        var hasLegacyParams =
14          search.has('month') ||
15          search.has('offset') ||
16          search.has('year') ||
17          search.has('category') ||
18          search.get('format') === 'amp' ||
19          search.has('rq') ||
20          search.has('trk') ||
21          search.has('msclkid') ||
22          search.has('utm_content') ||
23          search.has('ref') ||
24          search.has('lastPage') ||
25          search.has('postSubmitted');
26
27        if (!hasLegacyParams) return;
28
29        var cleanPath = path || '/';
30        var next = null;
31
32        if (search.get('format') === 'amp' && cleanPath.startsWith('/blog/')) {
33          next = cleanPath + '/';
34        } else if (cleanPath === '/blog') {
35          var month = search.get('month');
36          var year = search.get('year');
37          var category = search.get('category');
38
39          if (month) {
40            var monthParts = month.split('-');
41            var monthYear = monthParts.length > 1 ? monthParts[1] : null;
42            next = monthYear ? '/blog/archive/#y' + monthYear : '/blog/archive/';
43          } else if (category) {
44            var categoryMap = {
45              microsoftflow: '/blog/tags/microsoftflow/',
46              sharepoint: '/blog/tags/sharepoint/',
47              phantomjs: '/blog/tags/phantomjs/',
48              code: '/blog/tags/code/',
49            };
50            next = categoryMap[String(category).toLowerCase()] || '/blog/archive/';
51          } else if (year) {
52            next = '/blog/archive/#y' + year;
53          }
54        } else if (cleanPath === '/' || cleanPath === '') {
55          var rootCategory = search.get('category');
56          if (rootCategory) {
57            var rootCategoryMap = {
58              phantomjs: '/blog/tags/phantomjs/',
59              microsoftflow: '/blog/tags/microsoftflow/',
60              sharepoint: '/blog/tags/sharepoint/',
61              code: '/blog/tags/code/',
62            };
63            next = rootCategoryMap[String(rootCategory).toLowerCase()] || '/blog/archive/';
64          } else if (search.has('offset') || search.has('year') || search.has('month')) {
65            var rootMonth = search.get('month');
66            var rootYear = search.get('year');
67            if (rootMonth) {
68              var rootMonthParts = rootMonth.split('-');
69              var rootMonthYear = rootMonthParts.length > 1 ? rootMonthParts[1] : null;
70              next = rootMonthYear ? '/blog/archive/#y' + rootMonthYear : '/blog/archive/';
71            } else if (rootYear) {
72              next = '/blog/archive/#y' + rootYear;
73            } else {
74              next = '/blog/archive/';
75            }
76          }
77        }
78
79        if (!next) {
80          var changed = false;
81          ['rq', 'trk', 'msclkid', 'utm_content', 'ref', 'lastPage', 'postSubmitted'].forEach(function (key) {
82            if (search.has(key)) {
83              search.delete(key);
84              changed = true;
85            }
86          });
87          if (!changed) return;
88          next = cleanPath + (search.toString() ? '?' + search.toString() : '') + url.hash;
89        }
90
91        if (next && next !== url.pathname + url.search + url.hash) {
92          window.location.replace(next);
93        }
94      })();
95    </script>
95<!-- Primary meta --><title>John Liu .NET</title><meta name="description" content="John Liu - founder of Flow Studio. I write about Power Platform, agents, and building useful tools.  Microsoft MVP Alumni."><link rel="canonical" href="https://johnliu.net/"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:url" content="https://johnliu.net/"><meta property="og:title" content="John Liu .NET"><meta property="og:description" content="John Liu - founder of Flow Studio. I write about Power Platform, agents, and building useful tools.  Microsoft MVP Alumni."><meta property="og:image" content="https://johnliu.net/og-default.jpg"><meta property="og:site_name" content="johnliu.net"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:url" content="https://johnliu.net/"><meta name="twitter:title" content="John Liu .NET"><meta name="twitter:description" content="John Liu - founder of Flow Studio. I write about Power Platform, agents, and building useful tools.  Microsoft MVP Alumni."><meta name="twitter:image" content="https://johnliu.net/og-default.jpg"><!-- JSON-LD structured data -->
95<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"John Liu .NET","url":"https://johnliu.net/"}</script>
95<!-- Google Analytics --><!-- Follow Google's GA4 gtag.js install pattern. -->
95<script type="module">const a=window;a.dataLayer=a.dataLayer||[];a.gtag=function(){a.dataLayer.push(arguments)};a.gtag("js",new Date);a.gtag("config","G-YGDDRTNBLG");</script>
vendor: 63 bytes, line 95
95<script async src="https://www.googletagmanager.com/gtag/js?id=
95G-YGDDRTNBLG
vendor: 11 bytes, line 95
95"></script>
95<link rel="stylesheet" href="/_astro/_slug_.CSrzItXV.css">
96<link rel="stylesheet" href="/_astro/index.BHIEU0Ao.css"></head> <body> <header class="site-header" data-astro-cid-3ef6ksr2> <div class="wrap" data-astro-cid-3ef6ksr2> <a class="brand" href="/" data-astro-cid-3ef6ksr2> <span class="brand-name" data-astro-cid-3ef6ksr2>John Liu .NET</span> <span class="brand-tagline" data-astro-cid-3ef6ksr2>Automate - Code - Share</span> </a> <div class="header-nav-group" data-astro-cid-3ef6ksr2> <nav data-astro-cid-3ef6ksr2> <a href="/" class="active" data-astro-cid-3ef6ksr2>Blog</a> <a href="/apps" data-astro-cid-3ef6ksr2>Apps</a> <a href="/projects" data-astro-cid-3ef6ksr2>Projects</a> <a href="/about" data-astro-cid-3ef6ksr2>About</a> </nav> <form class="site-search-inline" action="/blog" method="get" role="search" data-astro-cid-3ef6ksr2> <label class="sr-only" for="site-search" data-astro-cid-3ef6ksr2>Search blog</label> <input id="site-search" type="search" name="q" placeholder="Search blog" data-astro-cid-3ef6ksr2> <div id="site-search-results" class="site-search-results" role="listbox" hidden data-astro-cid-3ef6ksr2></div> </form> <a class="subscribe" href="/rss.xml" data-astro-cid-3ef6ksr2>Subscribe</a> <button type="button" class="theme-toggle" id="theme-toggle" title="Toggle dark mode" aria-label="Toggle dark mode" data-astro-cid-3ef6ksr2> <span class="material-symbols-outlined theme-toggle-icon" aria-hidden="true" data-astro-cid-3ef6ksr2>dark_mode</span> </button> <a class="header-user" data-backstage-link href="/backstage" hidden data-astro-cid-3ef6ksr2>Backstage</a> </div> </div> </header> 
96<script>(function(){const postIndex = [{"title":"16 levels of building an MCP","slug":"16-levels-of-building-an-mcp","date":"2026-05-28"},{"title":"Convert Markdown to PDF with Power Automate (Full Guide)","slug":"convert-markdown-to-pdf-with-power-automate","date":"2026-05-26"},{"title":"Flow Studio v1.4 — A Major Update","slug":"flow-studio-app-v14-major-update","date":"2026-05-04"},{"title":"SharePoint as Vercel for Vibe Apps","slug":"sharepoint-as-vercel-for-vibe-apps","date":"2026-05-01"},{"title":"SharePoint Markdown to PDF: a limit test with Agents and Flow Studio MCP","slug":"sharepoint-markdown-to-pdf-limit-test-with-agents-flow-studio-mcp","date":"2026-04-28"},{"title":"The Flow Studio MCP Journey Ahead","slug":"the-flow-studio-mcp-journey-ahead","date":"2026-04-27"},{"title":"Why MCP is still the best bet over CLI","slug":"why-mcp-is-still-the-best-bet-over-cli","date":"2026-04-20"},{"title":"Building the best bridge between your Agent and Power Automate","slug":"building-the-best-bridge-between-your-agent-and-power-automate","date":"2026-04-14"},{"title":"Planning and migrating from Squarespace to SWA + Astro","slug":"planning-and-migrating-from-squarespace-to-swa-and-astro","date":"2026-04-10"},{"title":"AI Agents for Power Automate","slug":"ai-agents-for-power-automate","date":"2026-03-20"},{"title":"Announcing Flow Studio MCP","slug":"announcing-flow-studio-mcp","date":"2026-03-11"},{"title":"Flow Studio Security Architecture Review","slug":"flow-studio-security-architecture-review","date":"2026-03-01"},{"title":"Flow - lightweight fast template engine using Split twice","slug":"flow-lightweight-fast-template-engine-using-split-twice","date":"2026-02-20"},{"title":"Flow - character replace pattern with chunk()","slug":"flow-crazy-string-replacement-patterns","date":"2026-02-20"},{"title":"Flow Studio DevLog: reported for phishing and woes of Cloudflare","slug":"flow-studio-devlog-reported-for-phishing-and-woes-of-cloudflare","date":"2025-09-19"},{"title":"About: The old trigger URL will stop working on November 30, 2025","slug":"about-the-old-trigger-url-will-stop-working-on-november-30-2025","date":"2025-09-13"},{"title":"Diff Mode in Flow Studio","slug":"diff-mode-in-flow-studio","date":"2025-07-30"},{"title":"Flow Studio Price Update 2025 & Introducing Flow Studio for Teams","slug":"flow-studio-price-update-2025-amp-introducing-flow-studio-for-teams","date":"2025-03-21"},{"title":"Mathematically Elegant way to Flatten an Array of Arrays in Power Automate","slug":"flattening-an-array-of-arrays-in-power-automate","date":"2025-03-12"},{"title":"Upgrading SharePointSSO Copilot SPFx to Botframework-WebChat 4.18","slug":"upgrading-sharepointsso-copilot-spfx-to-botframework-webchat-418","date":"2025-02-10"},{"title":"A debug tip for complex conditions in Power Automate #FlowNinjaHack 126","slug":"3a3jfrydr8t7can9ntkvx5fl6flvmu","date":"2025-01-16"},{"title":"Updating AzCopy in Azure Pipeline","slug":"updating-azcopy-in-azure-pipeline","date":"2024-12-28"},{"title":"Flow Studio App v1.2 Updates","slug":"flow-studio-app-v12-updates","date":"2024-03-13"},{"title":"Updates to Flow Studio App in 2023 October","slug":"updates-to-flow-studio-app-in-2023-october","date":"2023-10-27"},{"title":"Updating Flow Studio's Flow Diagram feature","slug":"updating-flow-studios-flow-diagram-feature","date":"2023-10-13"},{"title":"Tips on fixing Power BI dynamic value","slug":"tips-on-fixing-power-bi-dynamic-value","date":"2023-09-14"},{"title":"Power Automate API changes - v2 Admin scope now needs user_impersonation","slug":"power-automate-api-changes-v2-admin-scope-now-needs-userimpersonation","date":"2023-08-07"},{"title":"field notes using Power Automate with Power BI","slug":"field-notes-using-power-automate-with-power-bi","date":"2023-07-31"},{"title":"Turning a new chapter - the MVP Alumni post","slug":"turning-a-new-chapter-the-mvp-alumni-post","date":"2023-07-09"},{"title":"Using Power Automate to provide Timezone and Local Time to Power BI Dataset and Data Flow","slug":"using-power-automate-to-provide-timezone-and-local-time-to-power-bi-dataset-
96and-data-flow","date":"2023-04-04"},{"title":"Power Apps API changes - no longer accept Azure Management token","slug":"blog-power-apps-api-changes-no-longer-accept-azure-management-token","date":"2023-03-25"},{"title":"Turning a new page","slug":"turning-a-new-page","date":"2023-03-19"},{"title":"Our Legacy","slug":"our-legacy","date":"2022-02-03"},{"title":"Research: Power Automate comments are stored in Dataverse","slug":"research-power-automate-comments-are-stored-in-dataverse","date":"2021-11-05"},{"title":"Parse CSV through Code in Power Automate Custom Connection","slug":"parse-csv-through-code-in-power-automate-custom-connection","date":"2021-09-21"},{"title":"Tiny forward steps for me and Flow Studio","slug":"tiny-forward-steps-for-me-and-flow-studio","date":"2021-06-29"},{"title":"2021 - broken, I am missing you Lina Abidin","slug":"2021-broken-i-am-missing-you-lina-abidin","date":"2021-04-06"},{"title":"2021 - break and thrive","slug":"2021-thrive-and-breaks","date":"2021-01-24"},{"title":"Self-service Microsoft Form for external guests to use Power App","slug":"self-service-microsoft-form-for-external-guests-to-use-powerapp","date":"2020-11-28"},{"title":"Ninja List: The great migration of SharePoint Workflow to Power Automate","slug":"ninja-list-the-great-migration-of-sharepoint-workflow-to-power-automate","date":"2020-07-16"},{"title":"How to provision SharePoint list and resources with only standard Microsoft Flow using ExecuteSiteScriptAction","slug":"how-to-provision-sharepoint-list-and-resources-with-only-standard-microsoft-flow-using-executesitescriptaction","date":"2020-06-14"},{"title":"ApolloServer, AzureFunctions and local debugging","slug":"apolloserver-azurefunctions-and-local-debugging","date":"2020-05-30"},{"title":"Where to find John presenting in May 2020","slug":"where-to-find-john-presenting-in-may-2020","date":"2020-05-10"},{"title":"Flow JAM Stack Episode 1 - sending data back with Flow as API","slug":"flow-jam-stack-episode-1-sending-data-back-with-flow-as-api","date":"2020-05-03"},{"title":"Building modern public sites (JAM Stack) with Microsoft Flow","slug":"building-modern-public-sites-jam-stack-with-microsoft-flow","date":"2020-04-24"},{"title":"Using Flow to create Microsoft Teams online events via Microsoft Graph","slug":"using-flow-to-create-microsoft-teams-online-events-via-microsoft-graph","date":"2020-04-08"},{"title":"Power Studio Update April 2020","slug":"power-studio-update-april-2020","date":"2020-04-07"},{"title":"A group_by filter for liquid-node","slug":"a-groupby-filter-for-liquid-node","date":"2020-03-14"},{"title":"Implementing a fast sort with Microsoft Flow using Parallel Compute","slug":"implementing-a-fast-sort-with-microsoft-flow-using-parallel-compute","date":"2020-03-09"},{"title":"Talks and Workshop at Difinity 2020 conference Auckland","slug":"talks-and-workshop-at-difinity-2020-conference-auckland","date":"2020-01-27"},{"title":"Flow - Format Number advanced tips and tricks","slug":"flow-format-number-advanced-tips-and-tricks","date":"2020-01-17"},{"title":"Power Platform Governance with Power Clarity","slug":"power-platform-governance-with-clarity","date":"2020-01-16"},{"title":"Running Serverless Apollo GraphQL on AzureFunctions with cheap Azure Blob Table database(s)","slug":"running-serverless-apollo-graphql-on-azurefunctions-with-cheap-azure-blob-table-databases","date":"2019-12-26"},{"title":"Redirecting SharePoint list's NewFormUrl and EditFormUrl to Power Apps","slug":"changing-sharepoint-lists-newformurl-and-editformurl-to-powerapps","date":"2019-12-03"},{"title":"True Governance of the Power Platform","slug":"true-governance-of-the-power-platform","date":"2019-11-02"},{"title":"The Flow Studio journey - first lesson - seed money and salary","slug":"the-flow-studio-journey-first-lesson-seed-money-and-salary","date":"2019-10-03"},{"title":"M365 Developer Bootcamp and M365 Saturday Sydney","slug":"m365-developer-bootcamp-and-m365-saturday-sydney","date":"2019-09-13"},{"title":"How do you bring your content to your readers?","slug":"how-do-you-bringing-your-content-to-your-users","date":"2019-08-28"},{"title":"Presentations at the Digital Workplace Conference Australia 2019 I’m looking forward to","slug":"presentations-at-the-digital-workplace-conference-australia-previously-sharepoint-conference-australia","date":"2019-07-26"},{"title":"Presenting a roadmap to learning and mastery of Microsoft Flow at Collab365 Microsoft Flow Virtual Summit","slug":"collab365-microsoft-flow-virtual-summit","date":"2019-07-11"},{"title":"100 Flow-jutsu of the FlowNinja","slug":"100-flow-jutsu-of-a-flowninja","date":"2019-07-04"},{"title":"The Flow Studio journey and July price increase","slug":"the-flow-studio-journey-and-july-price-increase","date":"2019-07-02"},{"title":"Getting started, a roadmap and mastery of Microsoft Flow","slug":"getting-started-a-roadmap-and-mastery-of-microsoft-flow","date":"2019-06-26"},{"title":"Release of Flow Studio: Deploy & future Price Increase","slug":"release-of-flow-studio-deploy-amp-future-price-increase","date":"2019-05-31"},{"title":"Join us for a free full day Sydney Microsoft App in a Day - June 7","slug":"join-us-for-a-free-full-day-sydney-microsoft-app-in-a-day-june-7","date":"2019-05-28"},{"title":"One Flow to handle them all - Part 2 figuring out the changes","slug":"one-flow-to-handle-them-all-part-2-figuring-out-the-changes","date":"2019-05-21"}
96,{"title":"Workarounds needed to use the Excel Connector in Microsoft Flow","slug":"workarounds-needed-to-use-the-excel-connector-in-microsoft-flow","date":"2019-05-18"},{"title":"Flow Studio 1K users - time for a roadmap update","slug":"flow-studio-1k-users-roadmap-update","date":"2019-05-10"},{"title":"Flow Studio features in April that will help us mitigate a disaster","slug":"flow-studio-features-in-april-that-will-help-us-mitigate-a-disaster","date":"2019-05-03"},{"title":"A Power User friendly method of connecting hundreds of sites, list and libraries to a single Flow","slug":"a-power-user-friendly-method-of-connecting-hundreds-of-sites-list-and-libraries-to-a-single-flow","date":"2019-04-24"},{"title":"Azure Global Bootcamp Sydney - this Saturday!","slug":"azure-global-bootcamp-sydney-this-saturday","date":"2019-04-23"},{"title":"Upload Image from PowerApps to Flow to SharePoint via an Unused Outlook connector","slug":"flowninja-hack-87-lock-microsoft-flow-powerapps-trigger-to-upload-images-to-sharepoint-with-ease","date":"2019-04-08"},{"title":"One Flow to handle them all - how to subscribe to multiple SharePoint lists with one Flow","slug":"one-flow-to-handle-them-all-how-to-subscribe-to-multiple-sharepoint-lists-with-one-flow","date":"2019-03-08"},{"title":"Sadly, I can't make it to MVP Summit 2019","slug":"sadly-i-cant-make-it-to-mvp-summit-2019","date":"2019-03-01"},{"title":"On using Microsoft Flow as a pre-ETL step for Power BI","slug":"on-using-microsoft-flow-as-a-pre-etl-step-for-power-bi","date":"2019-02-27"},{"title":"#FlowNinja hack 78 - modifying Modified By and Modified time with Microsoft Flow","slug":"flowninja-hack-78-modifying-modified-by-and-modified-time-with-microsoft-flow","date":"2019-02-26"},{"title":"Difinity Conference 2019 Auckland - Hackathon Workshop, Flow and PowerApps","slug":"difinity-conference-2019-auckland-hackathon-workshop-flow-and-powerapps","date":"2019-02-09"}
96,{"title":"MS Ignite the Tour 2019 Sydney - MS Flow x2","slug":"ms-ignite-the-tour-2019-sydney-ms-flow-x2","date":"2019-02-09"},{"title":"I hope team Office give Delve a second chance","slug":"i-hope-team-office-give-delve-a-second-chance","date":"2019-01-10"},{"title":"How to implement Sort with Microsoft Flow in 3 actions within a loop","slug":"how-to-implement-sort-with-microsoft-flow-in-3-actions-within-a-loop","date":"2018-12-21"},{"title":"Hot-patching our dependencies with patch-package","slug":"hot-patching-our-dependencies-with-patch-package","date":"2018-12-04"},{"title":"Bad JavaScript.  Expected '(' in our webpack eval chunk","slug":"bad-javascript-expected-in-our-webpack-eval-chunk","date":"2018-12-04"},{"title":"Migrate Angular SPA from ADALJS to MSAL because it is awesome","slug":"migrate-angular-spa-from-adaljs-to-msal-because-it-is-awesome","date":"2018-11-29"},{"title":"Flow Studio subscription discount finishes very soon","slug":"flow-studio-subscription-discount-finishes-very-soon","date":"2018-11-17"},{"title":"Flow Studio trial ends soon, what's next?","slug":"flow-studio-trial-ends-soon-whats-next","date":"2018-11-07"},{"title":"Sending email with inline images via MicrosoftGraph and MicrosoftFlow","slug":"sending-email-with-inline-images-via-microsoftgraph-and-microsoftflow","date":"2018-11-02"},{"title":"Resolving Google DNS problems with hosting *.app from Hover on Azure","slug":"resolving-google-dns-problems-with-hosting-app-from-hover-on-azure","date":"2018-10-30"},{"title":"Decode InfoPath attachments with a bit of JS AzureFunctions","slug":"decode-infopath-attachments-with-a-bit-of-js-azurefunctions","date":"2018-10-24"},{"title":"Hiding your Microsoft Flow valuables I mean variables out of sight","slug":"hiding-your-microsoft-flow-valuables-i-mean-variables-out-of-sight","date":"2018-10-23"},{"title":"Flow Studio Subscription FAQ","slug":"flow-studio-subscription-faq","date":"2018-10-19"},{"title":"Flow Studio has a new logo","slug":"flow-studio-has-a-new-logo","date":"2018-10-19"},{"title":"Microsoft Flow HTTP Trigger <> Request Trigger, and you probably don't want to use it","slug":"microsoft-flow-http-trigger-request-trigger-and-you-probably-dont-want-to-use-it","date":"2018-10-15"},{"title":"Two free tickets to great Office 365 and SharePoint events in Sydney in the next month","slug":"two-free-office-365-and-sharepoint-events-in-sydney-in-the-next-month","date":"2018-10-08"},{"title":"From Office 365 to Azure Event Grid, the events must Flow","slug":"from-office-365-to-event-grid-all-our-events-must-flow","date":"2018-09-29"},{"title":"The curious tale of the result() function in Flow and LogicApps","slug":"the-curious-tale-of-the-result-function-in-flow-logicapps","date":"2018-09-20"},{"title":"Make a wishing wand - why we need a MicrosoftFlow Custom Connector for MSGraph $Batch","slug":"make-a-wishing-wand-why-we-need-a-microsoftflow-custom-connector-for-msgraph-batch","date":"2018-09-07"},{"title":"Office 365 Saturday Adelaide - 2018 September 15","slug":"office-365-saturday-adelaide-2018-september-15","date":"2018-09-06"},{"title":"Microsoft Graph Community Call September 2018 - $Batch and Flow","slug":"microsoft-graph-community-call-september-2018-batch-and-flow","date":"2018-09-03"},{"title":"The future of Flow Studio - Trial","slug":"the-future-of-flow-studio-trial","date":"2018-08-24"},{"title":"Post-DWCAU Conference - 7* flows in 1 hour","slug":"post-dwcau-conference-7-flows-in-1-hour","date":"2018-08-18"},{"title":"The simplest No-Code Solution to Save Picture Files from PowerApps to Flow","slug":"the-simplest-no-code-solution-to-save-pictures-files-from-powerapps-to-flow","date":"2018-07-31"},{"title":"Speaking and Hackathon at Digital Workplace Conference Australia - Melbourne","slug":"john-join-forces-with-paul-at-dwcau-on-14-15-16-august-2018","date":"2018-07-18"},{"title":"Flow For-Selected-Item trigger and SharePoint Site Pages, in a detective story","slug":"flow-for-selected-item-trigger-and-sharepoint-site-pages-in-a-detective-story","date":"2018-07-17"},{"title":"Office 365 Saturday Canberra 2018 #O365CBR #SPSCBR","slug":"office-365-saturday-canberra-2018-o365cbr-spscbr","date":"2018-07-10"},{"title":"10 Things in Microsoft Flow that isn't in Azure Logic Apps","
96slug":"10-things-in-microsoft-flow-that-isnt-in-logic-apps","date":"2018-07-03"},{"title":"A Thesis on the Parse JSON action in Microsoft Flow","slug":"a-thesis-on-the-parse-json-action-in-microsoft-flow","date":"2018-06-26"},{"title":"How to get live FIFA Worldcup results via Microsoft Flow into your SharePoint Intranet WebPart","slug":"how-to-get-live-fifa-worldcup-results-via-microsoft-flow-into-your-sharepoint-intranet","date":"2018-06-26"},{"title":"Do bulk insert/update in Microsoft Flow with two simple elegant filter-arrays","slug":"do-bulk-insertupdate-in-microsoft-flow-with-two-simple-elegant-filter-arrays","date":"2018-06-12"},{"title":"Do Group By in Microsoft Flow with two simple elegant loops","slug":"do-group-by-in-flow-with-two-simple-elegant-loops","date":"2018-06-01"},{"title":"Save all your Flows to VSTS via HTTP REST in 8 actions","slug":"save-all-your-flows-to-vsts-via-http-rest-in-8-actions","date":"2018-05-27"},{"title":"Building a tool to help everyone with Flows: Flow Studio","slug":"building-a-tool-to-help-everyone-with-flows","date":"2018-05-23"},{"title":"Microsoft Flow: SharePoint Trigger on specific fields changed via SP HTTP Request","slug":"microsoft-flow-sharepoint-trigger-on-specific-fields-changed-via-sp-http-request","date":"2018-05-05"},{"title":"How to use Select to simplify Create-HTML-Table and Create-CSV in MicrosoftFlow","slug":"how-to-use-select-to-simplify-create-html-table-and-create-csv-in-microsoftflow","date":"2018-04-28"},{"title":"Run Any PnP-PowerShell via Drag and Drop Zip to AzureFunctions","slug":"run-any-pnp-powershell-via-drag-and-drop-zip-to-azurefunctions","date":"2018-04-18"},{"title":"Run any PnP-PowerShell in one AzureFunction from Microsoft Flow","slug":"run-any-pnp-powershell-in-one-azurefunction-from-microsoft-flow","date":"2018-04-12"},{"title":"Test yourself.  A MicrosoftFlow Expressions Quiz!","slug":"test-yourself-a-microsoftflow-expressions-quiz","date":"2018-04-07"},{"title":"Two complementary MicrosoftFlow podcasts in March, and Two Plateaus of MicrosoftFlow","slug":"two-complementary-msflow-podcasts-and-two-plateaus-of-msflow","date":"2018-04-03"},{"title":"Change SharePoint Permission via MSGraph","slug":"change-sharepoint-permission-via-msgraph","date":"2018-03-24"},{"title":"Design a \"Delay until SharePoint File Changed\" HTTP+Webhook for MicrosoftFlow","slug":"design-a-delay-until-sharepoint-file-changed-httpwebhook-for-microsoftflow","date":"2018-03-22"},{"title":"Wait until File Changed HTTP+Webhook","slug":"wait-until-file-changed-http-webhook","date":"2018-03-16"},{"title":"How to automatically enter MVP timesheets with Microsoft Flow","slug":"how-to-automatically-enter-mvp-timesheets-with-microsoft-flow","date":"2018-03-02"},{"title":"Bulk-copy files across site collection in MicrosoftGraph with MicrosoftFlow, in parallel and in batch","slug":"bulk-copy-files-across-site-collection-in-microsoftgraph-with-microsoftflow-in-parallel-and-in-batch","date":"2018-02-27"},{"title":"Send mail as anyone - #MicrosoftGraph and #MicrosoftFlow (bonus: inline image attachments)","slug":"send-mail-as-anyone-microsoftgraph-and-microsoftflow","date":"2018-02-15"},{"title":"Serverless Parallelism in Microsoft Flow and SharePoint","slug":"serverless-parallelism-in-microsoft-flow-and-sharepoint","date":"2018-02-01"},{"title":"Setting up MSGraph Webhook with HTTP Action in MicrosoftFlow","slug":"setting-up-msgraph-webhook-with-http-action-in-microsoftflow","date":"2018-01-12"},{"title":"Betting on 2018 - level up our Serverless in Azure","slug":"betting-on-2018-level-up-our-serverless-in-azure","date":"2018-01-01"},{"title":"Office 365 Groups Management As A Service: Episode II: Know your groups with Flow, MSGraph","slug":"office-365-groups-management-as-a-service-know-your-groups-flow-msgraph","date":"2017-12-25"},{"title":"Office 365 Groups management as a service - Flow, Functions and MSGraph","slug":"office-365-groups-management-as-a-service-flow-functions-and-msgraph","date":"2017-12-19"},{"title":"Taking PDF snapshot of any SharePoint list item for approvals with Flow","slug":"taking-pdf-snapsh
96ot-of-list-items-for-approvals-with-flow","date":"2017-12-14"},{"title":"You must copy all your Flows to SharePoint - simple ideas are the most brilliant","slug":"you-must-copy-all-your-flows-to-sharepoint-simple-ideas-are-the-most-brilliant","date":"2017-12-01"},{"title":"ForEach Property in #MicrosoftFlow JSON.  With XPath? #microblog","slug":"foreach-property-in-microsoftflow-json-with-xpath-microblog","date":"2017-11-28"},{"title":"Microsoft Flow makes everything Awesome.  Yes, including InfoPath #microblog","slug":"microsoft-flow-makes-everything-awesome-yes-including-infopath-microblog","date":"2017-11-21"},{"title":"Sending Custom Actionable Messages via Flow","slug":"sending-custom-actionable-messages-via-flow","date":"2017-11-13"},{"title":"Difference between beta, edu and v1.0 of MSGraph #microblog","slug":"difference-between-beta-edu-and-v10-of-msgraph-micropost","date":"2017-11-09"},{"title":"I'm speaking about Serverless Flow and Azure Functions at Collab365 Free Online Conference","slug":"im-speaking-about-serverless-flow-and-azure-functions-at-collab365-free-online-conference","date":"2017-11-01"},{"title":"From Office 365 to Azure to Minecraft, connected with Flow","slug":"from-office-365-to-minecraft-connected-with-flow","date":"2017-10-25"},{"title":"Flow Admin Center - Do a spring cleaning of your Flows","slug":"flow-admin-center-do-a-spring-cleaning-of-your-flows","date":"2017-10-20"},{"title":"Serverless connect-the-dots: MP3 to WAV via ffmpeg.exe in AzureFunctions, for PowerApps and Flow","slug":"serverless-connect-the-dots-mp3-to-wav-via-azurefunctions-for-powerapps-and-flow","date":"2017-10-17"},{"title":"Generate Any PDF Documents from HTML with Flow","slug":"generate-any-pdf-documents-from-html-with-flow","date":"2017-10-10"},{"title":"Two ways to convert SharePoint files to PDF via Flow","slug":"convert-sharepoint-files-to-pdf-via-flow","date":"2017-10-04"},{"title":"Angular 4, SharePoint On-Premises, localhost development and SP-REST-Proxy","slug":"angular-4-sharepoint-on-premises-localhost-development-and-sp-rest-proxy","date":"2017-09-22"},{"title":"Gaps between PowerBI streaming tiles and SharePoint","slug":"gaps-between-powerbi-streaming-tiles-and-sharepoint","date":"2017-09-21"},{"title":"Auto-Classify Images in SharePoint Online library via Flow for Free","slug":"auto-classify-images-in-sharepoint-library-via-flow","date":"2017-08-29"},{"title":"Flow to MS-Todo, then all your tasks to Flow","slug":"flow-to-ms-todo-then-all-your-tasks-to-flow","date":"2017-07-27"},{"title":"Building Binary output service with Cognitive Services and Microsoft Flow","slug":"building-binary-output-service-with-microsoft-flow","date":"2017-07-24"},{"title":"One Connection to Proxy Them All - Microsoft Flow with Azure Functions Proxies","slug":"one-connection-to-proxy-them-all-microsoft-flow-with-azure-functions-proxies","date":"2017-07-16"},{"title":"Building binary (non-JSON) webservices with Flow","slug":"building-non-json-webservices-with-flow","date":"2017-07-13"},{"title":"Nested Flow (Reusable-Function) cheatsheet for Microsof Flow","slug":"nested-flow-cheatsheet-for-microsof-flow","date":"2017-07-11"},{"title":"JSON cheatsheet for Microsoft Flow","slug":"json-cheatsheet-for-microsoft-flow","date":"2017-07-07"},{"title":"Speaking at Digital Workplace Conference Australia 2017","slug":"speaking-at-digital-workplace-conference-australia-2017","date":"2017-07-06"},{"title":"Reusing functions in PowerShell AzureFunctions","slug":"reusing-functions-in-powershell-azurefunctions","date":"2017-06-23"},{"title":"AzureFunctions Work Fan-out with Azure Queue in PowerShell","slug":"azurefunctions-work-fan-out-with-azure-queue-in-powershell","date":"2017-06-09"},{"title":"Are you Cloud-Curious or Cloud-Serious?  Azure Functions in DWCNZ 2017","slug":"are-you-cloud-curious-or-cloud-serious-azure-functions-in-dwcnz-2017","date":"2017-05-25"},{"title":"Taking a picture with PowerApps and sending to SharePoint with just Flow","slug":"taking-a-picture-with-powerapps-and-sending-to-sharepoint-with-just-flow","date":"2017-05-08"},{"title":"Taking a picture with PowerApps and sending to SharePoint with help of Azure Functions","slug":"taking-a-picture-with-powerapps-and-sending-to-sharepoint-with-help-of-azure-functions","date":"2017-05-06"},{"title":"April PnP JavaScript special interest group call and Azure Functions demos","slug":"april-pnp-javascript-special-interest-group-call-and-azure-functions-demos","date":"2017-04-19"},{"title":"If anyone asks is Microsoft still investing in SharePoint - show them this.","slug":"if-anyone-asks-is-microsoft-still-investing-in-sharepoint-show-them-this","date":"2017-04-06"},{"title":"March PnP special interest group call and Azure Functions demos","slug":"march-pnp-special-interest-group-call-and-azure-functions-demos","date":"2017-04-02"},{"title":"Simple custom Angular (Angular2) Pipe that extends Number","slug":"simple-custom-angular-angular2-pipe-that-extends-number","date":"2017-03-09"}
96,{"title":"O365 Customizations in the year 2017","slug":"o365-customizations-in-the-year-2017","date":"2017-02-13"},{"title":"AzureFunctions, PowerShell, MS Graph and AppOnly permission","slug":"azurefunctions-powershell-ms-graph-and-apponly-permission","date":"2017-02-05"},{"title":"Where is SharePoint Customization going in 2017","slug":"where-is-sharepoint-customization-going-in-2017","date":"2017-02-04"},{"title":"Azure Functions and Punch Cards","slug":"azure-functions-and-punch-cards","date":"2017-02-01"},{"title":"Interact with Graph and make O365 Groups with AzureFunctions PowerShell","slug":"create-many-o365-groups-with-powershell-resource-owner-granttype-and-microsoft-graph","date":"2017-01-23"},{"title":"How to tell WebPack Uglify to support IE8","slug":"how-to-tell-webpack-uglify-to-support-ie8","date":"2017-01-18"},{"title":"Thankful for MVP 2017 and 2016 in Review","slug":"mvp-2017-and-2016-review","date":"2017-01-01"},{"title":"Running OfficeDev PnP cmdlets in 32bit AzureFunctions","slug":"running-officedev-pnp-cmdlets-in-32bit-azurefunctions","date":"2016-12-01"},{"title":"Build your PnP Site Provisioning with PowerShell in Azure Functions and run it from Flow","slug":"build-your-pnp-site-provisioning-with-powershell-in-azure-functions-and-run-it-from-flow","date":"2016-11-03"},{"title":"Building Sandbox Solutions without Code Assembly","slug":"building-sandbox-solutions-without-code-assembly","date":"2016-10-17"},{"title":"Access Denied when expanding ListView Grouping","slug":"access-denied-when-expanding-listview-grouping","date":"2016-10-06"},{"title":"Preparing Your Toolbox for the SharePoint Framework","slug":"preparing-your-toolbox-for-the-sharepoint-framework","date":"2016-09-14"},{"title":"Working with SharePoint WebHooks with JavaScript using an Azure Function","slug":"working-with-sharepoint-webhooks-with-javascript-using-an-azure-function","date":"2016-09-13"},{"title":"All Demo Downloads will be on Github - blog housekeeping","slug":"blog-house-keeping","date":"2016-09-01"},{"title":"Azure Functions, JS and App-Only Updates to SharePoint Online","slug":"azure-functions-js-and-app-only-updates-to-sharepoint-online","date":"2016-05-20"},{"title":"Hype Level Insane - #FutureOfSharePoint","slug":"hype-level-insane-futureofsharepoint","date":"2016-05-04"},{"title":"AU Digital Workplace Conference - loving SharePoint and community","slug":"au-digital-workplace-conference-loving-sharepoint-and-community","date":"2016-05-03"},{"title":"SharePoint Events and news catch up for Australia - April/May 2016","slug":"sharepoint-events-and-news-catch-up-for-australia-aprilmay-2016","date":"2016-04-19"},{"title":"UserCustomAction-ConfigPage adding CSS file links","slug":"ucacp-add-css-link","date":"2016-03-15"},{"title":"SP2013/2016 Responsive-UI and UserCustomActionsConfigPage","slug":"sp-responsive-ui-three-files-ucacp","date":"2016-03-10"},{"title":"ngSydney, Office Add-ins and lots of AngularJS","slug":"ngsydney-office-add-ins-and-lots-of-angularjs","date":"2016-03-03"},{"title":"Update on SharePoint and Office Development - 2016 Feb edition","slug":"update-on-sharepoint-and-office-development-2016-feb-edition","date":"2016-02-16"},{"title":"Publishing UserCustomActionConfigPage on GitHub","slug":"publishing-usercustomactionconfigpage-on-github","date":"2016-01-23"},{"title":"Creating Multiple Custom Email-Alias Addresses with one Outlook account","slug":"creating-multiple-custom-email-alias-addresses-with-one-outlook-account","date":"2016-01-07"},{"title":"Thank you MS for MVP 2016","slug":"thank-you-ms-for-mvp-2016","date":"2016-01-04"},{"title":"Set Window Title in Nintex Forms for O365","slug":"set-window-title-in-nintex-forms-for-o365","date":"2015-12-30"},{"title":"The easiest way to add Script and Brand your SharePoint and SharePoint Online","slug":"the-safest-future-proof-way-to-brand-your-sharepoint-and-sharepoint-online","date":"2015-12-23"},{"title":"Yet another fix for \"App with the same version and product ID\" on-premises","slug":"yet-another-fix-for-app-with-the-same-version-and-product-id-on-premises","date":"2015-12-15"},{"title":"Convert SharePoint JSOM's ExecuteQueryAsync to Promise in the Prototype","slug":"convert-sharepoint-jsoms-executequeryasync-to-promise-in-the-prototype","date":"2015-12-02"},{"title":"2015 Xbox One Black Friday Edition","slug":"2015-xbox-one-black-friday-edition","date":"2015-11-27"},{"title":"Enabling LastPass bookmarklet with Microsoft Edge","slug":"enabling-lastpass-bookmarklet-with-microsoft-edge","date":"2015-11-18"},{"title":"Thinking with JS Promise and Promises","slug":"thinking-with-js-promise-and-promises","date":"2015-11-12"},{"title":"Racing to the Races - Putting our Office App out there","slug":"racing-to-the-races-putting-our-office-app-out-there","date":"2015-10-29"},{"title":"Posting to Office 365 OneNote via PowerShell","slug":"posting-to-office-365-onenote-via-powershell","date":"2015-10-13"},{"title":"PhantomJS for SharePoint and Office365 at Collab365","slug":"phantomjs-for-sharepoint-and-office-365-at-collab-365","date":"2015-09-24"},{"title":"Office 365 Saturday 2015 - Melbourne","slug":"office-365-saturday-2015-melbourne","date":"2015-08-28"},{"title":"Fixing SharePoint Promoted Link's New Tab Launch Behaviour","slug":"fixing-sharepoint-promoted-links-new-tab-launch-behaviour","date":"2015-08-20"},{"title":"AngularJS - Logging Client Side Stack Trace","slug":"angularjs-logging-client-side-stack-trace","date":"2015-08-12"},{"title":"AngularJS $http and logger Circular Dependency","slug":"angularjs-http-and-logger-circular-dependency","date":"2015-08-11"},{"title":"PhantomJS and Office 365 Brisbane","slug":"phantomjs-and-office-365-brisbane","date":"2015-07-30"},{"title":"AngularJS Extend and Computed Property","slug":"angularjs-extend-and-computed-property","date":"2015-07-22"},{"title":"Notes on KnockoutJS Mapping and ViewModel style guide","slug":"notes-on-knockoutjs-mapping-and-viewmodel-style-guide","date":"2015-07-20"},{"title":"Clearing SPD Cache from SharePoint Designer","slug":"clearing-spd-cache-from-sharepoint-designer","date":"2015-07-07"},{"title":"Moving Everyone and Everything to AngularJS","slug":"moving-everyone-and-everything-to-angularjs","date":"2015-06-25"},{"title":"Presenting \"PhantomJS\" at SPBizConf free online conference on June 18.","slug":"presenting-phantomjs-at-spbizconf-free-online-conference-on-june-18","date":"2015-06-18"},{"title":"Recording Playback Woes with Windows Media Player","slug":"recording-playback-woes-with-windows-media-player","date":"2015-06-05"},{"title":"Office 365 Saturday Perth #O365PER summary","slug":"office-365-saturday-perth-o365per","date":"2015-06-04"}
96,{"title":"Nintex Work Inspired Breakfast Seminar - Sydney","slug":"nintex-work-inspired-breakfast-seminar-sydney","date":"2015-06-03"},{"title":"Nintex Workflow - Lazy Checkin Everything Workflow","slug":"nintex-workflow-lazy-checkin-everything-workflow","date":"2015-05-21"},{"title":"A Hybrid Future for On-Premises","slug":"a-hybrid-future-for-on-premises","date":"2015-05-11"},{"title":"SharePoint Add-in: Accessing Webcam with Only Javascript","slug":"sharepoint-add-in-accessing-webcam-with-javascript","date":"2015-05-05"},{"title":"InfoPath Javascript - fixing image control tooltip.","slug":"infopath-javascript-fixing-image-control-tooltip","date":"2015-04-22"},{"title":"App for SharePoint: Web Cam","slug":"app-for-sharepoint-web-cam","date":"2015-04-10"},{"title":"[Meta] Updating johnliu.net from Squarespace v5 to v7","slug":"meta-updating-johnliunet-from-squarespace-v5-to-v7","date":"2015-04-10"},{"title":"Azure Logic Apps: Build SharePoint Workflows by clicking buttons: a picture guide","slug":"azure-logic-apps-build-workflows-by-clicking-buttons","date":"2015-03-25"},{"title":"Nintex Workflow - Modifying your Farm UDA","slug":"nintex-workflow-modifying-your-farm-uda","date":"2015-03-20"},{"title":"Nintex Form - working with managed metadata fields","slug":"nintex-form-working-with-managed-metadata-fields","date":"2015-03-19"},{"title":"taskeng.exe command prompt - get out of my face","slug":"taskengexe-command-prompt","date":"2015-03-05"},{"title":"Working with XML in Nintex Workflows (simplified)","slug":"working-with-xml-in-nintex-workflows-simplified","date":"2015-02-23"},{"title":"Feb 2015 CU SP2013: Workflow CurrentSiteUrl is fixed","slug":"feb-2015-cu-sp2013-workflow-currentsiteurl-is-fixed-and-what","date":"2015-02-11"},{"title":"SharePoint 2016 - debunking confusion and concerns","slug":"sharepoint-2016-debunking-confusion-and-concerns","date":"2015-02-04"},{"title":"Microsoft MVP Community Camp 2015","slug":"microsoft-mvp-community-camp-2015","date":"2015-01-30"},{"title":"Quick - TSQL select XPath from XML Data Type with namespace","slug":"quick-tsql-select-xpath-from-xml-data-type-with-namespace","date":"2015-01-28"},{"title":"So, this is what can happen if you hack SP javascript files","slug":"so-this-is-what-can-happen-if-you-hack-sp-javascript-files","date":"2015-01-21"},{"title":"SPD2013 Workflow - how to check user is member of group","slug":"spd2013-workflow-how-to-check-user-is-member-of-group","date":"2014-12-15"},{"title":"TypeScript Definition file for SPServices v0.1","slug":"typescript-definition-file-for-spservices-v01","date":"2014-12-10"},{"title":"SharePoint Saturday Sydney 2014","slug":"sharepoint-saturday-sydney-2014","date":"2014-12-05"},{"title":"Style recommendation for writing CAML in C#","slug":"style-recommendation-for-writing-caml-in-c","date":"2014-11-28"},{"title":"And I say to ASHX for SharePoint: make me a folder.","slug":"and-i-say-to-ashx-for-sharepoint-make-me-a-folder","date":"2014-10-24"},{"title":"Copying SP2013 Workflow XAML files between VSNET projects","slug":"copying-sp2013-workflow-xaml-files-between-vsnet-projects","date":"2014-10-23"},{"title":"SPS Canberra 2014 - Building SharePoint 2013 Workflows Apps (post-show notes)","slug":"sps-canberra-2014-building-sharepoint-2013-workflows-apps-po","date":"2014-10-22"},{"title":"Setting up Azure Service Bus for debugging SharePoint 2013 Workflows","slug":"setting-up-azure-service-bus-for-debugging-sharepoint-2013-w","date":"2014-10-14"},{"title":"Small Powershell Adventures -NotIn and Arrays","slug":"small-powershell-adventures-notin-and-arrays","date":"2014-10-14"},{"title":"KO binding for two SharePoint rich text editor controls","slug":"ko-binding-for-two-sharepoint-rich-text-editor-controls","date":"2014-09-30"},{"title":"Demystifying SP2013 Workflow AppStep","slug":"demystifying-sp2013-workflow-appstep","date":"2014-09-16"},{"title":"SP2013 Workflows and WSPublishState does not exist","slug":"sp2013-workflows-and-wspublishstate-does-not-exist","date":"2014-09-11"},{"title":"TypeScript presentation (take 2) at SPSMEL","slug":"typescript-presentation-take-2-at-spsmel","date":"2014-08-02"},{"title":"jQuery Promise syntax to wrap SharePoint SP.SOD","slug":"jquery-promise-syntax-to-wrap-sharepoint-spsod","date":"2014-07-22"},{"title":"Nintex Workflow Inline Function to check if SPFile is locked","slug":"nintex-workflow-inline-function-to-check-if-spfile-is-locked","date":"2014-06-16"},{"title":"Reading InfoPath template's default values in code","slug":"reading-infopath-templates-default-values-in-code","date":"2014-06-16"},{"title":"Wrap up: SharePoint Saturday Adelaide and Brisbane","slug":"wrap-up-sharepoint-saturday-adelaide-and-brisbane","date":"2014-06-02"},{"title":"SP2010 Forcing previously deployed file to update to latest version in site definition","slug":"sp2010-forcing-previously-deployed-file-to-update-to-latest","date":"2014-05-27"},{"title":"SharePoint Saturdays in Australia","slug":"sharepoint-saturdays-in-australia","date":"2014-05-19"},{"title":"IE11 (+Win8.1.1) F12 Developer Tools for the SharePoint Dev","slug":"ie11-win811-f12-developer-tools-for-the-sh
96arepoint-dev","date":"2014-04-14"},{"title":"3 sessions in //BUILD on TypeScript","slug":"3-sessions-in-build-on-typescript","date":"2014-03-31"},{"title":"The Microsoft MVP Community Camp is happening next Saturday March 22.  What is it?","slug":"the-microsoft-mvp-community-camp-saturday-march-22","date":"2014-03-12"},{"title":"Building a 2013 No Code webpart for XKCD.com/now","slug":"building-a-2013-no-code-webpart-for-xkcdcomnow","date":"2014-03-06"},{"title":"Using SharePoint Designer 2013 Workflow to copy file via REST on Office 365","slug":"using-sharepoint-designer-2013-workflow-to-copy-file-via-res","date":"2014-02-19"},{"title":"InfoPath's future and what everyone's saying","slug":"infopaths-future-and-what-everyones-saying","date":"2014-02-01"},{"title":"Building No-Code Sandbox WebParts for the past, present and the future [Proposed Session Outline]","slug":"building-no-code-sandbox-webparts-for-the-past-present-and-t","date":"2014-01-31"},{"title":"Using spservices to create discussion and reply in a Discussion List","slug":"using-spservices-to-create-discussion-and-reply-in-a-discuss","date":"2014-01-26"},{"title":"Living with the Surface RT for 4 weeks","slug":"living-with-the-surface-rt-for-4-weeks","date":"2014-01-21"},{"title":"2014 begins with a SharePoint Server MVP Award","slug":"2014-begins-with-a-sharepoint-server-mvp-award","date":"2014-01-04"},{"title":"SPSSYD 2013 and special thanks to Brian Farnhill","slug":"spssyd-2013-and-special-thanks-to-brian-farnhill","date":"2013-10-18"},{"title":"InfoPath - binding Linked Picture Display Text for dynamic tooltips","slug":"infopath-binding-linked-picture-display-text-for-dynamic-too","date":"2013-09-27"},{"title":"Using VSNET 2013 and write TypeScript directly to any SharePoint via WebDAV","slug":"using-vsnet-2013-and-write-typescript-directly-to-any-sharep","date":"2013-09-25"},{"title":"InfoPath - missing data connection files","slug":"infopath-missing-data-connection-files","date":"2013-09-24"},{"title":"Fixing Facebook preview picture of your SharePoint site","slug":"fixing-facebook-preview-picture-of-your-sharepoint-site","date":"2013-09-10"},{"title":"SharePoint Saturday Canberra 2013","slug":"sharepoint-saturday-canberra-2013","date":"2013-09-02"},{"title":"Introduce your drastic UI changes...  slowly","slug":"introduce-your-drastic-ui-changes-slowly","date":"2013-08-06"},{"title":"SharePoint Saturday Melbourne 2013","slug":"sharepoint-saturday-melbourne-2013","date":"2013-07-26"},{"title":"Chrome, the Trojan Horse we didn't know about","slug":"chrome-the-trojan-horse-we-didnt-know-about","date":"2013-07-25"},{"title":"Australian SharePoint Conference 2013 Melbourne","slug":"australian-sharepoint-conference-2013-melbourne","date":"2013-06-14"},{"title":"ContentType Workflows not being updated in the Site Collection","slug":"contenttype-workflows-not-being-updated-in-the-site-collecti","date":"2013-06-04"},{"title":"Modifying CSS Styles based on InfoPath field without code","slug":"modifying-css-styles-based-on-infopath-field-without-code","date":"2013-05-27"},{"title":"Windows 8 - Export Google Reader OPML for Bing News","slug":"windows-8-export-google-reader-opml-for-bing-news","date":"2013-04-16"},{"title":"Retrospective - Australian SharePoint Conference Sydney 2013","slug":"retrospective-australian-sharepoint-conference-sydney-2013","date":"2013-04-11"},{"title":"InfoPath - reading template.xsd in code for type checking","slug":"infopath-reading-templatexsd-in-code-for-type-checking","date":"2013-04-05"},{"title":"3-step fix Nintex WorkflowDesigner.aspx with your custom system masterpage","slug":"3-step-fix-nintex-workflowdesigneraspx-with-your-custom-syst","date":"2013-03-22"},{"title":"Building SharePoint solutions with Microsoft's TypeScript: why and how","slug":"building-sharepoint-solutions-with-microsofts-typescript-why","date":"2013-03-13"},{"title":"Making InfoPath 2010 Preview/Debug work again","slug":"making-infopath-2010-previewdebug-work-again","date":"2013-03-11"},{"title":"SharePoint Saturday Perth - Building SharePoint solutions with TypeScript: how and why.","slug":"sharepoint-saturday-perth-building-sharepoint-solutions-with","date":"2013-03-05"},{"title":"TypeScript and SharePoint - definition files","slug":"typescript-and-sharepoint-definition-files","date":"2013-02-26"},{"title":"Example uses of SPServices, JavaScript and SharePoint","slug":"example-uses-of-spservices-javascript-and-sharepoint","date":"2013-02-15"},{"title":"InfoPath - Form stuck on Installing, Upgrading or Deleting","slug":"infopath-form-stuck-on-installing-upgrading-or-deleting","date":"2013-01-08"},{"title":"Nintex Workflow - using all Regex options in your actions","slug":"nintex-workflow-using-all-regex-options-in-your-actions","date":"2012-12-17"},{"title":"Removing HomeGroup icon from Windows 8 desktop","slug":"remov
96ing-homegroup-icon-from-windows-8-desktop","date":"2012-12-04"},{"title":"How to create your Windows 8 Start Button with PowerShell","slug":"how-to-add-your-windows-8-start-button-if-you-really-want-it","date":"2012-11-27"},{"title":"SharePoint Saturday Sydney 2012","slug":"sharepoint-saturday-sydney-2012","date":"2012-10-29"},{"title":"InfoPath form load rules and loading event order","slug":"infopath-form-load-rules-and-loading-event-order","date":"2012-09-27"},{"title":"SharePoint Saturday Canberra 2012","slug":"sharepoint-saturday-canberra-2012","date":"2012-09-27"},{"title":"SharePoint - showing Contacts in People Search results","slug":"sharepoint-showing-contacts-in-people-search-results","date":"2012-09-25"},{"title":"XML deserialization - cannot have child contents to be deserialized as an object","slug":"xml-deserialization-cannot-have-child-contents-to-be-deseria","date":"2012-09-07"},{"title":"InfoPath 2013 uses new Online Pictures instead of Clip Art","slug":"infopath-2013-uses-new-online-pictures-instead-of-clip-art","date":"2012-08-30"},{"title":"SharePoint - The object has been updated by another user since it was last fetched - while updating Site Columns","slug":"sharepoint-the-object-has-been-updated-by-another-user-since","date":"2012-08-22"},{"title":"Windows 8","slug":"windows-8","date":"2012-08-21"},{"title":"SharePoint Saturday Melbourne 2012","slug":"sharepoint-saturday-melbourne-2012","date":"2012-08-06"},{"title":"SP2013 Custom services deploys and runs on v15","slug":"sp2013-custom-services-deploys-and-runs-on-v15","date":"2012-07-30"},{"title":"SP2013 - Pin your SharePoint Root 15 folder","slug":"sp2013-pin-your-sharepoint-root-15-folder","date":"2012-07-30"},{"title":"The SharePoint Pinterest-style Image Library","slug":"the-sharepoint-pinterest-style-image-library","date":"2012-07-12"},{"title":"Test your C#: Generic overloaded constructors","slug":"test-your-c-generic-overloaded-constructors","date":"2012-07-09"},{"title":"SharePoint Saturday Adelaide update","slug":"sharepoint-saturday-adelaide-update","date":"2012-06-29"},{"title":"SharePoint Saturday Brisbane update","slug":"sharepoint-saturday-brisbane-update","date":"2012-06-04"},{"title":"SharePoint, why is listdata service using strange names?","slug":"sharepoint-why-is-listdata-service-using-strange-names","date":"2012-05-31"},{"title":"SharePoint Saturday Brisbane 02-June-2012","slug":"sharepoint-saturday-brisbane-02-june-2012","date":"2012-05-29"},{"title":"SharePoint in a single page, now with List Item edit","slug":"sharepoint-in-a-single-page-now-with-list-item-edit","date":"2012-05-25"},{"title":"VS.NET 2008, VSeWSS 1.3 and SafeControl","slug":"vsnet-2008-vsewss-13-and-safecontrol","date":"2012-05-10"},{"title":"SharePoint Single Page Application day 4","slug":"sharepoint-single-page-application-day-4","date":"2012-05-09"},{"title":"SharePoint 2010 as a Single Page Application (teaser)","slug":"sharepoint-2010-as-a-single-page-application-teaser","date":"2012-05-03"},{"title":"InfoPath - creating a custom FormServer page to embed your own JavaScript goodness","slug":"infopath-creating-a-custom-formserver-page-to-embed-your-own","date":"2012-04-27"},{"title":"InfoPath 2010 - query using the REST interface","slug":"infopath-2010-query-using-the-rest-interface","date":"2012-04-26"},{"title":"SharePoint - stripping HTML tags in XSL","slug":"sharepoint-stripping-html-tags-in-xsl","date":"2012-04-26"},{"title":"SPSPerth 2012 Update","slug":"spsperth-2012-update","date":"2012-04-20"},{"title":"SharePoint - Recursive delete SPWeb PowerShell script","slug":"sharepoint-recursive-delete-spweb-powershell-script","date":"2012-04-11"},{"title":"SharePoint Saturday 2012 public announcements","slug":"sharepoint-saturday-2012-public-announcements","date":"2012-04-03"},{"title":"InfoPath, custom WCF Service, Word and Open XML SDK (outline)","slug":"infopath-custom-wcf-service-word-and-open-xml-sdk-outline","date":"2012-04-03"},{"title":"InfoPath - disabling backspace key in browser form","slug":"infopath-disabling-backspace-key-in-browser-form","date":"2012-03-27"},{"title":"Re: Sorry dad, you'll understand, someday","slug":"re-someday-dad-youd-understand","date":"2012-03-23"},{"title":"AUSPC 2012 summary","slug":"auspc-2012-summary","date":"2012-03-21"},{"title":"AUSPC 2012 quick update","slug":"auspc-2012-quick-update","date":"2012-03-20"},{"title":"Dummy guide to install Win 8 on VHD for Boot to VHD","slug":"dummy-guide-to-install-win-8-on-vhd-for-boot-to-vhd","date":"2012-03-01"},{"title":"Knockout binding formatters for date and currency","slug":"knockout-binding-formatters-for-date-and-currency","date":"2012-02-22"},{"title":"InfoPath - creating sequential filenames without an extra column","slug":"infopath-creating-sequential-filenames-without-an-extra-colu","date":"2012-02-22"},{"title":"SSPUG retrospective: Creating Knockout user experiences in SharePoint with JavaScript","slug":"sspug-retrospective-creating-knockout-user-experiences-in-sh","date":"2012-02-21"},{"title":"Curiosity drives creativity.  The only limit for your kid are there because you put them there.","slug":"curiosity-drives-creativity-the-only-limit-for-your-kid-are","date":"2012-02-16"},{"title":"Creating Knockout User Experiences in SharePoint with JavaScript and REST services","slug":"creating-knockout-user-experiences-in-sharepoint-with-javasc","date":"2012-02-12"},{"title":"InfoPath how to copy a repeating section using rules","slug":"infopath-how-to-copy-a-repeating-section-using-rules","date":"2012-02-05"},{"title":"Pretty up SharePoint 2010 mysite with showModalDialog (updated)","slug":"pretty-up-sharepoint-2010-mysite-with-showmodaldialog-update","date":"2012-02-05"},{"title":"SharePoint - JavaScript current page context info","slug":"sharepoint-javascript-current-page-context-info","date":"2012-02-03"},{"title":"Australian SharePoint Conference 2012, March 20-21, Melbourne","slug":"australian-sharepoint-conference-2012-march-20-21-melbourne","date":"2012-01-20"},{"title":"InfoPath - LoadDocumentAndPlayEventLog NullReferenceException","slug":"infopath-loaddocumentandplayeventlog-nullreferenceexception","date":"2012-01-18"},{"title":"SharePoint - here is a REST service Project Item template","slug":"sharepoint-here-is-a-rest-service-project-item-template","date":"2012-01-16"},{"title":"InfoPath - check leap year using expression","slug":"infopath-check-leap-year-using-expression","date":"2012-01-11"},{"title":"Pasting pictures from clipboard to SharePoint in browser, via Silverlight 5","slug":"pasting-pictures-from-clipboard-to-sharepoint-in-browser-via","date":"2012-01-09"},{"title":"The blogger's eternal struggle for blog reader comments","slug":"the-bloggers-eternal-struggle-for-blog-reader-comments","date":"2011-12-15"},{"title":"SharePoint - disguise your long running AJAX calls","slug":"sharepoint-disguise-your-long-running-ajax-calls","date":"2011-11-30"},{"title":"InfoPath - removing newline (CRLF) using rules","slug":"infopath-removing-ne
96wline-crlf-using-rules","date":"2011-11-22"},{"title":"InfoPath - Concat SharePoint list with the Eval function (aka Voodoo)","slug":"infopath-concat-sharepoint-list-with-the-eval-function-aka-v","date":"2011-11-11"},{"title":"InfoPath - managing lots of tooltip in your browser form","slug":"infopath-managing-lots-of-tooltip-in-your-browser-form","date":"2011-11-10"},{"title":"InfoPath - packaging site columns and content types","slug":"infopath-packaging-site-columns-and-content-types","date":"2011-11-07"},{"title":"SharePoint Saturday Melbourne update","slug":"sharepoint-saturday-melbourne-update","date":"2011-10-22"},{"title":"SSPUG - REST Service and jQuery AJAX","slug":"sspug-rest-service-and-jquery-ajax","date":"2011-10-18"},{"title":"IANAL but I understand CC","slug":"ianal-but-i-understand-cc","date":"2011-10-17"},{"title":"SharePoint - Starting Site Workflows Manually","slug":"sharepoint-starting-site-workflows-manually","date":"2011-10-13"},{"title":"Hacking SP.UI.ModalDialog to download ReportServer PDF","slug":"hacking-spuimodaldialog-to-download-reportserver-pdf","date":"2011-10-12"},{"title":"InfoPath - an example of using an XML file for special characters","slug":"infopath-an-example-of-using-an-xml-file-for-special-charact","date":"2011-10-12"},{"title":"SPSCBR - REST Service and jQuery AJAX","slug":"spscbr-rest-service-and-jquery-ajax","date":"2011-09-24"},{"title":"InfoPath - abusing a secondary datasource as temporary variable","slug":"infopath-abusing-a-secondary-datasource-as-temporary-variabl","date":"2011-09-23"},{"title":"WindowsPhone 7.5 Mango and Office 365","slug":"windowsphone-75-mango-and-office-365","date":"2011-09-02"},{"title":"InfoPath - how to do case-insensitive text compare","slug":"infopath-how-to-do-case-insensitive-text-compare","date":"2011-09-01"},{"title":"InfoPath – designing verification form","slug":"infopath-ndash-designing-verification-form","date":"2011-09-01"},{"title":"SP2010 pretty up mysite with showModalDialog","slug":"sp2010-pretty-up-mysite-with-showmodaldialog","date":"2011-08-03"},{"title":"My Geek Origin story, creativity meets engineering","slug":"my-geek-origin-story-creativity-meets-engineering","date":"2011-07-25"},{"title":"Changes in SharePoint Client Object Model Redistributable SP1","slug":"changes-in-sharepoint-client-object-model-redistributable-sp","date":"2011-07-02"},{"title":"WindowsPhone 7.5 Mango is so GOOD","slug":"windowsphone-75-mango-is-so-good","date":"2011-07-01"},{"title":"InfoPath 2010 close the browser window","slug":"infopath-2010-close-the-browser-window","date":"2011-06-17"},{"title":"10 InfoPath tips for SharePoint developers","slug":"10-infopath-tips-for-sharepoint-developers","date":"2011-06-14"},{"title":"REMIX thoughts: where HTML5 and Silverlight fits in with SharePoint","slug":"remix-thoughts-where-html5-and-silverlight-fits-in-with-shar","date":"2011-06-02"},{"title":"InfoPath 2010 - embed HTML for rich and web forms","slug":"infopath-2010-embed-html-for-rich-and-web-forms","date":"2011-05-30"},{"title":"InfoPath FormServer - initial view and parameters via URL","slug":"infopath-formserver-initial-view-and-parameters-via-url","date":"2011-05-27"},{"title":"Rich and Reach - plenty of other successful ways","slug":"rich-and-reach-plenty-of-other-successful-ways","date":"2011-05-16"},{"title":"SharePoint - Improve EditView Column Reordering with JQuery","slug":"sharepoint-improve-editview-column-reordering-with-jquery","date":"2011-05-09"},{"title":"SharePoint 2010 - Simple LightBox effect for large images","slug":"sharepoint-2010-simple-lightbox-effect-for-large-images","date":"2011-05-09"},{"title":"InfoPath rule based repeating section date validation","slug":"infopath-rule-based-repeating-section-date-validation","date":"2011-05-04"},{"title":"Rename multiple files in Office 365 via Silverlight Client Object Model","slug":"rename-multiple-files-in-office-365-via-silverlight-client-o","date":"2011-05-03"},{"title":"Rich or Reach, pick one","slug":"rich-or-reach-pick-one","date":"2011-04-29"},{"title":"Line break in InfoPath web browser forms","slug":"line-break-in-infopath-web-browser-forms","date":"2011-04-22"},{"title":"Script and Link in SharePoint CQWP XSL Style Sheet","slug":"script-and-link-in-sharepoint-cqwp-xsl-style-sheet","date":"2011-04-21"},{"title":"SharePoint 2010 loads hidden Silverlight?","slug":"sharepoint-2010-loads-hidden-silverlight","date":"2011-04-20"},{"title":"Setting up a draft save location for InfoPath web forms","slug":"setting-up-a-draft-save-location-for-infopath-web-forms","date":"2011-04-18"},{"title":"Adding a warm-up step to your SharePoint project deploy action","slug":"adding-a-warm-up-step-to-your-sharepoint-project-deploy-acti","date":"2011-04-06"},{"title":"InfoPath - Using preceding:: XPath expression to hide repeating row label","slug":"infopath-using-preceding-xpath-expression-to-hide-repeating","date":"2011-03-24"},{"title":"Silverlight and SharePoint","slug":"silverlight-and-sharepoint","date":"2011-03-21"},{"title":"Updating VS.NET 2008 Professional to use TFS 2010","slug":"updating-vsnet-2008-professional-to-use-tfs-2010","date":"2011-03-21"},{"title":"Installing TFS 2010 on 2008R2","slug":"installing-tfs-2010-on-2008r2","date":"2011-03-18"},{"title":"Aussie WP7 App Hub - use the right Live ID","slug":"aussie-wp7-app-hub-use-the-right-live-id","date":"2011-03-17"},{"title":"Reminder: move your Windows Live Spaces blog","slug":"reminder-move-your-windows-live-spaces-blog","date":"2011-03-15"},{"title":"We Love Windows Phone - I really do","slug":"we-love-windows-phone-i-really-do","date":"2011-03-10"},{"title":"SharePoint central administration tip - use those resource links","slug":"sharepoint-central-administration-tip-use-those-resource-lin","date":"2011-02-28"},{"title":"Can't save SharePoint 2010 site as template with a library called Forms","slug":"cant-save-sharepoint-2010-site-as-template-with-a-library-ca","date":"2011-02-24"},{"title":"SPD 2010 conditional formatting to hide columns based on a related column in the list","slug":"spd-2010-conditional-formatting-to-hide-columns-based-on-a-r","date":"2011-02-23"},{"title":"Windows 7 SP1 login screen","slug":"windows-7-sp1-login-screen","date":"2011-02-23"},{"title":"Office - fixing the repairing problem when opening Word or Access","slug":"office-fixing-the-repairing-problem-when-opening-word-or-acc","date":"2011-02-15"},{"title":"SharePoint 2010 Branding tools","slug":"sharepoint-2010-branding-tools","date":"2011-02-15"},{"title":"InfoPath exception occurred during loading of business logic for central published form","slug":"infopath-exception-occurred-during-loading-of-business-logic","date":"2011-02-15"},{"title":"Space Crusade Resources - Reloaded","slug":"space-crusade-resources-reloaded","date":"2011-02-14"},{"title":"Giving SharePoint a Silverlight Metro UI facelift!","slug":"giving-sharepoint-a-silverlight-metro-ui-facelift","date":"2011-02-08"},{"title":"SharePoint's Silverlight webpart defaults to WindowlessMode","slug":"sharepoints-silverlight-webpart-defaults-to-windowlessmode","date":"2011-02-08"},{"title":"InfoPath 2010 COM Add-ins not available in Form Design","slug":"infopath-2010-com-add-ins-not-available-in-form-design","date":"2011-02-03"},{"title":"SharePoint 2010 WCF HelloWorld Service and  InfoPath","slug":"sharepoint-2010-wcf-helloworld-service-and-infopath","date":"2011-01-31"},{"title":"SharePoint and Reporting Services Integration, the good, the bad, and the ugly","slug":"sharepoint-and-reporting-services-integration-the-good-the-b","date":"2011-01-25"},{"title":"Automatic Relink InfoPath Forms Event Receiver","slug":"automatic-relink-infopath-forms-event-receiver","date":"2011-01-25"},{"title":"Silverlight + SharePoint - add to web part gallery","slug":"silverlight-sharepoint-ad
96d-to-web-part-gallery","date":"2011-01-18"},{"title":"Silverlight + SharePoint 2010 - package XAP file in a sandbox WSP Solution","slug":"silverlight-sharepoint-2010-package-xap-file-in-a-sandbox-ws","date":"2011-01-18"},{"title":"InfoPath - external data from SharePoint List error","slug":"infopath-external-data-from-sharepoint-list-error","date":"2011-01-17"},{"title":"SharePoint: automatically sign in with my Windows User Account in IE and FireFox","slug":"sharepoint-automatically-sign-in-with-my-windows-user-accoun","date":"2011-01-10"},{"title":"Write blogs with Windows Live Writer, and schedule publish to look like a PRO!","slug":"write-blogs-with-windows-live-writer-and-schedule-publish-to","date":"2011-01-08"},{"title":"PowerPoint is for code too","slug":"powerpoint-is-for-code-too","date":"2011-01-06"},{"title":"OneNote - screen clipping + OCR","slug":"onenote-screen-clipping-ocr","date":"2011-01-05"},{"title":"SharePoint and Office 365 - Joel Oleson predicts 2011.","slug":"sharepoint-and-office-365-joel-oleson-predicts-2011","date":"2010-12-23"},{"title":"SharePoint 2010 - Quick Fix for Ribbon Page Layout switch JavaScript error","slug":"sharepoint-2010-quick-fix-for-ribbon-page-layout-switch-java","date":"2010-12-22"},{"title":"Windows Phone 7 - enabling wireless sync","slug":"windows-phone-7-enabling-wireless-sync","date":"2010-11-03"},{"title":"Silverlight is for Business Apps, HTML5 is for Flash","slug":"silverlight-is-for-business-apps-html5-is-for-flash","date":"2010-11-02"},{"title":"Windows Phone 7: Exchange with Self-Signed Certificate","slug":"windows-phone-7-exchange-with-self-signed-certificate","date":"2010-10-27"},{"title":"Windows Phone 7 - can I switch off the iPhone yet?","slug":"windows-phone-7-can-i-switch-off-the-iphone-yet","date":"2010-10-27"},{"title":"Windows Phone 7 - SharePoint and Exchange","slug":"windows-phone-7-sharepoint-and-exchange","date":"2010-10-27"},{"title":"Windows Phone 7 - need Zune","slug":"windows-phone-7-need-zune","date":"2010-10-27"},{"title":"Windows Phone 7 : Facebook error 85FB4400","slug":"windows-phone-7-facebook-error-85fb4400","date":"2010-10-27"},{"title":"Silverlight + SharePoint 2010 - did you just deploy customizations to SharePoint via the document upload?","slug":"silverlight-sharepoint-2010-did-you-just-deploy-customizatio","date":"2010-10-18"},{"title":"Microsoft Live Spaces goes to WordPress","slug":"microsoft-live-spaces-goes-to-wordpress","date":"2010-09-28"},{"title":"Silverlight - gzip compression for your Domain and Duplex service(s)","slug":"silverlight-gzip-compression-for-your-domain-and-duplex-serv","date":"2010-09-23"},{"title":"Silverlight GeocodeLocation SerializationException when calling RouteService CalculateRoute","slug":"silverlight-geocodelocation-serializationexception-when-call","date":"2010-09-22"},{"title":"MVC2 - File upload with HttpPostedFileBase","slug":"mvc2-file-upload-with-httppostedfilebase","date":"2010-09-15"},{"title":"VB.NET - there are times when you have to keep an open mind","slug":"vbnet-there-are-times-when-you-have-to-keep-an-open-mind","date":"2010-09-15"},{"title":"TIP - Silverlight - InitParams and ApplicationLifeTimeService(s)","slug":"tip-silverlight-initparams-and-applicationlifetimeservices","date":"2010-09-14"},{"title":"Silverlight - sharing a common class between Silverlight and .NET","slug":"silverlight-sharing-a-common-class-between-silverlight-and-n","date":"2010-09-14"},{"title":"Silverlight - the magic of Silverlight RIA Toolkit","slug":"silverlight-the-magic-of-silverlight-ria-toolkit","date":"2010-09-14"},{"title":"Silverlight - RadScheduler and required field data validation","slug":"silverlight-radscheduler-and-required-field-data-validation","date":"2010-08-30"},{"title":"SharePoint enable iFilter for TIFF OCR","slug":"sharepoint-enable-ifilter-for-tiff-ocr","date":"2010-08-13"},{"title":"SharePoint Saturday Sydney","slug":"sharepoint-saturday-sydney","date":"2010-08-12"},{"title":"SharePoint 2010 GlobalNavigationNodes Moved","slug":"sharepoint-2010-globalnavigationnodes-moved","date":"2010-08-06"},{"title":"SharePoint 2010 with IIS URL Rewrite 2.0","slug":"sharepoint-2010-with-iis-url-rewrite-20","date":"2010-07-22"},{"title":"Sydney SharePoint User Group 20 July 2010","slug":"sydney-sharepoint-user-group-20-july-2010","date":"2010-07-20"},{"title":"Silverlight - code behind back to MVVM","slug":"silverlight-code-behind-back-to-mvvm","date":"2010-07-19"},{"title":"SharePoint ClientContext.List is missing?","slug":"sharepoint-clientcontextlist-is-missing","date":"2010-07-15"},{"title":"SharePoint 2010 and Silverlight 4.0 Webcam","slug":"sharepoint-2010-and-silverlight-40-webcam","date":"2010-07-15"},{"title":"SharePoint 2010 - Update All List Items SharePoint Designer Workflow Action","slug":"sharepoint-2010-update-all-list-items-sharepoint-designer-wo","date":"2010-07-15"},{"title":"Silverlight - merging detached object back to the attached data context","slug":"silverlight-merging-detached-object-back-to-the-attached-dat","date":"2010-07-13"},{"title":"SharePoint 2010 - Configuring List Item Permissions with Workflow","slug":"sharepoint-2010-configuring-list-item-permissions-with-wor
96kf","date":"2010-07-13"},{"title":"Windows Live Messenger wave 4 - redir.us freaks me out","slug":"windows-live-messenger-wave-4-redirus-freaks-me-out","date":"2010-07-12"},{"title":"Silverlight PivotViewer and SharePoint","slug":"silverlight-pivotviewer-and-sharepoint","date":"2010-07-09"},{"title":"Silverlight Unit Testing - adding a timeout to EnqueueConditional","slug":"silverlight-unit-testing-adding-a-timeout-to-enqueueconditio","date":"2010-07-07"},{"title":"Silverlight first asynchronous test run twice","slug":"silverlight-first-asynchronous-test-run-twice","date":"2010-07-06"},{"title":"Silverlight Unit Testing Framework - modify/remove Tag Expressions dialog","slug":"silverlight-unit-testing-framework-modifyremove-tag-expressi","date":"2010-07-06"},{"title":"C# Anonymous Delegate Syntax","slug":"c-anonymous-delegate-syntax","date":"2010-07-05"},{"title":"Windows Live Photo Gallery (beta)","slug":"windows-live-photo-gallery-beta","date":"2010-06-29"},{"title":"Windows Live Wave 4 Beta - Error 0x8104000b WaitForCatalog","slug":"windows-live-wave-4-beta-error-0x8104000b-waitforcatalog","date":"2010-06-28"},{"title":"Develop and deploy Silverlight + SharePoint 2010 Solutions (part 3 - light it up)","slug":"2010-06-develop-and-deploy-silverlight-sharepoint-2010-solutions-par","date":"2010-06-28"},{"title":"SharePoint: Do you turn off auto update on your SharePoint servers?","slug":"sharepoint-do-you-turn-off-auto-update-on-your-sharepoint-se","date":"2010-06-24"},{"title":"SharePoint MOSS 2007 - Style Library - File Not Found","slug":"sharepoint-moss-2007-style-library-file-not-found","date":"2010-06-23"},{"title":"Develop and deploy Silverlight + SharePoint 2010 Solutions (part 2)","slug":"develop-and-deploy-silverlight-sharepoint-2010-solutions-par","date":"2010-06-22"},{"title":"Develop and deploy Silverlight + SharePoint 2010 Solutions","slug":"develop-and-deploy-silverlight-sharepoint-2010-solutions","date":"2010-06-17"},{"title":"Silverlight + SharePoint: helper classes","slug":"silverlight-sharepoint-helper-classes","date":"2010-06-09"},{"title":"Silverlight + SharePoint + CAML - best practices","slug":"silverlight-sharepoint-caml-best-practices","date":"2010-06-08"},{"title":"MCTS exams - what are these certification trying to solve exactly?","slug":"mcts-exams-what-are-these-certification-trying-to-solve-exac","date":"2010-06-03"},{"title":"Outlook (and blogs) are for code","slug":"outlook-and-blogs-are-for-code","date":"2010-05-10"},{"title":"Windows 7 Troubleshooting Wizard is not a myth","slug":"windows-7-troubleshooting-wizard-is-not-a-myth","date":"2010-05-07"},{"title":"Certified Scrum Developer","slug":"certified-scrum-developer","date":"2010-04-28"},{"title":"For the love of SharePoint","slug":"for-the-love-of-sharepoint","date":"2010-04-20"},{"title":"SharePoint 2010 CAML List Joins","slug":"sharepoint-2010-caml-list-joins","date":"2010-04-20"},{"title":"Apple iPhone drivers are pos","slug":"apple-iphone-drivers-are-pos","date":"2010-04-15"},{"title":"SharePoint 2010 beta TaxonomyPicker in EventLog","slug":"sharepoint-2010-beta-taxonomypicker-in-eventlog","date":"2010-04-12"},{"title":"SharePoint: referencing SCRIPT done right","slug":"sharepoint-referencing-script-done-right","date":"2010-04-12"},{"title":"SharePoint 2010 missing Alert Me","slug":"sharepoint-2010-missing-alert-me","date":"2010-04-07"},{"title":"SharePoint – download file size missing and document library","slug":"sharepoint-ndash-download-file-size-missing-and-document-lib","date":"2010-04-06"},{"title":"iShare is free. Get it now.","slug":"ishare-is-free-get-it-now","date":"2010-03-29"},{"title":"SharePoint 2010 vs. 2007 comparison chart (ongoing effort)","slug":"sharepoint-2010-vs-2007-comparison-chart-ongoing-effort","date":"2010-03-02"},{"title":"WindowsCE – deploying to the device","slug":"windowsce-deploying-to-the-device","date":"2010-02-22"},{"title":"Windows CE – building a transparent picturebox","slug":"windows-ce-building-a-transparent-picturebox","date":"2010-02-18"},{"title":"Buying games from PopCap - I am required to tick newsletter","slug":"buying-games-from-popcap-i-am-required-to-tick-newsletter","date":"2010-02-18"},{"title":"XP vs. Scrum","slug":"xp-vs-scrum","date":"2010-02-12"},{"title":"VirtualBox – actually quite nice","slug":"virtualbox-actually-quite-nice","date":"2010-02-12"},{"title":"Always blog it if you had to write anything down","slug":"always-blog-it-if-you-had-to-write-anything-down","date":"2010-02-12"},{"title":"SharePoint 2010 – renaming features and web parts in VS.NET 2010 SharePoint Solutions","slug":"sharepoint-2010-renaming-features-and-web-parts-in-vsnet-201","date":"2010-01-27"},{"title":"SharePoint 2010 and Silverlight","slug":"sharepoint-2010-and-silverlight","date":"2010-01-12"},{"title":"ASP.NET \"5.7.1 Unable to relay for email\" when SmtpClient.UseDefaultCredentials = true","slug":"aspnet-571-unable-to-relay-for-email-when-smtpclientusedefau","date":"2009-12-24"},{"title":"SharePoint 2010 Speed, and Boot to VHD","slug":"sharepoint-2010-speed-and-boot-to-vhd","date":"2009-12-21"},{"title":"ATI x64 driver fail - Catalyst Install Manager has stopped working","slug":"ati-x64-driver-fail-catalyst-install-manager-has-stopped-wor","date":"2009-12-14"},{"title":"The iPhone design flaw","slug":"the-iphone-design-flaw","date":"2009-07-30"},{"title":"SharePoint 2010 – sneak peek","slug":"sharepoint-2010-sneak-peek","date":"2009-07-14"},{"title":"Google hates Bing and is evil?  Surely not!","slug":"google-hates-bing-and-is-evil-surely-not","date":"2009-07-10"},{"title":"WOW - WTB a guild airship","slug":"wow-wtb-a-guild-airship","date":"2009-07-06"},{"title":"SharePoint – Blank IIS manager, events 6398, 6482, 7076","slug":"sharepoint-ndash-blank-iis-manager-events-6398-6482-7076","date":"2009-06-16"},{"title":"Facebook – tattoo ad and privacy?","slug":"facebook-ndash-tattoo-ad-and-privacy","date":"2009-06-09"},{"title":"A lot of regrets for one evening","slug":"a-lot-of-regrets-for-one-evening","date":"2009-06-04"},{"title":"Ah another weekend is upon us…","slug":"ah-another-weekend-is-upon-ushellip","date":"2009-05-29"},{"title":"serverfault.com hasn't launched and I hate it already","slug":"serverfaultcom-hasnt-launched-and-i-hate-it-already","date":"2009-05-27"},{"title":"FreeRealms TCG - the nature starter deck","slug":"freerealms-tcg-the-nature-starter-deck","date":"2009-05-23"},{"title":"FreeRealms TCG notes","slug":"freerealms-tcg-notes","date":"2009-05-22"},{"title":"SharePoint: MOSS SP2 Major Bug","slug":"sharepoint-moss-sp2-major-bug","date":"2009-05-22"},{"title":"SharePoint – InfoPath /cache clearall","slug":"sharepoint-infopath-cache-clearall","date":"2009-05-21"},{"title":"SharePoint – InfoPath / Forms Library missing","slug":"sharepoint-infopath-forms-library-missing","date":"2009-05-21"},{"title":"SharePoint – how do you stay on top of all this stuff?","slug":"sharepoint-how-do-you-stay-on-top-of-all-this-stuff","date":"2009-05-21"},{"title":"SharePoint – thoughts on sharepoint.microsoft.com","slug":"sharepoint-thoughts-on-sharepointmicrosoftcom","date":"2009-05-21"},{"title":"SharePoint – Microsoft Certified Masters, and why I should care","slug":"sharepoint-microsoft-certified-masters-and-why-i-should-care","date":"2009-05-20"},{"title":"Migrating from Windows Live Spaces to SquareSpace - outline","slug":"migrating-from-windows-live-spaces-to-squarespace-outline","date":"2009-05-19"},{"title":"SharePoint: Groove assimilated by the Borg (aka SharePoint)","slug":"sharepoint-groove-assimilated-by-the-borg-aka-sharepoint","date":"2009-05-14"},{"title":"What am I looking for in SquareSpace","slug":"what-am-i-looking-for-in-squarespace","date":"2009-05-10"},{"title":"SharePoint - service pack 2 thoughts","slug":"sharepoint-service-pack-2-thoughts","date":"2009-05-04"},{"title":"IIS7 WCF .SVC 404","slug":"iis7-wcf-svc-404","date":"2009-04-22"},{"title":"SharePoint - On the verge of launching a new release of a SharePoint site","slug":"sharepoint-on-the-verge-of-launching-a-new-release-
96of-a-shar","date":"2009-04-15"},{"title":"SharePoint – thoughts on MSDN “Configuring and Deploying Anonymous Publishing Sites for SharePoint Server 2007”","slug":"sharepoint-thoughts-on-msdn-configuring-and-deploying-anonym","date":"2009-04-09"},{"title":"SharePoint – IE8 standards mode causes trouble in SharePoint","slug":"sharepoint-ie8-standards-mode-causes-trouble-in-sharepoint","date":"2009-04-06"},{"title":"So you want to be a SharePoint architect","slug":"so-you-want-to-be-a-sharepoint-architect","date":"2009-03-17"},{"title":"Bad Microsoft (System.Web) code got owned by StackOverflow","slug":"bad-microsoft-systemweb-code-got-owned-by-stackoverflow","date":"2009-03-17"},{"title":"SharePoint – Name ActiveX Control error.","slug":"sharepoint-name-activex-control-error","date":"2009-02-09"},{"title":"Javascript - jQuery + ASP.NET – post-AJAX events","slug":"javascript-jquery-aspnet-post-ajax-events","date":"2009-02-09"},{"title":"re: Dell Newsletter","slug":"re-dell-newsletter","date":"2009-02-06"},{"title":"SharePoint - Cannot get ghost document","slug":"sharepoint-cannot-get-ghost-document","date":"2009-01-29"},{"title":"SharePoint – for those times when you really got to kill a list","slug":"sharepoint-for-those-times-when-you-really-got-to-kill-a-lis","date":"2009-01-28"},{"title":"The new flood of stuff coming out of Windows Live are really nice","slug":"the-new-flood-of-stuff-coming-out-of-windows-live-are-really","date":"2008-12-08"},{"title":"SharePoint - ContentQueryWebPart, CommonViewFields and Multi-value choices","slug":"sharepoint-contentquerywebpart-commonviewfields-and-multi-va","date":"2008-12-03"},{"title":"Lemmings 4D game","slug":"lemmings-4d-game","date":"2008-11-27"},{"title":"Windows Live configuration sync","slug":"windows-live-configuration-sync","date":"2008-11-27"},{"title":"I twit now (oh and I still blog)","slug":"i-twit-now-oh-and-i-still-blog","date":"2008-11-21"},{"title":"SharePoint: Error when adding a new page based on a customized (broken) page layout","slug":"sharepoint-error-when-adding-a-new-page-based-on-a-customize","date":"2008-11-13"},{"title":"Didn't know it could be this difficult to pull something out of the GAC","slug":"didnt-know-it-could-be-this-difficult-to-pull-something-out","date":"2008-11-10"},{"title":"Late blog (as in, not a live blog) Australia Power To Developers event","slug":"late-blog-as-in-not-a-live-blog-australia-power-to-developer","date":"2008-11-06"},{"title":"SharePoint, WCF Service, .NET full/partial trust","slug":"sharepoint-wcf-service-net-fullpartial-trust","date":"2008-11-05"},{"title":"Windows Live Mail (Hotmail) has a nice new look","slug":"windows-live-mail-hotmail-has-a-nice-new-look","date":"2008-11-05"},{"title":"Consuming WCF WebService from jQuery AJAX (with JSON)","slug":"consuming-wcf-webservice-from-jquery-ajax-with-json","date":"2008-11-04"},{"title":"Seriously thinking to split this blog","slug":"seriously-thinking-to-split-this-blog","date":"2008-11-04"}
96,{"title":"Software Architecture","slug":"software-architecture","date":"2008-10-31"},{"title":"Code Archaeology","slug":"code-archaeology","date":"2008-10-31"},{"title":"iPhone special: No contacts in the contact list when I couldn't talk to my Microsoft Exchange server","slug":"iphone-special-no-contacts-in-the-contact-list-when-i-couldn","date":"2008-10-23"},{"title":"An injustice","slug":"an-injustice","date":"2008-10-17"},{"title":"System.Runtime.InteropServices.COMException when opening a visual studio web project","slug":"systemruntimeinteropservicescomexception-when-opening-a-visu","date":"2008-10-10"},{"title":"jQuery + Microsoft","slug":"jquery-microsoft","date":"2008-09-29"},{"title":"Cheating Live ads","slug":"cheating-live-ads","date":"2008-09-29"},{"title":"Sharing a little gem - ASP.NET Javascript String.format","slug":"sharing-a-little-gem-aspnet-javascript-stringformat","date":"2008-08-06"},{"title":"New MacBook to have glass trackpad (End of September)","slug":"new-macbook-to-have-glass-trackpad-end-of-september","date":"2008-07-29"},{"title":"HTML map and area tags not working for FireFox","slug":"html-map-and-area-tags-not-working-for-firefox","date":"2008-07-23"},{"title":"Customizing CSSLink and ScriptLink for public Sharepoint site","slug":"customizing-csslink-and-scriptlink-for-public-sharepoint-sit","date":"2008-07-21"},{"title":"The best way to learn to customizing Sharepoint for an ASP.NET guy - use Reflector","slug":"the-best-way-to-learn-to-customizing-sharepoint-for-an-aspne","date":"2008-07-21"},{"title":"Tough to love Sharepoint","slug":"tough-to-love-sharepoint","date":"2008-07-18"},{"title":"Where is the DataRepeater for Silverlight?","slug":"where-is-the-datarepeater-for-silverlight","date":"2008-07-08"},{"title":"Starting another journey, again","slug":"starting-another-journey-again","date":"2008-07-04"},{"title":"Your windows service started and stopped","slug":"your-windows-service-started-and-stopped","date":"2008-06-30"},{"title":"this.consulting.life","slug":"thisconsultinglife","date":"2008-06-27"},{"title":"Quick tip: Initialising Dictionary inline","slug":"quick-tip-initialising-dictionary-inline","date":"2008-06-26"},{"title":"Generic EventArgs implementation (but isn't really all that useful)","slug":"generic-eventargs-implementation-but-isnt-really-all-that-us","date":"2008-06-26"},{"title":"A camera of the future","slug":"a-camera-of-the-future","date":"2008-06-26"},{"title":"Missing entry: setting DateTimeFormat.ShortDatePattern across the entire ASP.NET application","slug":"missing-entry-setting-datetimeformatshortdatepattern-across","date":"2008-06-25"},{"title":"Updating from SilverLight 2 Beta 1 to Beta 2","slug":"updating-from-silverlight-2-beta-1-to-beta-2","date":"2008-06-17"},{"title":"Modelling the system","slug":"modelling-the-system","date":"2008-06-16"},{"title":"Inspiration strikes - RTS Chess","slug":"inspiration-strikes-rts-chess","date":"2008-06-12"},{"title":"Do we really need that many controls in Silverlight?","slug":"do-we-really-need-that-many-controls-in-silverlight","date":"2008-06-11"},{"title":"Lack of statistics for Windows spaces.live.com","slug":"lack-of-statistics-for-windows-spaceslive
96com","date":"2008-06-05"},{"title":"Silverlight 2 Beta 2 coming really soon","slug":"silverlight-2-beta-2-coming-really-soon","date":"2008-06-04"},{"title":"Polaroid Picture Add-On for Windows Live Writer","slug":"polaroid-picture-add-on-for-windows-live-writer","date":"2008-06-04"},{"title":"Doing a simple timeout page with WebClientApplication","slug":"doing-a-simple-timeout-page-with-webclientapplication","date":"2008-06-04"},{"title":"GMail getting slower and sloowweerr","slug":"gmail-getting-slower-and-sloowweerr","date":"2008-06-03"},{"title":"Laptop has three vertical lines now","slug":"laptop-has-three-vertical-lines-now","date":"2008-06-01"},{"title":"Nikhil Kothari's behaviour framework for SilverLight","slug":"nikhil-kotharis-behaviour-framework-for-silverlight","date":"2008-05-29"},{"title":"Debugging a baby","slug":"debugging-a-baby","date":"2008-05-23"},{"title":"Dell Support Australia called me back but sounded suspicious","slug":"dell-support-australia-called-me-back-but-sounded-suspicious","date":"2008-05-22"},{"title":"Two more SilverLight links","slug":"two-more-silverlight-links","date":"2008-05-21"},{"title":"Removing a word from Windows Live Writer user dictionary","slug":"remov
96ing-a-word-from-windows-live-writer-user-dictionary","date":"2008-05-21"},{"title":"SilverLight is better than AJAX + DOM","slug":"silverlight-is-better-than-ajax-dom","date":"2008-05-21"},{"title":"SL + Sockets","slug":"sl-sockets","date":"2008-05-20"},{"title":"Avoiding my Dell laptop like the plague","slug":"avoiding-my-dell-laptop-like-the-plague","date":"2008-05-20"},{"title":"Oh noes!  Dell Dead Line","slug":"oh-noes-dell-dead-line","date":"2008-05-19"},{"title":"Car insurance is a joke?","slug":"car-insurance-is-a-joke","date":"2008-05-13"},{"title":"Keith's birthday","slug":"keiths-birthday","date":"2008-05-13"},{"title":".NET 3.5 sp 1 beta is sexy","slug":"net-35-sp-1-beta-is-sexy","date":"2008-05-13"},{"title":"This is what I would do if I ever quit IT","slug":"this-is-what-i-would-do-if-i-ever-quit-it","date":"2008-05-08"},{"title":"The workplace Wiki","slug":"the-workplace-wiki","date":"2008-05-06"},{"title":"Enterprise security policy","slug":"enterprise-security-policy","date":"2008-05-05"},{"title":"Ad-hoc data structuring with anonymous types","slug":"ad-hoc-data-structuring-with-anonymous-types","date":"2008-05-05"},{"title":"IE, appendChild, setAttribute, CSS Class","slug":"ie-appendchild-setattribute-css-class","date":"2008-04-30"},{"title":"Anonymous Type of an existing type","slug":"anonymous-type-of-an-existing-type","date":"2008-04-24"},{"title":"Embedded WebResource","slug":"embedded-webresource","date":"2008-04-23"},{"title":"Writing XML docs for JavaScript","slug":"writing-xml-docs-for-javascript","date":"2008-04-22"},{"title":"Cool bits about Office Communicator","slug":"cool-bits-about-office-communicator","date":"2008-04-18"},{"title":"C# Generic TryParse Extension method","slug":"c-generic-tryparse-extension-method","date":"2008-04-17"},{"title":"Source code merge program","slug":"source-code-merge-program","date":"2008-04-17"},{"title":"Total disconnection in a large company","slug":"total-disconnection-in-a-large-company","date":"2008-04-17"},{"title":"The funkiness that is LINQ.Contains","slug":"the-funkiness-that-is-linqcontains","date":"2008-04-09"},{"title":"Keeping the data in the database clean","slug":"keeping-the-data-in-the-database-clean","date":"2008-03-31"},{"title":"SQL Metal: No exclude table/view/sp functionality?","slug":"sql-metal-no-exclude-tableviewsp-functionality","date":"2008-03-27"},{"title":"Trying to perfect my Zoolander grin","slug":"trying-to-perfect-my-zoolander-grin","date":"2008-03-20"},{"title":"Food for thought: C# Extension Methods","slug":"food-for-thought-c-extension-methods","date":"2008-03-19"},{"title":"Having different scope for your property","slug":"having-different-scope-for-your-property","date":"2008-03-19"},{"title":"Love hate relationship with Asp:DropDownList.AppendDataBoundItems","slug":"love-hate-relationship-with-aspdropdownlistappenddataboundit","date":"2008-03-19"},{"title":"An interesting quit smoking help","slug":"an-interesting-quit-smoking-help","date":"2008-03-07"},{"title":"MIX08","slug":"mix08","date":"2008-03-06"},{"title":"Watching news","slug":"watching-news","date":"2008-03-06"},{"title":"New words","slug":"new-words","date":"2008-02-08"},{"title":"Silverlight 1.1: Feels very raw","slug":"silverlight-11-feels-very-raw","date":"2008-01-30"},{"title":"PotBS: Playing the 'other' game, - the Economy game.","slug":"potbs-playing-the-other-game-the-economy-game","date":"2008-01-30"},{"title":"WOW: Raiding is a mixed thing (blessing/curse) for me","slug":"wow-raiding-is-a-mixed-thing-blessingcurse-for-me","date":"2008-01-17"},{"title":"Good by fish :-(","slug":"good-by-fish","date":"2008-01-17"},{"title":"POTBS: Economy (cont).","slug":"potbs-economy-cont","date":"2008-01-17"},{"title":"POTBS: Economy","slug":"potbs-economy","date":"2008-01-16"},{"title":"Foosball championships","slug":"foosball-championships","date":"2008-01-16"},{"title":"POTBS: Pirates of the burning sea","slug":"potbs-pirates-of-the-burning-sea","date":"2008-01-15"},{"title":"WOW: Stuck on Vashj","slug":"wow-stuck-on-vashj","date":"2008-01-15"},{"title":"My wish for 2008","slug":"my-wish-for-2008","date":"2008-01-09"},{"title":"A (near) perfect project for 2008","slug":"a-near-perfect-project-for-2008","date":"2008-01-09"},{"title":"Undisciplined Software Development","slug":"undisciplined-software-development","date":"2008-01-07"},{"title":"My register lost johnliu.net domain and didn't even tell me","slug":"my-register-lost-johnliunet-domain-and-didnt-even-tell-me","date":"2008-01-03"},{"title":"December 2007","slug":"december-2007","date":"2008-01-03"},{"title":"Using Windows Live Writer now","slug":"using-windows-live-writer-now","date":"2008-01-03"},{"title":"Why should I specialize?  Why should you specialize?","slug":"why-should-i-specialize-why-should-you-specialize","date":"2007-12-07"},{"title":"Heaps and heaps of updates","slug":"heaps-and-heaps-of-updates","date":"2007-12-07"},{"title":"I dream last night...","slug":"i-dream-last-night","date":"2007-09-19"},{"title":"What is hakia and why should I care","slug":"what-is-hakia-and-why-should-i-care","date":"2007-08-30"},{"title":"A really nice background picture","slug":"a-really-nice-background-picture","date":"2007-08-14"},{"title":"Farmers, farmers, wherefor are thou farmers","slug":"farmers-farmers-wherefor-are-thou-farmers","date":"2007-08-03"},{"title":"A scare","slug":"a-scare","date":"2007-08-01"},{"title":"Virtual Blood Diamonds","slug":"virtual-blood-diamonds","date":"2007-07-25"},{"title":"Something Mark Dasco and I dug up","slug":"something-mark-dasco-and-i-dug-up","date":"2007-07-24"},{"title":"Picked up Supreme Commander","slug":"picked-up-supreme-commander","date":"2007-07-24"},{"title":"PowerShell script for rebuilding ASP.NET","slug":"powershell-script-for-rebuilding-aspnet","date":"2007-07-24"},{"title":"Transformers","slug":"transformers","date":"2007-07-09"},{"title":"A \"which command\" cmdlet script","slug":"a-which-command-cmdlet-script","date":"2007-07-04"},{"title":"Plan: Wiki Bot","slug":"plan-wiki-bot","date":"2007-07-03"},{"title":"Dell laptops in 8 colours","slug":"dell-laptops-in-8-colours","date":"2007-06-29"},{"title":"How do I write a cmdlet script?","slug":"how-do-i-write-a-cmdlet-script","date":"2007-06-20"},{"title":"Write this cmdlet","slug":"write-this-cmdlet","date":"2007-06-20"},{"title":"Few bits of update","slug":"few-bits-of-update","date":"2007-06-20"},{"title":"Google-whacking techniques for naming your jira tickets.","slug":"google-whacking-techniques-for-naming-your-jira-tickets","date":"2007-06-20"},{"title":"CommunityServer sucks?","slug":"communityserver-sucks","date":"2007-04-28"},{"title":"Posting with Windows Live Writer (beta)","slug":"posting-with-windows-live-writer-beta","date":"2007-04-24"},{"title":"AJAX, Tooltip, World of Warcraft (WoW)","slug":"ajax-tooltip-world-of-warcraft-wow","date":"2007-04-17"},{"title":"Be serious with the Lord","slug":"be-serious-with-the-lord","date":"2007-04-16"},{"title":"Generics, Casting and Anonymous Delegates and the Where clause","slug":"generics-casting-and-anonymous-delegates-and-the-where-claus","date":"2007-04-11"},{"title":"10 April 2007","slug":"10-april-2007","date":"2007-04-10"},{"title":"I'll see you again, brother Ron.","slug":"ill-see-you-again-brother-ron","date":"2007-04-04"},{"title":"2 April 2007","slug":"2-april-2007","date":"2007-04-02"},{"title":"Get it and Do something with it.","slug":"get-it-and-do-something-with-it","date":"2007-04-02"},{"title":"Using ForEach and Anonymous Delegates.","slug":"using-foreach-and-anonymous-delegates","date":"2007-04-02"},{"title":"Revenge of the developer!","slug":"revenge-of-the-developer","date":"2007-03-30"},{"title":"Playing as a monster","slug":"playing-as-a-monster","date":"2007-03-30"},{"title":"JQuery string formatting.","slug":"jquery-string-formatting","date":"2007-03-30"},{"title":"30 March 2007","slug":"30-march-2007","date":"2007-03-30"},{"title":"Infinite loop in a survey questionaire for acupuncture.","slug":"infinite-loop-in-a-survey-questionaire-for-acupuncture","date":"2007-03-29"},{"title":"29 March 2007","slug":"29-march-2007","date":"2007-03-29"},{"title":"Quiz: The default operator","slug":"quiz-the-default-operator","date":"2007-03-28"},{"title":"Quiz: The ?? operator","slug":"quiz-the-operator","date":"2007-03-28"},{"title":"MSN Javascript errors.","slug":"msn-javascript-errors","date":"2007-03-28"},{"title":"C&C3 updates","slug":"cc3-updates","date":"2007-03-28"},{"title":"28 March 2007","slug":"28-march-2007","date":"2007-03-28"},{"title":"27 March 2007","slug":"27-march-2007","date":"2007-03-27"},{"title":"C & C 3 impressions","slug":"c-c-3-impressions","date":"2007-03-27"},{"title":"22 March 2007","slug":"22-march-2007","date":"2007-03-22"},{"title":"21 March 2007","slug":"21-march-2007","date":"2007-03-21"},{"title":"Surely my car is towed away again.","slug":"surely-my-car-is-towed-away-again","date":"2007-03-19"},{"title":"19 March 2007","slug":"19-march-2007","date":"2007-03-19"},{"title":"TiddlyWiki to Spaces!","slug":"tiddlywiki-to-spaces","date":"2007-03-16"},{"title":"16 March 2007","slug":"16-march-2007","date":"2007-03-16"},{"title":"Hey what's going on!","slug":"hey-whats-going-on","date":"2007-03-15"},{"title":"15 March 2007","slug":"15-march-2007","date":"2007-03-15"},{"title":"14 March 2007","slug":"14-march-2007","date":"2007-03-15"},{"title":"13 March 2007","slug":"13-march-2007","date":"2007-03-15"},{"title":"Oh well, so much for my own blog...","slug":"oh-well-so-much-for-my-own-blog","date":"2007-01-10"},{"title":"A place holder entry","slug":"a-place-holder-entry","date":"2005-08-01"}];
97
98  const search = document.getElementById('site-search');
99  const results = document.getElementById('site-search-results');
100  const backstageLink = document.querySelector('[data-backstage-link]');
101
102  if (search && results) {
103    const normalize = (value) =>
104      String(value || '')
105        .toLowerCase()
106        .replace(/[^a-z0-9]+/g, ' ')
107        .trim()
108        .replace(/\s+/g, ' ');
109
110    const slugify = (value) =>
111      String(value || '')
112        .toLowerCase()
113        .replace(/[^a-z0-9]+/g, '-')
114        .replace(/^-+|-+$/g, '');
115
116    const scorePost = (query, post) => {
117      const q = normalize(query);
118      if (!q) return -1;
119      const title = normalize(post.title);
120      const slug = normalize(post.slug);
121      const slugKey = slugify(post.slug);
122
123      if (title === q || slug === q || slugKey === slugify(query)) return 100;
124      if (title.includes(q)) return 80 + Math.max(0, 20 - title.indexOf(q));
125      if (slug.includes(q)) return 70 + Math.max(0, 20 - slug.indexOf(q));
126      return -1;
127    };
128
129    let activeIndex = -1;
130    let currentMatches = [];
131
132    const navigate = (slug) => {
133      window.location.href = `/blog/${String(slug).replace(/^\/+|\/+$/g, '')}/`;
134    };
135
136    const renderResults = () => {
137      const query = search.value.trim();
138      currentMatches = postIndex
139        .map((post) => ({ ...post, score: scorePost(query, post) }))
140        .filter((post) => post.score >= 0)
141        .sort((a, b) => b.score - a.score || b.date.localeCompare(a.date))
142        .slice(0, 6);
143
144      results.innerHTML = '';
145      activeIndex = currentMatches.length > 0 ? 0 : -1;
146      search.setAttribute('aria-expanded', String(currentMatches.length > 0));
147
148      if (!currentMatches.length || !query) {
149        results.hidden = true;
150        return;
151      }
152
153      currentMatches.forEach((post, index) => {
154        const link = document.createElement('a');
155        link.href = `/blog/${String(post.slug).replace(/^\/+|\/+$/g, '')}/`;
156        link.className = 'site-search-option';
157        link.setAttribute('role', 'option');
158        link.setAttribute('aria-selected', String(index === activeIndex));
159        link.innerHTML = `<span class="site-search-result-title">${post.title}</span><span class="site-search-result-date">posted on ${post.date}</span>`;
160        link.addEventListener('click', (event) => {
161          event.preventDefault();
162          navigate(post.slug);
163        });
164        results.appendChild(link);
165      });
166
167      results.hidden = false;
168    };
169
170    const selectActive = () => {
171      const post = currentMatches[activeIndex];
172      if (!post) return;
173      navigate(post.slug);
174    };
175
176    search.addEventListener('input', renderResults);
177    search.addEventListener('focus', renderResults);
178    search.addEventListener('keydown', (event) => {
179      if (event.key === 'Escape') {
180        results.hidden = true;
181        search.setAttribute('aria-expanded', 'false');
182        return;
183      }
184      if (!currentMatches.length) return;
185      if (event.key === 'ArrowDown') {
186        event.preventDefault();
187        activeIndex = Math.min(activeIndex + 1, currentMatches.length - 1);
188        renderResults();
189        return;
190      }
191      if (event.key === 'ArrowUp') {
192        event.preventDefault();
193        activeIndex = Math.max(activeIndex - 1, 0);
194        renderResults();
195        return;
196      }
197      if (event.key === 'Enter') {
198        event.preventDefault();
199        selectActive();
200      }
201    });
202
203    document.addEventListener('click', (event) => {
204      if (event.target instanceof Node && !results.contains(event.target) && event.target !== search) {
205        results.hidden = true;
206        search.setAttribute('aria-expanded', 'false');
207      }
208    });
209  }
210
211  if (backstageLink) {
212    fetch('/.auth/me')
213      .then((response) => {
214        if (!response.ok) {
215          throw new Error('Unable to load auth state');
216        }
217        return response.json();
218      })
219      .then((payload) => {
220        const roles = Array.isArray(payload?.clientPrincipal?.userRoles)
221          ? payload.clientPrincipal.userRoles
222          : [];
223        if (roles.includes('owner')) {
224          backstageLink.hidden = false;
225        }
226      })
227      .catch(() => {
228        // Keep hidden when auth state is unavailable.
229      });
230  }
231})();</script>
231 
231<script type="module">const e=document.getElementById("theme-toggle");if(e){const o=e.querySelector(".theme-toggle-icon"),n=()=>{const t=document.documentElement.classList.contains("dark");o&&(o.textContent=t?"light_mode":"dark_mode"),e.title=t?"Switch to light mode":"Switch to dark mode";const c=document.querySelector("iframe.giscus-frame");c?.contentWindow&&c.contentWindow.postMessage({giscus:{setConfig:{theme:t?"dark":"light"}}},"https://giscus.app")};n(),e.addEventListener("click",()=>{document.documentElement.classList.toggle("dark");const t=document.documentElement.classList.contains("dark");localStorage.setItem("theme",t?"dark":"light"),n()})}</script>
231  <main> <div class="page-shell page-shell-no-rail"> <div class="page-content">  <section class="home-hero" data-astro-cid-j7pv25f6> <p class="home-kicker" data-astro-cid-j7pv25f6>Founder of Flow Studio</p> <h1 data-astro-cid-j7pv25f6>
232John Liu
233<span data-astro-cid-j7pv25f6>Automate. Code. Share.</span> </h1> <p class="home-lede" data-astro-cid-j7pv25f6>
234I write about Power Platform, agents, and building useful tools.  Microsoft MVP Alumni.
235</p> <div class="home-meta-row" hidden data-astro-cid-j7pv25f6> <a class="home-subscribe" href="/rss.xml" data-astro-cid-j7pv25f6>Subscribe</a> <span data-astro-cid-j7pv25f6>Available for technical consultation</span> </div> </section> <section class="home-featured" data-astro-cid-j7pv25f6> <div class="featured-image" data-astro-cid-j7pv25f6> <a href="/blog/16-levels-of-building-an-mcp/" aria-label="Read 16 levels of building an MCP" data-astro-cid-j7pv25f6> <img src="/thumbs/16-levels-of-building-an-mcp.jpg" alt="16 levels of building an MCP" loading="eager" data-astro-cid-j7pv25f6="true" decoding="async" fetchpriority="auto" width="640" height="360"> </a> </div> <div class="featured-body" data-astro-cid-j7pv25f6> <div class="featured-meta" data-astro-cid-j7pv25f6> <time datetime="2026-05-28T00:00:00.000Z" data-astro-cid-j7pv25f6> 2026.05.28 </time> <a href="/blog/tags/agent/" data-astro-cid-j7pv25f6>Agent</a><a href="/blog/tags/mcp/" data-astro-cid-j7pv25f6>MCP</a> </div> <h2 data-astro-cid-j7pv25f6><a href="/blog/16-levels-of-building-an-mcp/" data-astro-cid-j7pv25f6>16 levels of building an MCP</a></h2> <p data-astro-cid-j7pv25f6>Building an MCP server starts as a wrapper around an API, but the real work is teaching agents how to discover, choose, recover, authenticate, and operate safely.</p> <a class="home-featured-link" href="/blog/16-levels-of-building-an-mcp/" aria-label="Read full article: 16 levels of building an MCP" data-astro-cid-j7pv25f6>
236Read full article
237<span class="material-symbols-outlined" aria-hidden="true" data-astro-cid-j7pv25f6>arrow_forward</span> </a> </div> </section><section class="home-recent" aria-label="Recent posts" data-astro-cid-j7pv25f6> <div class="section-head" data-astro-cid-j7pv25f6> <div class="section-head-left" data-astro-cid-j7pv25f6> <nav class="section-head-nav" aria-label="Recent posts navigation" data-astro-cid-j7pv25f6> <h2 data-astro-cid-j7pv25f6>Recent Posts</h2> <span aria-hidden="true" data-astro-cid-j7pv25f6>·</span> <a href="/blog/popularity/" data-astro-cid-j7pv25f6>Popular</a> <span aria-hidden="true" data-astro-cid-j7pv25f6>·</span> <a href="/blog/archive" data-astro-cid-j7pv25f6>By Year</a> <span aria-hidden="true" data-astro-cid-j7pv25f6>·</span> <a href="/blog/tags" data-astro-cid-j7pv25f6>By Tag</a> <span aria-hidden="true" data-astro-cid-j7pv25f6>·</span> <a href="/blog" data-astro-cid-j7pv25f6>All</a> </nav> </div> <span class="section-head-sort" data-astro-cid-j7pv25f6>Sorted by Chronological Order</span> </div> <ul data-astro-cid-j7pv25f6> <li data-astro-cid-j7pv25f6> <div class="recent-image" data-astro-cid-j7pv25f6> <a href="/blog/convert-markdown-to-pdf-with-power-automate/" aria-label="Read Convert Markdown to PDF with Power Automate (Full Guide)" data-astro-cid-j7pv25f6> <img src="/thumbs/convert-markdown-to-pdf-with-power-automate.jpg" alt="Convert Markdown to PDF with Power Automate (Full Guide)" loading="lazy" data-astro-cid-j7pv25f6="true" decoding="async" fetchpriority="auto" width="640" height="360"> </a> </div> <article data-astro-cid-j7pv25f6> <div class="recent-meta" data-astro-cid-j7pv25f6> <time datetime="2026-05-26T00:00:00.000Z" data-astro-cid-j7pv25f6> 2026.05.26 </time> <a href="/blog/tags/powerautomate/" data-astro-cid-j7pv25f6>PowerAutomate</a> <span aria-hidden="true" class="recent-tag-separator" data-astro-cid-j7pv25f6>·</span><a href="/blog/tags/markdown/" data-astro-cid-j7pv25f6>Markdown</a>  </div> <h3 data-astro-cid-j7pv25f6> <a href="/blog/convert-markdown-to-pdf-with-power-automate/" aria-label="Open article: Convert Markdown to PDF with Power Automate (Full Guide)" data-astro-cid-j7pv25f6> Convert Markdown to PDF with Power Automate (Full Guide) </a> </h3> <p data-astro-cid-j7pv25f6>How to convert a Markdown file to PDF using Power Automate and the OneDrive ConvertFileByPath connector. Includes a full compatibility test of 12 Markdown feature categories.</p> <a class="recent-read-link" href="/blog/convert-markdown-to-pdf-with-power-automate/" aria-label="Read article: Convert Markdown to PDF with Power Automate (Full Guide)" data-astro-cid-j7pv25f6>
238Read article
239<span class="material-symbols-outlined" aria-hidden="true" data-astro-cid-j7pv25f6>arrow_forward</span> </a> </article> </li><li data-astro-cid-j7pv25f6> <div class="recent-image" data-astro-cid-j7pv25f6> <a href="/blog/flow-studio-app-v14-major-update/" aria-label="Read Flow Studio v1.4 — A Major Update" data-astro-cid-j7pv25f6> <img src="/thumbs/flow-studio-app-v14-major-update.jpg" alt="Flow Studio v1.4 — A Major Update" loading="lazy" data-astro-cid-j7pv25f6="true" decoding="async" fetchpriority="auto" width="640" height="360"> </a> </div> <article data-astro-cid-j7pv25f6> <div class="recent-meta" data-astro-cid-j7pv25f6> <time datetime="2026-05-04T00:00:00.000Z" data-astro-cid-j7pv25f6> 2026.05.04 </time> <a href="/blog/tags/flowstudio/" data-astro-cid-j7pv25f6>FlowStudio</a>  </div> <h3 data-astro-cid-j7pv25f6> <a href="/blog/flow-studio-app-v14-major-update/" aria-label="Open article: Flow Studio v1.4 — A Major Update" data-astro-cid-j7pv25f6> Flow Studio v1.4 — A Major Update </a> </h3> <p data-astro-cid-j7pv25f6>Flow Studio 1.4.x brings an Angular upgrade, a move to Azure Static Web Apps, a new lightweight API proxy, a unified flow view, SQLite-in-browser caching, and an ongoing UX refresh toward Tailwind and Fluent Design.</p> <a class="recent-read-link" href="/blog/flow-studio-app-v14-major-update/" aria-label="Read article: Flow Studio v1.4 — A Major Update" data-astro-cid-j7pv25f6>
240Read article
241<span class="material-symbols-outlined" aria-hidden="true" data-astro-cid-j7pv25f6>arrow_forward</span> </a> </article> </li><li data-astro-cid-j7pv25f6> <div class="recent-image" data-astro-cid-j7pv25f6> <a href="/blog/sharepoint-as-vercel-for-vibe-apps/" aria-label="Read SharePoint as Vercel for Vibe Apps" data-astro-cid-j7pv25f6> <img src="/thumbs/sharepoint-as-vercel-for-vibe-apps.jpg" alt="SharePoint as Vercel for Vibe Apps" loading="lazy" data-astro-cid-j7pv25f6="true" decoding="async" fetchpriority="auto" width="640" height="360"> </a> </div> <article data-astro-cid-j7pv25f6> <div class="recent-meta" data-astro-cid-j7pv25f6> <time datetime="2026-05-01T00:00:00.000Z" data-astro-cid-j7pv25f6> 2026.05.01 </time> <a href="/blog/tags/sharepoint/" data-astro-cid-j7pv25f6>
241SharePoint</a> <span aria-hidden="true" class="recent-tag-separator" data-astro-cid-j7pv25f6>·</span><a href="/blog/tags/spfx/" data-astro-cid-j7pv25f6>SPFx</a>  </div> <h3 data-astro-cid-j7pv25f6> <a href="/blog/sharepoint-as-vercel-for-vibe-apps/" aria-label="Open article: SharePoint as Vercel for Vibe Apps" data-astro-cid-j7pv25f6> SharePoint as Vercel for Vibe Apps </a> </h3> <p data-astro-cid-j7pv25f6>git push, app deployed. That magic, but landing inside SharePoint Online instead of Vercel - so it ships in environments where Vercel will never get approved.</p> <a class="recent-read-link" href="/blog/sharepoint-as-vercel-for-vibe-apps/" aria-label="Read article: SharePoint as Vercel for Vibe Apps" data-astro-cid-j7pv25f6>
242Read article
243<span class="material-symbols-outlined" aria-hidden="true" data-astro-cid-j7pv25f6>arrow_forward</span> </a> </article> </li><li data-astro-cid-j7pv25f6> <div class="recent-image" data-astro-cid-j7pv25f6> <a href="/blog/sharepoint-markdown-to-pdf-limit-test-with-agents-flow-studio-mcp/" aria-label="Read SharePoint Markdown to PDF: a limit test with Agents and Flow Studio MCP" data-astro-cid-j7pv25f6> <img src="/thumbs/sharepoint-markdown-to-pdf-limit-test-with-agents-flow-studio-mcp.jpg" alt="SharePoint Markdown to PDF: a limit test with Agents and Flow Studio MCP" loading="lazy" data-astro-cid-j7pv25f6="true" decoding="async" fetchpriority="auto" width="768" height="512"> </a> </div> <article data-astro-cid-j7pv25f6> <div class="recent-meta" data-astro-cid-j7pv25f6> <time datetime="2026-04-28T00:00:00.000Z" data-astro-cid-j7pv25f6> 2026.04.28 </time> <a href="/blog/tags/agent/" data-astro-cid-j7pv25f6>Agent</a> <span aria-hidden="true" class="recent-tag-separator" data-astro-cid-j7pv25f6>·</span><a href="/blog/tags/flowstudio/" data-astro-cid-j7pv25f6>FlowStudio</a>  </div> <h3 data-astro-cid-j7pv25f6> <a href="/blog/sharepoint-markdown-to-pdf-limit-test-with-agents-flow-studio-mcp/" aria-label="Open article: SharePoint Markdown to PDF: a limit test with Agents and Flow Studio MCP" data-astro-cid-j7pv25f6> SharePoint Markdown to PDF: a limit test with Agents and Flow Studio MCP </a> </h3> <p data-astro-cid-j7pv25f6>Microsoft says Markdown is now native in SharePoint and OneDrive, so I asked an agent through Flow Studio MCP to create a Markdown file, save it to SharePoint, and test PDF conversion.</p> <a class="recent-read-link" href="/blog/sharepoint-markdown-to-pdf-limit-test-with-agents-flow-studio-mcp/" aria-label="Read article: SharePoint Markdown to PDF: a limit test with Agents and Flow Studio MCP" data-astro-cid-j7pv25f6>
244Read article
245<span class="material-symbols-outlined" aria-hidden="true" data-astro-cid-j7pv25f6>arrow_forward</span> </a> </article> </li><li data-astro-cid-j7pv25f6> <div class="recent-image" data-astro-cid-j7pv25f6> <a href="/blog/the-flow-studio-mcp-journey-ahead/" aria-label="Read The Flow Studio MCP Journey Ahead" data-astro-cid-j7pv25f6> <img src="/thumbs/the-flow-studio-mcp-journey-ahead.jpg" alt="The Flow Studio MCP Journey Ahead" loading="lazy" data-astro-cid-j7pv25f6="true" decoding="async" fetchpriority="auto" width="768" height="512"> </a> </div> <article data-astro-cid-j7pv25f6> <div class="recent-meta" data-astro-cid-j7pv25f6> <time datetime="2026-04-27T00:00:00.000Z" data-astro-cid-j7pv25f6> 2026.04.27 </time> <a href="/blog/tags/agent/" data-astro-cid-j7pv25f6>Agent</a> <span aria-hidden="true" class="recent-tag-separator" data-astro-cid-j7pv25f6>·</span><a href="/blog/tags/flowstudio/" data-astro-cid-j7pv25f6>FlowStudio</a>  </div> <h3 data-astro-cid-j7pv25f6> <a href="/blog/the-flow-studio-mcp-journey-ahead/" aria-label="Open article: The Flow Studio MCP Journey Ahead" data-astro-cid-j7pv25f6> The Flow Studio MCP Journey Ahead </a> </h3> <p data-astro-cid-j7pv25f6>Some notes on improving MCP, why Power Automate still matters, what skills mean for agents, and why useful agent work should become docs, c
245ontext, and deterministic tools.</p> <a class="recent-read-link" href="/blog/the-flow-studio-mcp-journey-ahead/" aria-label="Read article: The Flow Studio MCP Journey Ahead" data-astro-cid-j7pv25f6>
246Read article
247<span class="material-symbols-outlined" aria-hidden="true" data-astro-cid-j7pv25f6>arrow_forward</span> </a> </article> </li><li data-astro-cid-j7pv25f6> <div class="recent-image" data-astro-cid-j7pv25f6> <a href="/blog/why-mcp-is-still-the-best-bet-over-cli/" aria-label="Read Why MCP is still the best bet over CLI" data-astro-cid-j7pv25f6> <img src="/thumbs/why-mcp-is-still-the-best-bet-over-cli.jpg" alt="Why MCP is still the best bet over CLI" loading="lazy" data-astro-cid-j7pv25f6="true" decoding="async" fetchpriority="auto" width="768" height="512"> </a> </div> <article data-astro-cid-j7pv25f6> <div class="recent-meta" data-astro-cid-j7pv25f6> <time datetime="2026-04-20T00:00:00.000Z" data-astro-cid-j7pv25f6> 2026.04.20 </time> <a href="/blog/tags/agent/" data-astro-cid-j7pv25f6>Agent</a> <span aria-hidden="true" class="recent-tag-separator" data-astro-cid-j7pv25f6>·</span><a href="/blog/tags/mcp/" data-astro-cid-j7pv25f6>MCP</a>  </div> <h3 data-astro-cid-j7pv25f6> <a href="/blog/why-mcp-is-still-the-best-bet-over-cli/" aria-label="Open article: Why MCP is still the best bet over CLI" data-astro-cid-j7pv25f6> Why MCP is still the best bet over CLI </a> </h3> <p data-astro-cid-j7pv25f6>CLI is great for humans, but MCP is a better fit for agents: discoverable tools, portable integrations, and MCP Apps for interactive UI.</p> <a class="recent-read-link" href="/blog/why-mcp-is-still-the-best-bet-over-cli/" aria-label="Read article: Why MCP is still the best bet over CLI" data-astro-cid-j7pv25f6>
248Read article
249<span class="material-symbols-outlined" aria-hidden="true" data-astro-cid-j7pv25f6>arrow_forward</span> </a> </article> </li> </ul> </section> <section class="home-topics" aria-label="Topics" data-astro-cid-j7pv25f6> <h2 data-astro-cid-j7pv25f6>Thematic classifications</h2> <div class="topic-grid" data-astro-cid-j7pv25f6> <a class="topic-card" href="/blog/tags/flowstudio/" aria-label="Flow Studio tag, 39 posts" data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>Flow Studio</h3> <p data-astro-cid-j7pv25f6>39 posts</p> </a><a class="topic-card" href="/blog/tags/microsoftflow/" aria-label="Power Automate tag, 98 posts" data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>Power Automate</h3> <p data-astro-cid-j7pv25f6>98 posts</p> </a><a class="topic-card" href="/blog/tags/agent/" aria-label="Agent tag, 7 posts" data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>Agent</h3> <p data-astro-cid-j7pv25f6>7 posts</p> </a><a class="topic-card" href="/blog/tags/sharepoint/" aria-label="SharePoint tag, 220 posts" data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>SharePoint</h3> <p data-astro-cid-j7pv25f6>220 posts</p> </a><a class="topic-card" href="/blog/tags/azurefunctions/" aria-label="AzureFunctions tag, 30 posts" data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>AzureFunctions</h3> <p data-astro-cid-j7pv25f6>30 posts</p> </a><a class="topic-card" href="/blog/tags/office365/" aria-label="M365 tag, 47 posts" data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>M365</h3> <p data-astro-cid-j7pv25f6>47 posts</p> </a><a class="topic-card" href="/blog/tags/publicannouncement/" aria-label="Public Announcement tag, 1 posts" data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>Public Announcement</h3> <p data-astro-cid-j7pv25f6>1 posts</p> </a> </div> </section> 
249<script src="/js/ambient.js" defer></script>
249  </div>  </div> </main> <footer class="site-footer" data-astro-cid-sz7xmlte> <div class="wrap" data-astro-cid-sz7xmlte> <p data-astro-cid-sz7xmlte>&copy; 2026 John Liu <span id="ambient-label" data-astro-cid-sz7xmlte></span></p> <nav class="social" data-astro-cid-sz7xmlte> <a href="https://www.linkedin.com/in/johnnliu" rel="me noopener" target="_blank" data-astro-cid-sz7xmlte>LinkedIn</a> <a href="https://twitter.com/johnnliu" rel="me noopener" target="_blank" data-astro-cid-sz7xmlte>Twitter</a> <a href="https://www.youtube.com/@JohnLiuNet" rel="me noopener" target="_blank" data-astro-cid-sz7xmlte>YouTube</a> </nav> </div> </footer>  
249<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"be814ef6f85c4a6dad4c24264bcb3f70","r":1,"spa":2}' crossorigin="anonymous"></script>
249
250</body></html> 

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.