Fork me on GitHub
#clojure
<
2015-12-11
>
darwin00:12:10

another problem, is prn-str always guaranteed to return valid EDN to be parsed by read-string? for some reason it is dropping double-quotes sometimes when printing maps, I’m not sure it this is not related to some repl stuff or printer configuration

seancorfield00:12:57

Sounds like a print-dup issue?

darwin00:12:10

@seancorfield: thanks, will try to tweak that setting, btw, I have switched that to transit and now it works without problems

rcanepa01:12:27

Someone know what the difference between using defschema versus a plain def?. I couldn’t find an answer on the prismatic schema github page.

rcanepa01:12:26

I read some tutorials in which the author used defschema, but in the prismatic website I only see schemas defined by def.

roberto01:12:48

not much difference. It just adds some meta data.

roberto01:12:09

docstring from the code itself "Convenience macro to make it clear to reader that body is meant to be used as a schema. The name of the schema is recorded in the metadata."

rcanepa01:12:29

@roberto: Oh. I read that and I wasn’t sure if there was something else about it.

currentoor05:12:54

Does anyone have an example use of this lein template? https://github.com/stuartsierra/reloaded

currentoor05:12:20

a web app perhaps, built using @stuartsierra’s workflow?

billypiston07:12:38

Hello! I only start studying Clojure. Prompt please about the conditional operators if. Where to find detailed information?

roelof07:12:22

here you can find info about all functions that you can use

billypiston07:12:06

Prompt please in the solution of a task. I have a clojure-project. I use a hiccup and Bootstrap styles. Everything works, but here only I don't understand as conditional operators work. Here my code: Project.clj file: (defproject yupppie "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {: name "Eclipse Public License" :url "http://www .http://eclipse.org/legal/epl-v10.html" } :dependencies [[org.clojure/clojure "1.7.0"] [ring "1.4.0"] [compojure "1.4.0"] [hiccup "1.0.5"]] :plugins [[lein-ring "0.9.7"]] :ring {: handler yupppie.core/app }) Yupppie.core file: (ns yupppie.core simple_smile require [compojure.core: refer: all] [compojure.route: as route] [ring.middleware.params: refer [wrap-params]] [clojure.pprint: refer: all] [hiccup.core: refer: all] [hiccup.page: refer [include-css include-js]])) (defn home [] (html [: head (include-css "/bootstrap-3.3.6-dist/css/bootstrap.min.css") (include-css "/styles.css") (include-css "https://fonts.googleapis.com/icon? family=Material+Icons") (include-js "/bootstrap-3.3.6-dist/js/bootstrap.min.js")] [: body [: div {: class "col-lg-6" } [: div {: class "input-group" } [: input {: type "text": class "form-control": placeholder "How old are you?" } [: span {: class "input-group-btn" } [: button {: class "btn btn-default": type = "button" } "Go, baby!"]]]]]])) ; (defroutes app (route/resources "/") (GET "/" [] (home)) (POST "/saveform" req (with-out-str (clojure.pprint/pprint simple_smile params req))))) (def apps (wrap-params app)) I began to study it recently so so far not really I understand. I have a simple form. And at input in the field of figure less than 18 and pressing the button, it is necessary to make so that the picture was shown, and at input of figure 18 or more other picture. Here is how to me to use the conditional operator if that it earned?

roelof07:12:14

oke, so you need to some sort of validate function

roelof07:12:42

I think for these sort things you first need to learn the basics

roelof07:12:04

Did you read a book about clojure or did exercises of 4clojure or did the clojure koans , @billypiston

roelof07:12:38

I think you have to do some sort of if in the save form module

billypiston07:12:06

But you couldn't prompt to me as to solve this problem?

roelof07:12:46

sorry I cannot , im also a beginner and I have not work on form and param of a form

roelof07:12:10

and in this channel we like to learn people things and not just give answers

roelof07:12:33

I think you have to look at the parameters or req to see how the contents of the form is stored

roelof07:12:41

then you could do something like this (if (= (parameter which holds the number) 18) (print picture))

roelof07:12:02

or use a cond if you have more then 1 possibility

roelof07:12:00

but if you do not know the basics then you have a very hard time to finisch your programm

roelof08:12:29

youre welcome

