Moving right along

in blog •  4 years ago 

I did a lot of really cool stuff while I was working on Parallelcoin.

  • Novel ASIC resistant proof based on integer long division
  • Parallel prime number based block interval
  • UDP/FEC based local area network multicast miner cluster control system (just add password and voila new miner worker attaches to the first full node mining controller it hears of)
  • Logging GUI with configuration for development work, click to jump to code lines of logs, etc
  • Merged together the modified btcd and btcwallet into a run configuration system that can run one or both as well as on top, the monitor/logging/debugging GUI and the regular (default) GUI wallet - the last piece not being much of my work.

In the midst of all that I wrote a custom binary RPC codec similar in principle to Flatbuffers, my own GCM-AES based encryption with HMAC message authentication and then protected from decoding failure using a 3 of 9 based Forward Error Correction system using Reed-Solomon erasure encoding.

I built an advanced logging system that helped me a lot with debugging, extended it to be able to spit log entries across the network using the previous network transport.

The monitor app can build and run an app and the logging as well as the miner's controller talks to the master pod binary via an RPC pipe using Gob (native Go binary codec) which allows it to read logs and send commands to the child process. The miner is a child process of pod and pod runs a single threaded child miner process, as this resulted in better scheduling performance (ie, mining performance).

I'm pretty sure I'm qualified for intermediate level as a Golang backend distributed systems programmer. I only say, not "Senior" because I have, out of principle, rejected gRPC and other popular, secondary-language-requiring, multi-pass compilation, and imho, not what I define as "Idiomatic Go".

So, that one aspect will drop my salary expectations to the middle of the range, as I have to swallow it and learn to create gRPC and Swagger etc specifications. I personally find this abhorrent, I use JSON in my configuration because it's baked into the standard library, but it seems like a terrible waste to use such a complicated codec for RPC for machine to machine communications. You might say, if it's popular, I hate it. I also hate it if I can't describe something nicely in pure Go - to me this is just - laziness, and putting a pile of extra training requirement into a task that can be equally well described in a pure Go syntax that is as pretty as the Go code itself.

But then again, maybe they see this stuff and say 'we want you to build a low latency p2p gossip network system for this project'.

The market for Go programmers in Sofia is growing

Either way, the coolest bit of news is that I checked again at the https://jobs.bg website and lo and behold, where there was only 2 positions being advertised 4 months ago, there is now 6 or 7. Two of them are "senior" level and have a stated wage of 6000-6500BGN (about half that as euros). Aside from things like gRPC and a few other bits of not-go stuff that I hate, I am probably not far off having the ability to produce the work they would want.

But the best bit is, out of all these positions, even "junior" Go programmer starts at 2000BGN (1000€) per month.

The thing that has infuriated me the most about all of the last two years has been that I have not been getting any recognition for the huge amount of work I did, and in fields that are quite advanced. Really big job I did, and considering the nearly no pay I got it was 100% pure survival driven self-taught, and I think that when I get to some interviews, I will ask them if they want to see my big most recent project.

It's not exactly shiny yet, I was only about 2 months into building the monitor, but it's good enough I can at least demonstrate the filter list and stuff. I have been unable to easily get the mining cluster stuff working yet but maybe with a bit more time.

I work currently without any power so once the battery runs out on my laptop, that's it until I can find somewhere to charge it to continue. Not really terribly conducive. But I am satisfied I can demonstrate my GUI and logging subsystem, I will try again next time I charge, to get the mining system working, as it would be quite cool to demo that. The only problem is that mining of course chews power so it's not exactly something I have a lot of leeway to do much testing on while I am on restricted power. I think at the moment the thing is that I calibrated the baseline starting point for the mining to target more typical 'low end' modern hardware, and my laptop is far far lower than that.

I will try to get that prepared while I wait for responses, it will be the cherry on top to actually demonstrate showing my mobile phone become a miner for the network with only the password.

But I will be getting a job soon. It will pay me enough to get my own independent, long term housing, finally. I will get my residence permit again.

Sometimes, one has to put up with not being paid for even productive work, especially when one is just starting out at going pro. I've had to deal with this, effectively, as I don't think that paying an Intermediate level Go programmer the same wage as a call center operator really qualifies as being paid, especially in the circumstances of such escalating prices. It fed me and kept me out of the weather but it did not give me any scope to deal with a dead wisdom tooth, nasty allergies on my feet and elbows, asthma, being in a foreign country. Meh. I am still annoyed at all of it, all so unnecessary and stupid, for lack of genuine concern for even such basic things as ability to perform at all. And such graspy attitude from so many of the people who cluster around these projects. "when moon?" >_<

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE BLURT!