In any case, thanks for sharing.
683 karma · joined January 29, 2017
In any case, thanks for sharing.
I have also helped to remove K8s from companies that were experiencing painful points with it, these companies are know very happy with plain-old VMs where their apps just work with minimal maintenance.
I personally choose simple deployment scripts for static webapps, this example works like a charm and runs in under 10 seconds:
- `npm run build && scp page.zip webserver:~/ && ssh webserver "unzip -o page.zip -d /var/www/html/"`
In other more complex projects, I tend to go with ansible, I have 5 year old scripts that still work, I do a few tweaks per year.
A customer uses a similar approach with shell scripts executed as CI/CD by AWS CodePipeline.
Related to the tech stack, nginx is my favorite reverse proxy, I know, everyone talks about Caddy but having used nginx for years, I rarely hit anything I don't know how to handle, and, the community has already posted answers for most common nginx use cases.
I remember when I had to run this for the first time, I faced a few challenges, for example:
- I usually don't care about optimizing the db schema because postgres can handle most projects without much effort, this wasn't the case anymore, there were indexes that I had to drop because these were causing inserts to become considerably slower and they took a few GB to store them.
- Column types started to matter, I had some columns that were stored as hex-strings but I ended up switching to BYTEA to save some space.
- The reads were slow until I updated the postgres settings, postgres default settings are very conservative and while they can work for many projects, those won't work when you have TB of data.
- While this isn't database specific, offset-pagination does not work anymore and I switched all of these queries to scroll-based pagination.
- Applying database migrations isn't trivial anymore because the some operations could lock the database for hours, for example, updating a column type from TEXT to BYTEA isn't an option if you want to avoid many hours of downtime, instead, you have to create a new column and migrate the rows in the background, once the migration is ready, drop the old column.
Overall, it was a fun journey that required many tries to get a decent performance. There are some other details to consider but it's been a few years since I did this.
Scala-cli has many similarities with Cargo (from Rust), in the sense that many of the commonly used tools are already packaged with it, like compile/format/package/etc.
Not only that, the startup time is fast, the CI runtime is impressive (~1m).
For people willing to try Scala (or give it another try), scala-cli is worth a shot.
Thanks.
We are a small development company based on Chicago/Mexico, our customers usually get to us due to emergencies, missed deadline, product with happy path broken, broken infrastructure, etc. - We got available because we just delivered a project in less than a month but the estimate was to ship it in 3 months -
We are generalists and shine with small companies because we can do backend/frontend/infrastructure.
We guarantee client satisfaction (check our testimonials) and work closely with customers to meet their goals.
We started working remotely before the pandemic, and, we can adapt to many timezones, we have had customers from the US, Europe, Australia, Japan.
Overall, we are specialized in the JVM (Scala, Java, Kotlin), we also have experience in JavaScript/TypeScript/Ruby + other languages.
There is a button in our page to start a call with me: https://wiringbits.net
P.S. This is my profile: https://github.com/AlexITC
For example, I have worked with teams who have lots of hardcoded details that prevent the app to work in multiple environments.
This is a very good point I haven't considered, I just updated the FAQ.
> I would like to hear some technical details about the environment that each temporal app version gets deployed to. Like, is it a normal VM I can remote into? Docker containers? Something fancy like Firecracker micro-VMs? > You might not want to make all of those details public, but I need a bit more of an understanding of how a product works to consider using it.
I believe the landing page isn't the right place to share these, I'm working on adding a blog where these details would be explained.
To summarize, every customer gets its own powerful VM where all previews will run, previously, ssh-ing into the VM is doable but it hasn't been required since we started exporting the application logs.
Each preview is being executed as a systemd service with nginx in front to handle TLS.
If you are interested to know any particular detail, feel free to ask.
Thanks.
Building everything from source can take a while for some projects, for example, Scala/Rust. In our case, most of the projects we have integrated depend on Scala.
Other than that, CodePreview also provisions dependencies (databases, etc), generates SSL certificates + some other steps.
I have personally done some experiments to reduce these times and getting these down to less than 3 minutes seems doable, I have drafted a blog post explaining this. For simpler projects, it's easy to get the execution time to 1 minute.
> You could spin up a VM and copy a binary over to it much faster than that.
Copying the binary is one of the fastest steps.
There are projects take take less time,
> I'd love to see more tooling in this space (most people don't need Docker!) but I didn't get a sense of what CodePreview is actually doing from the homepage.
Is there anything more specific you can share? This is the 3rd time we work on polishing the landing page to make our purpose clear, it seems we are not there yet.
In short, Codepreview reacts to commits on Pull Requests, executing a pipeline that builds and deploys a temporal app version (using a new sub-domain specific to each PR), this way, you can preview the how the app looks like and how it behaves without pulling the code yourself, it has turned out to be very helpful for demos.
Thanks for your feedback.
You have reminded about a comparison chart we are drafted but never published.
1. Netlify/Vercel handle production deployments while codepreview does not.
2. Netlify/Vercel have many more features than codepreview, still, codepreview is more flexible in what it can, do you want to pre-create users for each preview? no problem, do you SQS queues? you can get those, etc.
3. Vercel/Netlify are mostly about frontend previews (tied to js) while codepreview handles fullstack previews, in our demo, we showcase a web app preview built with Scala/Scala.js/Postgres, other stacks are supported too (like Java-based ones).
4. Vercel/Netlify charge per user while codepreview charges a fixed fee for all your users.
This is an interesting question, the codepreview integration can operate without a backend, in fact, some existing integrations work this way.
Still, a backend helps to:
1. Distribute the necessary settings/scripts to create a preview, this is now handled by a plain-old (password-protected) file server.
2. Allow users to manage their projects, for example, set variables/secrets, configure a custom domain, etc.
> how is it different from other companies
The main difference is that we did not go to the K8s way, which help us to easily integrate projects without asking our customers to adapt their project to us.
Besides that, there are no bots behind our contact pages, so far, we have a very close relationship with our customers.
> like Retool, Zeet, etc.
I wasn't aware about these tools, still, they seem to be tools for creating applications while codepreview allows generating previews for existing applications.
Hi hn, I'm excited to share https://codepreview.io with al of you, a project we have been working on since last year. After getting a few customers providing very nice comments, I finally feel brave enough to share this to the public.
CodePreview's main goal is to provide preview environments to web applications that haven't got into the K8s/containers path. In our Software Develipment company, we mainly work with small to mid-size businesses where K8s/containers are rare.
Becoming a unicor is not our goal, instead, we aim to get enough revenue to fund a team to maintain and keep improving the project. This is why we don't have any investors, we funded CodePreview's developemt through the revenue generated from our Software Development company.
There are many competitors that offer preview environments for K8s/Containerized projects, some of them even offer help to migrate to K8s/Containers, we are different in this sense because we adapt to the project instead of asking the project to adapt to us.
While we are still in an early stage, CodePreview has been usable for several months with no critical bugs reported, on the contrary, CodePreview has proven to be very useful for these cases with our customers:
1. A company where CodePreview exposes only the backend-api, allowing the frontend team to get experimental features integrated even though the frontend team does not have access to the backend code, normally, the company would have required to provide a brand-new environment which will be maintained by them, CodePreview has been working great for this use case.
2. Another company used CodePreview for a early stage project where founders are frequently running experiments, CodePreview has allowed them to compare multiple versions at the same time even though they don't have anyone managing the infrastructure, it's just CodePreview.
I'd be thrilled to answer any questions.
BONUS: https://codepreview.io has a button for hn users where you can join a room to discuss this project live (no-login required), I intend to leave this for a few hours.
Thanks!
EDIT: I set my title as "Launch HN" but it was automatically changed to "Show HN", I guess this is an hn restriction.
I don't know if you are aware, a few months ago, Scala.js turned 10 years old: https://www.scala-lang.org/blog-detail/2023/02/05/ten-years-...
My customer asked me about writing a smart contract but we did not had the capacity to handle it.
A few days after that, my customer gets back to me sharing a basic smart contract he managed to create using ChatGPT, since them, my customer has kept iterating over this, it took him a few weeks to get the functionality he wanted.
My customer explained to me that ChatGPT usually got the wrong details but he used to came back and explain the problems to ChatGPT, ChatGPT proposed many solutions until one of them was the correct fix.
Overall, my customer is very happy with this experience, he sees ChatGPT as a personal teacher, my customer is know very motivated to keep learning programming.
While I haven't been affected negatively, I'm sure that we'll hear more stories like this one.
I have a couple of customers involved, receiving great feedback so far, unfortunately, it doesn't generate enough revenue yet and it is progressing very slowly (chicken-egg problem).
I believe we can scale the number of customers but it is hard to find the right balance between doing sales and feature improvements. For obvious reasons, I prioritize consulting hours that pay our bills.
I have read the website docs again and I can't find any reference to this or how the process work.
As a company, I would hope to see more docs related to the business before trying it out, the docs assume that you are already integrating the bounties, there are even API docs (which are fine) but no clear definitions on dispute handling (these cases will occur sooner or later).
> 1. As a developer, I have had customers paying me to contribute improvements to open source projects they depend on, this case is very tricky because there is no guarantee that the upstream project will accept the change.
So far, my understanding is that this case is not supported, is there any plan for it? it is the most common I have been hired for.
Thanks.
I see many potential use cases for this project:
1. As a developer, I have had customers paying me to contribute improvements to open source projects they depend on, this case is very tricky because there is no guarantee that the upstream project will accept the change.
2. As a company, we have had the need for some improvements to our projects that we don't have time for handling, a platform like this could have helped us.
On the other hand, I see some potential issues:
1. As a developer, it is hard to invest the time on a task when there is no guarantee for the payment, imagine I start investing 1 week in completing a bounty just to see someone else getting its PR merged before I finish mine, have you considered adding a locking mechanism? let's say, if I get the bounty assigned, I get up X time to deliver, otherwise, the bounty can go to someone else.
2. As a company, I'm not sure that many companies would be willing to commit to the 23% fee, maybe there is a way to structure this in a friendlier way? for example, taking a 20% fee up to $Y, even Upwork has a different % based on the amount paid by a company to a developer (staring at 20%, going up to 5%).
3. As a company, assuming a bounty can get locked to a dev, if I get many people interested in a bounty, how do I decide which one to pick? displaying historic data about devs could help.
In any case, good luck!
EDIT: I also haven't seen how a dispute would be handled, let's say, a dev sends a PR but a company rejected it but silently takes the code to use it. The inverse case could happen, a dev submitting low-quality work and demanding the company to pay.
While these are used to deploy a Scala backend and a Scala.js frontend, I have adapted them many times to work with other backends and js frontends, the logic is the same, the build scripts is what needs to be updated.
In my last project, I removed the unnecessary complexity that K8s was bringing and went back to ansible scripts, which has worked nicely.
With another customer, we inherited a frontend application that was being deployed with K8s while vercel is a considerably simpler/faster alternative.
K8s certainly has its advantages but I'd bet that many projects using it do not gain much.
I have had to deal with html templates in Scala and Rust, to my surprise, I'm enjoying going back to these boring web apps.
I have been trying to do "marketing as engineer" (not sure where I read the term). In short, let's make cool engineering stuff where you can place your own ads.
For example, I was able to get one of my toy projects at the hn frontpage, I have been speaking at some tech events where I could have mentioned my project.
Related to the product I'm working on, it took me a considerable time but I think I finally figured out a nice strategy to do marketing as engineer (I have high hopes but we'll see how it goes).
Overall, I feel this is considerably more engaging than doing traditional marketing.
- About 5, https://github.com/99designs/aws-vault is super handy to keep AWS credentials encrypted.
- Use full-disk encryption as a team policy.
- About 7, it is likely that this is solved by having preview environments so that developers don't need to manage infrastructure manually.
- About 8, 1password shared vault works nicely for us.
A potential improvement could be to use a different key per customer, where the key mapping (customer -> key) is encrypted with the application key, this process simplifies key-rotation and prevent that a leaked key gets access to all the secrets.
The key mapping schema could be handled with postgres security definer functions to avoid dumping the schema from code.
Being on the other side of the table (running a SaaS requiring a call scheduled), I have do this because my SaaS its in an early stage, the call allows me to understand the customer needs and make a proposal when we are a good fit. In this particular case, it is hard to get a quote when I don't know the necessary customization that could be required.
The call is a friction point that I'm trying to avoid by communicating example integrations and its prices in the landing page, still, making everything clear hasn't been simple.
In short, asking by email could be a good idea.