Author Archives: Adam M. Anklewicz

Find a Mac’s serial number in Recovery Partition or the macOS installer

I couldn’t find this anywhere, so I thought I’d blog about this. Thanks to the #general channel on the MacAdmins Slack for the help.

To find a serial number for a Mac when booted into the Recovery Partition or the macOS installer, to go Utilities and choose Terminal, type in ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformSerialNumber/{print $4}'

That’s it, it will output the serial number for the computer.

Importing Data to FileMaker 16 via APIs

I’m new to APIs. Have quite a bit of FileMaker experience. I’ve decided to see if I can build a system to track parent-teacher contact. This is a system that once existed for the school in an ASP system that I mocked up and outsourced. It was replaced with Edsby, an LMS system that wasn’t truly designed for this purpose. We were smashing a square peg into a round hole.

My proof of concept for this system involves seeing if I can build something that does three things I’ve never done in FileMaker before.

  1. OAuth login using Google authentication
  2. Sending nightly emails of any records that have changed for those affected
  3. Import data from Managebac’s API

The first step was surprisingly easy. Thanks to a blog post that had the entire process outlined on a simple PDF. Thoroughly detailed post from William Porter of Rucksack Texnology.

Step two is actually step three, but ending the blog post with “I haven’t done this yet” would not be very exciting.

For step three, I got off to a bad start. I did some research and didn’t realize that JSON support was added to FileMaker 16 and was looking at a third-party plug in. That plug in was super-confusing, so I stepped back. At that point I decided to upgrade from FileMaker 15 to 16, as I knew I needed that for the OAuth login.

Now that I had FileMaker 16, I decided to rewatch a Lynda.com video that I had watched months ago, and see if there was anything I missed there. There was, there was a whole section dedicated to JSON. Ready to conquer this task with the built-in functionality of FileMaker 16, I began.

I decided to start with the smallest table, teachers. Obviously there are fewer teachers than students, and fewer students than parents.

Using Terminal.app I was able to get what I needed using this command.

curl --request GET --url https://api.managebac.com/v2/teachers --header 'auth-token: <<AUTHTOKENVALUE>>'

Obviously, I removed the actual authtokenvalue, because I’m not a dum dum.

Open FileMaker, open my working database, create a field in the TeacherContacts table for the temp data dump.

I chose “Insert From URL”
Verify SSL Certificate was selected
Select Entire Contents was selected
URL was https://api.managebac.com/v2/teachers
cURL options was “–request GET –H \’auth-token: <<AUTHTOKENVALUE>>\'”

Everything matched my terminal command, the only problem was I was getting an error saying that “Authorization Failed.” Eventually I realized that my problem was using single quotes around auth-token. I replaced those with a double-quote and it worked perfectly.

cURL options is now “–request GET –H \”auth-token: <<AUTHTOKENVALUE>>\””

Once that was working, I was then able to get rid of the data other than the “teachers” table. Using Insert Calculated Results into the field $jsonTeachers, I used the calculation JSONGetElement ( $json ; "teachers" )

The data needed to be cleaned up a bit, using a new Insert Calculated Results this time it was enter into $jsonTeachersFormatted.JSONFormatElements ( $jsonTeachers )

From there, I needed to create records, and to do that, I needed to know when to stop.

This time I Inserted Calculated Results into the $jsonCount variable. The value was the number of records that was exported from Managebac. ValueCount ( JSONListKeys ( $jsonTeachersFormatted ; "" ) )

The JSON array starts count at 0, so $jsonCount is one more than I need. I began a loop and immediately Set Variable [ $jsonCount ; Value: $jsonCount -1 ]. This would trigger every time the loop began.

