Shellsharks is a simple hobby project of mine. I primarily write about things that I may want as a reference for myself later but also as a place to share with others or simply to shout into the void. I think having a website or blog is a good way to keep record of things you have learned or to cement-in-time the way you feel about things. In my article on getting into the field of information security I mention the benefits of having a blog with respect to standing out as a job applicant. Perhaps one day shellsharks.com could morph into something more but for now, it is of simple intention and therefore requires simplicity with respect to contributing, maintaining, hosting etc…
I’m not a professional, or even particularly seasoned “blogger”. Shellsharks isn’t even my first attempt at a blog. What I can say from previous attempts to create as well as current efforts maintaining a blog, is that it is easier said than done. You need to think of things to write about, maybe even coming up with a “theme” or content-niche for your site. You need to decide on a hosting provider. You may want/need to do some level of web design. There’s SEO stuff to consider. You need to figure out your blogging toolset (e.g. writing apps, image hosting, etc…). All of this in aggregate can be intimidating (and it was!) at first blush, so many may find they just don’t have enough momentum to really get all of it up and running. This is why a site like Medium may be attractive to some as it takes out some of this initial set-up. You just create an account and start writing. I actually tried Medium but found that I wanted my own piece of digital turf. Enter shellsharks…
Let’s start with hosting. I wanted something as simple as possible. Ideally, I could just take plain Markdown files, put them somewhere and presto! Blog post ready. This is effectively what I was able to achieve with GitHub pages from GitHub. With GitHub pages, you can get up and running relatively quickly. GitHub pages leverages Jekyll, a simple, static-page, blog-aware, ruby-based, site generator. Jekyll is easy enough to get started with but takes a little digging to master in my opinion. Using my pre-existing Shellsharks GitHub account (you can create an account here), I created a separate repository for the blog and I was off and running. I found the following theme, copied it over to my repo and then started making the necessary changes to get ready for my first blog post. I liked this theme because it was simple, clean and had a decent little search widget. There are plenty of other theme options though if you search around for them. Check out this great guide for more specifics in getting started with GitHub pages.
Equipment and Tooling
Alright! So I have my hosting platform and the base part of my site ready to go, all I really need now is to start pushing some content to my github repo and have Jekyll do the work with publishing. I wanted to have a very portable writing setup which meant being able to write and edit content as well as maintain my blog, all from an iPad. I have a first-gen, 11-inch, iPad Pro which works pretty well but I think having the larger 12.9 inch iPad would work better (for those who are interested in replicating my setup). The 11-inch iPad is a little cramped when using two apps side-by-side in the split-view mode which I do often because I am often writing in one window and using a browser or notes app in the second window. Paired with this iPad I have the Smart Keyboard Folio.
On my iPad I need a couple of different tools to do all my blogging “stuff”…
- A markdown-compatible, Dropbox-enabled text-editor with iOS external file provider support.
- A git client which can authenticate-to and work with my GitHub repositories.
- A way to publish and get-links-to images hosted in AWS (in an S3 bucket).
For my text-editor, I settled on 1Writer (1Writer download here). As mentioned earlier, the text-editor I chose needed to have a few different things. Since I want to write primarily in Markdown, it obviously needed to support Markdown editing. I store my draft articles in Dropbox so preferably it could connect to Dropbox so that I can easily edit draft-posts. Finally, since the git-client I chose (described in the next paragraph) exposes its files via an iOS external file provider, the text-editor needed to support connecting to iOS external file providers. This way, I could easily edit live-posts as well as move draft posts into the file provider for subsequent committing.
Working Copy (Working Copy download here) is an awesome, super-powerful git-client that works well with native iOS. It allows you to fully sync any github repo and even exposes the repos via the iOS external file provider internal API which allows other apps to edit local files in these repos.
Sites leveraging GitHub pages have usage limits, notably that they cannot be larger than 1 GB. Static sites with mostly text files are typically pretty small but if you include a lot of media (namely, images) in your articles, you may find that you bump up against this 1 GB limit rather quickly. For this reason, I needed an external image-hosting solution. For this I settled on AWS - putting images in an S3 bucket and making these image objects public. So I needed an easy way to push images to my S3 bucket and subsequently get the unique image url for referencing in my blog post. Oddly enough, there is not that many iOS apps (that I could find) which can authenticate to an AWS account and work with file objects in S3 buckets. FileBrowser Biz however is a “pro” app I found which has this functionality (as well as a TON of other file-related functionality).
The FileBrowser Biz app allows me to create folders and easily upload files to S3 but does not actually expose the link to the file. To get this link, I created an Apple Shortcuts script, chained together with a Python script (executed using the excellent Pythonista iOS app) to pull down the URL of any S3 object. The Python script leverages the boto3 AWS SDK for Python. You can get the shortcuts script here and the Python script via my GitHub.
Ok so now that I’ve walked you through the tooling and equipment I use, let’s go over the actual workflow. It’s actually pretty simple from here…
As I think of ideas, I open 1Writer and add-notes-to or create a new draft post within Dropbox. I’ve connected Dropbox to my 1Writer app so I can easily edit and create files in Dropbox directly from the app.
When I’m ready to start writing the post “for real”, I clone a draft template within 1Writer and put all content in this new Markdown file.
- I’ll typically have Safari open in the split-view pane so that I can quickly do research, reference another article or get a link to another page.
- For any images I want to have in my post, I’ll upload them via the FileBrowser Biz app then use my Shortcuts+Python scripts to get the unique S3 object link. I can reference these directly in my post via Markdown.
- Once I’m ready to publish the article, I’ll switch to the Working Copy app and commit/push the new file or changes to a file. I then give GitHub pages+Jekyll a minute or so to do its magic and Presto! The post is published.
Pretty simple right?! This makes working on and actually publishing content as frictionless as possible for me which is essential to me actually doing it. Maybe it will even inspire you to start your own blog! Feel free to reach out if you have any questions on getting started or how I might be doing something with respect to Shellsharks.