roelof08:12:31

@billypiston: did you already figured out where and how to entered number is stored ?

roelof08:12:25

what does (with-out-str (clojure.pprint/pprint :simple_smile: params req))))) gives then

roelof08:12:44

I thought it will print the params and the req ?

billypiston08:12:18

I did it according to the instruction and still not really well I understand a code. I simply юы wanted that you prompted that I need to read to solve my task.

billypiston08:12:02

I attached all the code above and I don't know as where to enter that after input the picture was shown 18, and after input of number less than 18 another was shown.

roelof08:12:20

sorry but when I ran your code in cursive it will not run. There is a missing :main in your project.clj

roelof08:12:43

I hope some expert can and is willing to help you

roelof08:12:47

I think you need something like firebug for Firefox to see what the form is sending exactly

billypiston08:12:00

Thanks. Everything works for me. Probably you didn't connect some files. And with my task I hope to me somebody will prompt.

roelof08:12:23

I hope so. Which IDE do you use then

roelof08:12:33

and luck with your project

billypiston08:12:02

I use IntelliJ.

roelof08:12:20

oke, me too

roelof08:12:35

Intelij with Cursive

roelof08:12:45

still the best one

roelof09:12:25

sorry I can not help you. I hope a experts will help you soon

billypiston09:12:41

Ok. Thank you

roelof09:12:20

YW = Your Welcome

agile_geek10:12:54

@roelof: @billpiston - I am going to move my answer to this thread the #C053AK3F9 channel to keep down chatter in this channel.

borkdude12:12:57

Who has a good example of a clojure macro that shows how you can get rid of boilerplate that you would have in java?

borkdude12:12:06

(or other non-macro good is good also).

borkdude12:12:15

We chose the example from Programming Clojure: https://gist.github.com/borkdude/533beb1b833828092c35 But this is not entirely fair anymore since Java 1.8

sveri12:12:04

@borkdude: How about any DTO / Factory and all the other x00 layers that are between one end and the others? I am serious here, the example might be a bit abstract, but it shows the strenghts of the data first approach IMO

borkdude12:12:45

yeah, but it has to fit inside a Java magazine on one page

borkdude12:12:56

and I want it to be a code example preferably

borkdude12:12:39

In Java 8 the example would be:

boolean allBlank(String str) {
        return str.chars().allMatch( c -> Character.isWhitespace(c));
 }

borkdude12:12:54

Wonder if @stuartsierra will use a different example in the next edition of the book simple_smile

sgerguri12:12:09

@borkdude: You still need to define an interface for the lambda, which kind of strips a lot of the benefits of using an anonymous function.

danielstockton13:12:24

having trouble with bidi and cors requests

danielstockton13:12:38

options method returns 404, although it's added to the route def

danielstockton13:12:22

cors POST requests always send an options pre-flight, it's browser enforced

danielstockton13:12:55

nvm, i had a typo in the cors middleware

cored13:12:51

<!here|@here> hi all

kauko13:12:35

Nice ping 😄

mmln13:12:38

why would you...

cored13:12:47

wow this is a super welcoming community

kauko13:12:53

Maybe I should turn off here and all pings 😛

snowell13:12:07

@cored Well you did ping everybody 😉

cored13:12:07

I'm checking differnt languages to know which should be my next move, I'm a Ruby developer

cored13:12:34

I thought in Clojure but don't know if from an job market point of view will be good option; I did some Racket in the past so I like it

deas13:12:39

Mahlzeit

cored13:12:57

been checking out Go lately too because of the market

rm13:12:12

@cored, don't find clojure job, create it! :)

cored13:12:26

rm: well, if only I could hehe

cored13:12:34

I work as a Ruby developer by day

rm13:12:48

I did too. Now we're slowly switching to clojure

cored13:12:52

but some stuffs about Ruby bothers me to be honest

cored13:12:07

at my current job we are building stuffs in Go

cored13:12:23

but Go doesn't feel that appealing I'm learning it because of my job not exactly because I like it that much

cored13:12:35

in some ways reminds of Java 1.4 which was what I was doing before moving to Ruby

cored13:12:09

but one of the advantages that I see of Go is the fact that is static linked after compiling a program, Clojure for intsance needs an investment in the JVM

