YASP: Hello (Again!)
17 Jan 2021Hi! Welcome to this first episode of YASP. Yes, itās a podcast. I could only really keep talking for 18-ish minutes before I thought I got too boring. I hope you enjoy!
Hi! Welcome to this first episode of YASP. Yes, itās a podcast. I could only really keep talking for 18-ish minutes before I thought I got too boring. I hope you enjoy!
Hello!
As some of you know, I freelance. I was recently tasked with upgrading a self-hosted Ghost instance from 0.11.2 to the latest version (at the time of writing, 3.40.8). As the instance was run on AWS using Bitnami, it was a lot simpler and I didnāt have to fiddle a lot to get the server up and running.
Although I initially thought itād be a simple job, it turned out to be a lot more complex than exporting a backup, copying over images and then configuring a mail server.
First off, thereās no direct upgrade path between Ghost version 0.x and =< 1.x. Youāre unable to upgrade in place, or even export a config file from a pre-1.0 Ghost instance and import it into a fresh one running the latest version. Instead, you need to convert a 0.x config file by importing it into Ghost v1.x, and then export it and import it into Ghost v3.x.
In my case, I imported the config file to a local v1.22.2 instance of Ghost installed using ghost-cli@1.11.0
running on npm
8.17.0 through nvm
. This is incredibly important to note, because it seems like v1.x of Ghost is extremely fiddly to deal with and was never upgraded to handle Node 10. Thank you to the answer here for helping me figure all this out.
nvm install 8.17.0
nvm use 8.17.0
npm i ghost-cli@1.11.0
ghost install 1.22.2 --local
Quick side note: Although a patch was promised, diving into the commit history it seems the next release of
ghost-cli
(1.12.0-beta.0) actually phased out support for v0.x of Ghost.
After setting up, importing and exporting the data from my v1 instance in the Labs tab, I had a file compatible with a newer version of Ghost. After setting up a new Bitnami instance with Ghost, I imported the new config file and set everything up. I also moved the images through scp
into the opt/bitnami/apps/ghost/htdocs/content/images
folder.
Another quick side-note. If you ever get locked out of a Ghost instance, and you have access to the backend, then log into the database. When Ghost uses
mysql
, thebrute
table holds login attempts. Select all the rows in the database, try to log in again, and see which attempt counter increments. Drop that row, and your timeout resets!
I had to import Subscribers (now called Members) separately, after activating and customising the feature under the Labs tab. All that was left was to configure SMTP credentials and Mailgun credentials for Ghost, and set up an SSL certificate, and I was done!
Setting up an SSL certificate was extremely simple, and I had absolutely no problems using the automated tools Bitnami provided. I certainly didnāt have to consult a forum answer from 2017 to help me get around an infinite redirect issue.
At the end of the day, I learnt quite a bit about SQL, Apache and Ghost. It was all an extremely frustrating (yet fun!) experience and I get paid for it!
I know a couple of people who are looking to start their own businesses, and I have a few pieces of advice
Some clients are nice, and others are horrid. I started out working for people who paid me an extremely low wage for work that needed years of experience. Donāt do that to yourself. If someone doesnāt value your time, then please donāt do business with them. Youāll thank me later
Itās the best way to learn something! On this project, I dealt with an SQL server on an AWS instance.
Although I had a bit of experience with EC2, as Iād hosted a Discord bot on it, I had never dealt with Apache and SQL. Iād heard of Ghost, but I never really used it. I dove in head first, and picked up quite a bit from working in the real world on a real project.
Run ideas past your friends. Seriously, though. Bouncing ideas off other people helps you realise how absurd (or genius) your suggestions are. Explaining the problem youāre trying to solve, as well as your approach to it, also helps other people suggest solutions.
Well, in this case, plan twice and code once. Nothing sucks more than abandoning an approach youāre taking to a problem halfway through. I couldāve saved myself a whole lot of time and headache if I read some documentation and figured out that thereās no way to upgrade from Ghost 0.x to 3.x in place. Justā¦ read the docs.
Never be scared to follow your gut, and have a bit of a poke at things. Try to figure out how things work. If you think something might work in some way, take a look and try it out. (Obviously, donāt tinker with anything mission critical, though!)
Look at the results of databases after carrying out certain operations on the front end to see whether your hunches are correct. Try to guess. Although it seems silly, design decisions (also known as ābest practicesā, some of which are just convention) are replicated all over the place, across different pieces of software. Being able to look at something from the outside and take a good guess as to how it works on the inside is an important skill, and this is one way to train it.
Most of them arenāt that scary. Once you get the hang of speaking to one or two, youāll be able to handle anything thatās thrown at you! Itās important to remember that if your clients canāt take the time to speak to you, then theyāre not worth your skills and expertise.
Never be afraid to ask for clarification and always communicate with them. Itās your job. Even if your client doesnāt seem that technical, theyāll most likely appreciate being kept in the loop.
Also, avoid jargon. Even though youāre a software developer and your tradeās in communicating with computers, the art of business is in communicating with people. Most clients notice I use an informal tone of voice. I even sign off (almost all) emails with āCheers!ā instead of a stuffy āYours sincerely,ā because Iām human. The Monzo (yes, the digital bank) style guide is very interesting, and I suggest you give it a read if youāre interested in communicating more clearly with clients.
Letās be honest, communicating clearly also makes it seem like you know what youāre doing (even though you might not).
For projects with formal requirements, youāll obviously need to check in with your clients at large milestones. However, on smaller projects where there are no milestones, itāll be up to you to figure out when to communicate with your client. I recommend you split the project up into steps, and speak to them after youāve completed each. Explain what youāve done so far, what youāve just accomplished, what it means, and what youāll do next and what you need. It really helps.
For this particular project, my client and I exchanged about seventy-two emails in the space of three days. Obviously, nobodyās going to do that normally, but he enjoyed speaking with me and I enjoyed speaking to him.
Keep in touch, and check in on your project and previous clients. Often, when it rains, it pours.
Being nice to people opens so many doors, and provides so many opportunities. Never forget that at the other end of that phone line or email, thereās someone who has to make a decision about whether to continue engaging your services. Having a little courtesy goes a long, long way.
Heya!
I donāt celebrate, but I wish everyone a safe, sound and Merry Christmas. Please do take care of yourselves!
I know youāre expecting updates about my life (even though nobody really cares) and I should have a three week mega-update about Weeks 9, 10 and Holiday Week 1 up soon! Yes, I know I have been a but slow Iāve been hacking away at coursework that Iām behind on. I havenāt forgotten about you guys, though. Thank you to everyone Iāve met, especially Flat E, for being the best company while I navigate this new experience of University.
I thought Iād do something a little special for this week, involving a little bit of reflection. Being at Warwick has allowed me to meet many new people, to learn and to grow. Therefore, the least I can do is write about the things that others may find obvious but that Iām completely oblivious to because Iām special brand of complete idiot. Iāve wrapped it all up in a neat little guide for my reference (and your enjoyment), The Handbook.
(Quick side note: Adam, Iāll start as many series as I damn well please. You canāt stop me!)
Failure is an inevitable part of life. Youāre human. You wonāt succeed at everything. Coping with failure, though, is often difficult.
Even though it seems obvious, I wish someone had told me that failing at something is only a reflection of your ability at a particular time. Failing at a particular task means you didnāt do well in the restrictive window you were assessed in, but it doesnāt necessarily mean youāre bad. It simply means you didnāt do well at that specific thing, under those specific conditions, at that specific time.
We all must prove, and use, our skills at some point. However, failing to prove your skills through a piece of course coursework, or an exam, isnāt necessarily the end of the world. Failing doesnāt mean youāre a failure, but it simply means you need to improve. Be less hard on yourself. That being said, feelings of failure can get especially difficult to handle when compounded with difficult personal circumstances, or impostor syndrome, or bad mental health. Please try to take care of yourself.
I think everyone struggles with this at some point. Hopefully recounting the ways I cope and overcome might be useful for someone.
Speaking to someone, be it a trusted friend, family, a tutor, helps more than you might think. Someone taking their time to listen to me makes me feel valued, and reassured that someone cares, even if itās just in that moment.
Thinking about what Iāve achieved, and even the smallest things that have led up to me being here, is also useful. Reflecting on starting a company, writing software thatās used every single day, getting into University, becoming more sociable, and so much more reminds me that Iām a good person whoās done good things. It also reminds me Iāve overcome failure and navigated fuck-ups in the past.
Obviously, this sort of thing varies from person to person and from situation to situation, and is difficult if you suffer with impostor syndrome. While I sometimes do think I am good at stuff, sometimes I doubt myself heavily. Your results will vary.
Find some sort of baseline to return to. This may be difficult for people who donāt even know what their baseline is, but still. Trying to establish some sort of base point which I put real effort into coming back to is really useful for handling all sorts of emotions.
Do something else for a bit. If the deadlineās passed, then take some time and do something else. Code, cook, do some washing up, clean up, laundry, go out to the park, go shopping. Your life will go on, even though you havenāt done well at this one thing. It really isnāt the end of the world.
Cry. Enough said.
Singing obnoxiously loudly is also incredibly useful for coping with failure and stress. Do it while on the phone, and have someone else suffer with you.
On an end note, please do take care of yourselves mentally, physically and emotionally. Make sure everyone around you is too, because, now more than ever, itās important for us to take care of one another.
Iāve decided to roll these two weeks up into one post, as I havenāt had that great a time and theyāre both quite a blur. I didnāt do too much, I feel like Iām struggling with my mental and physical health, getting accustomed to Coventry and such, and it has been rather difficult. For these past two weeks, I mostly tried to focus on work, although it didnāt turn out so well and I havenāt achieved much.
I tried to hit the ground running on the CS132 lab sheets, but I eventually ended up stalling. I also completely forgot to eat during Week 7 (fun!), and I didnāt attend many lectures or labs during either week. I have been falling behind, although I have a plan to catch up over the Christmas break. Hopefully I can execute it!
Iād like to thank the rest of Flat E, namely Jenny (I love you, Amy! Please, come back.) and Adam (Iāll be getting you those pens soon, mate), for helping me stay sane. Iād also like to thank Codethulu and Jibsack for being some of the best library buddies there are.
If youāre looking for riveting content, I suggest you check out the other blogs from other members of Flat E, including Felix, Katie and Adam.
Iāve got to catch up on some CS132 lectures, complete some coursework, and get myself feeling a little better! Iāll definitely be back next week with the actual content youāve subscribed for.
Also, hereās a photo of Porridge, courtesy of Krystal.
Hiya! Another week, another check-in.
This week wasnāt particularly exciting, but what can I do? I donāt even know why people are interested in this! Iām the most boring person ever! (Well, second most boring. If you want content that really puts you to sleep, check out my friend Adamās blog. Honestly, though, heās brilliant, and you should really check him out.)
This week started off productively, and I hit the ground running after completing and submitting some CS118 problem sheets. Iām trying to get myself together by tackling a module a day, although I can admittedly carried away with commercial work.
I also viewed and engaged with the ASV meeting on Monday evening. The watch party on our Discord server was really enjoyable, and I want to thank everyone for making that an absolute success!
The first order of business on Tuesday was to vote on the five motions put before the student body by the Studentsā Union. As much as I dislike the motions put forward this term, as well as the way the SU functions, I took a moment to vote and I hope you all did too!
As teased last week, Iāll discuss my views on student democracy and a possible platform for student leadership in Sundayās post. Put simply, I believe it is extremely important for students to engage in the student democracy. However, I also believe that the studentsā union should work for students, which is why I chose to abstain from all motions which didnāt directly affect student life at Warwick.
I also tried to hack away at some Professional Skills reading, without much success. My productivity and attention tend to taper off as I make my way further into the week, and I feel I really need to address that. However, Iāve always been an eleventh hour sort of guy (famously completing a two months data science course in the final week, and passing with honours), so I feel like if I work on it constantly, Iāll eventually find an approach that works for me that I can stick to. Iām still nervous about failure, though, as I always am.
I spent Wednesday reviewing my material for my computer organisation and architecture module and getting a start on the coursework, as well as attending maths lectures. Iām honestly terrifyingly behind on the discrete maths, and I donāt know what to do. I also spent today perfecting a script to join lectures from Echo360 into MP4s which can be downloaded onto a device to watch anywhere. Makes my life much, much easier, especially when I donāt have an Internet connection.
On Thursday, I visited Krystalās house to see her (and Porridge, whoās buried themselves in their enclosure!).
She pre-ordered an Xbox Series X delivered, and I thought I might join her to break it in! Plus, everyone needs a little company every now and then. It was nothing but a pleasure to visit her for two days, and Iām sorry I had to head back before the weekend even begun.
Krystal, your sofa is also the comfiest Iāve been on. Thank you for the blanket and the pillow, too!
Friday was pretty eventful. I got a call from my brief favourite tutor (praise be), got to play the next-gen Xbox, got a grade for my coursework and got a (tentative!) job offer.
I played two last generation games on the Xbox, and they are absolutely stunning on an 1080p 240Hz screen. The Talos Principle and Quantum Break are gorgeous and visually rich games, even though theyāre last generation. Theyāve both got amazing storylines and I recommend you check them both out if youāre into narrative games.
Although I really like the Xbox Series X, I donāt think Iām gonna go for a console this generation. I think a Ryzen build (which might be coming soon!) would be much, much better than anything either console has to offer.
I think Microsoft shot themselves in the foot by purchasing so many brilliant studios which produce so many amazing games, as none of them are truly exclusive to Xbox. Theyāre on Windows too, which means I think Iām better off dropping Ā£900 or Ā£1000 to build a PC to play next-gen games, and using it for other things (like video production, ahem) too. I also donāt see the point of Xbox Game Pass, but thatās a story for another time.
I also received a grade of my coursework, which was 78%, and Iām rather happy about that. I expected to get a bit lower, as I havenāt really been keeping up with lectures and Iāve mostly been working off the books and my programming knowledge. The grade was also accompanied by detailed feedback, so I know exactly what I need to improve for the second coursework submission.
I got a tentative job offer working full-time for a start-up in California, which Iām really excited about! Once investment goes through, I should have a position, but weāll see. Nothingās set in stone, but Iāve got my fingers crossed.
I remember I almost walked out on my first interview with them as I was so nervous that I was crashing, bombing and making a fool of myself. Now, Iām on a pitch deck being passed around to investors in the United States. Iām really happy that I can trust my gut, but Iām also scared that things will eventually fall apart because I feel Iām just faking it ātil I make it.
Impostor syndrome, boys. Itās ugly.
Today I mostly spent working, speaking to clients, writing code, issuing invoices, bookkeeping and putting together a plan to tackle my modules over the next week. Absolutely riveting stuff, honestly.
Reactās being a fucking pain, but Iāll figure it out!
I also got the delightful news that Porridge has finally popped out of their hole, so the next time I go to see Krystal, I can also say hello to (and know the sex of) my furry, eight-legged friend!
Iām also considering building a poll bot for Discord which is ad-free and allows custom emoji, and just throwing it up on a GCP instance! If you have any ideas about additional features, please let me know. Iām also considering starting a series where I walk through building an open-source project and detail the how, what and why. I donāt know whether thatād interest anyone.
Iāve also been thinking about whether to take a year in industry, and what I should do. Although I have a few ideas, Iāll have to see what happens! Maybe starting a company was the right thing to do!
For next week, I plan to