finally Microsoft certified, again

Well, it’s just about three months since I committed to taking the exam for Microsoft’s PL-900 certification. Per this post, I got an exam voucher from my company, back in March. At that time, I set a “next week” reminder flag on that email in Outlook, and I’ve just been kicking the reminder to “next week” again every Friday. So finally I decided to just stop putting it off and take the test today. (It helps that it was a quiet day, with nothing else on my calendar.)

I have a few observations about the exam-taking process that I thought I’d share, since I wasn’t at all sure how it was going to work, so maybe this will help someone else who is planning on taking a Microsoft exam.

First, I wasn’t sure if I should go for the at-home option or go to a testing center. I checked Pearson’s site for local testing centers, and there’s one that’s about 10 miles away from here. So not too far, but far enough that I thought I’d try the at-home option instead.

At-home, of course, was not an option the last time I took an exam, back in 2010. I’d heard some worrying things about the requirements for at-home tests, which I wasn’t sure I’d be able to fulfill. They want to minimize cheating, of course, so you have to take photos of your work environment, to show that you don’t have any reference material at hand. My apartment is so cluttered that I wasn’t sure I’d be able to do that. But I managed to clear everything off my kitchen table, and I guess the photos I took were good enough for them.

But to back up a bit, first I had to schedule the exam. I know that there’s supposed to be some human review/monitoring of the exam, so I wasn’t sure if it would be easy to get a spot, but it turned out to be quite easy to schedule the exam for today. If I’d wanted, I could have taken the exam right away. I didn’t want that though, so I scheduled it for 1:45 PM. You need to check in for the exam prior to the start time, and you can do that 30 minutes prior.

After registration, I went through the “pre-flight check” that involved downloading a small program to my computer and verifying that my webcam and microphone worked, and that my internet connectivity was good enough. That was no problem.

After that, I spent some time taking (and failing) the MeasureUp practice exam again. Given that I’ve never successfully passed the practice exam, I really wasn’t sure I’d be able to pass the real one.

So at 1:15 PM, I went ahead and checked in for the exam. That process takes a while, and requires you to go through the webcam and microphone check again. Then it requires you to take some photos on your phone. They need a photo of your face, your ID (front and back), and four photos of your workspace. That all went smoothly enough. There’s no phone app for this; it’s all done through a website, which you can get to through a QR code or a text message link.

Once you’ve done all that, you have to put your phone away, so it’s out of reach, then you get put into a queue to start the test. I’m guessing that a human needs to manually review your photos and OK them. Or maybe it’s all fed into an AI thing, and only manually reviewed if the AI fails. I don’t know. It took a while for me to get out of the queue, and there were a couple of notices about connection issues that worried me a bit. But eventually I got through and the test started.

I kind of thought that there might be some required human interaction before the test, either in chat or onscreen via webcam/mic, but there was none. I just got transferred into the test.

There weren’t any unexpected surprises in the test itself. The questions were all pretty similar to what I’d seen in the practice exams. It took me about 30 minutes out of the 45 allowed to finish. And I got my results onscreen right after the exam.

I passed by a pretty reasonable margin, I think. I guess that result is a combination of (1) taking the real test more seriously than the practice tests, (2) having learned something from my repeated practice test failures, and (3) the practice tests being purposely harder than the real test.

So, post-exam, I went to the MS Learn site and downloaded a little PDF certificate, showing that I passed. I couldn’t initially find a detailed report on my score, but I just went back and checked again, and it’s there, on Pearson’s site. So my actual score was 822, where 700 was passing. Info on the scoring and the reports can be found here. I guess that’s 822 out of 1000, so… good enough.

I guess the next step here is to boast about passing the exam on social media. I think there was something on LinkedIn at one point where you could link your MCP profile to LinkedIn and then post a verified link to show that you’ve actually passed. I’m not sure if that’s still there, or if I’m even remembering that correctly. So I’ll want to look at that. And I kind of remember at one point that if you tagged MS Learning in a tweet about passing an exam, they’d retweet it and congratulate you. So I should see if I can do that. (Though I’m mostly staying off Twitter these days, for obvious reasons…)

I’ve already sent the scoring report to the person at my company that sent me the exam voucher. I guess that having a certain number of certified professionals on staff does something to help us maintain our partner status, or something like that. I know that we keep track of it.

