I would guess there are multiple potential pitfalls here. Firstly, not all ebook formats are created equal -- Storyteller only operates on EPUB files, because EPUB is an open source format and it supports Media Overlays (read-aloud) natively. I can only really speak to that format, but there are others (MOBI, PDF, etc).
An EPUB is just a ZIP archive of XML and XHTML files (plus other assets, like images). Partly, I suspect, because of the dearth of actively maintained open source projects in the space, and partly because of the nature of tech in the book publishing industry, EPUB generation software used by authors and publishers often messes up this spec, which means that EPUB readers sometimes need to have fairly complex fallback logic for trying to figure out how to render a book. Also, because EPUBs are ZIP archives, some readers may either unzip the entire book into memory or "explode" it into an unzipped directory on disk, both of which may result in some slowness, especially if the book has lots of large resources. The newest Brandon Sanderson novel, for example, is ~300MB _zipped_.
Additionally, and perhaps more importantly, EPUBs (and I believe MOBIs as well) represent content as XHTML and CSS, which means that readers very often need to use a browser or webview to actually render the book. Precisely how they deliver this content into the webview can have a huge impact on performance; most browser don't love to be told to format entire novels worth of content into text columns, for example.
Do you think the US flip made a meaningful difference (presuming you did it for US customer/investor access)? Lucanet is EU, so maybe it complicated it in the end
It’s a document editing application. A document title might occur in the browser’s titlebar, in the header of the main editor, in a “mention” (a link to the document) - in another document title, or in the text of a document, and in multiple places in the user’s sidebar - like in both their “Favorites” section and in the the contents of their team.
When the user edits the document title, we need to update all those UI bits to render the new title. I have a hard time imagining some imperative code that iterates over all the possible views that may render a title to mutate them. Without binding/data subscription I can’t imagine Notion working at all.
I don't know, but search for "saas vendor due diligence" and you should find a bunch of stuff. Every big corp I've been in the approval seat has a different process so it's not standardized for sure but generally the basic process is the vendor sends out the questionnaire as an excel sheet and provides a box folder or something to dump the evidence in, and then there are a couple of zoom calls to talk through any questions or concerns. There are certification type things like iso 27001 and isae 3402[1] and although they make this process easier because you will rip the bandaid off and take all the pain in one hit I wouldn't recommend a startup go for those right away[2].
[2] Going for them will suck up a lot of energy, focus and time and you can't really tell which ones your clients are going to ask for in what order so there is the danger that you get the priorities wrong which would be a bad mistake in the early stage of a saas startup. So what I would recommend is you read through those and whatever nist guidelines and stuff like that and bear them in mind as you build your product, then start researching who you will get to do your ISAE/ISO27001/SOC1/SOC2 audit when you need one, then when the first client says have you got ISAE3402 (or whichever other one) you say "we're working towards it" (which is true) and as soon as you get off the call with your client call your preferred audit vendor and start the process. "We're working towards it" is an acceptable answer for most big corps because they know the process is slow (iirc it takes a minimum of 6 months for any of those because you have to demonstrate the process over time) and they are slow anyway so they don't mind it taking a minute for you to get it done. Then once you have one, the next time a client asks you for that one you have it, and if they ask you for a different one you say "we have <x> already and are working towards <y>" and rinse and repeat. It's going to be easier this time because you'll be able to repurpose some of the stuff you produced for the first one for the second and so on.
On 'simple to recreate' Evernote making $800,000 per Month:
> This is the biggest mistake most of the people make. If it worked that way, every weekend app released here would be making tons of money...But this is NOT app v/s app game. This is business v/s app. And you can't take down a business with an app. You need to create a business. Sure you can build a better 'app' than Evernote or make a better burger than McD's but you can't make a better business, the day you do - you are in game.
On building one-person startups (both from jasonkester):
> Your $10k MRR niche won't be "app that lets people hail taxis, and network of contract drivers." It'll be "reception table plan designer for wedding coordinators". Google is not now, nor will they ever be, having a meeting where they decide to allocate a few hundred engineers and marketers to crush that space.
There are tens of thousands of niches like this that will pay for teams of 1-3 people to live on the beach after a few years of work.
and
> Personally, I prefer to listen to the person who has tried a thing and declared it possible, rather than the person who has never tried that thing and declared it impossible.
On the risk of choosing Firebase (and similar PAAS providers):
> Way to risky not to use for startups, IMO. What would you prefer, spending half your time doing backend development to get a system that might be 80% as reliable as Firebase on the off chance that your startup will survive long enough for your custom engineered solution to bare fruit, or spending all your time actually building your product and launching quickly so you can determine whether or not your startup is even viable?
I get a whole lot of that (even from my family: my sister told me "So, mom and I were talking in the car, and it's great that you're doing this startup, but honestly I don't think you'll succeed.") When I gave notice today, I had to listen to my boss go on about how I was too young to start a startup (I'm 26), how he spent about 15 years after getting his Ph.D learning about business and working in the industry, how my technical skills were too weak (nevermind that I wrote two of his products, and he's never seen me program in a language other than Java), and how if my idea was any good at all, I'd have been able to secure funding for it (nevermind that we're not interested in outside funding until we have some traction).
I've found that the best response is to sit there, listen carefully, take note of any valid points, and ask followup questions if you need more information on one. You may learn something: despite the overall negativity of the conversation, my boss had many points that I'm going to want to keep in mind as we move forwards.
Understand, there is a lot of self-justification going around when it comes to entrepreneurship. As long as rich people are the distant Bill Gateses and Warren Buffets, people can put them up on a pedestal or say "Oh, they got lucky." But if someone you've grown up with or someone who used to work for you gets rich, you have to ask yourself "Why them and not me? Are they just smarter than me?"
Many smart people will do just about anything to avoid admitting that others are smarter than them, so they instinctively say "Oh, he's just going to fail." And when you succeed, they'll say "Oh, he just got lucky." If you succeed again they'll start saying "The game is rigged!".
But if you stoop to their level and say "Oh, look how smart I am, of course I'm going to succeed," you're just engaging in self-justification yourself. And that's a dangerous mental attitude to get into, because it blinds you to details. The reason you're smart in the first place is because you pick up details that other people don't; you can easily become stupid by believing yourself smart. This comes from experience: I did precisely this in high school and college, and then found that when I actually tried to get something done, the results were much more disappointing than I would've liked.
(Therapy for myself: I think you're smarter than me, I think you will succeed, and I think that if you do succeed, it will be because of skill. But keep what I say in mind anyway. It may be useful.)
Temporal is really neat but I think its marketed at too many use cases.
After a year of high-scale Temporal work, I found it was only good for low-scale work.
The onboarding and learning curve were insanely difficult and complex. Ultimately it doesn't scale as well as you think. The temporal team invented their own database to get around this limitation.
It's funny and hypocritical that a corporation, which used the very terms of the license they now seem to hate in order to come into existence in the first place, is closing that exact path out.
Slightly off-topic: Until last week, we used Redis for Laravel queues and cache in our blogging platform. We decided to get rid of Redis and use the database. The reason was that we are planning to allow self-hosting of our software so removing a dependency is a huge win to reduce complexity (didn't know about the license change then). There are a lot of arguments against using a relational DB for queues, but from our testing, it just worked! So, we just went with it in production. Surprisingly, there are no noticeable performance issues so far.
We initially used Redis because, well, Laravel recommends it. But, what I learned is that Redis is not a requirement until you absolutely need it.
The beef I have here is that Redis also takes credit for community work. Most of the heavy lifting came from antirez, who created and ran the project up until 2020. (It's worth conceding that Redis did compensate antirez). At that time Redis created an open governing board that took over, with a majority of contributions coming from the community during this time (~25% of contributions came from Redis engineers, ~75% from the community, including ~3% that came from me personally). They own the trademark and the repository, so they can do what they want, but I take issue with the optics that this is really AWS or GCPs or some other vendors fault that Redis decided to blind side it's development community. Redis gave some of us a heads up this was happening, but most people are finding out by a blog post that Redis dissolved the previous open-governance (a fact they barely address in the blog post). We had to drop weeks of work on the floor because we could not longer finish it.
* built in document aging and asset maintenance strategies - ideally including a time estimate for billing. A document not worth maintaining is not worth having.
* similarly some sort of automated / well-designed change management component - I changed this codebase / design component / business offering / org chart, what knowledge bases are affected
* and similarly a much more intelligent (and harsh) judger of documentation, Wiki content etc - the human curator today comes back to the room and says, "everything we have is old or sh!t," the KB comes back with "31 pages of results!" Infuriatingly shallow experience.
* graph and Venn diagram representations of viewer/authors and tags/topics, metadata, etc with killer app search and browse capabilities. Eliminate hierarchies, embrace dependencies
Every day this video ages more and more poorly [1].
categories of startups that will be affected by these launches:
- vectorDB startups -> don't need embeddings anymore
- file processing startups -> don't need to process files anymore
- fine tuning startups -> can fine tune directly from the platform now, with GPT4 fine tuning coming
- cost reduction startups -> they literally lowered prices and increased rate limits
- structuring startups -> json mode and GPT4 turbo with better output matching
- vertical ai agent startups -> GPT marketplace
- anthropic/claude -> now GPT-turbo has 128k context window!
That being said, Sam Altman is an incredible founder for being able to have this close a watch on the market. Pretty much any "ai tooling" startup that was created in the past year was affected by this announcement.
For those asking: vectorDB, chunking, retrieval, and RAG are all implemented in a new stateful AI for you! No need to do it yourself anymore. [2]
Exciting times to be a developer!
A quick warning on hetzner. I needed a personal bare metal machine so signed up.
I was travelling and on an IP in a distant land so their sign up asked for secondary verification via PayPal. All passed and now it’s should get a server?
Nope - next day their support emailed telling me they would not approve my account without… no word of a lie here… either 1: a fax of my passport info page or 2: a scan and email containing the same.
I refused reminding them of GDPR and that email is at best opportunistically encrypted and at worst open to interception.
They replied stating they believed they were GDPR compliant because all they do is use the passport to verify the account and delete the document. They also said I could hide anything sensitive other than my name and date of birth!!
I suggested the process is not GDPR compliant as anyone could intercept unencrypted emails and that they should talk to a lawyer if they did not believe my assertion.
Within a short time the server was approved and online. I queried if they would revise their process in light of our interaction. They did not address the question.
My wife is the breadwinner right now, so no missed opportunity from a steady paycheck. It did take me longer to get to this point, though (about three years once I got serious).
I will have spent in the very low 5 digits for lawyers, to comb through my new FOSS licenses ([1], and we're still working on that, so they are not ready yet!) and to set up standard contracts.
Beyond that, less than 5 digits for two beefy computers over that time and longer.
The server keeps the documents in memory when they are open, but it is horizontally scalable by hosting using CloudFlare Durable Objects. (We also plan to support Plane.dev but that's not built out yet).
> 2
The client is based on Yjs, so it's compatible with Yjs' y-indexeddb provider to store in IndexedDB. Tabs synchronize state between each other using a local broadcast channel. The client only synchronizes unsynced state with the server, so if one tab has already pushed the local offline edits to the server, the other tabs can discover that and avoid pushing them. That said, I'm not 100% sure if Yjs deals with the race condition where two tabs wake up at the same time so the server has not yet received offline edits from either, I'd have to check on that.
> I do not expect ANYTHING to come from this project. I do not expect to finish this project. And I do expect that - if nobody will follow me into helping the project - the project will be dead quite soon. I do not expect this project to become the dominant browser that will topple all the big players in the market.
This sounds like Linus' original announcement of Linux on comp.os.minix:
> Hello everybody out there using minix - I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things). I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I'll get something practical within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I won't promise I'll implement them :-) Linus (torvalds [at] kruuna.helsinki.fi) PS. Yes – it's free of any minix code, and it has a multi-threaded fs. It is NOT portable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have :-(. —Linus Torvalds
And if you have foreign keys you implicitly lock the referenced rows.
At scale you have to be very careful with your foreign keys, especially on update heavy tables.
A quick fix could be to skip the update of the count if the row is locked (select for update skip locked or nowait). This will fix the lock issue but you'll lose consistency.
The real fix would be to move these counters to separate tables without foreign keys and to batch the updates with background tasks.
It might also be possible to take a weaker lock for these updates but I'd have to review it in much more detail.
Edit: Another problem is that they apparently have not configured reasonable lock / statement timeouts in their database. There is no good reason to wait for a lock for 30 seconds.
lucaslorentz/caddy-docker-proxy works like Traefik, in that Container metadata labels are added to the reverse proxy configuration which is reloaded upon container events, which you can listen to when you subscribe to a Docker/Podman_v3 socket (which is unfortunately not read only)
So, with Caddy or Traefik, a container label can enable HTTP/3 (QUIC (UDP port 1704)) for just that container.
I still could not accurately identify one of her songs by audio if my life depended on it OR if someone offered me $100 million I'd definitely lose out on that money.
Yet, she is the biggest popstar on the planet.
It's weird, somehow she is everywhere in image and presence but the art she produces eludes me.
On the other hand, there are catchy songs like the Benny Hill theme that I know by heart, yet I could not name the proper name of the song nor who composed it. I just know it as the Benny Hill theme.
We offer a similar experience to Render/Heroku but we do it on dedicated VM instead of a giant cluster with all the customers. So this means full isolation of your workloads. And you can deploy anywhere (112 regions supported and also BYOVM)
We support 17 managed DB (including Postgres of course) and also 233 open source software.
The comments are tied to specific sections, and sit in a sidebar. So you're commenting on a specific section, or even passage of text. It really makes a code-review style flow for content dead easy. If anyone knows of a similar capability in another product, I'd love to hear about it.
An EPUB is just a ZIP archive of XML and XHTML files (plus other assets, like images). Partly, I suspect, because of the dearth of actively maintained open source projects in the space, and partly because of the nature of tech in the book publishing industry, EPUB generation software used by authors and publishers often messes up this spec, which means that EPUB readers sometimes need to have fairly complex fallback logic for trying to figure out how to render a book. Also, because EPUBs are ZIP archives, some readers may either unzip the entire book into memory or "explode" it into an unzipped directory on disk, both of which may result in some slowness, especially if the book has lots of large resources. The newest Brandon Sanderson novel, for example, is ~300MB _zipped_.
Additionally, and perhaps more importantly, EPUBs (and I believe MOBIs as well) represent content as XHTML and CSS, which means that readers very often need to use a browser or webview to actually render the book. Precisely how they deliver this content into the webview can have a huge impact on performance; most browser don't love to be told to format entire novels worth of content into text columns, for example.