I have started fiddling with rust, and one thing that I miss from the Elixir world is binary pattern parsing/matching. The elixir model is so much nicer, I've used byteorder to convert a datetime to a byte array and then the reverse and it is not the most elegant code, nom looks much nicer. I wish rust had Elixir/Erlang like binary pattern matching.
HN user
minhajuddin
I am currently working on Zammu which makes Automatic Deployment of static websites to Github Pages very easy. I would love to get your feedback on it, My email is minhajuddin.k+hn@gmail.com
I've been using Elixir/Erlang for more than 6 years and absolutely love it. The community is a lovely place to be, tooling is great. Concurrency is awesome. Erlang is battle tested. If you are building applications that have anything to do with networks, you'll be able to build some seriously performant apps without having to reach for other tools and I love the community's focus on performance.
We also found many times missing libraries, or found libraries which are incomplete, or unmaintained or just not well documented
Can you give some examples here. This may have been true in the past, but isn't true anymore. I can give an example where ruby is lacking: Performant HTTP libraries, Elixir and Erlang are so good in this space, look at `finch`, `httpoison` etc,. there is first class support for HTTP2 and connection pooling / persistent connections which is very hard to find in ruby.
Tooling is just terrible. The VSCode plugin is crap, kills the CPU unless you disable features. There is no IDE from jetbrains. There is a plugin but last time I tried it, it was even worse than the VSCode plugin.
Which plugin are you referring to? Is it using dialyzer? Using dialyzer gives you so much static analysis for free as opposed to the default ruby vscode plugin. I have never heard of complaints about tooling. On the other hand, I know lots of developers who love the tooling, mix is great, iex gives you documentation with just `h String`. Plus with language server support, you have really good IDE support in vscode and vim. Look at the number of stars on the `ElixirLS` plugin here: https://marketplace.visualstudio.com/search?term=elixir&targ...
Also, I've read some comments where people mention "we don't need redis", "we don't need workers" everything is so much easier. That was our thinking at first. But then you realize on deployments you will lose your cache, or your background jobs, etc.
Yes, you'll lose data in your cache. Caches are supposed to be ephemeral, not everyone needs their caches to be persisted. However, if your use case requires persistence, you have a lot more options than just sticking it in redis. Plus, `oban` is a high quality background processor with persistence, without the need for adding redis to your stack.
For applications where performance matters, Elixir and Erlang give you lots of tools to build a truly performant app, However, if you don't need those tools, you might be better off building it in something more familiar.
A neat thing about this is that it doesn't send your tokens over the wire which is good security-wise :)
I originally had this need when we were deploying test servers and needed the ability to view the logs by the QA team.
This is a small opensource utility built using Elixir and Server Side Events. Would love to hear feedback from HN :)
Yeah, all my projects are web apps and Phoenix (The web framework for Elixir) is a joy to work with and highly performant.
I used to program professionally in Elixir where we talked to a ton of external providers. So, our app was heavy on the network (http) and Elixir was a really good fit for it. Now, I use it on personal projects.
Check out hex: https://github.com/hexpm/hexpm
The Elixir ecosystem is really healthy. You can find almost any package you want on hex (https://hex.pm/). Moreover, because it is built on top of erlang you can seamlessly use any Erlang code (which a lot of Elixir apps use).
You can usually find high-quality libraries with a google search or looking at the number of stars of a hex package. Mix, the build tool is awesome and the language now has out of the box support for creating deployment releases.
There are a lot of high paying jobs for Elixir.
Love the game! It would be nice to wrap this up in an Android app and put it on the market place just because when I build games like these my kids end up closing the browser somehow :) I built a few of these at: http://putty.minhajuddin.com/
It would be nice to see how this compares to Firecracker (https://firecracker-microvm.github.io/) the runtime behind AWS Lambda
Their speeds look impressive. If it can do cold starts with a response time of <200ms, it might become suitable for a lot of our typical web apps. You can actually try it out at: https://wasm.fastlylabs.com/
This is going to be a real problem and it is hard for small sites to tackle this. I have simple service (https://liveformhq.com) which allowed users to sign up for an account with a free 1 month trial and it didn't ask for your credit card upfront. Everything was fine until a few months ago when people started signing up and setting up phishing forms (I had the registration form behind recaptcha). At the end I had to move the credit card form to the front to stop these bad actors (and even after this I had 1 guy set up a phishing form which I promptly shut off after an abuse report). The amount of effort spent to handle bad actors is really a terrible thing for the current SaaS apps. And, it ends up making the UX for the good users bad :(
For vim users, there is an awesome plugin to talk to postgres and a ton of other databases called dbext.vim https://github.com/vim-scripts/dbext.vim Setting it up takes a little effort though.
This is really useful for building one of utility websites. I used this in one of my previous companies to tail the logs on our little QA server and push them via websocktd to an internal web page.
We use docker with AWS ECS, it has been a great combination. My colleague has written a few blog posts on how we do it: https://engineering.tripping.com/jenkins-elixir-and-ecs-cicd...
I'll share our deployment stack with Elixir, which is pretty hands off. We use docker with AWS ECS and have a simple release process:
1. Our jenkins CI builds a docker image which contains an erlang release (using distillery).
2. This image gets pushed to ECR (AWS's image repository), every version is tagged with a $GIT_REF.
3. We have another jenkins job which updates our AWS ECS Tasks to use the new version of Docker images.
4. AWS ECS now spins up a few new containers and drains out the connections from the old ones.Well, the erlang vm is what runs Elixir apps. Elixir runs on the erlang VM (called BEAM) similar to how scala/clojure run on the JVM. However, while writing a lot of elixir code you end up using the erlang standard library for things which are not available in Elixir, :crypto is a module which comes to mind. Elixir apps at the end of the day are erlang apps.
Elixir/Erlang are one among best functional programming languages for web today. Phoenix is a very performant and productive web framework. You can build a typical web app really fast using Phoenix and Elixir.
I haven't really tried batch. But, from initial reading of documentation it didn't look like it supported running docker images. My use case requires running docker images of static site generators and that sort. Will take another look at it.
This is going to be really great for batch jobs which need isolated environments. I have been waiting for something like this for a long time. Amazon is really doing work. I'll be definitely be using this.
I use Github Pages to host my blog. I love that it is free and backed by Git.
I am gonna sound trite. But here goes nothing. LiveForm (https://liveformhq.com/) is a service which allows you to setup form endpoints with reCAPTCHA and a ton of other things (including file uploads). And, it costs $3 per month. Full Disclosure: I built it.
Also, Google Drive.
I am proud of making LiveForm (https://liveformhq.com/) and GetSimpleForm (https://getsimpleform.com/). Both are simple products which allow users to integrate contact forms seamlessly in their websites. However, their use by others gives me great pleasure. A very recent user of LiveForm is using it to do translations! A user submits a scanned document with some extra information using LiveForm and my customer translates the text for a fee :)
You could https://getsimpleform.com/ which gives you an endpoint which will store the form submissions and send you a notification whenever someone submits. Full Disclaimer: I built it.
I had built something along these lines. Not really encrypting the page. But allowing you to send each other Base64 data: http://cloak.websrvr.in/ . I had built it to circumvent enterprise email servers which don't allow sending binaries. Which is kind of ironic because email sends attachments as Base64.
Yeah. The common advise is to have an automated setup for renewals so you don't have to worry about it. It is also very trivial. Just add `@weekly letsencrypt renew` to your cron job and you are done.
This outage mainly effected the certificate generation and renewal. People who wanted to renew an existing/expired SSL cert or wanted to generate a new SSL cert weren't able to do it during this window. However, I believe the impact was small enough.
SSL certs don't need any external service for verification. The clients (in this case your browser) would have a set of root certificates issues by many CAs which serve as way for verifying.
The impact wasn't huge as most people who do renewal had a one time failure in the cron jobs which renew the certs. And since the renewals are tried 1 month before cert expiry, this was a non issue.
I recently got to use `join`. However, without reading documentation on outer joins. I went ahead and wrote my own version:
join -t$'\t' <(cat c <(comm -13 <(cut -f1 c) <(cut -f1 d) | sed -e 's/$/\t/') | sort -k1,1) <(cat d <(comm -23 <(cut -f1 c) <(cut -f1 d) | sed -e 's/$/\t/') | sort -k1,1)
Then I stumbled on an easier version with using just join join -a1 -a2 -o auto f1 f2
There are really too many unexplored things on the linux command line for a typical dev.