Hello πŸ‘‹

I'm @carlcassar on X , Instagram and Github . I make websites and apps. Stick around if you're interested in PHP, Laravel, Javascript, Aws and a whole host of other interesting topics.

Five Useful Apple Shortcuts For Obsidian

3 months ago Sat, Aug 26, 2023

Obsidian is a note-taking powerhouse. Unfortunately, no app can offer every feature. One thing missing from Obsidian for iOS is the ability to add widgets to the home screen. In this article I'll show you how to get that functionality back with Apple Shortcuts.

#Prerequisites

Before I continue, there is some functionality that you may need or want to add to your Obsidian setup via community plugins in order to use these shortcuts.

#1. Advanced URI

Advanced URI by Vinzent is required to add additional URL Schemes to Obsidian. These additional URL schemes will allow you to trigger functionality in Obsidian through links that can be called from outside the app. The documentation lists the following examples:

Here is an example URL scheme:

obsidian://advanced-uri?vault=<your-vault>&workspace=main

#2. Obsidian Homepage

Obsidian Homepage by mirnovov allows you assign a note, canvas or workspace as a "home page". It allows you to configure when and how this homepage note is opened. This plugin isn't really necessary to use the Home shortcut, but it's a good plugin that deserves a mention in this context.

#3. Quick Add

Quick Add by Christian Bager Bach Houmann adds functionality to Obsidian to enable you quickly create notes with a specified template. It is a very powerful plugin that enables you take additional actions such as capturing information and running macros when adding notes. This plugin is required for the Quick Add shortcut.

#4. Obsidian Hotkeys for Templates

Obsidian Hotkeys for Templates, also by Vinzent adds a command to list all your templates. You can then assign a hotkey to bring up this list. This is useful when you want to call a command to insert a template from an Apple Shortcut using Advanced URI.

#Shortcuts

In this section I'll describe five shortcuts that will allow you to control Obsidian from Apple shortcuts on iPhone, iPad and Mac. Feel free to download and modify them to suit your needs.

#1. Home

Download Shortcut

This shortcut will open your Obsidian home note. When you import it into the shortcuts app it will ask you two setup questions:

  1. What is the name of your Vault?
  2. What is the name of your home note?

In reality, you can simply duplicate and rename this shortcut to make it open any note in your Obsidian vault. Don't forget to modify or remove the import question that asks for the name of your home note.

#2. Today (Daily Note)

Download Shortcut

This shortcut will open today's daily note. Additionally, if you have Obsidian Hotkeys for Templates installed, it will also insert the template for your daily note.

When you import this shortcut it will ask you two setup questions:

  1. What is the name of your vault?
  2. What is the path to your Daily Notes? (e.g. Journal/)

#3. Quick Open

Download Shortcut

This shortcut will open Obsidian and then call the command to open the Quick Open palette. You can start typing immediately to quickly open the note you are looking for.

When you import this shortcut it will ask you one setup question:

  1. What is the name of your vault?

#4. Open Note for Date

Download Shortcut

This shortcut lets you open a daily note for any date by letting you choose from a date picker as well as offering shortcuts for Yesterday, Today and Tomorrow.

When you import this shortcut it will ask you two setup questions:

  1. What is the name of your vault?
  2. What is the format date you have chosen for your daily notes?

#5. Quick Add

Download Shortcut

This shortcut will open Obsidian and call the Quick Add command. This will list all of the quick add commands you have configured in the plugin settings.

When you import this shortcut it will ask you one setup question:

  1. What is the name of your vault?

#Customisation

Remember, you are free to copy and modify all of these shortcuts to fit into your Obsidian workflow. It's easy to change the icon, colour and title of each shortcut in the Shortcuts app.

You can also modify the shortcuts to use other urls exposed by the Advanced URI plugin. Get it touch with me on Twitter/X if you have any questions.

#Quick Tips

  • All text entered during import will be URL Encoded so you can just enter the names as they appear in Obsidian.
  • These shortcuts will work on both iOS and MacOS.
  • You can search for these shortcuts in Spotlight or Raycast.
  • You can pin shortcuts to the menu bar on Mac OS.
  • You can modify the shortcuts to accept input and then use them as Quick Actions on iOS.
  • You can add shortcut widgets that will trigger these shortcuts.
  • You can ask Siri to trigger these shortcuts.
  • You can even make new shortcuts to call existing shortcuts.

