<!DOCTYPE html>
<html lang="en-US" class="static orchard-blogs">

<head>
	<meta charset="utf-8" />
	<title>Dragan Panjkov - blog</title>
	<!-- <link href="/Modules/Orchard.Localization/Styles/orchard-localization-admin.css" rel="stylesheet" type="text/css" /> -->
	<link href="themes/TheBootstrapTheme/styles/font-awesome.min.css" rel="stylesheet" type="text/css" />
	<link href="themes/TheBootstrapTheme/styles/site.css" rel="stylesheet" type="text/css" />
	<link href="themes/TheBootstrapTheme/styles/orchard-blogs-archives.css" rel="stylesheet" type="text/css" />
	<!--[if lt IE 9]>
<script src="/Core/Shapes/Scripts/html5.js" type="text/javascript"></script>
<![endif]-->
	<!-- <meta content="Orchard" name="generator" />
	<link href="https://www.dragan-panjkov.com/XmlRpc/LiveWriter/Manifest" rel="wlwmanifest"
		type="application/wlwmanifest+xml" /> -->
	<!-- <link href="https://www.dragan-panjkov.com/blog/rsd" rel="EditURI" title="RSD" type="application/rsd+xml" /> -->
	<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
	<meta name="google-site-verification" content="DY-sidsiE7tSrlHTxPQoX_TY4US-sa-Uw3cekWXx6E8" />
	<meta name="description" content="Dragan Panjkov, personal blog about technical topics.">


	<link rel="alternate" type="application/rss+xml" title="blog " href="/rss?containerid=967" />

	<script>        (function (d) { d.className = "dyn" + d.className.substring(6, d.className.length); })(document.documentElement);</script>
</head>

<body>

	<!-- BindTuning head elements-->

	<script type="text/javascript">
		if (typeof jQuery == 'undefined') { document.write('<script type="text/javascript" src="themes/TheBootstrapTheme/js/jquery.min.js"><' + '/script>'); }
		var style_mobile_path = 'themes/TheBootstrapTheme/styles/css/'; // path for mobile nav css files, ORX-specific
	</script>
	<script type="text/javascript">
		$('head').append('<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">');
	</script>
	<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
	<!--[if lt IE 9]>
      <script src="themes/TheBootstrapTheme/js/html5shiv.min.js"></script>
      <script src="themes/TheBootstrapTheme/js/respond.min.js"></script>
    <![endif]-->
	<script type="text/javascript" src="themes/TheBootstrapTheme/js/bootstrap.min.js"></script>
	<script type="text/javascript" src="themes/TheBootstrapTheme/js/BindMENU.js"></script>
	<script type="text/javascript" src="themes/TheBootstrapTheme/js/fix-responsive-WP8.js"></script>
	<script type="text/javascript" src="themes/TheBootstrapTheme/js/initilizations.js"></script>


	<!--Apply class to body with browser version-->
	<script type="text/javascript">
		var nVer = navigator.appVersion; var nAgt = navigator.userAgent; var bN = navigator.appName; var fullV = "" + parseFloat(navigator.appVersion); var majorV = parseInt(navigator.appVersion, 10); var nameOffset, verOffset, ix; if ((verOffset = nAgt.indexOf("Opera")) !== -1) { bN = "Opera"; fullV = nAgt.substring(verOffset + 6); if ((verOffset = nAgt.indexOf("Version")) !== -1) { fullV = nAgt.substring(verOffset + 8) } } else { if ((verOffset = nAgt.indexOf("MSIE")) !== -1) { bN = "IE"; fullV = nAgt.substring(verOffset + 5) } else { if ((verOffset = nAgt.indexOf("Chrome")) !== -1) { bN = "Chrome"; fullV = nAgt.substring(verOffset + 7) } else { if ((verOffset = nAgt.indexOf("Safari")) !== -1) { bN = "Safari"; fullV = nAgt.substring(verOffset + 7); if ((verOffset = nAgt.indexOf("Version")) !== -1) { fullV = nAgt.substring(verOffset + 8) } } else { if ((verOffset = nAgt.indexOf("Firefox")) !== -1) { bN = "Firefox"; fullV = nAgt.substring(verOffset + 8) } else { if ((nameOffset = nAgt.lastIndexOf(" ") + 1) < (verOffset = nAgt.lastIndexOf("/"))) { bN = nAgt.substring(nameOffset, verOffset); fullV = nAgt.substring(verOffset + 1); if (bN.toLowerCase() == bN.toUpperCase()) { bN = navigator.appName } } } } } } } if ((ix = fullV.indexOf(";")) !== -1) { fullV = fullV.substring(0, ix) } if ((ix = fullV.indexOf(" ")) !== -1) { fullV = fullV.substring(0, ix) } majorV = parseInt("" + fullV, 10); if (isNaN(majorV)) { fullV = "" + parseFloat(navigator.appVersion); majorV = parseInt(navigator.appVersion, 10) }
		document.getElementsByTagName("body")[0].className += " " + bN + " " + bN + majorV + " cmsORX cmsORX1 BT-pk";
	</script>

	<header class="navbar navbar-static-top" role="banner">
		<div class="container">
			<div class="navbar-header">
				<button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse"><i
						class="fa fa-bars"></i></button>
				<span class="navbar-brand" id="Logo">
					<a href="index.html" title="Go to Home">Dragan Panjkov</a>
				</span>
			</div>
			<nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
				<div id="MenuH">
					<div class="zone zone-navigation">

						<article class="widget-navigation widget-menu-widget widget">
							<div>

								<nav>
									<ul class="menu menu-main-menu">

										<li class="current first"><a href="index.html">Home</a>
										</li>
										<li class="last"><a href="archive.html">Archive</a>
										</li>
									</ul>
								</nav>
							</div>
						</article>


					</div>
				</div>
			</nav>
		</div>
	</header>

	<div id="bt-pagetitle">
		<div class="container">
		</div>
	</div>



	<div class="container">
		<div class="row">
			<div class="col-md-9" id="bt-content" role="main">
				<div class="row">
				</div>
				<div class="row">
				</div>
				<div class="row">


				</div>
				<div class="row">


				</div>
				<div class="row">
					<div class="col-md-12" id="Content">
						<div class="zone zone-content">
						
								<article class="blog content-item">
									<header>


										<h1>blog </h1>
									</header>
									<div data-tab="Content" id="tab-content"></div>
									<div data-tab="Content" id="tab-content">
										<h2><a href="reading-microsoft-teams-presence-information-with-microsoft-graph-and-esp32.html">Reading Microsoft Teams presence information with Microsoft Graph and ESP32</a></h2>