I don’t really get much, personally, out of passing this exam. I’m not looking for a new job, and if I was, it wouldn’t be as a Power Platform guy anyway. And I don’t get a raise or bonus for doing it. But it was kind of fun and interesting to do. It’s been so long since I’ve had to take a test that it felt kind of weird to do it.

On the broader topic of continuing education, I’ve got a lot of stuff going on. This post is getting pretty long, so I’m not going to get into any of that here. Maybe I’ll write up another post over the weekend.

(UPDATE: Since I first published this, I’ve figured out that I can share a certified link to the certification through a site called Credly. So here’s the official link. So now you know I’m not lying about all this.)

Smoke

From NJ.com: Wildfire smoke to cause dangerous air quality, darken skies again today.

Yesterday wasn’t great, but today is really bad. I don’t remember air quality around here ever getting quite this bad. I managed a short walk early this morning, but when I tried a quick walk after lunch, it was too bad and I had to give up and go back inside. (And it’s not perfect inside either.) I’m not sure how much of this is due to air quality, but I’ve had a headache all day today and most of the day yesterday. And I’m getting itchy eyes and a rough throat. I may take a nap this afternoon, if I can get away with it.

I think I’m glad that I’m working from home today, but I’m also wondering if my office building’s HVAC system might be doing a better job of filtering out the bad stuff than my apartment building’s HVAC is doing. It wasn’t bad in the office yesterday, but overall it wasn’t as bad yesterday as it is today. I guess that if it’s really bad again tomorrow, I’ll find out how good the office HVAC system is, since I’m supposed to go in tomorrow.

Memorial Day

Well, it’s Memorial Day again. They started assembling the fencing for the Tour of Somerville at 6 AM this morning. I was already up, though, because I’m an old man and I usually wake up before 6 now, whether I want to or not. It’s been relatively quiet outside so far. I went for a morning walk around 7:30. They were just about done with the fencing by then, and most of the tents and banners and stuff were also up. The “family fun ride” starts at 8 AM, in just a few minutes. I’m surprised they haven’t tested the PA system at all yet. Last year, they were doing that quite early, and it was a bit of an annoyance.

I haven’t decided if I’m going to engage with the race much this year, or just stew in my apartment and try to shut it out, which is pretty much what I did last year. I’m still on my Wheel of Time kick, and I’m well into book three, so I may spend the day reading, and ignore the race. If it gets really crowded outside (and I suspect it will), that’s probably what I’m going to want to do. I’m not as afraid of COVID as I was last year, but I’m still not enthusiastic about getting mixed up in a big crowd. I might try to venture out and buy a race t-shirt, if I can, but I’m guessing the t-shirt stand will probably be on the other side of the street, which will make it hard for me to get to.

I’m actually starting to feel a bit stressed just thinking about crowds right now, so I don’t know… I’d like to get into the spirit of things, but I’m not sure I can. Meanwhile, I’ve got WPRB playing, and the show on right now is called “The Cosmic Mosh,” so that’s fun. A little metal at 8 AM on a holiday is nice…

Getting Deeper into The Wheel of Time

I finished reading The Eye of the World yesterday. I liked it a lot, and got through it fairly quickly, considering the length of the book and how slowly I usually read. Here’s my Goodreads review.  I noticed yesterday that the books has almost half a million ratings and 20,000 reviews, so I’m pretty sure no one is ever going to stumble across mine on the site, so I might as well link it here.

Per my last post on WoT, this series has activated that part of my brain that likes to go down rabbit holes researching a thing, shopping for stuff, and spending more time on that than actually reading the books. But I did finish the first book, so I’m patting myself on the back for that! Meanwhile, Amazon sent me $5 off coupons for most of the series, so I went ahead and bought the Kindle versions of books one through eleven. I find it hard to imagine myself actually reading my way that far into the series, but, well, I’ve got them in my “official” Kindle library now, at least.

I also paid $7.50 for the “Audible narration” add-on for the first book, in case I want to re-read it at some point, in audiobook format. I assumed that would get me the newer Rosamund Pike version, but instead it got me the older Kate Reading and Michael Kramer version. (Which is fine, since that one is also supposed to be pretty good. Though Pike won an Audie for her version, so maybe I should pick up that version too, and listen to them both… You see how quickly I spiral out of control with these things?)

