3,729 karma · joined September 16, 2008
So in a traditional DB you might have a DBA set up a reporting database so the operational one is not affected. Using Datomic the reporting service gets a datomic peer that has a copy of the DB in database without any extra DBA work and without affecting any web services. This also works nicely with batch jobs or in any situation where you don't want to have different services affect each others performance.
Its true that a lot more memory gets used, but it is relatively cheap - usually the biggest cost when hosting in the cloud being the vCPUs. But usually in Clojure/Datomic web application you don't need to put various cache services like Redis in front of your DB.
Thea assumption here is that the usual bottleneck for most information systems and business applications is reading and querying data.
Check out the talks by Rich Hickey to see if you have the same sentiment or perhaps this paper: https://download.clojure.org/papers/clojure-hopl-iv-final.pd...
The community of the language largely follows this philosophy, the ecosystem is very stable and there is little churn. The most common implementation is on the JVM making the language very portable.
The headaches historically were with getting your environment setup, but there are amazing tutorials and good tooling or VSCode, IDEA, Emacs and vim.
One way you can avoid this problem is by running Kubernetes - then you need to only have code to set it up for each provider and write k8s config that is common to all. Kubernetes is pretty complex though and might not be a good fit for all applications.
The Soviet Union collapsed because the Party lost control of the country and the tensions and outright conflicts that previously prevented any challenge to its power tore up the country. It was conflicts between the nationalities, competition between bureaucrats of different levels over resources, the young Komsomol chiefs against the old gerontocrats, Moscow against the Russian regions, the Soviet Army against the KGB, the religious against the state atheism, innumerable other conflicts, with probably the ethnic/national conflicts having the most intensity. The USSR found out it couldn't control its own population and that is why it retreated from Eastern European countries as well.
The party lost control because of glasnost and perestroika which unleashed all the contradictions and conflict at once, which further caused chaos. It is no accident that the Communist party got itself banned in both Russia and Ukraine. In comparison China didn't try glasnost and did incremental and initially isolated economic reforms, with agriculture still being restricted to family farms to this day.
The USA didn't win the Cold War or cause the USSRs collapse, most of the time the policy was containment or even reapproachment, not rollback.
What was my frame for reference was piping input and output in bash programming and various declarative DSL like SQL or the Hashicorp language, functional programming in Clojure seemed quite productive and grokable, so I dove into that.
In case you need to get the metadata of a resource group you can use this: https://registry.terraform.io/providers/hashicorp/azurerm/la...
I am a very happy Terraform user, here are the benefits for me:
* Very simple workflow that helps prevent unintended consequences - first you write your code, generate a plan, inspect it carefully and only then apply. It is easy to work in a team setting where you can have one person write modules and others supply variables to them.
* I personally don't want to burden myself with Azure Resource Manager, CloudFormation or any other vendor specific IAC tool.
* I don't like other people's bash; there are tools like shell check, but usually a larger infra codebase becomes an awful ad-hoc mess of ENV variables and clever hacks. And infrastructure code is nasty to test and refactor.
Try to keep it simple as possible; anytime you are fighting Terraform it usually means there is a much simpler way to do it. And if there is inherent complexity it could be the wrong thing to do.
In case you need very dynamic behaviour (basically a part of an application) I advise the following - put in terraform the things that are not likely to change often or where the cost of breakage is higher - your virtual networks, DNS configuration, Load Balancers, VPNs, Autoscaling groups, important alerts, etc. Manage more ephemeral workloads in a more general purpose language if there is no straightforward way to do it in the official APIs. I am also very happy user of the AWS CLI in some cases + the cognitect aws libraries for Clojure. However if you need to do something very dynamic it is also likely to be wrong.
So I had a fairly small allowance which I mostly saved. Other kids were spending their afternoons at the malls shopping, buying cigarettes and eating fast food.
So the richer kids eventually had their allowances lowered by their parents because of some sort of misbehavior, and it turned out this wasn't very effective as they started asking around to borrow money to keep up their habits.
So I gave small sums of money and since I was a very distrustful teenager I had the following terms - if you don't pay me back by Friday I'm gonna round up the sum or increase it to some other arbitrary point. Usually what happened is they would obnoxiously blow me off, but I would get a concession about increasing the interest further. I didn't want to argue over small sums so I just increased them, giving them a way out of the impasse
In a few weeks the debt would simply balloon and I would start to get angry by the way they were treating me. I learned that I wouldn't get my money by cornering them alone someplace and they would make up credible payment arrangements as soon as possible. I ended up collecting everything with several hundred percent of profit. I learned later that interest rates are calculated yearly and these terms were absolutely insane.
Even though the profits were big the sums were in fact quite small for the trouble, so I just stopped lending out the next year and honestly my market was saturated by then.
My clients probably learned much more than me. At a later time in my life I read 'Poor Economics' and worked with fintechs in an IT capacity. What my teenage self was practicing was fairly common in poor developing countries with next payday or next week loans financing many lively hoods.
I have also never taken a loan, and I'm not planning to.
Technical Experts-managers are unnecessary where the work is menial, very physical or low-skilled. Or simply best practices or standards are established and followed uniformly. Or regulations are so strict there is little variation on how things are done.
Or the company is driven mostly by brands or advertising.
* It is very easy to be both very busy and do nothing useful at all. Just accept and schedule a bunch of meetings.
* Your potential of improving things depends mostly on the C-level suite. Trying to get buy-in from other levels of management is a waste of time.
* Middle managers are quite often recreating other orgs they aspire to without any thought if their prescriptions are suitable for their orgs.
* The C-level are actually behaving more like individual contributors than managers. The CEO is typically working mostly on closing deals and attracting investors.
* Lower level managers are often created from senior or valuable employees because a title change is the only way of rewarding them and using their experience
* Some of the best managers are HR professionals, but they are completely sidelined. HR is working to protect the companies which for good and evil can clash with your goals.
* No one is a prophet in their own village, not matter how loyal you are climbing the ladder, and how much you learn along the way chances are they are still going to hire someone from the outside to be your boss that knows less than you. It's better to switch orgs when making big jumps in your career.
* There are certain pure management skills (everything with budgets) which are quite valuable, and managers are either undertrained
So, if I ever run my own company of over a 100 people this is what I'm going to do:
- make sure executives / senior managers are doing as much decision making as possible, while accepting input from every senior person in the company, manager or not.
- Promote only experts in their fields, preferably from your own ranks as managers.
- Instead of introducing hierarchy, consider instead providing managers with experts in management as deputies. Recruit fresh MBAs or experienced HR professionals. This way they help instead of hindering.
- Make sure every role has ways to grow while remaining individual contributors. Just give them levels, like Software Engineer lvl 12. Make sure they have free capacity to get delegated tasks or for their own initiatives.
And then those projects passed UAT, then went on production, a round of change requests and the teams were disbanded, with maybe a single developer giving some of their time to fix a bug. Sometimes such project went many months or even a few years with no development time spent on them. Some had backlogs of bugs, but it was very hard to mobilize resources to fix them. The company was chasing new project that were bringing more money, so after delivery the old projects had huge opportunity costs, even if there were maintenance fees.
The professional managers should be in a deputy position to the promoted ICs. This way they can bring their skills and expertise in management and empower the promoted ICs who understand the business or problems deeply.
The professional managers can be pretty useful if they don't have people reporting to them and help with processes, compliance, planning, making presentations and excel tables and yet the capacity for damage will be limited as the promoted ICs will need approve anything.
DEC apparently had "administration" instead of management, implying it didn't rule but rather assist, but I don't know the exact details.
You basically have to show up to work and you are micromanaged by the queuing software. Sounds horrible, but it leads to consistent performance and when your shift is over your mind is clear from work. You are not stressed about procrastination - you just have to respond to stimuli.
You don't have to be very social, the communication is basically a ritual/protocol. If you can clear the first hurdle it might turn out that the formed habits will help you for life.
There are more technical support jobs out there, you just need to make sure they are not organized around projects or a particular big client, but a queue. You are in Eastern Europe so there might be some opportunities around you.
You can give it a try and see how it feels for you.
I like the bias of not treating politics as a set of "scandals" just like the media does. It is likely that being an international effort, the English Wikipedia avoids voting in a particular partisan bias, even if it doesn't appear to be so for other languages.
Clojure programs listen on a extra port that you can connect your editor to and modify the program as it running.
Things like tests and notebooks may run the same code, but don't have the exact state and environment as your running program, be it running locally a staging env or even production.
This is not unique to Clojure, a Common Lisp program was famously running on a space probe and REPLed into decades ago, and Smalltalk code is stored in VM images, but few mainstream languages nowadays allow such interaction with a running program
I will try to check them out next time I'm in Varna