sgerguri13:12:27

Just pick a functional lang, any one.

cored13:12:42

also, one of the issues that I have with Ruby and teams is the lack of types not everybody knows how to write proper tests to take care of that but Clojure is a dynamic typed language

sgerguri13:12:03

It's hard to gauge what is going to be successful in the long term anyway, unless you're willing to invest in all the major ones at once.

cored13:12:04

so wouldn't that mean the same issues in big teams?

cored13:12:38

sgerguri: well, base on that argument I could pick Haskell which I'm checking for academy purpose I don't think I'll find a job in it at least not in the mainstream

sgerguri13:12:55

You're not going to find a 'mainstream' job in Clojure either.

sgerguri13:12:30

I used to be probably one of the ~10 paid Erlang engineers in the country I come from, and I had to move to the UK to get a Clojure position.

jannis13:12:18

@cored: I don't think issues in large teams are caused by the choice of programming language.

cored13:12:00

sgerguri:gotcha

cored13:12:50

jannis: well, what I'm saying is that we as developers need to have a very good communication skill to share stuffs but if the language has some quirks then it will be even harder

sgerguri13:12:56

There's a limit to how far you can take a lang - and the typing is just one part of it. The other is practices, how the code is structured etc.

cored13:12:04

I always say that dynamic languages require a better type of developer to work on

cored13:12:16

if you have intermidate developers working on those type of platforms it will be harder to manage a big code base

sgerguri13:12:58

Erlang is dynamically typed and our platform backbone had 30k+ lines of it. It was also massively concurrent and distributed, but you could still wrap your head around it.

sgerguri13:12:47

What I'm writing in Clojure now is just a bunch of (micro)services so each one tends to be relatively small, in the hundreds to low thousands of lines of code.

cored13:12:06

I think Clojure use is higher in the USA which is where I'm living right now

cored13:12:09

make sense

cored13:12:14

what do you think about Go ?

cored13:12:29

is getting a lot of momentum lately

sgerguri13:12:06

I wouldn't learn a tech just because there's demand for it. Learn it because it teaches you something new.

sgerguri13:12:28

Clojure for the whole data-first, transformation approach. And for it being a lisp.

sgerguri13:12:51

Erlang for its concurrency model/distribution and approach to failover.

sgerguri13:12:56

Haskell for the type system and purity.

jannis13:12:09

@cored: Judging from the large number of C projects and the awfulness I've seen there, I'm not sure I agree. I would agree however that the language can make aspects such as maintainability harder. One example would be the ten different ways to write a simple loop in Ruby - everyone does it differently, so unless you enforce a specific style, your code can end up a mess. I'd argue that typing is only a small factor in this.

cored13:12:28

sgerguri: was thinking in Elixir instead of Erlang

cored13:12:33

sgerguri: but I see your point

cored13:12:08

jannis: so, I'm right on that part it's a matter of communication skills

sgerguri13:12:19

I'm not a big fan of learning hosted langs first. Learn the underlying tech before you go for what's built on top of it.

cored13:12:45

sgerguri: the downside for me is that for the fact that Go programs are easy to deploy at my current job are starting to use it to rebuild/build part of the application as micro services

cored13:12:55

sgerguri: make sense

jannis13:12:06

@cored: Yes, communication, code review, discipline... it takes a good developer to write good, maintainable software, in any language.

cored13:12:44

I have interest in Clojure because of what can teach me as a Lisp and as mention I did some racket which was fun

cored13:12:10

and as with Ruby at the time I started with it I just did for fun, ended up finding a lot of jobs and quitting Java

cored13:12:33

are any of you going to the software craftmanship meeting tomorrow?

cored13:12:45

could be good to see an expert doing some problems in Clojure

sgerguri15:12:28

Here's a question to the wider Clojure community - do you do top-down (i.e., from the api interfaces/main logic loop towards the data structure manipulation functions that you'll need) or bottom up (data structures first, then main logic flow/API level)?

sgerguri15:12:44

I have a colleague who's very much into the bottom-up style, which I find usually leads to weird design unless you have very clear idea in your head as to where you are going. Interestingly, he seems to be the only one around who is so rigid about it, everyone else usually switches between the two as needed (myself included).

joost-diepenmaat15:12:50

