I had the excellent fortune of hiking Mount Lady MacDonald in Canmore yesterday, and really can’t believe I hadn’t done this one sooner!
Mount Lady MacDonald is located just NW of Canmore with the trailhead being right at Cougar Creek, so you’ll be looking at a much shorter drive than you would for pretty much anything on the other side of Canmore. Near the top of the mountain there is a (hopefully given its state) disused helipad that can serve as a nice spot to eat your lunch with a great view of Canmore below. Apparently there’s also an abandoned tea house somewhere around this same spot but I didn’t spend any time looking for it. If you go beyond the helipad, you’ll have to ascend a pretty steep scree slope to reach the summit, but the reward is well worth the struggle up. At the top you’ll have an amazing view of the valley and mountain ranges behind Mount Lady MacDonald, as well as even better view of Canmore to your SE.
We started the hike at about half 9, which was early enough to beat the majority of the traffic but not so early as to have the mountain to ourselves. This being said, yesterday was a national holiday so the mountain was almost certainly busier than usual. We reached the summit at about half 12, and spent a bit of time slowly working our way across the ridge itself, but didn’t end up going further than 100m. The ridge isn’t all that wide to begin with and becomes narrower and narrower as you move along it, so needless to say it gets pretty spicy pretty quickly. I wouldn’t attempt it unless you really know what you’re doing.
I would highly recommend this hike, but I have a few suggestions for anyone who is going to make the attempt. Firstly, there’s a lot of altitude gain and not very much shelter from the sun, so you’re gonna want to pick a day that isn’t going to get devilishly hot and make sure you start nice and early. Hiking poles will be very useful, I didn’t bring mine and my knees were really not enjoying the trip back down. Gaiters will also serve you very well on the scree slope before the summit. I found coming down the scree slope much easier than getting up it, it’s deep enough that you can step and slide down without too much bother.
All in all an absolutely fantastic hike!
Old Goat Glacier – Early Spring
Well I made it out to the mountains for my first hike of the season today. We ended up doing Old Goat Glacier, and holy shit was there quite a bit of snow still left up there. No one had attempted the hike since the last snowfall, so we got to break the trail ourselves. Unfortunately, the combination of 4-5 feet of snow and our own lack of snowshoes made the normally quite gentle first half an absolute slog. And as you may or may not be able to tell from the photo, the approach up to the glacier itself looked pretty sketchy avalanche wise, so we didn’t end up making the attempt.
Despite all that, it was a lovely day out! The weather was more or less perfect for it, and of course there’s nothing quite like the incredible stillness and quiet of the mountains in winter and early spring. Having gone out the once, I’m even more excited about hiking through the rest of the season. Some hikes in the same general area I’d love to tackle this year are the Three Sisters Pass Route, Boulder Pass up to The Orphan, and then past Red Ridge to the Sparrowhawk Tarns.
Old Goat Glacier is a really nice hike though, I’d just recommend going a bit later in the season. When it’s not blanketed by snow, the first half or so is this very mellow walk along a creek that eventually leads to great view of a waterfall coming from the glacier. Then, if you so choose, you can climb up a scree slope and work your way up to the glacier itself, which is very cool indeed. It’s a really quiet hike as well, I’ve done it a few times now and very rarely have I had to share.
With decent weather more or less already here, I’m planning to do a hell of a lot of hiking and camping over the spring and summer. Along with this, I’ll be doing a little write up, or review if you’d like, of each new hike I do and posting it in this category. It’s something I’ve always wanted to do but for whatever reason never got around to, but that’s going to change this year.
The tentative plan is to begin with Mount Lady MacDonald sometime next week with more to follow, so stay tuned!
The funniest thing happened while I was out for a run this morning. About midway through Bowness Park I ran past this little kid who was running around on the grass. Now normally this wouldn’t be in any way noteworthy, but soon after I passed him he started running behind me on the path. So there I was having a little chuckle about this fella following me, but his footsteps keep getting closer and closer, and then suddenly blows past me! He pulls ahead maybe 15m or so, and then dials it back to comfortably maintain his lead. This continued for a few minutes, after which he peeled off to return to his parents (presumably), who I then discovered had been watching the entire time and were laughing their asses off.
Nothing like getting showed up by a 7 year old to start off the day.
I’ve written an iOS app in Swift 3 which demonstrates manual, i.e. not-lightweight CoreData migration. Check out the repository!
There are a lot of articles on the internet regarding lightweight CoreData migration, but not much when it comes to manual CoreData migration. This can make the prospect of using CoreData for a non-trivial app somewhat intimidating. In an attempt to remedy this, I’ve written an iOS app in Swift 3 which demonstrates manual CoreData migration in a straightforward way. You can find the repository for the project here!
The app is a simple note app, and includes interfaces to view and modify any notes you create.
The project includes a mapping model implementing each of the following concepts:
- Adding an attribute to an entity
- Replacing an attribute with an entity, and managing it with a to-one relationship
- Changing a to-one relationship into a to-many relationship
Lightweight migration is not covered in this project because it’s well documented elsewhere.
I found hwaxxer’s BookMigration project useful during the writing of this.
Instructions on testing
- Clone the repository
- Checkout one of the earlier tags (v1.0, v1.1, or v1.2)
- Run the CoreDataMigration target, and create some test notes
- Checkout a later tag
- Run the CoreDataMigration target again
And you’ll need to remove the data store if you’re going from a later version to an earlier version.
Things to bear in mind
NSMappingModel.inferredMappingModel(forSourceModel sourceModel: NSManagedObjectModel, destinationModel: NSManagedObjectModel) during an iterative migration process probably won’t work very well, as you need to provide a destination model to the call. Unless you’re doing some fancy parsing of the managed object models in your app bundle, the only destination model you’ll have on hand is the final destination model, and your migration will cease to be iterative. Bottom line is if you’re doing manual migration, create a mapping model for every migration even if it’s for something trivial like adding an attribute to an entity.
- Make sure you don’t modify your managed object models at all after you create a mapping model between them. If you do, the mapping model will cease to apply, and you’ll need to recreate it.
- When specifying a custom entity migration policy in a mapping model, remember the following:
- You need to prefix the policy name with the module name. In this example, policies are prefixed with “CoreDataMigration.”
- Store the source version (or some other identifier) in the mapping model’s user info dictionary if you’re using a that custom policy for multiple migrations. For example, NoteToNotePolicy is used in both v1.1-to-v1.2.xcmappingmodel and v1.2-to-v1.3.xcmappingmodel, so I specify the source version in each mapping model’s user info dictionary.
- Ensure that entity migrations which depend on other entity migrations being complete occur after them. In this example Note migration happens after Image migration.
- While you can set relationships during
createDestinationInstances(...), you need to make sure that you’re not trying to associate a managedObject from the source context to the destination instance. For example, if you’re writing a policy to create a to-one relationship from an attribute, you can set that relationship in
createDestinationInstances(...). However, if you later want to change that to-one relationship to be to-many instead, you’ll have to do it in