I may start reading the second book, The Great Hunt, today, since it looks to be a quiet Sunday, and I have nothing much else to do. And I’m interested to see where the story goes. As I’ve said before, I expect that I’ll lose interest in this stuff at some point, but I’m not there yet.

As I read the first book, I followed along with the Reading The Wheel of Time blog post series at tor.com. I’ll likely continue that habit with the next book. It’s fun to connect with other people’s opinions and enthusiasm for a series like this, and there’s quite a community around WoT.

And, as usual with these things, I’ve gotten side-tracked on a couple of fiddly little technical things. First, I started reading Eye of the World from the EPUB file that I got from Tor a long time ago (as mentioned in the previous post). But then I bought the “official” Kindle store version, and switched to that, at about the halfway point in the book. That got me thinking about whether or not I could transfer my highlights from the EPUB to the Kindle store version. Short answer: probably not. But I might hook my Kindle up to my PC via USB today and see if I can copy all of the highlights into a text file and then stick them in Evernote, just for yuks. I could go off on a tangent here about a couple of services I found that automate (or semi-automate) pulling your notes & highlights from the Kindle into other systems, but I’m going to avoid going down that hole right now.

Second, I’ve been thinking about better ways to deal with the tor.com blog post series. The first book had twenty posts, usually covering 2 or 3 chapters each. To read them, I was simply keeping a tab open in Firefox on my MacBook, and never closing Firefox. (That’s unusual for me. I always close Firefox when I’m done, and I don’t have it set to reopen previous tabs on launch.) Then, I would just go back and forth from the series page into the individual posts. And I was keeping a note in Drafts to keep track of how far I had to read in the book before reading the next post. So it was a workable system, but a little weird.

For the next book, I was thinking I could open all of the articles, send them all to Instapaper, in a new folder, and then read them from Instapaper, deleting them as I finished them. If I did that, I’d probably read them on my iPad, so I’d be switching back and forth between the Kindle and iPad. Or, there’s an RSS feed on the series page, so I could subscribe to that in my RSS service, The Old Reader, and then read them from Reeder on my iPad. Or, I could put the RSS feed into Calibre and send the articles from there directly to my Kindle. Or… there are a bunch of things I could screw around with here. You see where things start spiraling out of control for me when I go down these rabbit holes… But I guess it keeps me out of trouble, mostly.

getting authentication tokens from MSAL via PowerShell

I have a little PowerShell script that I can use to get tokens from MSAL, for an API project I maintain, and I could have sworn that I’d blogged about it at some point. But I can’t find a post mentioning it. So I guess it’s one of those things I meant to blog about, but never got around to it.

I just rewrote it for a new API project, so I thought I’d blog about that. And since I never actually blogged about the first version, I might as well include that too.

So the first API is an older .NET Framework project. In the Visual Studio solution, I have both the API and a console program that can be used to run some simple tests against it. The console program, of course, uses MSAL.NET to authenticate. (I blogged about that in 2021.) I also like to do little ad-hoc tests of the API with Fiddler, using the Composer tab. But I need to get a bearer token to do that. There are a bunch of ways to do that, but I wanted a simple PowerShell script that I could run at the command line and that would automatically save the token to the clipboard, so I could paste it into Fiddler. I also wanted the PowerShell script to read the client ID and secret (and other parameters) from the same config file that was used for the console program. The script shown below does that, reading parameters from the console program’s app.config file, and pulling the actual client ID and secret from environment variables. (All of this is, of course, to avoid storing secrets in any text files that might get accidentally checked in to source control…)

# get-auth-hdr-0.ps1
# https://gist.github.com/andyhuey/68bade6eceaff64454eaeabae2351552
# Get the auth hdr and send it to the clipboard.
# ajh 2022-08-29: rewrite to use MSAL.PS.
# ajh 2022-11-23: read secret from env vars.

#Requires -Version 5.1
#Requires -Modules @{ ModuleName="MSAL.PS"; ModuleVersion="4.0" }

# force TLS 1.2
$TLS12Protocol = [System.Net.SecurityProtocolType] 'Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $TLS12Protocol

echo $null | clip	# clear the clipboard.

