joshlemer
(defn foo []
(+ 1 2))
to (defn foo []
(let [x 2]
(+ 1 x)))
I wish that there were some kind of macro available in Clojure that would provide a local "def" kind of functionality that doesn't pollute the namespace and just creates a binding in the parent scope. So that you could do something like: (defn foo []
(let! x 2)
(+ 1 x))In a market economy, if it's a known fact that the area is in an upward economic trajectory, then the future increase in usefullness of that land will already be priced into the land today. You can't just make profit (in expectation) by going and buying land in an area that the market already knows is going to become more productive. Competition amongst investors will drive expected profit to 0.
The only way that you can actually make a profit as a speculator, is by bringing new information to the market. The rest of society thinks this area has no potential, but you have good insight that is costly to figure out, which tells you that the area is going to be more productive. You take a risk and purchase the property. You are compensated for the risk and effort you undertook, and if you're wrong, you are punished by losing money.
So is your position that only Canadian firms should be allowed to operate in Canada in general? Foreign competition helps us because then we benefit from further specialization and trade which increases everyone's standard of living.
> Imagine that Canadian farmers, much like New Zealand farmers, make a product more efficiently than the US and start taking the US market? How do you imagine that plays out? Hint: It yields new protectionism, because the US can only win in every area.
Well, who else benefits is consumers who get to purchase products of higher quality, convenience, and affordability. Also employees of the dairy sector who face higher competition from firms bidding up their labour. Investors, who have more investment opportunities and therefor higher yield. Government and entitlement recipients who benefit from tax revenues from these incomes and investments.
And also it's one thing that the App Store doesn't allow YouTube Service Policy violators, but then it's a big issue that they don't allow sideloaded apps. It's only this locking down of our devices so they must go through the App Store that is indirectly enabling YouTube to have a shitty addictive UX IMO. If people had more control, YouTube would have to worry about not being too crappy or else other apps might take market share. Now that they have us all locked in thanks to App Store, they can extract much more attention/money from us than otherwise.
To this day I have to look up whenever I get back into clojure what the "syntax" is of ns, require, import, etc.
Every problem people face is "not a problem" or "actually a good thing" or, maybe if all else fails we can make users feel bad about themselves. Clojure is intended for "well experienced, very smart developers". Don't you know, our community skews towards very senior developers! So if you don't like something, maybe the problem is just that you're not well experienced enough? Or, maybe what you work on is just too low-brow for our very smart community!
TBH I think debuggers are just better anyways. When I got into the weeds with trying to do this interactive REPL workflow on actually running webapp code in Clojure it was a big mess. You have to use clojure code to basically capture data and save it into global variables so that you can inspect them (as opposed to a debugger where you can just set a breakpoint and inspect all the variables in the middle of the precise spot in the request-response cycle.
I think maybe this was ahead of its time when it came out in 2008 or got popular in 2010-2015, but nowadays I am not seeing what's specifically more productive about the Clojure REPL than the interactive development experiences available in Laravel, Python, JS, etc.
I think there are lots of well maintained Django projects. In fact, if I do a search on AI and on google for what one web stack probably has the lowest overall total cost of ownership including maintenance years down the line, Django usually is what comes up, without even specifically searching for/mentioning it.
> if you're very deep into "frameworks are clearly superior in every case"
This is a mischaracterization of what I have said, and is more like the extreme position that Clojure devs seem to take. The original commenter said that Clojure is wonderful, but it's too bad that [for the people who want it,] there isn't the option of a well maintained, all-in-one, batteries included framework. You deny that this is a problem, saying that actually a well-chosen set of libraries are superior (I guess in every case, because if not then it actually would be a problem sometimes).
One big library/framework has huge benefits and network effects, from enabling a big 3rd party plugin ecosystem, to a deeper documentation literature (including paid courses, books, and AI). It means that there's less or virtually zero getting up to speed when changing from one project to an other. It means that the upstream framework team takes care of upgrades whereas you have to consider, when a new technology comes up, how to integrate this into your stack. There's a reason that Laravel, Django, Rails, and Spring each have thousands or hundreds-of-thousands of times more websites in production than all of Clojure combined.
At a meta/discourse level, I also find the Clojure community's tendency to constantly deny and downplay any criticism or even just issue that people face to be really frustrating and counter productive.
Your hypothetical isn't even always the case. When unions form, usually there are employees there that don't want to subject themselves to the union, but are forced to, so they didn't "join a workplace with a union" at all.
1. in Cambie Surgeries Corporation v British Columbia (https://en.wikipedia.org/wiki/Cambie_Surgeries_Corporation_v...), where a private clinic challenged the province's ban on any private care whatsoever for procedures that are provided by the public system on the grounds that if the province bans procedures but then also rations access to those procedures to the point that they're inaccessible for many patients, it constitutes a violation of our charter right to life and equal protection.
It seems they were able to successfully argue that this does constitute a violation of our rights, but the decision says it's okay because it's done with the intent to preserve the equitable access to healthcare for the general public.
2. Employees in union shops are forced to join the union. This is arguably a violation of our right to freedom of association, but the supreme court says that it's okay if it does because "the objective of this violation is to promote industrial peace through the encouragement of free collective bargaining". https://en.wikipedia.org/wiki/Rand_formula#Freedom_of_associ...
3. https://en.wikipedia.org/wiki/R_v_Comeau, a famous case where a guy bought beer in Quebec and drove it to New Brunswick (for personal consumption) and was fined. His case argued that that's a violation of section 121 of the Canadian Constitution 1867 which states as black and white as can be:
121 All Articles of the Growth, Produce, or Manufacture of any one of the Provinces shall, from and after the Union, be admitted free into each of the other Provinces.
But the Supreme court ruled that it's not enough for provinces to ban goods from entering their province for it to count as a violation, it must be a ban which has no other purpose but to impede interprovincial trade. But that means that this section is completely useless because a justification for protectionism can always be found or made up on an ad-hoc basis.
Basically, Canadians have no rights whatsoever. Our entire legal system doesn't sit on anything fundamental it's all just vibes and arbitrary whims of the justices of the day. Our charter and constitution are so full of explicit holes like the notwithstanding clause, that they're rendered almost meaningless even on their own terms, and then any other violations will be excused on the flimsiest grounds.
I think it's fine to have a whole bunch of "WIP" commit messages on intermediate commits while the PR is in a draft stage, but then all of those garbage commits should really be squashed down into one commit and you should at least write a one liner that describes what the whole change is doing. I think it does materially make repo history harder to understand to merge in PR's with 10 garbage commits in them.