This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-07-06
Channels
- # aleph (1)
- # announcements (29)
- # babashka (39)
- # beginners (52)
- # cider (3)
- # cljsrn (19)
- # clojure (167)
- # clojure-europe (15)
- # clojure-nl (2)
- # clojure-uk (62)
- # clojurescript (13)
- # community-development (8)
- # cursive (5)
- # datomic (10)
- # introduce-yourself (1)
- # java (10)
- # jobs (12)
- # jobs-discuss (1)
- # kaocha (2)
- # lsp (6)
- # luminus (1)
- # malli (15)
- # meander (3)
- # music (1)
- # nrepl (2)
- # off-topic (91)
- # pathom (4)
- # reagent (21)
- # reitit (10)
- # sci (5)
- # shadow-cljs (17)
- # spacemacs (3)
- # sql (7)
- # tools-deps (40)
- # utah-clojurians (2)
- # xtdb (7)
Q: does anyone know about literature that discusses the effect of single-pass vs. multi-pass compilers on code structure? I was wondering whether there ever has been some quantification of "entangledness" in for example a Java code base vs. a clojure (or other) code base as a result of what the compiler allows in terms of circular deps etc...
I want to create a login that’s convenient for as many users as possible for my web app and deploy fast. What is the best option and why? This is an app for buying and selling music and art royalties 1. custom email and password 2. google login 3. facebook login
> convenient for as many users as possible Then you'd have to incorporate all the login options you can think of. You might need to create a search field for them though. ;)
given one choice
given the demographic who would invest in music and art
I guess facebook is the way to go since it has the biggest social login market share
if only one, I'd stay with email/password. that should always be available
yeah but then you have to implement email verification which is a mess
Requiring a user to click a link that you sent to them via email is less of a mess than Google/FB auth IMO.
yeah but then you have to implement password change too uggh
okta pricing is insane. $2/user/month
for single sign on
number of gmail users: 1.8 billion number of facebook users 2.85 billion which demographic is likely to invest resources into digital assets? not sure, maybe gmail, but an extra billion users is a lot.
but you ought to be letting people make their own accounts on your service so you have their e-mails... although I think you'll get their e-mails anyway when you do openID with facebook/gmail or whatever.
RE: payment processing, have you looked into PayPal?
@U01F1TM2FD5 AWS Cognito is free for the first 50,000 sign-ins each month
Yeah PayPal and Stripe are both at 2.9%
Auth0 is a good one for my use case
Just be a aware that Auth0 was acquired by Okta lately, and the plan seems to be to “fully integrate” it in the next months
does anyone know how to make https://localhost for luminus framework work running on +aleph? So far I’ve followed these steps and generated a .pem file, but don’t know where to go from here: https://web.dev/how-to-use-local-https/
https://ngrok.com/ I’m using this to expose my application on http and https simultaneously
I tried ngrok but the page doesn’t really load the reagent js stuff, but serves the static page and keeps loading at that. I’m using the free version of ngrok
In what possible ways? (hard to imagine most tech interviews getting any worse at this point)
my worry is that copilot would be clever enough to pull off sophisticated bugs that a junior could never be astute enough to figure out on their own
(not just junior actually, anyone could fall into this trap)
right now we are "protected" by the fact that sloppy thinking correlates strongly to code that doesn't compile
Don't IDEs and TDD (Tab Driven Development) already come close to allowing sloppy thinking to produce code which compiles, but only just?
that's true, it's an old problem isn't it?
we also have languages where nearly anything runs but doesn't necessarily do what you think it did (regex, assembly, forth)
In Tcl you can round numbers like this: lindex [split 3.14] 0] # => 3
There's no limit to human ingenuity 🙂
Still, seems like intellisense has dulled its users' senses, if you pardon the pun
well, in TCL everything is a string :D - for weird reasons it was one of my first languages so I hold an irrational fondness for it
Mine too, I also kept a package of a collection of FP idioms I picked up online. Did lots of metaprogramming with it
I found a great essay from a haskell guy about how pure FP is in many ways similar to a substitution oriented programming model (they used the ancient m4 as their example but it transferred nicely to TCL)
I wonder how hard it would be to find that again...
the basic idea being that if you don't have to care about effects, a program can be thought of as a series of algebraic substitutions and the language ends up being strangely similar to a recursive string macro expander
Isn't the definition of pure function that it can be substituted for a value without changing the result of the program? One of them, at least
right that was kind of the idea of the paper, it was about demystifying FP for complete NEWBs who only have experience with string manipulation macros
in fact it may(?) have started with find/replace in a word processor as its first example
copilot could change that somewhat
By virtue of allowing developers to think less about what they are doing, I assume you mean?
the line from How To Design Programs comes to mind: "the phrase 'it works!' is the shortest lie in programming."
Yeah, it's basically going to allow the sort of development that is copy pasting from stackoverflow but without even having bothered to read the comments, see the up votes etc
I think copilot could be useful as a way of automatically inferring what some people use "snippets" for today
I'm excited for copilot and think it will be pretty cool. Interested to see how it develops
automatically suggest to generate some boilerplate that you've written over and over again in your code base
I'm sure it will be "great" at those things @lilactown but IMO that's the wrong problem to be solving. We should be looking at ways to reduce boilerplate and scaffolding, and reduce that sort of repetition and verbosity.
well... I mean... do you think companies will insist "double down" on requiring live code interviews?
Live code interviews and take homes are both bad indicators of suitability (for different reasons).
No programmer works -- in real life -- without access to Google/Bing/StackOverfow etc.
I agree... out of 50-100 live codes I have done over the years... 99% never seemed serious either.
at least the take-homes seemed more serious in my experience... or.. "show me something you built"
I appreciated the approach we adopted here (and how I got my job). We were asked to bring some code to present and do a code walkthrough. It could be anything, so long as you had permission to show it. In my case, I took some code that I’d done for a take-home assignment for a previous application, and presented that 🙂
It gives people an opportunity to present code that is in their comfort zone, and developed under conditions that they have chosen. It does disadvantage people who don’t have open source or personal projects. As interviewers, we can see how people choose to do things (and can ask if they considered alternatives and why they chose what they did). We can also see the enthusiasm people have for their own code.
I don't have an issue with problem solving challenges, live or otherwise. But they often introduce biases that the interviewer isn't even aware they have and so they end up self selecting for similar minded candidates or they just get someone who performed well due to luck. I can think of two examples. In one, the challenge featured tests with two unknowns forcing me to chain them together to understand the full picture. The interviewer was confused why i didn't understand how to implement something as simple as (defn get-names [] ) which ended up being (defn get-names [{:keys [names]} names). A function that i would argue doesn't justify existing in the first place. The yconfused my ability to understand clojure core functions with the challenge of decoding their requirements. Given the CC is often adversarial in nature, often times they seem to be testing how well you do in less then ideal situations. Rather then asking you how together we might build an ideal situation to begin with. The other example featured correctly processing an algorithm on a small set of data without code. The interviewer was upset i didn't get it right and seemed relatively unconcerned with the correctness of my algorithm. The reality is that getting a small sample set correct without machine add is a matter of luck and energy, it's easy to start down the wrong path and get flustered making a small mistake. So what should be done instead? I can't for the life of me understand why people think it's ok to have me spend hours on a toy problem but aren't be willing to spend half an hour working or discussing a real problem they have right now. I mean, your spending my time either way. At least i can leave the interview feeling like i might have spent some time on something that actually helps someone. To be fair, this does come up from time to time.
my most recent live code was... "write a function make_change for a cash register" without being able to know the product price... the interviewer setup the problem for me to fail.
then he asked for me to itemize the bills, 100s, 50s, 20s, 10s, 5s, 1s... which I needed several modulo operators to do
it was very difficult to concentrate when he started "yawning" and making comments like "it's just simple math"
I would need to see the full problem to be sure. make_change is often an example of a dynamic programming problem.
but at the least it's a recursive one. Given a set of numbers can you reach a given number can be brute forced.
You can cache the intermediate values so that future requests run faster.
I actually had to do that recently, i struggled to understand how to elegantly retrieve the path to the solution set of numbers/coins. Writing to code to verify it was possible was straight forward, but sense you only know the answer at the end, i have no idea how to effectively buble that up.
I was on the right track... until I realized he setup the problem wrong... he did not have "product price"
yes, you can't make change from an unknown amount.
more formally, There is no set of numbers that can be added to reach an unknown. as unknown is not a number
in js. Null is not a number
yea... so I wasn't sure if it was a trick question... or he just didn't know he setup the problem wrong
I prefer the hacker ranks because there are at least tests to clarify erroneous directions
a bit confused reading that. can't you make a function (defn make-change [amount] ...)
where the amount
is "unknown" but provided when called?
anyways, that's just been my experience... didn't mean to take over the channel... I'll shut up
(this sort of experience is why, as a hiring manager, I've never given coding challenges as part of interviews!)
How do you feel about coding questions which are very simple but give you plenty to talk about with the candidate?
It depends on the specifics: good questions need to be open-ended, without a necessarily "right" or "wrong" answer.
I ask stuff like "with <your favorite tech>, what's your least favorite feature and why?" (a bad answer from a candidate is "I love everything about it!")
I'll also ask about a problem/bug that has cropped up on a past project that they felt was interesting and what they think could have been done to prevent/mitigate it... I mostly try to find things that the candidate wants to talk about, and let them just talk (without occasional guiding questions to drill down into more detail). That way, candidates are at ease and can be comfortable driving the conversation -- and they tend to open up a lot more than if you simply barrage them with questions.
Sometimes I'll ask them to talk about their interview experience elsewhere, where they've been subjected to coding challenges -- so I get the benefit of the discussions that they didn't necessarily get to have with the previous hiring manager 🙂