clojure-europe

For people in Europe... or elsewhere... UGT https://indieweb.org/Universal_Greeting_Time
dharrigan 2021-04-29T06:19:10.397900Z

Good Morning!

djm 2021-04-29T06:21:59.398Z

🌊

mccraigmccraig 2021-04-29T06:33:04.398200Z

maaning!

simongray 2021-04-29T06:33:42.398400Z

good morning

simongray 2021-04-29T06:34:43.398500Z

Because Clojure feels amazing to program in!

agigao 2021-04-29T07:04:10.399600Z

დილა მშვიდობის! I had an interesting discussion with fellow Georgian engineers yesterday. My nephew, 2nd year CS student received “an offer” from a tech company with a half of the wage of a regular student job and I got curious about Georgian practices regarding dealing with beginners - some of them insist that unpaid internships in software development are fine and even encourage it - people who apply for it “express genuine interest” in the field, and the employer spends so much resources already and shouldn’t pay a living wage. What does fellow Clojurians thinks about it?

2021-04-29T07:16:57.400400Z

I think unpaid internships aren't great and exclude people who can't cover the expenses of working, and therefore make our industry less diverse in lots of ways

☝️ 2
1
dharrigan 2021-04-29T07:38:27.401500Z

Unpaid Internships == slave labour IMHO.

djm 2021-04-29T07:44:52.402800Z

At a previous job, we had placement students doing a "year in industry" as part of their degree. I have no idea if we paid them or not. It would seem reasonable to pay people in that scenario, but not terrible not to

djm 2021-04-29T07:45:08.403200Z

Unpaid internships outside of a program like that seems awful

borkdude 2021-04-29T07:46:27.404500Z

I've heard one time of a woman who did an unpaid internship for web development at a company, because she had little to no experience and this turned into a full time job. I guess it can work out differently for different people and contexts.

borkdude 2021-04-29T07:47:10.405100Z

Supervising an internship does take time and energy from a company so it's never 100% free.

borkdude 2021-04-29T07:55:09.407700Z

At a consulting company I worked for there were always 1 or 2 interns (as part of their degree) and they probably got paid a few hundred euros but not much. They usually would not work on customer projects but rather on some internal or experimental tool.

borkdude 2021-04-29T07:55:53.408400Z

Often these interns would return to become an employee later on, so that's the investment paying back itself rather soon.

djm 2021-04-29T07:58:06.409800Z

How much mentoring/training were they given? Nowhere that I've worked would have had the time/resources for that

slipset 2021-04-29T07:58:29.410200Z

That’s the model we’re doing at Ardoq. First summer job, then possibly internship, then possibly employee. All paid, of course.

borkdude 2021-04-29T08:00:03.410500Z

> How much mentoring/training were they given? Don't remember, maybe an hour or two a week?

borkdude 2021-04-29T08:00:57.411100Z

I was also a lecturer in the past and visited many students from the university who did internships at companies, so I also could see how it worked from the other side.

dharrigan 2021-04-29T08:02:56.411800Z

In the UK there are a few laws around what is classed as a "worker". In most cases, all internships are legally entitled to the national minimum wage

dharrigan 2021-04-29T08:03:43.412800Z

there are a few exceptions (natch!), but for someone who is doing an internship at a company in the promise of future work (amongst other conditions), they would be legally entitled to having the minimum wage.

djm 2021-04-29T08:04:50.413700Z

We had one placement student who was basically left to work by himself for the whole year (on a project no one else was working on) 😢

borkdude 2021-04-29T08:11:08.418Z

@dharrigan From the student's perspective there was no promise for a future job. It was a one time engagement which is required as part of their education program. A student should be lucky if they could find a nice company to spend 3 or 6 months. After that the student got his/her diploma and that's it. But in practice, because the student and the company already knew each other, often the student would come back.

2021-04-29T08:11:43.418500Z

There are other ways for companies to find out if a person is motivated or not. . imho It shows a lack of empathy for the trainee

2021-04-29T08:13:23.419700Z

It reads to me: “We are so awesome, that you have to sacrifice your time, for some minorities even suffer, because you want to work with us”.

2021-04-29T08:14:57.421400Z

i myself was an immigrant in Germany. I had a paid internship with a very low salary, but at least could pay my basic needs.

slipset 2021-04-29T08:17:06.424200Z

@pez regarding your talk(s) Check out this tweet from Alex Miller: https://twitter.com/puredanger/status/1387566420662304768

❤️ 2
dharrigan 2021-04-29T08:17:46.425100Z

I think it's a basic human right. You exchange your time and effort for some financial reward. I don't see why companies (who, generally have far greater resources than their employees) feel the need not to honour that. It puzzles me.