<div class="metadata"><div class="published">Sunday, 27 December 2020</div></div>
This long overdue blog post explains one of my small circuits which indicates Microsoft Teams presence information for a user from Microsoft Graph. Circuit is based on Expressif microcontroller ESP32 
... <a href="reading-microsoft-teams-presence-information-with-microsoft-graph-and-esp32.html">read more</a>
<h2><a href="postman-azure-ad-and-stay-signed-in.html">Postman, Azure AD and ‘Stay Signed In?’</a></h2>
<div class="metadata"><div class="published">Monday, 22 July 2019</div></div>
I recently had a puzzling situation: I was using Postman to call K2 APIs secured with Azure AD, as described in K2 Help article [https://help.k2.com/kb002838. ](https://help.k2.com/kb002838. which) In
... <a href="postman-azure-ad-and-stay-signed-in.html">read more</a>
<h2><a href="sharepoint-framework-web-part-and-k2-workflow-rest-api.html">SharePoint Framework web part and K2 Workflow REST API</a></h2>
<div class="metadata"><div class="published">Saturday, 9 March 2019</div></div>
In this article I will describe the necessary steps to create and configure SharePoint Framework web part to access K2 workflow REST API on K2 Five or K2 Cloud. The example will be simple “Worklist” w
... <a href="sharepoint-framework-web-part-and-k2-workflow-rest-api.html">read more</a>
<h2><a href="adding-k2-smartforms-form-as-tab-in-microsoft-teams.html">Adding K2 SmartForms form as Tab in Microsoft Teams</a></h2>
<div class="metadata"><div class="published">Sunday, 30 December 2018</div></div>
Continuing on my previous blog post where I wrote about steps that need to be performed to integrate a third-party SaaS product into Microsoft Teams, in this article I will demonstrate it step-by-step
... <a href="adding-k2-smartforms-form-as-tab-in-microsoft-teams.html">read more</a>
<h2><a href="adding-third-party-saas-as-a-tab-in-microsoft-teams.html">Adding third-party SaaS as a Tab in Microsoft Teams</a></h2>
<div class="metadata"><div class="published">Friday, 28 December 2018</div></div>
Tabs in Microsoft Teams are great way to integrate external web content in Microsoft Teams. When the Tab is added, content inside it becomes easily accessible to users, literally one click away from t
... <a href="adding-third-party-saas-as-a-tab-in-microsoft-teams.html">read more</a>
<h2><a href="openlivewriter-orchard-and-cloudflare-basic-ssl.html">OpenLiveWriter, Orchard and Cloudflare Basic SSL</a></h2>
<div class="metadata"><div class="published">Sunday, 9 December 2018</div></div>
In this post, I want to share a small workaround for successful configuration of OpenLiveWriter with blog hosted on Orchard CMS that uses Cloudflare Basic SSL.
First, some background: I use Orchard fo
... <a href="openlivewriter-orchard-and-cloudflare-basic-ssl.html">read more</a>
<h2><a href="using-microsoft-graph-net-client-library-in-azure-functions.html">Using Microsoft Graph .NET Client Library in Azure Functions</a></h2>
<div class="metadata"><div class="published">Sunday, 9 December 2018</div></div>
I use this code sample as a demo in my conference session “Building serverless applications with Microsoft Graph and Azure Functions” which I presented at several conferences in 2018. Slides can be fo
... <a href="using-microsoft-graph-net-client-library-in-azure-functions.html">read more</a>
<h2><a href="renewed-as-microsoft-mvp-for-another-year.html">Renewed as Microsoft MVP for another year</a></h2>
<div class="metadata"><div class="published">Thursday, 5 July 2018</div></div>
Besides the fact that July 1st is the end of Fiscal year for Microsoft, it also makes important date for all current Microsoft MVPs. That is the date when existing MVPs are re-awarded or not. There ar
... <a href="renewed-as-microsoft-mvp-for-another-year.html">read more</a>
<h2><a href="building-serverless-applications-with-microsoft-graph-ecs-2018-session-slides-2.html">Building Serverless Applications with Microsoft Graph - ECS 2018 session slides</a></h2>
<div class="metadata"><div class="published">Wednesday, 30 May 2018</div></div>
Slides for this session are posted on SlideShare https://www.slideshare.net/panjkov/building-serverless-applications-with-microsoft-graph-ecs-2018    
PS. I apologize to all attendees of my session. I
... <a href="building-serverless-applications-with-microsoft-graph-ecs-2018-session-slides-2.html">read more</a>
<h2><a href="building-serverless-applications-with-microsoft-graph-ecs-2018-session-slides.html">Building Serverless Applications with Microsoft Graph - ECS 2018 session slides</a></h2>
<div class="metadata"><div class="published">Wednesday, 30 May 2018</div></div>
Slides for this session are posted on SlideShare https://www.slideshare.net/panjkov/building-serverless-applications-with-microsoft-graph-ecs-2018 
PS. I apologize to all attendees of my session. I in
... <a href="building-serverless-applications-with-microsoft-graph-ecs-2018-session-slides.html">read more</a>


								</article>
						</div>
					</div>
				</div>
				<div class="row">


				</div>
				<div class="row">
				</div>
				<div class="row">



				</div>
				<div class="row">
				</div>
				<div class="row">
				</div>
			</div>
			<div class="col-md-3" id="bt-sidebar">
				<div class="visible-xs visible-sm">
					<hr>
				</div>
				<!-- <div id="MenuV">
					<script type="text/javascript">$("#MenuV").html($("#MenuH nav").parent().html());</script>
				</div> -->
				<div id="Messages">
					<div class="zone zone-messages">


						<article class="widget-messages widget-html-widget widget">
							<div>
								<p><a href="https://ba.linkedin.com/in/panjkov"><img
											alt="LinkedIn - Professional profile"
											src="Media/Default/content/img/linkedin.png"></a>
									<a href="https://vimeo.com/panjkov"><img alt="Vimeo Uploads"
											src="Media/Default/content/img/vimeo.png"></a>
									<a href="http://www.slideshare.net/panjkov/"><img width="32" height="32" alt=""
											src="Media/Default/content/img/slideshare.png"></a>
									<a href="https://twitter.com/panjkov"><img alt="Tweets"
											src="Media/Default/content/img/twitter-2.png"></a>
								</p>
							</div>
						</article>



					

					</div>
				</div>
			</div>
		</div>
	</div>



	<footer class="bs-footer" role="contentinfo">
		<div class="container">
			<div id="bt-footer">
				<div id="Footer">
					<div class="zone zone-footer">


						<article class="widget-footer widget-html-widget widget">
							<div>
								
							</div>
						</article>


					</div>
				</div>
			</div>
			<div class="footer-links">
				<span id="Copyright"><span class="Copyright">© 2006 - 2022 Dragan Panjkov. All rights reserved.</span></span>
				<span id="Sitemap"></span>
				<span id="Privacy"><a href="datenschutz.html">Datenschutzerkl&auml;rung</a></span>
				<span id="Terms"><a href="impressum.html">Impressum</a></span>

			</div>
		</div>
	</footer>

	<script type="text/javascript">
		(function ($) {
			$(document).ready(function () {
				//MovePageTitle
				if (typeof g_disableCheckoutInEditMode != 'undefined' && !g_disableCheckoutInEditMode) {
					$('.MoveToTitleZone').appendTo('#bt-pagetitle>.container');
				}
			});
		})(jQuery);
	</script>

	<script type="text/javascript">
		(function ($) {
			$("#MenuH .menu").BindMENU({ MenuStyle: "DefaultMenu", Orientation: "Horizontal" });
			$("#MenuV .menu").BindMENU({ MenuStyle: "DefaultMenu", Orientation: "Vertical" });
		})(jQuery);
	</script>
	<!-- powered by BIND TUNING 2014 // http://www.bindtuning.com -->


	<script src="themes/TheBootstrapTheme/js/jquery.min.js" type="text/javascript"></script>
	<script src="themes/TheBootstrapTheme/js/orchard-blogs-archives.js" type="text/javascript"></script>
	<script type="text/javascript">window.cookieconsent_options = { theme: 'light-bottom', expiryDays: 365, }</script>
	<script type="text/javascript"
		src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/1.0.10/cookieconsent.min.js"></script>
<!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "a6476a718ee34453b7dd1615f1aec541"}'></script><!-- Cloudflare Pages Analytics --></body>

</html>