Ghost 5.0
ghost.org
ghost.org
Link: https://softwareengineeringdaily.com/2018/07/26/ghost-open-s...
Edit: You can search for "Laravel" in the transcript and see an algorithmic attempt at transcribing that part of the conversation: https://softwareengineeringdaily.com/wp-content/uploads/2018...
Here is the transcript: https://softwareengineeringdaily.com/wp-content/uploads/2018...
That said, Ghost succeeded in large part because it was a new and interesting Node thing, and we might never have gotten as far as we have done without that :)
Is there a blog post or retrospective about the things y'all had to invent/adapt/overcome in using NodeJS? Your interview was the topic of much conversation where I worked at the time; we were a C# shop instead of PHP/Node but we were moving into Big Data and there was agitation to adopt every trendy language for the various bits of the pipeline (Scala for Spark; Java for Storm; Python just because) and your comments about using a stack you know well and Dan KcKinley's "Choose Boring Technology" blog post[1] were the touchstones for the "let's not get too trendy with our language/tech choices" camp.
On-Topic: Congrats for the new major release, always exciting to see what the team delivers!
[0] https://careers.ghost.org/product-engineer-node-js/en#block-...
Maybe mine's a poor suggestion but I really do wish you the best, it's hard being in that position.
I coded and made things for a long time before I ever even considered getting a job doing it. So, for me it's always a little bit of a struggle trying to find the right "portfolio" project to attempt to spruce up and point to; but I experiment with showing off different things. But that is why the prompted project here is refreshing to me.
I don't know if I code better than that person, but I am very careful about what goes into version control.
Thank you for your well wishes, one day it will work out for me!
If there is a coding challenge to advance in pursuit of an open position, and it is not paid, and it will take a significant amount of time (e.g. the 10 hours discussed here) then your choices are:
1.) decide yeah, nah, fuck that job and don't do it
2.) do it, but post it to your git[hub | lab | whatever] as open source, and refer them (and possibly, others in the future) to it
3.) whatever else you would do here, it's not as good as the above two ideas
With a high interest opportunity it’s less likely to come up, because those are worth the time to strategically target with custom projects, which works pretty well in my experience.
I don’t mind tech screening or leet code challenges at the right times, but an oversized amount right off the bat seems too inefficient, a ham handed way to connect with good candidates.
tl;dr if they don't give you a reasonably clear spec, walk away.
Edit: the situation is very asymmetric. They can well afford to waste your time, where you is any number of candidates that apply. There's no comeback on them for being wankers. Another example, I applied for a job, told them I could do it even though I didn't have language X, but I sure knew Y. They asked me to prove I knew Y so I wrote a very detailed breakdown showing I had immense knowledge, maybe more than he had. He dismissed 12 hours work with 4 words "you don't have X". Draw your own conclusions.
That coding challenge is nuts!
> A paid trial project of about 20 hours work, where we work with you on a real piece of engineering at Ghost.
I could do it for free but paid is a question mark. As long as they didn't find out I'd be fine lol.
In fact, “humble beginnings” is a link to John O’Nolan’s original post introducing “Project Ghost,” and while that post talks about publishing it never mentions professional once. The entire argument being advanced in that post, in fact, is that WordPress evolved so far from its blogging platform roots that there was space for someone to create a new system that refocused on blogging. Ghost’s original slogan, as seen in that very first linked post, was “Just a blogging platform.”
Ghost 5.0 talks about the work being done in the last few major versions: introducing support for Patreon-esque membership tiers, Substack-esque email newsletters, support for videos, podcasts, and other “diverse types of content.” It now describes itself as “a modern CMS.”
To be clear, I’m not saying there’s anything wrong with that. But to paraphrase Mr. O’Nolan: Ghost, by anyone’s definition, is no longer “just a blogging platform.”
So is there space for someone to create a new system that refocuses on blogging? Maybe. Blogging isn’t exactly seeing a resurgence, but I think it’s seeing renewed interest. Hugo, Jekyll, et. al. aren’t that new system, because they’re very much targeted to, if not developers, the kinds of people who read Hacker News. I know I’d personally love a light blogging engine that wasn’t entirely static, and that did have things like a built-in editor and out-of-the-box support for Micropub (or even Metaweblog) APIs and other “IndieWeb” artifacts.
Ghost is a modern blogging platform after all
There’s a lot to unpack from this paragraph. Good for them.
"But we're a non-profit org with no share capital, making FOSS. So there's nothing to invest in :)"
I completely realize that the copy is largely the same (which you have amazingly good copy), but I think you're confusing the potential buyer by having an Analytics Dashboard as your hero image.
You're not an analytics product. You're a publishing platform making it easy for people to make a livelihood using your platform. As such, the hero image should be about that person and/or publishing ... not about clicks and page views.
- Oh, an editor that's somehow optimized for professional flows. Maybe that's worth learning.
- Nope, wait. This is an analytics product for people with lots of readers. Meh. ...vague privacy concerns...
- Looks like a "call to ask for pricing" model or something.
- I wonder if this supports RSS, or if it'll break my reading flow if it catches on. (Scroll down, see there's no rss icon). Nope. Back button.
Anyway, congrats on the 5.0 release!
(Please take this as constructive criticism, and note that I'm not your target audience!.)
does Ghost still depend on jQuery?
do you consider adding server-side code highlighting?
do you consider supporting other mail options other than Mailgun?
i'd love to start a mailing list with Ghost but those issues keep me from it
otherwise i'm always looking out for Ghost and you've made amazing progress so far over the years!
Back in 2013, Ghost was promoted as just a blogging tool. In contrast, WordPress had become a general publishing tool i.e. a blog, a CMS, an e-commerce store, any type of website (portfolio, news website, etc.) Fast-forward today and Ghost is also a general publishing tool that can do many of the things WordPress does.
How do you see Ghost vs WordPress today? Is it fair to say that Ghost today has become what WordPress is (i.e. a publishing tool covering the same use cases as WordPress)? Or is Ghost's scope more narrow than WordPress?
Ghost's scope has grown significantly relative to Ghost, but - as I outlined in the post in some detail - our target usecase for the platform has remained pretty consistent, and far narrower by comparison.
All that being said: Apps have to evolve with the market, and Ghost is no exception. It's no use making something and then never changing it, because the world around it doesn't stand still.
The Ghost dev team has opted for a strict control over how local installs can be modified, or really, how they can’t. “Ghost Doctor” is more like a cop, and runs a level 3 diagnostic on startup, refusing to run if the engine has been tampered with in a way that the dev team deems unacceptable. And there is no off switch either.
You can’t, for example, modify any of the template data fetching helpers. The only real way to customize the template language is by switching Ghost to a headless mode and praying someone out there built a starter kit that looks good.
And don’t even think about changing the permissions of files within the engine. This especially burnt me when I tried to implement SVG placeholders that get generated on image upload. The suggested solution is to do all asset pipeline modifications via local web servers and shuttle data back and forth.
The last straw was when I wanted to add custom fields to posts. The ruling opinion at the time was to fork the engine, modify the schema, add the new fields to the admin UI, and then modify your custom templates. Just remember that you’ve now opted out of automatic updates and will be maintaining your fork indefinitely.
Believe me, I am sympathetic to why the Ghost devs chose this path. It’s easier to maintain a smaller and more predictable platform. I just couldn't help but feel silly using software with so many arbitrary and artificial restrictions.
how is this different from forking the engine? I'm not super familiar with Ghost's internals, but wouldn't this basically count as a fork anyway? Seems like you either have the option to change the internal engine code, or you don't. I think it makes sense that there aren't a lot of "in-between" options, because that's just asking for unannounced breakage when your "auto-update" system decides to overwrite whatever files you've already messed with, or change the files that are downstream from that one (breaking compatibility)
I gave up on that with the ringing sound in my head that somehow they managed to convince people to buy their blog service when there are many free alternatives out there.
That's the real interesting part about this story. How the f did you manage to get people to buy a commodity for a premium price.
And yes I'm still salty but I now work 100% remote due to the pandemic so that's lessened my hurt.
Edit: Since I'm being misread let me explain, I am saying that I tried and failed to write the same type of thing so hats off to them!
I'm a promoter of Ghost I think they are doing great work. Well done on v5.0!
Ghost provides guarantees that no individual developer (including you) can
they dedicated over 9 years to work on Ghost and built a company around hosting instances to fund the development
Let's try to read that a bit more positively. Their trajectory was incredible impressive and really a little bit a wtf. They managed to create a product in a category everyone thought to be conquered by Wordpress and the Medium-of-the-time SV project, pivoted that from clearly a blog to something clearly more commercial. All while using a programming environment that was pretty obviously the wrong choice for the project plus starting with a severely feature-limited system. And even asking more for hosting than seemed remotely reasonable (unsure that this was true or just an impression back then, current pricing looks reasonable, but that might be a changed perspective).
Having worked on two blog engines at that time I can completely relate to the jealousness, without having applied :)
Huh? Why the personal attack?
I have no idea about me applying to Ghost and being Ghosted ?
> Ghost provides guarantees that no individual developer (including you) can
Where did I say that I was doing this ? If you mean that they provide an SLA and uptime guarantees and such yip and there are many and I mean many alternatives to this that give the same guarantees and always have done for the full course of the 9 years.
> they dedicated over 9 years to work on Ghost and built a company around hosting instances to fund the development
Yes and good on them ! My OP was how much of a miracle this is in software.
Ghost origins were a promise of better blogging (it criticised WordPress for becoming a CMS and then it became a CMS itself).
The starter plan is a bad deal.
To anyone who hasn’t tried ghost and is curious, you really should. I can’t think of many other products as long lived which have consistently improved and stayed true to their goals. Not only that though, it’s actually nice to use.
I got my start in blogging on ghost almost 9 years ago and I’ve tried probably a dozen things. Ghost doesn’t get everything right or do everything the best, it isn’t right for everyone, but it seems the most well rounded to me.
As a dev, it’s your job to tell the client what’s good for them and it sure isn’t this.
The long answer is it's absolutely everywhere in our codebases, with some code relying on catch-predicates, meaning we have to pull it out in exactly the right order else things will break in weird ways... and we haven't gotten around to tackling that yet.
Would love to get some help to get it out though - I raised an issue here: https://github.com/TryGhost/Ghost/issues/14882
do you have a plan to modernise these parts?
Is this genuine ? So If I created a small PR refactoring out a bluebird style promise to native node it would be merged ?
Users of Ghost (whether on Ghost.org, or self hosted) who have set up payments, bring in 10 million dollars a year to themselves, in total.
This part of the copy confused me too.
What percentage of ghost users set up payments at all? I'm guessing it is a tiny fraction, making the ratio of the two numbers meaningless.
(Independently, the two numbers are each a great achievement!)
Same thing for Ghost.
It's pretty reasonable for projects to require a specific language version. Especially in this case as 16 is still the latest LTS version of Node.js.
EDIT: They even say "Ghost can work with other operating systems, node versions, and databases (particularly those supported by Knex) - but as a small team, we only document and support one narrow stack that we know works really well."
Can't really see how you can fault that.
And I would expect a new major release to run on the latest even version of nodejs. The uneven versions are for development purposes. Version 18 will become the active LTS in a few months.
Can you elaborate on the issue you encountered?
Most issues I've seen in the wild related to docker deployments is due to not specifying a version tag on the docker image, which means docker will pull the image with the `latest` tag. Fast forward a few years, when you need to restart the container, and for some reason you pull the `latest` image again (either accidentally or automatically by your container system), the new version is now too far ahead from your previous system and break spectacularly when run with your existing data. Some apps even attempt to migrate the data, but failed and leave the data in corrupted state so you can't go back to the previous version.
Alas, no, I didn't keep detailed notes at the time (2018) because I was too busy trying to recover my blog from the disaster.
> Fast forward a few years [...] the new version is now too far ahead
It was 6 months after the migration to v1 and 5 months before v2 came out.