👍 1
dharrigan 2021-04-29T08:19:28.426500Z

and as pointed out above, unpaid internships are ripe for abuse and exploitation and causing less advantaged people to be put at a greater disadvantage.

dharrigan 2021-04-29T08:20:34.427400Z

Also, being paid brings a degree of dignity.

pez 2021-04-29T08:50:06.429900Z

That’s a great observation!

jasonbell 2021-04-29T08:50:21.430200Z

morning

pez 2021-04-29T10:25:42.434600Z

Good morning! I now see that the recording of the meetup yesterday is already published in its entirety: https://www.youtube.com/watch?v=M91VlKOa8jM Please don’t hesitate to give me feedback. This public speaking thing is important to me now, I want to get much much better at it. I have looked a bit at it now myself and it wasn’t the train crash it felt like yesterday, I think. Really a pity that my brain shut down so completely in the end so that I couldn’t fix the stupid bug on air. But other than that, I will stop beating myself up about this.

simongray 2021-04-29T10:28:37.437600Z

@dharrigan We have something similar to what @borkdude has described here in Denmark. In our case, students spend a whole semester where they have to have a specific project agreed to by both the school, the company, and the student - and they have to write a report about it at the end. They are funded by our universal education grant that everyone gets while studying since the internship replaces their academic work during that period.

simongray 2021-04-29T10:29:07.438200Z

I had one such intern last year. She spent 10 weeks with me.

dharrigan 2021-04-29T10:29:38.439Z

seems more like work-experience rather than an internship, but semantics I suppose.

simongray 2021-04-29T10:29:40.439200Z

The amount of work she could produce in that time was not as much as the amount of work I could do myself if I didn’t have to also supervise her.

simongray 2021-04-29T10:30:03.439500Z

Maybe. We call it praktik. Same word for us here 😉

dharrigan 2021-04-29T10:30:17.439900Z

🙂 Cultural interpretations 😉

simongray 2021-04-29T10:34:04.443600Z

I agree with you about the exploitation of “real” internships. In Denmark, it seems to mostly be creative work that gets abused like that, but a lot of that is down to how getting paid creative jobs usually requires a portfolio. Many new graudates often lack such a thing, creating this need for them to go and do unpaid internships to build one.

simongray 2021-04-29T10:35:00.444400Z

For software development, the only people doing unpaid internships are those doing it to collect unemployment insurance (it allows you to skip some mandatory job-seeking classes).

simongray 2021-04-29T10:35:21.444700Z

And that is only for 4-6 weeks.

simongray 2021-04-29T12:25:57.445900Z

Just got done setting up an nginx reverse proxy with automatic SSL renewal and it was incredibly easy to integrate with my existing Dockerfile using https://github.com/JonasAlfredsson/Docker-nginx-certbot - hard recommend in case you need to do something similar.

simongray 2021-04-29T12:28:37.446100Z

Now I never need to worry about that again, just gonna copy-paste some lines from a Docker-compose.yml file

dharrigan 2021-04-29T12:28:48.446300Z

Oh

dharrigan 2021-04-29T12:28:52.446500Z

I would have recommended caddy

dharrigan 2021-04-29T12:28:59.446800Z

Caddy does it all, including automatic renewals

dharrigan 2021-04-29T12:29:08.447Z

pretty darn sweet, caddy

simongray 2021-04-29T12:29:56.447200Z

Of course there is something even easier available... :face_with_rolling_eyes:

simongray 2021-04-29T12:30:07.447600Z

Did not know about caddy.

dharrigan 2021-04-29T12:30:10.447700Z

I use caddy extensively. A lot easier to setup that nginx (and haproxy)

dharrigan 2021-04-29T12:30:39.448300Z

and once configured, (just a few lines), you can forget all about it, it'll auto renew the TLS itself

simongray 2021-04-29T12:32:10.448600Z

Is caddy essentially a replacement for nginx?

djm 2021-04-29T12:32:23.448900Z

I listened to a podcast episode about Caddy recently (https://syntax.fm/show/340/servers-with-matt-from-caddy), but I haven't used it

dharrigan 2021-04-29T12:32:23.449Z

yes

dharrigan 2021-04-29T12:32:36.449500Z

it does reverse proxying, or it can also act as a file server

dharrigan 2021-04-29T12:32:47.449900Z

A simple caddyfile looks like this

dharrigan 2021-04-29T12:32:51.450100Z

<http://example.com|example.com> {
reverse_proxy 127.0.0.1:8080
}

dharrigan 2021-04-29T12:32:52.450300Z

done

simongray 2021-04-29T12:32:58.450500Z

