Continuous Integration and Continuous Deployment of vulnerabilities.
584 karma · joined October 25, 2010
Continuous Integration and Continuous Deployment of vulnerabilities.
- It would be nice to have a sample book or two featured on the homepage.
- About print-on-demand, where is it printed and shipped from? Perhaps an FAQ page can answer some of these questions.
Surely, when downloading a piece of software from a (quasi?) trusted source, no developer is going to read all the lines of source code before running it. And if that's the case, how is downloading and running an .sh from the same source any different?
The cost of hosting listmonk and Postal SMTP servers (that we scale up momentarily when sending a campaign) on EC2 is peanuts. With proper SPF + DKIM + not sending spam, we haven't had any IP reputation issues.
2. We see ourselves as a group of hackers and not really as a corporate entity. Many projects that come out of our team are largely individual efforts. For instance, I have spend considerable personal time working on listmonk over the last couple of years just because I like it. There is no Zerodha mandate involved. Only projects that have to be branded as Zerodha or involve a lot of multi-dev effort go under the official handle (ref: https://zerodha.tech/projects)
3. listmonk offers a one-click Heroku button (a bunch of simple scripts really), so it should just be a matter of creating deployment scripts for other platforms as well. I have not looked into it personally.
- Tons of active development has happened and listmonk crossed 1.0 this year. 2.0 is on the horizon and there are quite a few listmonk instances in production.
- Our production setup at work now has ~7mn subscribers and listmonk works quite well. No issues with deliverability or IP reputation with our self-hosted EC2/Postal SMTP setup.
- listmonk now supports generic "Messenger" HTTP webhooks to which any message provider can be connected, allowing it to send arbitrary message campaigns like WhatsApp and SMS, not just e-mails.
> though it's probably not the first one would think of
Yep. The model makes sense when you have large databases (for us, it's hundreds of billions of rows in multi-DB Postgres instances) that have to directly serve complex read queries to millions of users pulling reports.
1) When you have users who access arbitrary reports over and over (for us, financial reports that don't change during the day), doing a simple `select *` from the cached report tables per user, where they can be thrown away at any time based on a TTL or other conditions, can be way faster and cheaper than creating and maintaining read replicas of slow-ish multi-TB databases to directly serve large volumes of concurrent queries.
2) Easy traffic control and queuing when you have large volumes of read requests coming through. This can be beneficial to large DBs serving reports to users irrespective of the kind of reports. In addition, when there is big, unexpected surge in user traffic, the reads just get queued and users just have to wait for longer to see the results, but the big databases never get overloaded.
Last year, I switched to ProtonMail (Thunderbird on Linux with their "bridge" client). Works flawlessly, spam classification works well alongside Thunderbird's junk classification, and the mobile app is pretty slick too.
Anecdotal experience being, a local client like Thunderbird (mine still has e-mails from 18+ years ago) + whatever provider via IMAP/POP has been a rock solid setup that has withstood time. It might not be wise to trust any cloud e-mail provider in the long run.
Many of these traits are fundamental, universal, and even philosophical, than is general perceived, and transcend technologies and stacks, and to a large extent, time.
And yet, I think, the above traits can be described as good, and not really mastery in its truest sense, like in other disciplines like music or painting. Software engineering is way too diverse, fragmented, chaotic, and ever changing.
React Native, it was both. Fundamentally, it uses a JS engine that acts as a bridge, and that can be a performance bottleneck depending on the usecase.
With Flutter, we initially had a native Android app and a React Native iOS app. Managing two codebases was obviously painful, and React Native had significant performance issues, and we also struggled with the lack of stable libs, and the breaking changes between releases. Flutter came along and we were able to share 90% of the codebase across Android and iOS apps, and were quite happy with 60FPS rendering of native UI.
The static PIN is a legacy hole that has to be plugged. Coincidentally, we wrote to the regulator about this exact same matter recently. We'll hopefully see a regulatory announcement mandating "real" 2FA for everyone.