# read the settings file.
$configFilePath = ".\App.config"
[xml]$configXML = Get-Content $configFilePath
$configXML.configuration.appSettings.add | foreach {
	$add = $_
	switch($add.key) {
		"ida:Authority" 		{$authority = $add.value; break}
		"xyz:ServiceResourceId"	{$svcResourceId = $add.value; break}
		"env:ClientId"			{$client_id_var = $add.value; break}
		"env:ClientSecret" 		{$client_secret_var = $add.value; break}
	}
}
if (!$client_id_var -or !$client_secret_var -or !$authority -or !$svcResourceId) {
	Write-Error "One or more settings are missing from $configFilePath."
	return
}

# and the env vars.
$client_id = [Environment]::GetEnvironmentVariable($client_id_var, 'Machine')
$client_secret = [Environment]::GetEnvironmentVariable($client_secret_var, 'Machine')
if (!$client_id -or !$client_secret) {
	Write-Error "One or more env vars are missing."
	return
}

$scope = $svcResourceId + "/.default"
$secSecret = ConvertTo-SecureString $client_secret -AsPlainText -Force

$msalToken = Get-MsalToken -ClientId $client_id -ClientSecret $secSecret -Scope $scope -Authority $authority
$authHdr = $msalToken.CreateAuthorizationHeader()
$fullAuthHdr = "Authorization: $($authHdr)"
$fullAuthHdr | clip
"auth header has been copied to the clipboard."

For my new project, I needed to create a new version of this script, since the new project is in .NET Core, using an appsettings.json file rather than the old XML format app.config file. I’m also now using the Secret Manager to store the client ID and secret.

# get-auth-hdr-1.ps1
# https://gist.github.com/andyhuey/de85972ec0f6268034e5ce46b0278a07
# Get the auth hdr and send it to the clipboard.
# ajh 2023-04-06: new. 

#Requires -Version 7
#Requires -Modules @{ ModuleName="MSAL.PS"; ModuleVersion="4.0" }

# force TLS 1.2
$TLS12Protocol = [System.Net.SecurityProtocolType] 'Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $TLS12Protocol

echo $null | clip	# clear the clipboard.

$secrets = dotnet user-secrets list --json | ConvertFrom-Json
$clientId = $secrets.'AuthConfig:ClientId'
$clientSecret = $secrets.'AuthConfig:ClientSecret'
$secSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force

$appSettings = Get-Content appsettings.json | ConvertFrom-Json
$scope = $appSettings.AuthConfig.ResourceId
$authority = $appSettings.AuthConfig.Instance -f $appSettings.AuthConfig.TenantId

$msalToken = Get-MsalToken -ClientId $clientId -ClientSecret $secSecret -Scope $scope -Authority $authority
$authHdr = $msalToken.CreateAuthorizationHeader()
$fullAuthHdr = "Authorization: $($authHdr)"
$fullAuthHdr | clip
"auth header has been copied to the clipboard."

So this one is calling “dotnet user-secrets list” to get the secrets. And it’s using “ConvertFrom-Json” for both that and the appsecrets.json file.

Both scripts are using MSAL.PS for the MSAL call.

One thing that might not be obvious in the second script is that the “Instance” value is formatted like this: “”https://login.microsoftonline.com/{0}” so we’re using the “-f” string format function to pop the tenant ID into that {0} placeholder. (I took that functionality from an online sample I found somewhere, but I may change that around, since I think it just confuses things.) Also, in the first example, I added “/.default” to the $scope variable in the script, while the new version already has that in the config file.

I’m not sure if any of this will ever be useful to anyone but me, but it seems like something that might help someone else out there on the internet somewhere, at some point.

Wheel of Time

My Pathfinder fixation is on hold for now. I haven’t quite given up on it, but my brother still hasn’t started our campaign up, and I’m a bit tired of reading the rulebook. So now I’m on a Wheel of Time kick. It started out as an offshoot of the Pathfinder kick. You see, I’d read the Pathfinder comics that I had in my collection, and that led me to reading the Wheel of Time comics I had, since both were published by Dynamite and part of the same Humble bundle from a long time ago.

And now I’ve finished reading those, which serve as an adaptation of the first Wheel of Time novel, The Eye of the World. Then, I remembered that Amazon has a Wheel of Time TV show that I hadn’t watched yet. So I watched that.

And then I remembered that I have an ebook for the first novel that tor.com gave away for free some years ago. So now I’m reading that. It’s not a short book, and will likely take me a while to finish.