Goddammit

simongray 2021-04-29T12:33:19.450700Z

Gonna need to gzipping and rate limiting too, but I guess it's got something built in

dharrigan 2021-04-29T12:33:58.450900Z

https://caddyserver.com/docs/modules/

dharrigan 2021-04-29T12:35:35.451500Z

gzipping is done via a directive, i.e., encode gzip

dharrigan 2021-04-29T12:35:54.452Z

<http://example.com|example.com> {
encode gzip
reverse_proxy ......
}
`

simongray 2021-04-29T12:36:49.452100Z

Thanks for the recommendation. I'll definitely check it out for future projects, but this nginx stuff was pretty easy to do and I don't think I'll redo it now anyway.

dharrigan 2021-04-29T12:36:55.452300Z

No problemo! 🙂

dharrigan 2021-04-29T12:37:00.452500Z

Always good to know options for the future 🙂

simongray 2021-04-29T12:37:59.452600Z

Yeah, and I really hate this devops stuff so I appreciate recommendations that will further shorten the time I spend on it.

simongray 2021-04-29T12:38:46.452700Z

So that I can get back to writing s-expressions

dharrigan 2021-04-29T12:40:17.453Z

🙂

mccraigmccraig 2021-04-29T14:25:49.453500Z

i would love to be writing s-expressions but i seem to be having classloader issues instead 😬

2021-04-29T14:36:13.453600Z

as a heavy emacs user, i have to say the calva experience looks amazing.. not sure if good, but you managed to make me download vscode again 🙂

2021-04-29T14:41:06.454Z

at least I'm used to things being classpath or classloader issues

2021-04-29T14:41:27.454500Z

I feel strangely comforted when something blows up in the java (I don't really, pls don't tell my code)

😂 1
pez 2021-04-29T15:01:01.454600Z

Hahaha, I take that as a win!

raymcdermott 2021-04-29T18:20:38.455Z

morning

raymcdermott 2021-04-29T18:28:51.456400Z

myself and my son were fiddling with some clojure and after cut n pasting some data this happened

raymcdermott 2021-04-29T18:29:08.456800Z

(:x :y :z)
:z 

borkdude 2021-04-29T18:29:23.457100Z

the default value

raymcdermott 2021-04-29T18:30:15.457500Z

yeah

raymcdermott 2021-04-29T18:30:31.458Z

definitely fun to think through

borkdude 2021-04-29T18:30:51.458900Z

this also tripped up @viebel with multimethods, see #clojure , it created a memory build-up in his production system since multi-methods cache dispatch return values

raymcdermott 2021-04-29T18:31:02.459200Z

main problem was that that we were doing (rest (:x :y :z))

borkdude 2021-04-29T18:31:06.459500Z

he used a keyword as the dispatch function

raymcdermott 2021-04-29T18:31:27.459900Z

and CLJS said :z was not ISeqable

raymcdermott 2021-04-29T18:31:39.460100Z

fun error

raymcdermott 2021-04-29T18:32:03.460700Z

main reason was that the cut n paste was (:x :y :z) and not '(:x :y :z)

raymcdermott 2021-04-29T18:34:04.461200Z

this is the complete summary of the session

raymcdermott 2021-04-29T18:34:13.461600Z

(def x {:foo (:x :y :z)})
#'user/x
user=&gt; (rest (:foo x))
Execution error (IllegalArgumentException) at user/eval9 (REPL:1).
user=&gt; Don't know how to create ISeq from: clojure.lang.Keyword
(:x :y :z)
:z
user=&gt; (:x :y)
nil
user=&gt; (:w :x :y :z)
Execution error (IllegalArgumentException) at user/eval15 (REPL:1).
user=&gt; Wrong number of args passed to keyword: :w

raymcdermott 2021-04-29T18:34:47.461900Z

keywords are fun fn

borkdude 2021-04-29T18:35:15.462300Z

IFn to be exact :)

raymcdermott 2021-04-29T18:35:33.462500Z

thanks

borkdude 2021-04-29T18:35:52.462700Z

YouFn

borkdude 2021-04-29T19:59:57.463200Z

@pez Watching your talk, great work, nothing to be ashamed about. And you got an hour, which is quite long for a talk

✔️ 1
pez 2021-04-29T20:14:13.466100Z

Thanks! Yes, the time thing was to large parts a miss-communication. Threw me off balance, but watching the talk it doesn’t show very much how tough that hit me. Except for maybe there in the end… 😃

pez 2021-04-29T20:15:24.466400Z

Here’s the video with only my talk, btw: https://www.youtube.com/watch?v=LR7Wv6bSZqE