I then created a New Record/Request and Set Field [StaffContacts:id ; JSONGetElement ( $jsonTeachersFormatted ; "[" & $jsonCount & "]id" ) . I duplicated that for every field I wanted to import and modified id to the new field name. After all that I had an Exit Loop If [ $jsonCount = 0 ] and closed the loop.

Now I had a script that would pull all the teachers from ManageBac, create a new record for each and bring in the data to FileMaker. Now I just need to get it to update a record if it already exists, rather than creating a new record. We’re getting there.

I spent a long time trying to figure this out and it’s a lot easier than I thought. In the loop, after the decrease of the $jsonCount, I went to find mode, Enter Find Mode [ Pause: Off ] and Set Field [ StaffContacts::id ; JSONGetElement ( $jsonTeachersFormatted ; "[" & $jsonCount & "]id" ) . Needed to Set Error Capture [ On ] and ran the find Perform Find [ ] .

At this, I need to enter the data, either on a new record, or into the existing found record. So:

If [ Get (FoundCount) = 0 ]
     New Record/Request
End If

And I’m done. I win! I just have to do this with all the other tables of data, relate them all and build the actual parent contact part.

Recollection Volume 42 – Gaslight

Recollection is a project to review my record collection. I will listen to an album I own and review it. The album will be chosen randomly by computron 2.0. Today computron chooses…

Album: Gaslight b/w Rimb Nugget
Artist: The Ugly Ducklings
Released: 1967
Format(s) I own it on: 7″

The Ugly Ducklings were a Toronto band and Gaslight was their biggest hit. This has been sitting in my drafts folder for almost a year. I seem to do this, get stuck on a single review and not power through. Well, I’m doing it.

Gaslight is a weird song. It’s about a woman gaslighting the singer. Kinda. I think. Either way, he’s in an unhealthy relationship and needs to leave. Dear Mr. Duckling, get out of there.

Is this song worth your time? Maybe. It’s okay. It’s a decent song, but I would probably only listen to it if it can on shuffle.

As for the B-Side, well, it’s not great. It serves its purpose of being there to be a b-side, but it’s not worth anyone’s time to listen.

I DID IT! I WROTE IT! HOORAY! Now I can move on.

Next time: David Bowie’s Aladdin Sane

 

Men 34.295 (82%) | Women 7.705 (18%)
CD: 24 (57%) | Vinyl: 13 (31%) | Digital: 0 (0%) | 7″: 3 (7%) | Box: 1 (2%)
1960s: 6 (12%) | 1970s: 3 (7%) | 1980s: 1 (2%) | 1990s: 12 (29%) | 2000s: 17 (40%) | 2010s: 3 (7%)
Canada 14.8 (35%) | USA 17.2 (41%) | UK 8 (19%) | NZ 1 (2%) | FR 1 (2%)
Ontario 6 (40%) | Quebec 1 (7%) | Nova Scotia 4 (27%) | New Brunswick 2 (13%) | Manitoba 0 (0%) | British Columbia 1 (7%) | Prince Edward Island 0 (0%)
Saskatchewan 0 (0%) | Alberta 0 (0%) | Newfoundland and Labrador 1 (7%) | Northwest Territories 0 (0%) | Yukon 0 (0%) | Nunavut 0 (0%)

Renewing Let’s Encrypt on a macOS machine running 10.12.6 and Server.app

Last time on Never Had To Fight…

Adam installed a certificate using Let’s Encrypt for a macOS server running 10.12.6 and Server.app. It wasn’t exciting, but it worked. Now, three months later, we need to renew.

It was actually really easy.

Renew the certificates

sudo certbot renew

Transfer the .pem files to desktop

Using the cp command enter these to copy your files.

Replace <<FQDN>> with your FQDN. Replace <<USER>> with your username.

sudo cp /etc/letsencrypt/live/<<FQDN>>/privkey.pem /Users/<<USER>>/Desktop/privkey.pem
sudo cp /etc/letsencrypt/live/<<FQDN>>/fullchain.pem /Users/<<USER>>/Desktop/fullchain.pem

Hooray, now these files are on your desktop.

Install Certs

Open Server.app

Go to Certificates.

Click on the +

Choose Import Certificate Identity…

Drag and drop the two .pem files and BAM

DONE!

via GIPHY

Let’s Encrypt on a macOS machine running 10.12.6 and Server.app

Are you doing your web hosting with Server.app? You’re probably not the biggest fan of it, but it works, so… let’s keep on keeping on. Do you want to have a free SSL certificate from Let’s Encrypt? Well, I found some really bad guides, so this is much better.

*Hat tip to MacAdmins slack for a few key points

Open up your Terminal.app (Go to the Go menu, choose Utilities, double-click on Terminal). This isn’t even a step, you should know this.

Step One – Install Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

At this point, you will be prompted to press RETURN to continue. Press the return key.

It will then start downloading and installing Homebrew.

Install XCode Select

Turns out you need XCode Select installed, too. So I ran this code.

xcode-select --install

That popped up a dialogue box, I said Install.

This install took a few minutes, and then once it was done, I was ready to install certbot.

Install certbot

brew install certbot

That easy? Aye!

Get a Certificate!

We’re almost there. Now to get a certificate from Let’s Encrypt.

sudo certbot certonly

It will prompt you to know what type of server you have. Choose 3: Place files in webroot directory.

It will prompt you to provide the fully qualified domain name (FQDN) for the server. Such as neverhadtofight.com

It will then create some files in a subdirectory called .well-known to confirm you have ownership of this website. Once that’s done it will save the .pem files for you.

Transfer the .pem files to desktop

Using the cp command enter these to copy your files.

Replace <<FQDN>> with your FQDN. Replace <<USER>> with your username.

sudo cp /etc/letsencrypt/live/<<FQDN>>/privkey.pem /Users/<<USER>>/Desktop/privkey.pem
sudo cp /etc/letsencrypt/live/<<FQDN>>/fullchain.pem /Users/<<USER>>/Desktop/fullchain.pem

Hooray, now these files are on your desktop.

Install Certs

Open Server.app

Go to Certificates.

Click on the +

Choose Import Certificate Identity…

Drag and drop the two .pem files and BAM

DONE!

via GIPHY

Recollection Volume 41 – Original Music From The Motion Picture “The Such”

Recollection is a project to review my record collection. I will listen to an album I own and review it. The album will be chosen randomly by computron 2.0. Today computron chooses…

Album: Original Music From The Motion Picture “The Such”
Artist: Elevator Through
Released: 1998
Format(s) I own it on: CD

After the break up of Eric’s Trip, Rick White began some home recordings under the name Elevator To Hell, eventually adding Eric’s Trip drummer Mark Gaudet, and Orange Glass alumnus and White’s then-wife, Tara White. Elevator To Hell eventually became Elevator Through who later became Elevator.

Elevator was one of the best psychedelic bands in Canada during the 1990s and 2000s. This is in no small part due to the fantastic rhythm section provided by Mark Gaudet and Tara White. Gaudet’s drumming style is uniquely his own, he plays with a heavy emphasis on the cymbals. Gaudet doesn’t have a light touch, one of the times I saw Elevator live, Gaudet broke his snare’s skin. The band was performing without any breaks in the music, so the Whites jammed while Gaudet fixed the drum.

Tara White’s bass playing is an attack. She knows where to go to move the song. Her bass playing is melodic where you don’t expect it to be. She’s damn good.

I first heard Elevator Through, specifically “The Pick-Up” on a cassette I received from someone I knew on IRC, the #sloan channel. It took me about 15 years before I finally purchased The Such. I still have this cassette, and the contents of that cassette live in a playlist in iTunes. I have no idea if the tape still plays, but sometimes I still expect it to transition between songs like that cassette, going from Belle & Sebastian’s “A Summer Wasting” to Beck’s “Halo of Gold” rather than the more expected “Seymour Stein.”

The Such is the soundtrack to a film that I only just saw. It’s on Vimeo, embedded below. It’s less a film, and more a long-form music video. There are definite pieces that stand out as being from a soundtrack, including the title track, which starts with wind chimes. I first put this record on for reviewing while lying in bed with the gusts of wind blowing through my open window. The chimes brought me into this record. The chimes return throughout the record.

Highlights

My favourite is “The Pick-Up” which I was my entry to Elevator’s music. It’s also the most melodic of the album. Though my partner referred to it as “that album you’ve been listening to that sounds like Doctor Who.” I think that’s a compliment, Delia Derbyshire’s realization of the original Doctor Who theme is an amazing feat.

“The Wink” comes in a close second. I feel it starts off poorly, but once the song gets going, it delivers.

Lowlights

“The Such” is windchimes. It’s going to go here, as lovely as it was that one time, it won’t be when it comes on randomly in my car.1

“Sleep Experiment No. 3” does nothing for me.

Men 33.295 (81%) | Women 7.705 (19%)
CD: 24 (59%) | Vinyl: 13 (32%) | Digital: 0 (0%) | 7″: 2 (5%) | Box: 1 (2%)
1960s: 5 (12%) | 1970s: 3 (7%) | 1980s: 1 (2%) | 1990s: 12 (29%) | 2000s: 17 (41%) | 2010s: 3 (7%)
Canada 13.8 (34%) | USA 17.2 (42%) | UK 8 (20%) | NZ 1 (2%) | FR 1 (2%)
Ontario 5 (36%) | Quebec 1 (7%) | Nova Scotia 4 (29%) | New Brunswick 2 (14%) | Manitoba 0 (0%) | British Columbia 1 (7%) | Prince Edward Island 0 (0%)
Saskatchewan 0 (0%) | Alberta 0 (0%) | Newfoundland and Labrador 1 (7%) | Northwest Territories 0 (0%) | Yukon 0 (0%) | Nunavut 0 (0%)
  1. Fun Story Time™: I have a two room setup with Sonos, was in my bedroom as I was finishing up this article. Pressed play, had two people in my living room yelling, “ADAM! What’s going on?” Apparently I was playing the wind chimes in the wrong room. I forgot about the footnotes part of my blog, I used to have fun with that, I should bring them back. []

Recollection Volume 40 – On The Beach

Recollection is a project to review my record collection. I will listen to an album I own and review it. The album will be chosen randomly by computron. Today computron chooses…

Album: On The Beach
Artist: Neil Young
Released: 1974
Format(s) I own it on: CD

On_the_Beach_-_Neil_YoungThis is the final selection by Computron 1.0. It was a FileMaker database, that somehow went missing. I don’t know where the file ended up. As I unpacked from my move, I recreated Computron as a Google Sheet. The next entry will be generated from that.

I haven’t been able to put down On The Beach, it’s one of Neil Young’s best records. I’ve had this record on loop since I finished writing the Another Side edition of Recollection.

Contributions from Ben Keith, Graham Nash, David Crosby, Levon Helm, Rick Danko and many more make this one an all-star lineup for a bit of a strange record.

Neil Young is no stranger to strange, and this won’t be his furthest departure, but this, his fifth record, is the beginning, or perhaps the end of the classic Neil Young. Depends on your perspective. He had his self-titled record under his belt, Everybody Knows This Is Nowhere (his first with Crazy Horse), and the brilliant After The Gold Rush and Harvest. Young would spend the rest of the decade creating with a quality of valleys and peaks. However, On The Beach is as much a child of Harvest as it’s the parent of Tonight’s The Night. This record is unique in its own right.

But is it good? Hell yes.

Highlights

The opening two tracks, “Walk On” and “See The Sky ABout To Rain” are amongst the best of Young’s output. I would put those on any best of compiled for Young’s career. When the original line up of The Byrds reunited they took the spots usually reserved for Dylan covers and provided them to Young and Joni Mitchell. They performed “Cowgirl In The Sand” and “See The Sky About To Rain.” While the former isn’t much to write home about, Gene Clark’s vocals on “See The Sky About To Rain” are divine. It doesn’t compare to the Neil Young original, which in turn doesn’t compare to the version on his Massey Hall album.

Lowlights

It’s hard to pick a lowlight, as the record is solid. There’s nothing I would remove, but I think “Vampire Blues” would be my least favourite.

Men 32.625 (82%) | Women 7.375 (18%)
CD: 24 (60%) | Vinyl: 13 (33%) | Digital: 0 (0%) | 7″: 2 (5%) | Box: 1 (3%)
1960s: 5 (13%) | 1970s: 3 (8%) | 1980s: 1 (3%) | 1990s: 11 (28%) | 2000s: 17 (43%) | 2010s: 3 (8%)
Canada 12.8 (32%) | USA 17.2 (43%) | UK 8 (20%) | NZ 1 (3%) | FR 1 (3%)
Ontario 5 (38%) | Quebec 1 (8%) | Nova Scotia 4 (31%) | New Brunswick 1 (8%) | Manitoba 0 (0%) | British Columbia 1 (8%) | Prince Edward Island 0 (0%)
Saskatchewan 0 (0%) | Alberta 0 (0%) | Newfoundland and Labrador 1 (8%) | Northwest Territories 0 (0%) | Yukon 0 (0%) | Nunavut 0 (0%)

Recollection Volume 39 – Another Side Of Bob Dylan

Recollection is a project to review my record collection. I will listen to an album I own and review it. The album will be chosen randomly by computron. Today computron chooses…

Album: Another Side Of Bob Dylan
Artist: Bob Dylan
Released: 1964
Format(s) I own it on: CD/Vinyl

Bob_Dylan_-_Another_Side_of_Bob_Dylan

I was excited for this one. I don’t listen to Bob Dylan much these days, but still like his music. Back in the high school days, this was one of my favourites. Something changed. I don’t know exactly what it was, but here I am, nearly three years after having started this post, and I’m only just getting back to it. It didn’t help that the FileMaker database I had catalogued everything in has gone missing.

I had so much problems with this record, because I used to love it, but now I don’t love it, and I don’t dislike it. There’s definitely some cringe moments on this records. I’m often listening and unsure about so much of the record.

Like the title suggests, this record is meant to show Bob Dylan in a new light. He’s no longer the protester, he’s singing love songs.

At times, Dylan’s lyricism can be generously described at pedestrian, but other times, we see the genius that everyone seems to always talk about.

Highlights

“Chimes of Freedom” is a song I loved from this album during my teenage years, and still do.

His nasal voice pouring out “Ballad in Plain D” might be one of Dylan’s greatest accomplishments. The song is so perfect, I cannot imagine any cover ever doing it justice.

Lowlights

I hate “Motorpsycho Nitemare” and “Black Crow Blues.”

Men 31.625 (81%) | Women 7.375 (19%)
CD: 23 (59%) | Vinyl: 13 (33%) | Digital: 0 (0%) | 7″: 2 (5%) | Box: 1 (3%)
1960s: 5 (13%) | 1970s: 2 (5%) | 1980s: 1 (3%) | 1990s: 11 (28%) | 2000s: 17 (44%) | 2010s: 3 (8%)
Canada 11.8 (30%) | USA 17.2 (44%) | UK 8 (21%) | NZ 1 (3%) | FR 1 (3%)
Ontario 4 (33%) | Quebec 1 (8%) | Nova Scotia 4 (33%) | New Brunswick 1 (8%) | Manitoba 0 (0%) | British Columbia 1 (8%) | Prince Edward Island 0 (0%)
Saskatchewan 0 (0%) | Alberta 0 (0%) | Newfoundland and Labrador 1 (8%) | Northwest Territories 0 (0%) | Yukon 0 (0%) | Nunavut 0 (0%)

macOS Sierra Beta

Apple has been seeding developer previews of macOS Sierra (10.12) since the Worldwide Developer Conference in June. I installed developer preview 6 and have been using that and version 7 since their release. Fortunately, everything seems to be running quite well.

One of the features of 10.12 is Siri on your Mac. The one thing I use Siri for the most is the clock functions. Timers and alarms. I tried setting a timer on my Mac using Siri, and there’s no functionality for that in 10.12.

Perhaps Apple will add this functionality. In the mean time we are seeing SiriKit being made available to iOS developers in iOS 10, so perhaps we’ll see something similar in macOS 10.13.

Siri on macOS

Standing Desk

At my work, I have a motorized standing desk. I was looking for apps that would remind me to stand and sit at regular intervals. In the long run, I want an app that conditions me, so it starts at standing for an hour a day for a week, then two hours a day for a week, and so on and so forth. I can’t find that app. Instead I made a quick AppleScript that will prompt me to change position every 45 minutes.


set answer to ""

repeat while answer ≠ "Quit"
set answer to the button returned of (display dialog "Please rise." buttons {"Quit", "Okay"} default button 2)
log answer

if answer = "Okay" then
delay 2700

else if answer is equal to "Quit" then
tell me to quit
end if

set answer to the button returned of (display dialog "Please be seated." buttons {"Quit", "Okay"} default button 2)

if answer is equal to "Okay" then
delay 2700
else if answer is equal to "Quit" then
tell me to quit
end if
end repeat

It’s been a long time since I’ve done any AppleScripting. I forgot how human it is. I expected not equal to to be !=, when it’s just the not equal to sign (≠). I expected else if to be elseif.

I’ve thrown it up on my GitHub repo, you can find that here. A compiled version can be found here.