I do a mix usually

sventechie15:12:56

@sgerguri I really like to start with the data structures and then go back to top-down and revise them based on what the overall API tells me about what’s happening.

donaldball15:12:58

Thinking about the api I want usually leads me directly to consider the data structures I want the fns to operate on

joost-diepenmaat15:12:29

The bottom up stuff is useful if I don’t know what the algorithm is going to be. Makes small tests and incremental experimentation easy

donaldball15:12:44

I’d call it top-down more often than not: write the code I want, then write the code I need in order to make it work

sventechie15:12:55

@donaldball True, looking at the function level helps for both. If you keep functions small it is easy to revise the structure.

joost-diepenmaat15:12:00

And sometimes you end up realizing that the “big picture” needs to change once you’ve worked on the low-level view for a bit

joost-diepenmaat15:12:50

the big problem with bottom-up is that it’s very easy to lose sight of the actual intended final product. so you can end up chasing down a rabbit hole that leads to the wrong solution

joost-diepenmaat15:12:12

at least if you have a brain like mine ;D

sgerguri15:12:48

Thanks for chipping in, guys.

abp15:12:07

@sgerguri: There is a video of a talk about bottom up and top down from last clojure conj

sgerguri15:12:57

@abp: I've seen it. The trouble with cases like these is that you naturally have a reasonably big program state which you need to transition.

jaen15:12:08

I'd go with it depends - more often than not building up function from simple manipulations towards more complex routines is the most sensible route, but sometimes you know what sort of toplevel structure you want. For example right now I'm writing a scaffolding for event sourcing and I do a bit of both - I understand what general shape would components in the system have and do a bit of bottom-up shaping exact methods that work on the events that I attach on those components.

timvisher15:12:19

is anyone aware of any reason not to set jetty's response header size limit to essentially unlimited in dev?

timvisher15:12:33

we use liberator and want to have liberator trace headers on all the time

sgerguri15:12:45

So it naturally leads to a data-manipulation-approach-first, since the majority of logic is going to be pure. Living in the AWS as a microservice talking to Kafka and Dynamo means large chunks are impure, however.

timvisher15:12:45

that very quickly exhausts 8192

meow15:12:38

I'm not sure which direction I work. I tend to be the user of the api for the libraries I create so I usually have some capability in mind that I want to have and I rework things as much as necessary until it gets to the point that I can do what I want with a minimum of fuss.

abp15:12:57

@sgerguri: take datomic as an example, is big state transition really bad? Sorry in mobile, so terse

sgerguri15:12:05

Said colleague of mine has taken this data approach to the extreme, we have reifications of atom interfaces so that Dynamo items can be treated as any other atom, with atomic CAS swaps.

meow15:12:32

Just have to say - floats are the work of the devil himself - what a royal pain in the ...

meow15:12:29

Trying to figure out why I'm sometimes ending up with a messed up polygon mesh. 😞

sgerguri15:12:35

I don't know - like @joost-diepenmaat said, I find it fairly easy to lose sight of your destination when doing bottom up. It's fine if you can treat everything like pure data, but I find it easier to just flesh out the main logic and fill in the pure stuff once I have a skeleton ready than the other way around.

abp15:12:06

Hm but those are different problems @sgerguri dont conflate

abp15:12:36

From my experience clear data based approaches slim the design, so yea there is potential for mistakes but also great oppurtunities

sgerguri15:12:29

@abp I suppose they are, but they are related - this (along with a few other things) basically allows you to treat external storage almost like the local one, and in such scenario you can really write the entire program logic using simple data manipulation functions. And in those situations doing pure bottom-up kind of makes sense.

jjconti15:12:31

do you use breakpoints in your code and code execution stops there when calling that code from the REPL inside Cursive? I tried that and it's not working.

sgerguri15:12:02

Anyway, thanks to everyone who chipped in, I appreciate hearing your opinion.

sveri15:12:33

Is there a way to represent an empty string as a keyword?

bronsa15:12:00

not using the reader

sveri15:12:17

@bronsa: ok, thank you

bronsa15:12:06

you can always do that, but it's a really terrible idea

sveri15:12:29

Yea, I just tried (first [:]) and it throws an exception

donaldball15:12:07

