They are very good for defining API boundaries, in vince we only use them for configuration and admin structure. We use Roaring Bitmap based storage, so fundamental units persisted are Bitmap containers.
> Also why are you using pebble exactly?
Well, vince is write heavy and any LSM based key value store would have been nice. It happens pebble is the best option for us.
Also, we don't use transactions (We batch writes and use snapshots for reads). Combining with the fact we rely on pebble batch Merge api.
The merge api allows us to do efficient updates. Since we only store bitmap containers, when doing update we just do a container union of observed values of a key.
I will share my story with you. Hopeful it will inspire you to keep trying and never give up.
So, I graduated in 2013 with BCom in Finance. I'm short sighted( chronic one, have been like this for more than 10 years), I have hearing impairment and to top it up I wasn't that good with my grades either so poor GPA.
For context, I had to pay TSH 10000 for someone to open an email for me so I can apply for college loan, meaning I never had any kind of access to computers until I was in college.
Fast forward, I graduated. The only valuable thing I had is a Laptop my sister bought for me since I couldn't attend lectures( can't see , can't hear and no one cares anyways) and I have to give myself the an education and needed to survive 3 years. This opened doors to the world of the World Wide Web, I read Wikipedia, mastered the art of googling and all those tricks to get the right information.
So, back home after college. There was no way for me to get a job, because.
* I can't last past the first screening , I had issues with communication
* I sucked at finance. I self educated myself so I was picky on what to learn, the jobs on the other hand were looking for people who had high grades and balanced accounts in their heads( pun intended)
It was me and my laptop, I gave up the prospect of being employed. I was too depressed to leave my room. So, I started programming to kill time and keep at bay the thought of suicide.
I started with PHP after playing for it for a while I wasn't that impressed I moved to Python, then Ruby then Erlang. Along the way I was learning and experimenting with all kinds of technologies I can grab for free on the internet be it CSS, HTML, Sass, etc.
Back then there was chronic power outages, so blackout were daily.
My routine was
* Leave the lights on,
* Wake up when the lights are on( the power is back), and start coding.
* Sleep when the power goes off ( blackout )
* Repeat the above steps for days in days out
I was earning 0, I decided to look for programming gig, I was depressed even more. there are only PHP shops here, in one occasion the lead engineer of one shop told me python was not a programming language.
When all hopes were lost, I came across this language called Go( Golang ). The way I was productive in it inspired me to think about building my own apps one day. So, I started sharing my projects on github. I was writing thousands of lines of Go like crazy. Just chasing the dead dreams. I can't remember how many unfinished ideas there was.
It was't until 2015 I decided to sum up my Go experinece into a little project I called utron. Utron was MVC framework for Go, which I hand rolled and loved, It caught attention of redditors and landed here on HN.
I landed my first gig november the same year. I moved to my own place and I have been independent ever since.
SUMMARY: Time is generous to all of us, keep doing what you feel is the right thing to do.
CONTEXT: I still program in Go, I'm probably the only professional Go programmer in my country (Tanzania) according to Github, folks here have no idea what I'm up to but that never stopped me from believing.
I have been thinking that maybe I was wrong on what I thought I did to become a Programmer.
Probably, It wasn't the right answers I found on google, or the help I got from friends that made me to learn.
Perhaps it is the wrong solutions, wrong implementations, bad design choices that made me learn. The main focus is making it right, but there are thousand ways of making it wrong.
What I'm trying to say is, maybe this story about Thomas Edison( I picked it up from the internet a while ago so I don't have the link for it, I'm not so sure if he even actually said this ).
"I have not failed 1,000 times. I have
successfully discovered 1,000 ways to NOT make a light bulb."
So, fail fast, fail often until you realize your next implementation won't be subject to your previous failures then you will learn( and probably be enlightened)
I looked through the project and it is cryptic indeed.
I will try to digest a little bit for people who aren't familiar with Go and by any chance read the project's README
- The examples you see there with commands like `./put ...` `./get ...` are actual Go command line apps found in the `cmd` directory.
What I mean is there are two command line applications which you actually might need to build separately one named `put` the other `get` . What they do, oh! well , never mind it should be crypting stuffs.
After being tasked to do devops for like 6 months. I understand the pain of having more secrets than those of the secret agencies we see on the movies.
Something that turn out to be true most of the times is, secrets should always be secrets. Managing secrets is supposed to be a secret.
I find the Configuration on the README to be full of secrets I mean passwords , API keys e.t.c. And wondering if cryptic is aware of that and how it is going to address this.
With my little understanding about security. I have a feeling that In some cases encryption is mistaken with secure.
Though at some point, it become harder to convince someone else to help with your cause.This happens to me most of the times, I become too immersed in the problem as the problem keeps expanding bringing more problems along the way.
I had to master all aspects of the web development, from dev ops, backend to frontend so I wont be disappointed by spending hours convincing a frontend guy to contribute to a very complex backend( mind that it is not complicated ) where the guy lacks the back story on the original problem I had.
The customers are broke because the quotes are in dollars, and the TSH is less valuable than USD. Which again another startup problem waiting to be solved.
The lack of credit card, is another problem that I have. Which is another startup problem waiting to be solved.
People pay if there is value in what you are offering.
This question has also been in my head for a while.
I suggest maybe we stop looking for problems to solve and start solving problems we have.
A simple problem that I have right now is ,
I am in need of a high quality technical text book that is in my local language (swahili).
First I can't buy anything from amazon or the other online retailers because I don't have a credit card.
Second, even if I am able to order from amazon I wont be able to get a Swahili version of the book ( Due to a myriad of corporate reasons).
Third, I'm broke I can't afford the dollars that also accompany the shipping costs and the tax that my government has just raised.
So, I sit down and think. Maybe it is about time, we start giving some love to the millions os swahili speakers eager to contribute to the recipes of this big cake called internet.
I find static sites cheap, and elegant. I mix the solution with strong security, and use modern tools to bring speed and relevancy. Many people start to use my platform, a new eco system is born and bam there goes a new amazon, solving a real problem and I'm sure as hell I can afford to pay in my local currency.
The company gets acquired by, guess who? Then you zero the clock and start the whole process again.
From the example above, you can notice, I never looked for a problem to solve but I just solved the problem I had.
RAM : 1GB
STORAGE: 25 GB
so far bandwidth used is 3.6GB
So, you can successful deploy vince on low spec servers depending on your expected traffic.