I also have an ebook of the complete Wheel of Time series, all fifteen books, that I got as part of the Hugo packet from 2014. I’m not sure if it’s morally OK for me to read that now, though. The purpose of it was to let Hugo voters read all the nominated works, and I didn’t get around to reading it then. So, if I want to read it all now, I should probably buy the books.

There’s a Complete Wheel of Time ebook available for the Kindle, but it costs $163, which is more than buying the 15 books separately, so that’s kind of weird. Well, it’s going to take me a while to read the first one, and I don’t know if I’ll really want to keep going, so best not to worry about that until I’ve finished the first book. I think a lot of the ebooks are available from my library, so I can always go that route.

I’ve also been enjoying dipping my feet into some of the nerdery surrounding the Wheel of Time. There’s a ton of stuff at the Tor site about it, including this series from someone who is reading the series for the first time, and this series from a different writer, who did a re-read of all the books. I’ve also listened to a number of episodes from the Dragonmount podcast, which were fun.

I’m not sure why it took me so long to give this series a try. I guess I used to be more of a snob about certain kinds of books, particularly “epic fantasy” books. But I’m kind of OK with this stuff now. I enjoyed the comics and the TV show, and I’m liking what I’ve read of the first book so far.

Speaking of snobbery about epic fantasy, Wired published a profile of Brandon Sanderson recently, and it’s gotten a lot of negative feedback from Sanderson fans. (Sanderson wrote the last few Wheel of Time books, after Robert Jordan died.) I’m not sure how I feel about Sanderson, since I haven’t read anything from him, and don’t know much about him, but the profile makes it seem like he’s a pretty decent, down to earth, guy. (Which seemed to be a problem for the guy who wrote the profile…) Sanderson responded to the kerfuffle on Reddit, and his response reinforces my impression that he’s probably a decent guy. I don’t know if I’ll ever make it far enough into the Wheel of Time series to read that ones that Sanderson co-wrote, but I’m curious.

more on Microsoft certification

Since this post from earlier this month, I asked my boss about whether or not the company would pay for a cert exam for me, and I got back not just a “yes” but an exam voucher code, and a code for a free MeasureUp practice exam! Which is great, but now I guess I have to take the exam.

I just noticed this post in my “on this day” sidebar, with a nice photo of the three giant books I bought to study for the three cert exams I was going to take for ASP.NET certification, back in 2010. I only ever took the first exam, then I got too busy with work to study for and take the other two.

I feel like I’m in a similar situation now, except that I’m not even going to find time to study for and take the first exam. I used the MeasureUp code, and got access to the practice test for PL-900. It seems to be identical to the MeasureUp test that I previously got for free through ESI. I took it again, and got less than 60% on it, which is definitely not a passing grade. If I want to pass, I think I need to study up on some areas I didn’t do well in, which are basically the areas that I’m not interested in and that aren’t relevant to my job right now. But if I want to pass the test, I guess I need to learn them. Sigh.

Get Back to Work

From Tom Tomorrow, via The Nib: Meet the Old Boss. This is from 2021, but I stumbled across it again today, and thought I’d link to it here, just for yuks. I guess the deluge of “work from home” vs. “return to office” articles that I saw in the news back in 2021 and 2022 has mostly died out. I don’t recall seeing much about it lately, but I’ve been thinking about it, since we just hit the three-year mark on the start of the pandemic WFH period.

I’m still on a hybrid schedule, two days in the office and three days from home, and I hope I get to stay that way. Today was a work from home day, and I had no meetings today and no tech support emergencies, so I actually got a lot done! And I can stop working and go straight into cooking dinner right at 5 PM!

See also: work from wherever, from 2022.

 

well-being day

I’ve had a few things on my mind this week that I wanted to blog about, but I just haven’t had the time and/or energy. I think I’ve finally gotten to a point now where I can sit down and ruminate a bit. It’s Saturday, and my chores are all done, and I’m not so tired that I need a nap yet.

Last Sunday was the Somerville St. Patrick’s Day parade. A lot of people came out for it. I watched parts of it out of my window, but I didn’t really pay too much attention. I spent most of the day reading comics and watching TV.

And Monday was my birthday. It was definitely a low-key birthday. I got a lot of “happy birthday” messages on Facebook, as usual, but I didn’t do anything to celebrate. It was a normal work day. I’ve realized that I’m now closer to 60 than 50, which is a bit alarming, but I guess it’s OK.