@sgerguri For the dynamo atoms, what’s the behavior when a dynamo request errors or times out?

jjconti15:12:51

which is the clojure way to extract "clojure" out of this string? "highlight highlight-source-clojure"

sgerguri15:12:13

@donaldball: Off the top of my head, not exactly sure - I think there's an error thrown. Check out https://github.com/mixradio/multi-atom for the implementation.

pupeno15:12:49

@jjconti: what do you mean by extract? return a string without clojure, just the rest?

danmidwood15:12:12

I feel like I'm missing something fundamental here, can someone explain to me why this assertion is being checked?

user> (binding [*assert* false] (assert (= 1 2)))
AssertionError Assert failed: (= 1 2)  user/eval76726 (form-init2864370576484743983.clj:1)

pupeno15:12:29

Any ideas why my project is not deleting resources/public/js when I run lein clean? This is my configuration: https://github.com/carouselapps/ninjatools/blob/master/project.clj#L60

jjconti15:12:44

@pupeno: no, return only 'clojure'. I'm doing

jjconti15:12:45

(clojure.string/replace "highlight highlight-source-clojure" "highlight highlight-source-" "")

pupeno15:12:07

What do you want to happen if clojure is not present?

derwolfe15:12:46

Hi - I’m using timbre for logging and am curious about how it handles lazy sequences. I’m basically just doing (timbre/info “some keys” (keys a-map). My question is; is this a bad idea and should I be calling (doall (keys a-map))

jjconti15:12:02

"clojure" can be not present. It can say "ruby" instead

mpenet15:12:56

danmidwood: not sure you can set assert this way, it's a compile time thing

pupeno15:12:36

jjconti: maybe

(re-seq #"highlight highlight-source-(.*)” "highlight highlight-source-clojure")
or something like that.

danmidwood15:12:55

@mpenet: Ah, of course. That makes a lot of sense, thanks

jjconti15:12:12

pupeno: thanks

mpenet15:12:12

danmidwood: would be nice to have a property to toggle it ex: -Dclojure.compiler.assert=false

cored16:12:08

sgerguri: docker containers is the way to try new languages/environment at any job :-) talking about our last conversation

cored16:12:19

like I can build a clojure service put it inside a container and test things out in there

sgerguri16:12:04

Whatever you do, just don't ask for permission.

sgerguri16:12:23

Unless you're working at an enlightened place chances are you're not gonna get it.

cored16:12:07

like not saying that I'm going to build this?

sgerguri16:12:11

Like not saying you're going to write it in "x" if you can get all the support tooling ready to deploy and monitor it.

sgerguri16:12:32

Or build a prototype and showcase it afterwards, with a focus on the advantages this gives you.

clojuregeek16:12:37

Trying to write a test that will stub out the lambda/get-function ... trying this ...

(deftest test-exception-throw-invalid-function
  (with-redefs-fn {#'lambda/get-function (fn [c f n] "yikes")}
    (let [result (handler/get-policy-link "foobar")]
      (is (= result "blah")))))
and get this
ERROR in (test-exception-throw-invalid-function) (core.clj:7209)
Uncaught exception, not in assertion.
expected: nil
  actual: java.lang.ClassCastException: java.lang.Boolean cannot be cast to clojure.lang.IFn

clojuregeek16:12:09

i expect a failing test. like blah is not yikes or something 😉

bronsa16:12:58

@clojuregeek: with-redefs-fn takes an anonymous function as its body

bronsa16:12:09

(with-redefs-fn {..} (fn [] ..))

bronsa16:12:04

it's a function, not a macro. if you want to avoid the (fn [] ..) and the vars that you're redeffing are known at compile time, you can use with-redefs instead

cored16:12:32

sgerguri: gotcha

bronsa16:12:38

the -fn suffix is about with-redefs-fn being the function variant of with-redefs, not about the kind of vars that it can redef

clojuregeek16:12:48

ok let me try some more.. thanks ... but in theory, its possible to redefine the function in the lambda namespace when its used in the function i want to test?

bronsa16:12:34

try this:

(deftest test-exception-throw-invalid-function
  (with-redefs [lambda/get-function (fn [c f n] "yikes")]
    (let [result (handler/get-policy-link "foobar")]
      (is (= result "blah")))))

roberto16:12:43

@clojuregeek: you can also try conjure

clojuregeek16:12:24

cool, i'll take a look .. but I think i want to just have one simple test right now.. trying example from @bronsa

tesseract17:12:20

is there an up to date web programming book for clojure?

jaen17:12:07

The newest I'm aware of is a year behind.

jaen17:12:32

This one

jaen17:12:56

There's supposed to be a new edition of https://pragprog.com/book/dswdcloj/web-development-with-clojure but it's not out yet.

tesseract17:12:32

@jaen perhaps I can contact the author and get an early sample simple_smile

tesseract17:12:42

@yogthos: any chance I can get a preview ?

yogthos17:12:54

@tesseract: I don't actually have any control over that, the publisher figures out everything related to distribution

yogthos17:12:08

good news is that the beta is scheduled for Jan 13th, so not a long wait simple_smile

tesseract17:12:16

@yogsototh: that is good news

Tim17:12:33

yeah I’m holding my breath for that book

roelof17:12:41

@yogthos: in the new book light table is also used or can I follow it when I want to use cursive ?

yogthos17:12:09

I dropped anything editor specific in the new edition actually

yogthos17:12:43

and I use cursive myself, so the workflow in the projects is definitely cursive friendly simple_smile

roelof17:12:54

that is good news

roelof17:12:14

at this moment, my focus is on learning clojure with the help of 4clojure

clojuregeek17:12:35

@bronsa sorry got sidetracked, yes that works great simple_smile thanks!

roelof17:12:46

somewhere in 2016 I want to make my first website in clojure

stuartsierra17:12:30

@borkdude: That's Stuart Halloway's book, not mine simple_smile

tesseract17:12:29

@yogthos: any tips for learning now or just the luminus docs?

yogthos17:12:50

the luminus docs are probably a good place to start

yogthos17:12:28

I've tried to aggregate all the common examples for typical web apps there

roelof17:12:19

oke, and that docs are up-to-date. I tried the web Essentials book about luminus but I got the idea that some things were changed already

tesseract17:12:52

@roelof: yes currently it is out of date

roelof17:12:00

that is why I put my tries to make a simple web app on hold

roelof17:12:31

I hope I can find docs for things like login and authorisation

tesseract17:12:35

@roelof: luminus has some documentation around that

tesseract17:12:48

I am just reading the READMEs of the underlying libraries

tesseract17:12:08

like immutant/compojure/ring and also luminus’ doc

tesseract17:12:50

@yogthos: perhaps someone has a working basic web app with authorization built in so we could examine the source code?

tesseract17:12:54

just in case you happened to know

yogthos17:12:10

@tesseract: hmm not sure of any off top of my head, the ClojureCup entries for this year might be a place to look actually

roelof17:12:51

@tesseract: if you find one. Could you send me a link

roelof17:12:58

I will do the same to you

jaen18:12:17

But it uses JWT

jaen18:12:27

So it's a bit different than your usual multi-page webapp

tesseract18:12:02

most of them have no auth and if they do it seems to be oauth

roelof18:12:43

maybe look at buddy or Friend then

roelof18:12:09

@tesseract: the buddy tutorial looks very good at first sight

tesseract18:12:54

@roelof: thanks, I am learning the same stuff as you

jaen19:12:57

Yeah, buddy is pretty approachable compared to friend

roelof19:12:30

and the buddy tutorial is quite good to understand

roelof19:12:37

Then I have to make a decesion. Make first a sample app with hiccup or wait on Om next

roelof19:12:51

and try to learn some react in the meantime

roelof19:12:43

first try some more challenges from 4clojure

roelof19:12:27

I have almost of the easy challenges ready. I think some 10 to go

jaen19:12:09

If I were you I wouldn't wait on Om.next. It solves problems you won't appreciate it solving until you encounter them. It will just feel needlessly complex. I'd rather try writing with reagent and re-frame first and after you get your bearings in that, only then try Om.next.

jaen19:12:16

Or you can just keep writing multi-page applications first

jaen19:12:22

That's even easier than React.

roelof19:12:51

oke, I like to make a sort of ecommerce site and I like the idea that the shopping card is updated without a browser needs to load everything again

roelof19:12:09

Reagent can do that

roelof19:12:31

and are there tutorials about re-frame and reagent

jaen19:12:05

re-frame has a brilliant readme

jaen19:12:16

And very good wiki

jaen19:12:01

Including documents explaining various reagent topics - https://github.com/Day8/re-frame/wiki#reagent-tutorials

jaen19:12:41

That's probably all you need to get started with reagent.

roelof19:12:13

Thanks, I will read them all and look if it's fit for me

donmullen19:12:00

@roelof: You should also take a look at http://hoplon.io and http://boot-clj.com/. Hoplon is an alternative to the react-based front-ends and is VERY approachable for those new to clojure. The #C08BDAPRA channel is active and the folks there very helpful.

donmullen19:12:44

https://github.com/exicon/homepage uses hoplon - and they published their front-end - as well as https://github.com/exicon/webapp-skeleton (which may be dated).

roelof19:12:12

I will also take a look at that

rantingbob19:12:20

The more I read about the reactive frameworks the more I think I like the style of quiescent

rantingbob19:12:28

Its small, it does one thing, and it isn't reinventing the atom wheel (insert usual caveat: I'm a noob and probably don't know what I'm talking back)

donmullen19:12:57

@rantingbob: I’ve found https://github.com/hoplon/javelin fairly compelling - easy for people to understand the spreadsheet model of cells / formula cells.

sveri20:12:46

@tesseract: @roelof closp has authorization and authentication built in using buddy: https://github.com/sveri/closp

sveri20:12:13

@tesseract: np, if you have questions, just go ahead

roelof20:12:30

@sveri: why does this part -n foo.bar in the lein new command

oli20:12:09

@roelof @tesseract is delegating authZ authN an option?

sveri20:12:22

@roelof: it creates a default namespace like foo.bar.core.clj, you can omit that

tesseract20:12:04

@oli: no, local with DB is preffered

roelof20:12:59

sveri if I want to run your showcase the logindata is provided are not working

roelof20:12:39

but the idea looks good

roelof20:12:08

nice material to study how things like login and roles can work

roelof20:12:29

@sveri can I use it and adapt it to my own needs

tesseract20:12:17

@oli: for someone getting started is it worth looking at boot or should I just use lein ?

roelof20:12:23

I like to use datomic later on in the project because I think I need a lot of joins

roelof20:12:05

I call it a day. See you all tommorrow

roelof21:12:13

@sveri : one question, Where can I find out how I can tell which user has which role

sveri21:12:20

@roelof: you mean the one at http://sveri.de? could be someone changed it, there is no reset job. Apart from thatlein repl

sveri21:12:32

Sry, did not want to send this

roelof21:12:59

but no sweat

sveri21:12:06

I am setting this up again, I think someone just changed the passwords

roelof21:12:26

I will use this on my own computer

sveri21:12:47

Regarding the auth question. look here: https://github.com/sveri/closp/blob/master/resources/leiningen/new/closp/clj/service/auth.clj roles are "hand baked" and currently there is only a difference between a not loggedin user a logged in user and an admin

roelof21:12:24

oke, so the user admin is the admin and the other user are only registered

roelof21:12:36

Thanks for clearing this

roelof21:12:10

May I use this and adapt to my own needs ?

sveri21:12:15

of course

sveri21:12:20

that's what it's there for

roelof21:12:07

oke, I hope I can learn from it

roelof21:12:19

as how login works

sveri21:12:14

Take it step by step, my template is pretty exhaustive and picking single parts from it is difficult if you are new to clojure / the webstack

roelof21:12:04

thanks, I will also read things like the buddy and so on

roelof21:12:27

and im in no hurry because this is at this moment a hobby project

sveri21:12:45

sounds good simple_smile

tesseract21:12:06

@sveri: I am watching the component talk from Sierra to see how your stuff differs simple_smile Also I need to figure out ring and the like first, but your template looks great.

tesseract21:12:10

Step by step like you said

sveri21:12:44

I am using system: https://github.com/danielsz/system/ which sits on top of component, offering some readymade ones. It is component just with a thin wrapper around it

oli22:12:16

@tesseract: i've never had an itch that i needed boot to scratch but i'm just a hobbyist YMMV

sveri22:12:31

@roelof: the showcase is working again