#Credit

Finally, I'd like to mention the Obsidian community forum, where you can find a thread called iOS Shortcuts - Share your ideas!. My shortcuts are modified versions inspired by shortcuts I found on this forum. Unfortunately, its been some time since I made these shortcuts so I can't credit people individually as I normally do.

Make sure to check the thread out if you are looking for inspiration or ready-made shortcuts that I don't cover in this article.

Thank you for reading this article.

If you've made it this far, you might like to connect with me on 𝕏 where I post similar content and interact with like-minded people. If this article was helpful to you I'd really appreciate it if you would consider buying me a coffee.
Continue Reading

Extracting Wikilinks For Your Markdown Laravel Blog

3 months ago Tue, Aug 22, 2023

I recently rebuilt this site so I could write my articles in Markdown. I'm used to writing in Obsidian and have come to rely heavily on wikilinks. Laravel comes with Markdown baked in. Behind the scenes, it makes use of a package called league/commonmark. Commonmark offers a large list of extensions, but as we will see, none of them work to add Wikilinks functionality.

TL;DR #Create your own wikilinks custom delimiter

#What is a Wikilink?

First things first, let's just do a quick recap. What exactly is a wikilink? Created and used by Wikipedia, wikilinks are a convenient way to link to internal pages.

Say we have an internal article called "Tidying Tips", which it just so happens we do, then the conventional way to link to it would be by using an HTML a tag:

<a href="https://www.carlcassar.com/articles/tidying-tips">
	Tidying Tips
</a>

In Markdown, this can be done by using markdown's link syntax:

[Tidying Tips](https://www.carlcassar.com/articles/tidying-tips)

Now, its not unusual to link to several other internal pages within one article and links tend to be quite cumbersome to type out by hand. All the slashes and w's make it all too easy to make a mistake. Wikilinks were created as a wrapper to make it quick and convenient to link to other internal content. Using our earlier example, the syntax for a wikilink is as follows:

[[Tidying Tips]]

It's as simple as that. You just wrap the title of the page you are linking to in double square brackets, [[ and ]].

Wikilinks come with some additional features. We can change the "looks like" or alt text of the link by adding our preferred text after the title:

[[Tidying Tips|an short article on refactoring]]

Additionally, we can link to an id on the same page by using a # symbol.

[[#Some Heading On The Page]]

#League/Commonmark and Wikilinks

Commonmark is a fantastic package that handles a lot of work when it comes to using markdown in Laravel and PHP. Unfortunately, it does not support Wikilinks and will simply ignore any text wrapped in two square brackets.

Looking down the list of extensions, you will find one called Mentions. The mentions extension allows one to parse mentions like @carlcassar and #2343. Unfortunately, it seems that although it will parse the prefixes @, # and almost anything else that I experimented with, including digits (3...) and random letters (s...), it will ignore square brackets, even when they are escaped correctly in a regular expression.

#Create your own wikilinks custom delimiter

Handily, not all is lost. Commonmark exposes its delimiter processor API.

Delimiter processors allow you to implementΒ delimiter runsΒ the same way the core library implements emphasis.

Using a delimiter processor, we can process text that is encapsulated in between a number of matching symbols, e.g. *example*, {example}, {{example}}.

First, we must add a delimiter processor to the Commonmark Enviroment:

$environment->addDelimiterProcessor(new WikilinksDelimiterProcessor());

Next, we must create the WikilinksDelimiterProcessor which must implement the DelimiterProcessorInterface.

class WikilinksDelimiterProcessor implements DelimiterProcessorInterface  
{
	//
}

In order to satisfy the contract of the Interface, we must implement 5 methods:

public function getOpeningCharacter(): string  
{  
    return '[';  
}  
  
public function getClosingCharacter(): string  
{  
    return ']';  
}  
  
public function getMinLength(): int  
{  
    return 2;  
}  
  
public function getDelimiterUse(DelimiterInterface $opener, DelimiterInterface $closer): int  
{  
    return 2;  
}

public function process(AbstractStringContainer $opener, AbstractStringContainer $closer, int $delimiterUse): void  
{
	// What now?
}

In our case, the opening character is [, the closing character is ] and we require two of each in order to process the literal string contained in our delimiter.

All that's left is to implement the process function which will tell commonmark what to do when it encounters our wikilink.

First, we need to get the literal string from the AbstractStringContainer $opener.

Now this is where it gets a little bit tricky. It seems that commonmark really doesn't like working with double square brackets. In this case, although it correctly identifies the string we are looking for, it fails to remove the second opening bracket and we are left with the literal string [Tidying Tips.

No problem, we can simply remove the bracket ourselves:

private function getLiteralFrom(AbstractStringContainer $opener): Stringable  
{  
    $literal = $opener->next()->getLiteral();  
  
    // Commonmark does not work for double square brackets,  
    // so we will remove a leftover square bracket from    
    // the beginning of the opener literal string.    
    return Str::of($literal)->substr(1);  
}

At this point, we should keep in mind our eventual goal - to replace the text with a link. Commonmark has our back and provides a link node, which requires a url parameter and accepts an optional label and title. With this in mind, lets create a function to get those attributes from the literal:

$attributes = $this->getAttributes(  
    $this->getLiteralFrom($opener)  
);
private function getAttributes(Stringable $literal): Collection  
{  
    $explodedLiteral = $literal->explode('|');  
  
    $wikiTitle = $explodedLiteral[0];  
    $wikiLooksLike = count($explodedLiteral) > 1 ? $explodedLiteral[1] : null;  
  
    return collect([  
        'url' => $this->getUrlFor($wikiTitle),  
        'label' => $wikiLooksLike ?? $wikiTitle,  
        'title' => $wikiLooksLike ?? $wikiTitle,  
    ]);}

Finally, we need to cater for hash links as well as ordinary links:

private function getUrlFor(string $wikiTitle)  
{  
    $slug = Str::of($wikiTitle)->slug();  
  
    return $this->isHashLink($wikiTitle) ? "#$slug" : $slug;  
}  
  
private function isHashLink(string $wikiTitle): bool  
{  
    return Str::of($wikiTitle)->substr(0, 1) == '#';  
}

Here is the final WikilinksDelimiterProcessor class:

<?php  
  
namespace App\Console\Commands\Support;  
  
use Illuminate\Support\Collection;  
use Illuminate\Support\Stringable;  
use League\CommonMark\Delimiter\DelimiterInterface;  
use League\CommonMark\Delimiter\Processor\DelimiterProcessorInterface;  
use League\CommonMark\Extension\CommonMark\Node\Inline\Link;  
use League\CommonMark\Node\Inline\AbstractStringContainer;  
use Str;  
  
class WikilinksDelimiterProcessor implements DelimiterProcessorInterface  
{  
    public function getOpeningCharacter(): string  
    {  
        return '[';  
    }  
    
    public function getClosingCharacter(): string  
    {  
        return ']';  
    }  
    
    public function getMinLength(): int  
    {  
        return 2;  
    }  
    
    public function getDelimiterUse(DelimiterInterface $opener, DelimiterInterface $closer): int  
    {  
        return 2;  
    }  
    
    public function process(AbstractStringContainer $opener, AbstractStringContainer $closer, int $delimiterUse): void  
    {  
        $attributes = $this->getAttributes(  
            $this->getLiteralFrom($opener)  
        );  
        
        $opener->next()->replaceWith(new Link(  
            $attributes->get('url'),  
            $attributes->get('label'),  
            $attributes->get('title')  
        ));    
	}
	  
    private function getLiteralFrom(AbstractStringContainer $opener): Stringable  
    {  
        $literal = $opener->next()->getLiteral();  
  
        // Commonmark does not work for double square brackets,  
		// so we will remove a leftover square bracket from   
		// the beginning of the opener literal string.    
	    return Str::of($literal)->substr(1);  
    }  
    
    private function getAttributes(Stringable $literal): Collection  
    {  
        $explodedLiteral = $literal->explode('|');  
  
        $wikiTitle = $explodedLiteral[0];  
        $wikiLooksLike = count($explodedLiteral) > 1 ? $explodedLiteral[1] : null;  
  
        return collect([  
            'url' => $this->getUrlFor($wikiTitle),  
            'label' => $wikiLooksLike ?? $wikiTitle,  
            'title' => $wikiLooksLike ?? $wikiTitle,  
        ]);    
	}  
        
    private function getUrlFor(string $wikiTitle)  
    {        
	    $slug = Str::of($wikiTitle)->slug();  
  
        return $this->isHashLink($wikiTitle) ? "#$slug" : $slug;  
    }  
    
    private function isHashLink(string $wikiTitle): bool  
    {  
        return Str::of($wikiTitle)->substr(0, 1) == '#';  
    }
}

#Test it out

All being well, I will include a few links using wikilinks syntax and you should be able to click through to each of them.

Thank you for reading this article.

If you've made it this far, you might like to connect with me on 𝕏 where I post similar content and interact with like-minded people. If this article was helpful to you I'd really appreciate it if you would consider buying me a coffee.
Continue Reading

How My Blog Has Evolved Over The Years: A Look Back At The Wayback Machine

3 months ago Sun, Aug 20, 2023

Today I launched a new version of this blog. It got me thinking that I've been at this for a long time and have updated the design and functionality many times. I thought it would be fun to take a look at how this site has changed over time by using the Wayback Machine at archive.org.

When you search for this site on the Wayback Machine, you will see that I've been tinkering on this domain for over thirteen years, since February 16th 2010. I've not been a hundred percent consistent over that whole period, mostly due to work and other commitments, but you can also see that I always come back to it given the chance and that web development and blogging have been my long term passion.

Way Back History

I'm a firm believer that the best way to learn to code is to dream up a project and make it happen one way or another. The second you have a goal, you can start typing questions into Google. How do I do this? How to I get that button where I want it? How do I add a search bar. This has always been part of the motivation for this site. Whenever I want to learn something or try out that new web development fad, I have a platform on which I can tinker. You'd be amazed at how much you can learn by making a personal website and hacking away at it.

The Wayback Machine tells me that it has taken no less than 54 snapshots between February 16, 2010 and May 31, 2023. Now that you know a little bit about the reasons behind why I started and continue to work on carlcassar.com, lets jump right in and take a look at what the site looked like in each iteration over the last decade or so.

Caveat: It seems like Wayback machine hasn't always been able to capture images from the site, so the site might sometimes look incomplete in some of the screenshots.

#2010

2010 carlcassar.com 16th February 2010.

It's 2010. I've been on Twitter for a few months. I know the basics, but learning things at university is not the same as making things in practice. I sound like a cheesy salesman. I can't spell portfolio, and what on earth is going on with that logo?! When you don't know, you don't know, but the important thing is that you can always get better. There's one thing there that I still agree with:

every site should be designed by default ... to be in the best possible position ... on all major search engines.

#2011

2011 carlcassar.com Christmas Day 2011.

Well, what a difference a year makes. Before you shoot it down, remember how much the internet has changed in the last twelve years. Fun, patterned backgrounds were all the rage back then. We still hadn't moved into the minimalist era we now inhabit. Websites were bold and colourful and the only rule was not to make things blink and scroll around.

I'm quite proud that the 2011 version includes a few features that must have taken a lot to learn and implement back then:

  • Feedback and contact forms
  • An image carousel for my portfolio of sites
  • Rounded corners
  • Opaque icons

These things would be trivially easy to implement today, but it's easy to forget that CSS3 was new and not fully supported by all browsers. Meanwhile, Laravel was only released in June of that year.

It seems as though I was still persisting with that horrible logo:

2011 carlcassar.com Logo A fun if confusing and slightly scary logo.

2011 carlcassar.com quote form A quotation form complete with rounded inputs and validation.

#2014

2014 carlcassar.com 16th December 2014.

Fast forward a few years. Despite working full-time, my passion for web design and development was growing. I worked hard to improve my design skills, which did not come naturally to me. I started to get to grips with the fact that software development was not something you learned once. There is always something new to take on, and judging by the banner I put up on the site, I had come to realisation that I love to learn new skills.

2014 carlcassar.com I love to learn I loved to learn in 2014 and I still do in 2023.

And it's a good thing too, because then as now, there is always something new to learn. Over the years, I've become faster at picking up new skills, because knowledge, like many things in life, benefits from a compounding effect. Perhaps, more importantly, I've learned identify the things I don't need to learn (at least not immediately). Other things, like SQL, Vim, Laravel, PHP and Javascript are timeless and have stood the test of time.

2014 carlcassar.com skills There are a 100 tools to learn at any given time, but only some of them stand the test of time.

Finally, I seem to have realised the error of my ways and made a new logo:

2014 carlcassar.com new logo A new, and I'm sure you'll agree, much nicer logo.

2014 also seems to be the first time I mentioned Laravel. I can still remember what a breath of fresh air it was to adopt common conventions and not have to reinvent the wheel on every feature I wanted to add.

2014 carlcassar.com laravel

By this time, I was also trying my hand at freelance development for friends, family and a few brave customers. I started a small company called Versd with what was a pretty modern and intricate design at the time.

2014 carlcassar.com Versd My first web development company: Versd

#2016

By 2016, I'd taken up a full-time full-stack developer job and so it was time to simplify the site and remove any references to freelance work and Versd.

2016 carlcassar.com Simple and elegant - often less is more.

This dark design still feels quite modern and reminds me of the current trend in dark landing pages triggered by the beautiful design of the Linear App. I love the Bokeh effect. Other than that, the 2016 design was pretty simple and completely pared down. I guess that I no longer felt the need to show off every skill on this one site.

Less is more and simplicity is the hardest skill to master.

The site didn't change much at all for another couple of years. My time was occupied by a small gig-economy business I helped to start as well as my full-time job as a Senior Developer and later as Lead Software Developer and Manager.

#2019

2019 carlcassar.com carlcassar.com as a blog

2019 brought a lot of changes for me. It was time to embrace new challenges and maybe start to share one or two tips and tricks that I had picked up over the years. I seem to have started my fascination with TailwindCSS and with various shades of grey. The design is clear and simple, but Wayback machine seems to have had trouble finding any content. Javascript is powerful but it takes some effort to make it accessible.

#2020-2023

2020 carlcassar.com

Lockdown gave me plenty of time to think and work on my site amongst other things. I came up with a new design inspired loosely by tools like Instapaper. I have always loved what the look and feel of blogs that use simple black typography on a white background. I tried to add some colour but I felt that this never worked as well as I hoped it would.

Still, after a couple of redesigns on the backend, I ended up with a very functional site that allowed me to write articles quickly. I added a way to leave comments using Utterances and functionality to search articles on the site.

Over the last two years, I've been busy with another kind of development. I've taken on a large restoration project on a house I bought during Covid. I kept up my software development throughout, experimenting with technologies that were completely new to me such as Swift, SwiftUI and Wolfram Language. I often felt the urge to share and write about things I've learned, but I had painted myself into a bit of a corner. My setup was too complicated and I had added a lot of unnecessary friction between writing and posting a new article. Recently, I decided to do something about it and have carved out the time to make the umpteenth revision to this site.

This time round, I'm practicing a new skill. Deliverability. All too often, as software developers who enjoy our craft, we find ourselves tinkering in the depths of some system or other convinced that we are doing good work. While we all know that this can be fun, we also know we would never get away with it at work and if I want this blog to be as helpful to as many people as possible then I need to focus on making it easy to create and post articles on a whim, whilst the ideas and lessons are still fresh in my mind.

I once read (I wish I could remember where) that the best educational material is written by someone who has just gone through the pain of learning that thing. Often, by the time one has mastered something, one tends to forget about how it felt to not know it. It becomes easy to make assumptions about the ambient level of knowledge that your audience possesses about a given topic. I hope that my latest efforts will prevent me from falling into this trap.

#Today

2023 carlcassar.com

Today, I launch a new design and more importantly a new method of releasing articles onto the site which feels more comfortable to me. I hope to write about the technical details soon, but for now, I hope you will agree that the new design, though simple, offers the functionality that you would expect of a half-decent blog.

I have focused on making articles easy to read and navigate. Updates will come soon to allow you to comment, find related content and bookmark articles that you find useful.

For now, I would really appreciate any feedback you might have. Feel free to get in touch with me on Twitter / X.

Thank you for reading this article.

If you've made it this far, you might like to connect with me on 𝕏 where I post similar content and interact with like-minded people. If this article was helpful to you I'd really appreciate it if you would consider buying me a coffee.
Continue Reading

Different Ways To Pass Data To A Laravel View

1 year ago Mon, Jan 10, 2022

#1. Using a magic method

First up, Laravel uses some PHP magic to make sense of fluent methods. If, for example, you have an array of people in a variable $people, then you can use a magic method withPeople on the view() helper function (or View:: facade) to pass the array to your view. In your blade file, your people array will be available via a $people variable.

Route::get('/', function () {
    $people = ['Bob', 'John', 'Simon'];

    return view('welcome')->withPeople($people);
});

This method makes your code more readable to humans which will minimise the time it takes another developer (or your future self) to make sense of this code. Unfortunately, your IDE will most likely not be able to offer code completion or Intellisense for the withPeople method since it is using magic methods and has not been declared on the Illuminate\View\Factory class.

#2. Using a string parameter

If you liked the readability of the first method, but don't want to deal with IDE warnings, you can pass your array through with a string key that Laravel will use as the name for the variable made available in your view.

For example, if you have a people array, you can pass it to the view by using the with method, passing the string key people as the first argument and the array $people as the second argument.

Route::get('/', function () {
    $people = ['Bob', 'John', 'Simon'];

	return view('welcome')->with('people', $people);
});

This method has a slight limitation in that you are left with a magic string, ie: people that must be kept up to date. Say, for example, that you rename $people to $names using your IDE. It might not be immediately obvious that you need to change the string people to names. For this reason, string values that are used to create variables are often a source of confusion and code drift over time.

#3. Using an array

If you have more than one variable that needs to be passed to the view, then you can pass an array as the second attribute to the view helper method (or View Facade).

Route::get('/', function () {
    $people = ['Bob', 'John', 'Simon'];
    $days = ['Monday' 'Tuesday'];

    return view('welcome', [
	      'people' => $people
	      'days' => $days
	  ];
});

This method can make your code look clean and concise, especially if you inline your variables.

Route::get('/', function () {
    return view('welcome', [
	      'people' => ['Bob', 'John', 'Simon'];
	      'days' => ['Monday' 'Tuesday'];
	  ];
});

As with previous methods, you still have to set a string key for the array. Once again, string keys are often problematic, because they have no inherent meaning in PHP. This means that your editor will not be able to assist you with renaming this key across many locations.

#4. Using the compact method

Finally, we can make use of a function built in to PHP that can automatically create an array containing variables and their values.

If you are not familiar with the compact method, you can read about it in the PHP documentation.

Route::get('/', function () {
    $people = ['Bob', 'John', 'Simon'];
    $days = ['Monday' 'Tuesday'];

    return view('welcome', compact('people', 'days'));
});

This method is useful if you want to pass an array through to the view, but don't want to have to make an array with a key that is the same as the value variable.

// compact('people') === ['people' => $people]

Because compact is a well-defined PHP function, your editor may be able to deduce that the string key refers to a variable name in the same code block. compact can be extremely useful if you have many variables to pass through to a view and don't want to pass them inline.

compact('var1', 'var2', etc...)

#Conclusion

There is no right or wrong way to pass data to a Laravel View. Some people detest magic methods, whilst others dislike string keys. The most important thing is that you choose a method that feels comfortable to you and try to be consistent across your code.

Let me know which method you prefer in the comments.

Thank you for reading this article.

If you've made it this far, you might like to connect with me on 𝕏 where I post similar content and interact with like-minded people. If this article was helpful to you I'd really appreciate it if you would consider buying me a coffee.
Continue Reading

Ten Tips For Mac Beginners

1 year ago Sat, Jan 8, 2022

My sister recently bought herself a new MacBook Air. Getting a new laptop is always exciting, but nothing beats the experience of opening your first Mac. Since she's coming over from Windows, I thought it would be useful for me to write down a few tips and tricks she (and you) might find useful for getting started on a Mac.

#1. How do I get online?

The first job of any modern computer is surely to access the internet. Those cat pictures don't view themselves. If you're reading this you're probably already online but here it goes anyway.

If you haven't aleady connected to WI-FI when going through setup then you'll want to look at the Menu Bar on the top right hand side of your screen. There you'll see a fan shaped icon that you can click on to show you a list of available networks. Choose your local WI-FI from the list, enter your password and you should be online in no time.

Next, you'll need a browser. Just as on an iPhone, the default browser is Safari. You'll find this in your dock if you look for a big compass icon.

Bonus Tip: On a Mac, the option key on the keyboard can often be used to list addition options in a menu. If you hold down the option key and then click on the same WI-FI icon as earlier, you will see a load more advanced options as well as more information about the network you are connected to.

#2. What's a Finder?

This is the app that let's you explore the file system of your machine, other machines on the local network, devices you plug into your machine or other computers on the internet. If you're coming from Windows, you're best thinking of it as something similar to Windows Explorer or File Explorer.

It's worth noting that this is one app you can't quit. You can close it's windows but you can't quit it as it's part of the Operating System and required for other apps. That begs a good question.

#3. How do I quit an app?

Before we get to that, it's a good idea to notice that when you click on an app in the dock, a small dot appears beneath it. That tells you that the app is open.

Now if you come from windows you might be used to pressing the red X button at the top right off any window. On a Mac, things work slightly differently as you might expect. The buttons are on the top left instead, but they don't work in exactly the same way. From right to left you have three buttons:

  • Green - Make the current window full screen (or vice-versa)
  • Yellow - Minimise (Hide) the current window. Notice that it disappears into the dock. Simply click on the dock icon again to maximise that window.
  • Red - Close the current window.

The real catch is in the last button. On a Mac, closing the window does not close the app. This is because many Mac apps allow multiple windows.

So, if you ever want to Quit the whole app, you can either:

  • Click on the name of the app at the top left of your screen and then choose Quit App where App will be replaced by the name of the current application.
  • Right click on the dock icon for the application you want to close and choose Quit.

Wait... you said 'Right Click'.

So I did, which brings us on to our next tip.

#4. How do I right click on a Mac?

When you first get a Mac you'll notice the beatiful trackpad doesn't have any buttons. In face, you can click anywhere on the trackpad to click on an item under your cursor. That doesn't mean you can't right click or bring up additional context menus. To get your trackpad to right click, open your computer's System Preferences. You can do this by clicking on the System Preferences app in the dock or by clicking on the Apple logo at the top left of your screen and then choosing System Preferences.

Now look for the Trackpad option. When you've opened the Trackpad setting, you'll notice that there is a Secondary Click checkbox. Make sure this is ticked and then click on the dropdown menu immediately beneath it. You'll find that you have the following options:

  • Click or tap with two fingers (a very good option if you can get used to it)
  • Click in the bottom right corner (just as you might be used to)
  • Click in the bottom left corner (WHY??)

Cool Fact: Try clicking your trackpad when the Mac is turned off and you'll notice it doesn't actually move! What?! Despite giving off a nice clicky feeling, Apple uses some Haptic Feedback magic to make you feel like the trackpad moved when it didn't. This means there are less moving parts in your trackpad which will make it work better for longer.

#5. I can't find the app I want!

When you first get a Mac, you'll see a lot of apps in the dock at the bottom of the screen. After a while you might find that you can't see all the apps that your mac can run and besides, how could they all fit in the dock (though some people seem to try).

One way to see all the applications on your Mac is open your Finder window and click on Applications in the menu of favourites on the left hand side.

Another option is to make a five finger gesture on the trackpad. This can be a bit tricky till you get used to it, but you need to put all your fingers on the trackpad and then bring your fingers together in a pinching motion. If you've done it right, you'll see all your apps on screen with a search bar where you can filter down to the one you are looking for.

Finally, if you're in a hurry or can't be bothered with all the clicking, press the Command and Space keys together and you will see a search bar appear in the middle of your screen. You can use this search bar to find an Application, but you can also use it to search literally anything on your Mac. This has been one of the best features of a Mac for years and it's called Spotlight. You can also access this search bar by clicking on the search icon in the Menu Bar at the top right of your screen.

#6. What other gestures can I use on the Trackpad?

Over the years, the Mac has gained a lot from the success of iOS on iPhone and iPad. There are countless gestures you can make use of, but it takes some time to get used to them and can be quite tricky to master at the start.

The best way to learn all these gestures is to head back into the Trackpad option in your System Preferences. There you will see that there are actually three tabs, one of which is named, quite helpfully, More Gestures. There you will see that you can configure the gesture you want to use, but even more helpfully, you'll find a little video when you click on each option, that explains how to perform each trackpad gesture.

If you're feeling lazy and can't be bothered with that, you can experiment by yourself. When you've had enough of things randomly scooting off and on your screen, you can also look at this helpful article on Apple's support website that lists all available gestures.

#7. How do I force quit an app?

Despite what you might have heard, even on a Mac, things occasionally go wrong and you might find yourself in a situation where the current application has become unresponsive. Luckily, the Mac operating system tends to keep things under control and one hanging application does not usually freeze the whole machine. If you notice a spinning beach ball icon then your app has probably encountered an issue that requires it to be closed forcefully.

To do this, you can either hold down the option key whilst right clicking on the application icon in the dock. You will then see that the Quit option has changed into a Force Quit option. If you open the menu and toggle the option key, you will notice the option change from Quit to Force Quit and back again.

Another option is to click on the Apple Icon at the top left of the screen and choose the Force Quit... option. You should then see a list of open applications that you can choose to Quit Forcefully.

#8. How do I install a new app?

Good question. Unlike iOS, this can sometimes become a little bit more complicated, but only because developers have more options on how to package and distribute their application.

First things first, just like you might be use to on an iPhone or iPad, the Mac comes with its very own app store. You can open the App Store app as described above or else by clicking on the Apple logo at the top left of your screen and choosing App Store. You'll need your Apple ID handy, even if you choose to download a free app. Things might change in the future, but for now you may soon notice that some apps that you would expect to be in the App Store are missing. That brings us to downloading apps from the internet.

Apps downloaded from the internet will usually end up in your Downloads folder which you can find in the left hand menu of the Finder app. When you click on them (or they open after download), you will find one of two things. If the app requires a complicated setup on your machine then the app will come with an installer that will go ahead and walk you through a number of steps in a Wizard that will ususally guide you through everything you need to do and know. An installer will usually also clean up after itself.

A more typical, but initially confusing scenario is that you will end up with something called a Disk Image in your downloads folder. A disk image is a little bit tricky to understand at first, but you should think about it like a temporary CD that has been inserted into your computer. As such, when you click on it, it is mounted and will need to be ejected when you are finished. Often times, this disk image will mount itself immediately after it is finished downloading. When the disk image is mounted you will see a Finder window with the application in it and perhaps a folder that says Applications. It might be tempting to click on the application there and then and you will infact find that it will open. You should not do this, as you will be confused later on when the application is not in your Applications folder. Instead, you should click and drag the application from the disk image into the applications folder (or the shortcut usually found in the disk image). That way, the self contained application is moved to your applications folder once and for all. After this, you can eject the disk image (remember the cd analogy) by clicking the Eject button next to the name of the disk image which you will find in the left hand menu of the finder window.

#9. Can't I just ask Siri?

If you don't mind talking to your computer, then Siri can be a great way to make your way around a Mac, especially when you are just getting to grips with things. To ask Siri, press the command key and the space bar at the same time, just as though you were going to make a spotlight search. Just hold the keys for a second longer and you will notice a window appear where Siri is asking, "What can I help you with?". Check out Siri's Support Page if you're not sure what to ask. Here are a few things to get you started:

  • Turn the brightness up
  • Turn the volume down
  • Open Finder
  • What's the weather like today?
  • Send Carl a message saying "Thanks for writing this article".
  • Tell me a joke (they're actually quite funny).

#10. Where can I get more help?

That's a lot of information to take in at once. If you're new to a Mac, it will take some time for things to start to feel natural. If you're looking for more help and a wealth of knowledge, there is no better place to start than Apple's Support Site and more specifically, the Mac OS User Guide.

Finally, and this goes to anyone reading this and not just my sister, please feel free to get in touch if you need any help. You can add a comment below or get in touch on Twitter.

Thank you for reading this article.

If you've made it this far, you might like to connect with me on 𝕏 where I post similar content and interact with like-minded people. If this article was helpful to you I'd really appreciate it if you would consider buying me a coffee.
Continue Reading