Friday was St. Patrick’s Day, and I took that day off as a “well-being” day. That’s a new thing we have at work this year. We can take two days off as well-being days. There’s a whole different workflow for requesting a well-being day, vs a regular vacation or sick day, for some reason. We’re supposed to use these days for “mental health” or charity/volunteering work. And we have to select which one we’re using it for. I put down “mental health.” I had some ideas about stuff I could do with the day, but most of those got tossed out the window. I got up late. I walked to the mall, ordered a new pair of glasses at LensCrafters, and walked back. That pretty much killed the morning. All I did in the afternoon was watch TV and take a nap. I guess that qualifies as useful to my mental health.

Ordering new glasses turned out to be surprisingly difficult. For the frames, I just asked LensCrafters to get me the same ones I have now. I’m not sure if we found the exact same frames, but they’re close enough. But the salesperson couldn’t figure out how to order my prescription in those frames. It kept coming back as impossible. Now, my new prescription isn’t that different from my previous one. But I guess it was different enough to cause a problem. So, after nearly an hour of futzing around, involving both the salesperson and an optician, we settled on plastic lenses that are cheaper than the ones we were trying to order, which were the same material as I have now. I’m honestly not sure if they’ll be better or worse than my current glasses, but there’s a 30-day guarantee, so I guess I can return them if they’re no good.

I’ve been getting increasingly frustrated with my vision lately. I guess I’m still not anywhere near the “legally blind” stage, but I’m definitely having some problems. The next thing to tackle is my hearing. I’m overdue for another visit to the audiologist. I last went in March 2021, and should have gone again in March 2022, but never got around to it. So now it’s two years, and I should really get back there, and see about maybe finally getting a hearing aid.

Another topic I wanted to mention in passing is the third anniversary of the start of the pandemic. My company is still letting us work from home three days a week, which is good, but there’s some talk that they might want to get people to come back into the office more often. I’m honestly having some trouble with the current schedule, mostly because I don’t always have enough energy to deal with commuting and working in a cubicle anymore. By the time I get home after a day in the office, I’m often quite exhausted. I’m not sure how I used to commute into the office five days a week. And I’m not sure if something is wrong with me, or if this is just how I’m supposed to feel at 56 years old.

Anyway, at least I appear to have gotten through the last three years without contracting COVID at any point. (Or, if I did, it was post-vaccination and mild enough that I assumed it was a cold.) I’m still masking up at the grocery store. And I still wear a mask at work, but only when I’m moving around the office. I’m one of only a few folks who still do that. I’ve slacked off a lot with regard to masking when I’m going out to pick up take-out food or coffee. I used to wear a mask all the time for that, but now I’ll skip it sometimes, if I know I’m going into a place that won’t be crowded, and where I know I’ll be in and out quickly. I actually haven’t gotten sick in a while, at least by my standards, so that’s good. (I was a bit sick on Presidents Day, so it’s been almost a month. And I wasn’t that sick, then.)

Reading this post back, it sounds a bit bleak. But I didn’t intend it to sound that way, and I’m actually doing pretty good, all things considered. Maybe I should write another post later, talking about all the cool stuff I’ve been reading, listening to, and watching. Oh, and I have another post to write about Microsoft certification, and probably some other tech stuff, so that’ll be more fun than this one.

Microsoft certification

I’ve been trying to learn a lot of new stuff lately, including Power Platform, which I’ve mentioned a few times recently. And I’ve been thinking about taking the certification exam for that, PL-900. My company has access to something called ESI from Microsoft, which used to allow us to take MS exams for free. Well, I guess I waited too long on the PL-900 exam, since they changed ESI so it now only provides a 50% discount. And the ESI site used to allow us to take MeasureUp practice exams, but now it just shows us simpler Microsoft-provided practice tests. I’ve seen some talk about both of these changes on reddit, here and here.

Well, at 50% off, the test is only $50, which I can, of course, afford. Thirty days of access to the MeasureUp practice exam is $99, though they’ve got a 30% off sale going on right now. That might be worth it, but maybe not. I haven’t tried the new Microsoft practice test yet, though it seems to be less full-featured than the MeasureUp one.

Anyway, my last Microsoft cert exam was in 2010. It’s so hard to keep up with all this stuff. I’ve been busy enough this week that I haven’t gotten back to any of my “spare time” learning work. If I really want to take (and pass) that PL-900 exam, I need to brush up on a few things first.