[JOB] Multiple roles | Board Intelligence (London, UK / Remote)
Hello! New year and new beginnings? Perhaps you feel it is time to take the step to work with Clojure commercially in the new year? Board Intelligence (BI) is looking for talented people to join our team. We are searching for smart and talented senior developers and DevOps/SRE professionals to help architect and build systems powering boardroom conversations at companies like Easy Jet, Aviva, Britting Gas, BT and Royal Mail. Clojure is our language of choice for internal infrastructure and tooling, and we are progressively leveraging Clojure also for our client facing services. Hence we are searching for smart people on this list to help us continue down this path. We hope that for the right person this will be a great opportunity to take on an important role in an interesting company, while working with Clojure commercially. Ideally we would like someone that is able to spend time in our London offices, but for the right person exceptions could be made. Anyone interested can get in touch with me directly at: patrik.sundb...@boardintelligence.com https://www.boardintelligence.com/ WHAT WE'RE LOOKING FOR * Someone who is smart and cares deeply about his/her craft * Someone we can learn from * A good communicator ABOUT US * BI seeks to help improve the effectiveness of boards across corporate and public sectors * BI powers boardroom conversations for the likes of Easy Jet, Aviva, British Gas, BT and Royal Mail * Our focus on technology for the board room grew out of our existing consulting business 5 years ago and is now the core of what we do * We have grown organically to the current size of ~50 people (tech team of 12) * The company is owner managed and in control of its own destiny ABOUT YOU * Developers: You are a strong developer who delivers solid finished work * DevOps/SRE: You take a holistic approach to reliability all the way from infrastructure to application code * You are aware of your own limitations and when to seek out wider collaboration * You have your own strong opinions but retain an open mind * You enjoy learning new things and pick up new skills quickly * You take initiative and are comfortable working without much direction OUR TECHNOLOGIES * Languages: Ruby, Clojure, JavaScript, Go * Data: Postgres, Kafka, OpenStack Swift * Orchestration: Kubernetes + internal tooling -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Question: How do you organize large clojure projects?
I've been happy using a monorepo with boot, and a build.boot with many building blocks that can be mixed and matched for many deployables (uberjars in my case). In my build.boot I define my internal blocks, but also defs for external deps like eg postgres and grpc. That way I have one place for these groups of dependencies to manage, and can merge them into many of my own building blocks in a flexible and consistent way. There are no checkouts, multiple outputs and consistent usage of dependencies. If I need different release management/deployment process for different deployables of my own I tend to use different release branches by deployable that my ci/CD setup triggers from. Hope that helps! -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[JOB] Senior engineer | Board Intelligence (London, UK / Remote)
Hello! Board Intelligence (BI) is looking for talented people to join our team. We are searching for smart and talented senior engineers to help architect and build systems powering boardroom conversations at companies like Easy Jet, Aviva, Britting Gas, BT and Royal Mail. Clojure is our language of choice for internal infrastructure and tooling, and we are progressively leveraging Clojure also for our client facing services. Hence we are searching for smart developers to help us continue down this path. We hope that for the right person this will be a great opportunity to take on an important role in an interesting company, while working with Clojure commercially. Ideally we would like someone that is able to spend time in our London offices, but for the right person exceptions could be made. Anyone interested can get in touch with me directly at: patrik.sundb...@boardintelligence.com https://www.boardintelligence.com/ WHAT WE'RE LOOKING FOR * Someone who is smart and cares deeply about his/her craft * Someone we can learn from * A good communicator ABOUT US * BI seeks to help improve the effectiveness of boards across corporate and public sectors * BI powers boardroom conversations for the likes of Easy Jet, Aviva, British Gas, BT and Royal Mail * Our focus on technology for the board room grew out of our existing consulting business 5 years ago and is now the core of what we do * We have grown organically to the current size of ~50 people (tech team of 12) * The company is owner managed and in control of its own destiny ABOUT YOU * You are a strong developer who delivers solid finished work * You are aware of your own limitations and when to seek out wider collaboration * You have your own strong opinions but retain an open mind * You enjoy learning new things and picking things up quickly * You take initiative and are comfortable working without much direction OUR TECHNOLOGIES * Languages: Ruby, Clojure, JavaScript, Go * Data: Postgres, Kafka, OpenStack Swift * Orchestration: Kubernetes + internal tooling -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[JOB] Clojure / SRE | Board Intelligence (London, UK / Remote)
Hello! Board Intelligence (BI) is looking for a talented person to join us in a multifaceted role focusing on platform reliability in the wider sense of the word. All the way from operational setup, to CI/CD pipeline, to developing our services in a solid fashion from a reliability perspective. The reason I'm posting this on a Clojure mailing list is that Clojure is our language of choice for our internal infrastructure, and progressively for client facing services as well. In an ideal world we're looking for a person part Site Reliability Engineer and part Clojure developer. There are periodic infrastructure heavy projects interspersed with more traditional development work on internal and external tools and services. We hope that for the right person this will be a great opportunity to take on an important role in an interesting company, while working with Clojure commercially. Ideally we would like someone that is able to spend time in our London offices, but for the right person exceptions could be made. Anyone interested can get in touch with me directly at: patrik.sundb...@boardintelligence.com https://www.boardintelligence.com/ WHAT WE'RE LOOKING FOR - Someone who is smart and able to own reliability from day 1 or as you progress - A good communicator - A person who is comfortable with a broad role ABOUT US - BI seeks to help improve the effectiveness of boards across corporate and public sectors - BI powers boardroom conversations for the likes of Easy Jet, Aviva, British Gas, BT and Royal Mail - Our focus on technology for the board room grew out of our existing consulting business 5 years ago and is now the core of what we do - We have grown organically to the current size of ~50 people (tech team of 12) - The company has always been profitable ABOUT YOU - You have a broad technology background in the sense of being able jump in and quickly pick up what you need to know at any level of the stack - You are aware of your own limitations and when to seek out wider collaboration - You have your own strong opinions but retain an open mind - You enjoy learning new things and picking things up quickly - You take initiative and are comfortable working without much direction OUR TECHNOLOGIES - Orchestration: Kubernetes + internal tooling - Data: Postgres, Kafka, OpenStack Swift - Languages: Ruby, Clojure, JavaScript, Go -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: detecting running as script
Yeah - I ended up in this thread from some searching, then got distracted/confused about browser tabs and didn't realize I was dealing with a 9 year old thread :) Thanks for the history! On Tuesday, June 12, 2018 at 8:44:32 PM UTC+1, Sean Corfield wrote: > > I thought this was the go-to library for command line parsing: > > > > https://github.com/clojure/tools.cli > > > > I believe it is, yes. Some history: > >- I think clojure.contrib.command-line was created by Chris Houser and >maintained mostly by Stuart Sierra (until 2011). It was deprecated along >with everything else in “Monolithic Contrib” as part of the Clojure 1.3 >release. >- clojure.tools.cli was originally created by Gareth Jones from the >Clargon library (starting in 2011) >- For the 0.3.0 release, Sung Pae took over and rewrote it based on >his optparse-clj library and included ClojureScript support (starting in >2013) >- I took over as maintainer for the 0.3.2 release (starting in 2015) >and I’m happy to look at any enhancement requests or features offered by >any other command line argument parsing library that folks make me aware > of! > > > > Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN > An Architect's View -- http://corfield.org/ > > "If you're not annoying somebody, you're not really alive." > -- Margaret Atwood > > > -- > *From:* clo...@googlegroups.com > on behalf of Patrik Sundberg > > *Sent:* Tuesday, June 12, 2018 6:13:39 AM > *To:* Clojure > *Subject:* Re: detecting running as script > > I thought this was the go-to library for command line parsing: > > https://github.com/clojure/tools.cli > > On Wednesday, January 14, 2009 at 7:11:23 PM UTC, Grunde Løvoll wrote: >> >> Thanks! >> >> I'll have a look at clojure.contrib.command-line. I don't need >> anything super-powerfull, just something that make it easy to define >> and parse command line arguments in the "normal manner". >> >> Sorry about my previous double post :( >> >> Grunde >> >> On Wed, Jan 14, 2009 at 6:00 PM, Chouser wrote: >> > >> > On Wed, Jan 14, 2009 at 5:58 AM, Grunde wrote: >> >> >> >> Now, it these some elegant way to parse and use the passed command >> >> line arguments in my program? Is there any lib like Ruby/Pythons >> >> optparse to assist parsing of command line arguments? >> > >> > There is clojure.contrib.command-line >> > >> > I don't know if it's elegant, and it's certainly not (yet) as powerful >> > as many optparse tools in some other languages, but I've found it to >> > be useful. >> > >> > --Chouser >> > >> > > >> > >> > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clo...@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+u...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+u...@googlegroups.com . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: detecting running as script
I thought this was the go-to library for command line parsing: https://github.com/clojure/tools.cli On Wednesday, January 14, 2009 at 7:11:23 PM UTC, Grunde Løvoll wrote: > > Thanks! > > I'll have a look at clojure.contrib.command-line. I don't need > anything super-powerfull, just something that make it easy to define > and parse command line arguments in the "normal manner". > > Sorry about my previous double post :( > > Grunde > > On Wed, Jan 14, 2009 at 6:00 PM, Chouser > > wrote: > > > > On Wed, Jan 14, 2009 at 5:58 AM, Grunde > wrote: > >> > >> Now, it these some elegant way to parse and use the passed command > >> line arguments in my program? Is there any lib like Ruby/Pythons > >> optparse to assist parsing of command line arguments? > > > > There is clojure.contrib.command-line > > > > I don't know if it's elegant, and it's certainly not (yet) as powerful > > as many optparse tools in some other languages, but I've found it to > > be useful. > > > > --Chouser > > > > > > > > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Best way to include dev-only functions?
I tend to add a path to my :resource-paths in boot for dev-only things. You can do the same with lein (and hopefully any other build tool you use). I'm not sure I got your question fully. My interpretation is that you want to have a different version of the "same" fn, so that other parts of the code that use the fn ends up using a diff version without needing to be changed. I think that's what you asked? :) If so then adding a dev-only path like mentioned above, with the dev versions of the fns, and then e.g. add a wrapper macro that uses with-redefs to point the fns you want to the dev versions from the dev NS. You can then use this macro to to execute code with the dev versions, like (dev-mode (form1) (form2) ... ). On Monday, January 15, 2018 at 4:31:05 PM UTC, Jonathon McKitrick wrote: > > I’d like to have a namespace loaded with dev-only versions of some > functions. > > Is there a better way than using environ with ‘require’ and ’ns-resolve’ > to do this? > > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: fdef for defmulti?
What I meant was that you can spec the defmulti, and code runs just fine, but you can't instrument it. As then you end up with the instrumentation wrapper not being a multimethod, so things break. That's how I read the stack trace. It'd seem possible for instrument to wrap the multimethod with a multimethod stub, so perhaps that's a change to consider. On Thursday, August 18, 2016 at 6:27:08 PM UTC+1, Alex Miller wrote: > > I should mention that a half step is to spec the dispatch function used by > the multimethod. That covers the front-end. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
fdef for defmulti?
Hi, Am I right to think you can't currently fdef a defmulti function? I tried and when running tests using clojure.spec.test/instrument I see: 1. Unhandled java.lang.ClassCastException clojure.spec.test$spec_checking_fn$fn__12959 cannot be cast to clojure.lang.MultiFn core.clj: 1806 clojure.core/get-method core.clj: 1806 clojure.core/get-method time_series.clj: 474 tulos.time-series/eval181936/fn So I guess what happens is the fdef+instrument adds a normal fn wrapper, which then isn't a multi method and it breaks down. Has this been discussed before? Any plans? I didn't find anything. Thanks, Patrik -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Catching exception - lazy eval, lambdas and protocols
In clarifying and correcting my example I found the issue. I was storing a lambda deep inside some data structure and later updating the lambda code to catch exceptions but an effectively cached lambda in my session wasn't updated to the changed one (the evils of state..). A fresh session where all code was consistent and the exception catching worked just as expected. The protos and laziness were coincidental to the cause of my confusion. sorry for the noise. On Sunday, March 30, 2014 5:12:44 PM UTC+1, Patrik Sundberg wrote: > > doh. that's a badly translated example by me. I'll have another go at > translating the actual code that isn't completely broken like attempt 1. > > On Sunday, March 30, 2014 2:24:38 PM UTC+1, Michał Marczyk wrote: >> >> The problem is that inner-lazy is a method of AProto which is >> implemented for ARecord, but actually called (in trigger-fn) on a >> vector of two ARecords. The exception thrown is an >> IllegalArgumentException complaining about the missing method. >> >> inner-lazy2 works, because it's just a regular function. Note that it >> could call the-fn rather than the-fn2 -- the-fn is a method of AProto >> just like inner-lazy, but in this snippet it's actually called on >> ARecord instances, so the method lookup will be successful. >> >> Cheers, >> Michał >> >> >> On 30 March 2014 14:18, Patrik Sundberg wrote: >> > I'm trying to work out how to catch exceptions close to source in some >> code >> > with structure similar to this: >> > https://www.refheap.com/68851 >> > >> > A doall on line 13 doesn't change the outcome. >> > >> > So not involving records and protocol a similar structure does what I >> expect >> > it to do, but with them I seem unable to catch exceptions taking place >> > inside the proto fns. >> > >> > So I realize I'm missing something around how exception handlers are >> setup >> > and triggered with regards to either lazy eval, lambdas or protocols >> (or >> > some combo therein). >> > >> > I'd like my toy example to calculate 20 as a result of calling >> (trigger-fn), >> > same as it does with (trigger-fn2). >> > >> > Any explanations of what's going here would be most welcome - I'd >> really >> > like to understand the exception handling logic. >> > >> > Thanks, >> > Patrik >> > >> > -- >> > You received this message because you are subscribed to the Google >> > Groups "Clojure" group. >> > To post to this group, send email to clo...@googlegroups.com >> > Note that posts from new members are moderated - please be patient with >> your >> > first post. >> > To unsubscribe from this group, send email to >> > clojure+u...@googlegroups.com >> > For more options, visit this group at >> > http://groups.google.com/group/clojure?hl=en >> > --- >> > You received this message because you are subscribed to the Google >> Groups >> > "Clojure" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> an >> > email to clojure+u...@googlegroups.com. >> > For more options, visit https://groups.google.com/d/optout. >> > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Catching exception - lazy eval, lambdas and protocols
doh. that's a badly translated example by me. I'll have another go at translating the actual code that isn't completely broken like attempt 1. On Sunday, March 30, 2014 2:24:38 PM UTC+1, Michał Marczyk wrote: > > The problem is that inner-lazy is a method of AProto which is > implemented for ARecord, but actually called (in trigger-fn) on a > vector of two ARecords. The exception thrown is an > IllegalArgumentException complaining about the missing method. > > inner-lazy2 works, because it's just a regular function. Note that it > could call the-fn rather than the-fn2 -- the-fn is a method of AProto > just like inner-lazy, but in this snippet it's actually called on > ARecord instances, so the method lookup will be successful. > > Cheers, > Michał > > > On 30 March 2014 14:18, Patrik Sundberg > > wrote: > > I'm trying to work out how to catch exceptions close to source in some > code > > with structure similar to this: > > https://www.refheap.com/68851 > > > > A doall on line 13 doesn't change the outcome. > > > > So not involving records and protocol a similar structure does what I > expect > > it to do, but with them I seem unable to catch exceptions taking place > > inside the proto fns. > > > > So I realize I'm missing something around how exception handlers are > setup > > and triggered with regards to either lazy eval, lambdas or protocols (or > > some combo therein). > > > > I'd like my toy example to calculate 20 as a result of calling > (trigger-fn), > > same as it does with (trigger-fn2). > > > > Any explanations of what's going here would be most welcome - I'd really > > like to understand the exception handling logic. > > > > Thanks, > > Patrik > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to clo...@googlegroups.com > > Note that posts from new members are moderated - please be patient with > your > > first post. > > To unsubscribe from this group, send email to > > clojure+u...@googlegroups.com > > For more options, visit this group at > > http://groups.google.com/group/clojure?hl=en > > --- > > You received this message because you are subscribed to the Google > Groups > > "Clojure" group. > > To unsubscribe from this group and stop receiving emails from it, send > an > > email to clojure+u...@googlegroups.com . > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Catching exception - lazy eval, lambdas and protocols
I'm trying to work out how to catch exceptions close to source in some code with structure similar to this: https://www.refheap.com/68851 A doall on line 13 doesn't change the outcome. So not involving records and protocol a similar structure does what I expect it to do, but with them I seem unable to catch exceptions taking place inside the proto fns. So I realize I'm missing something around how exception handlers are setup and triggered with regards to either lazy eval, lambdas or protocols (or some combo therein). I'd like my toy example to calculate 20 as a result of calling (trigger-fn), same as it does with (trigger-fn2). Any explanations of what's going here would be most welcome - I'd really like to understand the exception handling logic. Thanks, Patrik -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Gorilla REPL initial release (0.1.2)
re LT: It'd be a natural thing to dig into if/when you look to move to cljs. For the context at hand I think of an LT plugin as something that: - is easy to edit code/text in - has access to ways of executing "remote" code via nrepl and get back results - have access to files and resources etc via node modules - have access to HTML UI since LT is effectively Chromium in that regard - the plugin itself would most naturally be clojurescript All in all sounds like it could be a nice platform. Your plugin could have some custom ways to execute code which means you get to intercept results as e.g. EDN and then do the same kind of thing you do in the current version - take the descriptive data and generate an HTML UI representation. The UI rep you could have live update inside LT a side-by-side tab to your input source/document for example. (I've got some similar dreams but not sure I'll be able to dig into it anytime soon) On Sunday, February 23, 2014 5:22:32 PM UTC, Jony Hudson wrote: > > Hi, > > thanks again for the kind words and enthusiasm! Let me try and give my > thoughts on some of the points raised: > > ** Light table plugin (@Patrik) ** > > I would like to see this, as I think LT has a lot of potential. Things > like file-handling UI, nice code editing ... are all difficult problems > that I've not really tackled in Gorilla. Light table has those already, so > I could see it working well. I haven't the foggiest how to do it though! > > > ** Extensible (@Jeff) ** > > Yes, it's good to say this explicitly as I think this is key. At the > moment it's very poor in that regard. Before it happens I think the central > thing to pin down and get right is ... > > > ** Value rendering and interaction (@Jeff) ** > > This, to my mind, is the place where real design decisions have to be > made. There are some free-floating ideas in my head, but nothing really > joined-up yet. > > If we leave aside interactivity for a minute: the one thing that is clear > to me is that having the back-end return plain old Clojure values is a > *good idea*. Things you run just produce values, and the front-end knows > how to present values in a way that's helpful to the user. There should be > no state in the front-end that can be accessed by the back-end, no > messaging etc. This I see as the central idea. It's what makes it possible > to compose plots, (and hypothetically) append tables, make a tree-diagram > with plots as nodes, display formulae in tables etc. Because everything > displayed by the front-end is just a Clojure value, and you can manipulate > those as you wish. > > Ultimately, everything has to end up as something the browser can display. > At the moment, all of this conversion is happening in the browser. I had > resisted having this conversion happening in the back-end because I was > nervous about having the front-end evaluate things on the back-end that the > user hasn't explicitly asked for. But maybe that isn't a problem as long as > the rendering functions are tastefully written (i.e. side-effect free). So > maybe what Jeff suggests is the right idea: allow rendering on the > front-end or the back-end, and make these renderers easy to plug in. > Back-end rendering works well for extensibility too, as renderers could be > plugged in as needed per project. Extending the set of renderers on the > front end, looks less clean - either they'd be baked in, or there'd need to > be some way to inject them at runtime. Perhaps the preference should be for > back end rendering, with a small set of standardised renderers on the front > end? It's still unclear to me how the wiring will work - I think I probably > have to prototype something (maybe table rendering) and see how it looks. > > As for interactivity, I think this is a really tricky one. Wolfram, with > Mathematica, have done a _really_ nice job with this. In case you're not > familiar, the heart of it is a dependency-tracking, reactive variable > system (Dynamic[]). And on top of this they've come up with a nice language > for describing UI. It's extremely impressive, but it's also a pretty large > engineering effort I think. I wonder whether a more modest goal might not > be the right thing to try for (given I don't see us bringing the same > resources as Wolfram to bear on the problem!). I found with monkeycruncher > that you can get almost all of what you might want to do regarding > interactivity with a much more restricted mode of interaction. It had a > "Bret Victor" style "live mode" where you could edit the code and see the > results change live. It also had some neat UI (sliders, colour pickers) to > edit parts of the code fluidly. I found that this worked really well, and > it fits very well with the idea above (edit code, automatically > re-evaluate, generates new value, new value is rendered). > > I'd love to hear your thoughts on all of this :-) > > > ** Implementing client in Clojurescript (
Re: [ANN] Gorilla REPL initial release (0.1.2)
This is awesome. In my head I've been planing something similar to this for a while now. In my head it's the ideal kind of UI for a power-user not scared of writing small scripts to get their work done while not losing visual output and feedback. More recently I was thinking of it as a LightTable plugin. LT to get a free decent editor to build on (giving up par-edit etc is a drag so rather not if I don't have to), and some of the nrepl etc piping "for free". When I get to this project I'll definitely check out gorilla more closely. On Wednesday, February 19, 2014 9:23:02 PM UTC, Jony Hudson wrote: > > Hi All, > > I'm pleased to announce the first release of Gorilla REPL, a rich REPL in > the notebook style: > > https://github.com/JonyEpsilon/gorilla-repl > > From the README: > > "You can think of it like a pretty REPL that can plot graphs, or you can > think of it as an editor for rich documents that can contain interactive > Clojure code, graphs, table, notes, LaTeX formulae. Whatever works for you! > One of the main aims is to make it lightweight enough that you can use it > day-to-day instead of the command-line REPL, but also offer the power to > perform and document complex data analysis and modelling tasks. Above all > else, Gorilla tries not to dictate your workflow, but rather to fit in to > the way you like to work, hopefully putting a bit more power to your elbow." > > You might like to take a look at a video introduction that shows what it > does better than my poor prose describes it: > > https://vimeo.com/87118206 > > I hope you like it and find it useful. In particular I really hope it fits > in to your workflow, and if not it would be great to know why. Bear in mind > it is very new and hasn't had a lot of testing, so caveat evaluator. In > particular: > > * I've done very limited testing other than on Safari on Mac. I've checked > that it works in most of the major browsers on Windows and Mac, but that's > about it! > > * At the moment you can only open one window otherwise it breaks > (silently!). I'd love some help on the bug that's blocking this from > someone who understands nREPL better than me. > https://github.com/JonyEpsilon/gorilla-repl/issues/10 > > * It relies on an internet connection at the moment, at least until it > caches various fonts. Need to get in touch with someone at clojars about > size limitations. > > > I think there's a lot still to be done, and there are some areas that > would really benefit from feedback from clojure developers more experienced > than me. Directions I'd love to see explored: > > * More work on plotting. Still very green, and much could be improved. > > * Incanter integration. If I've understood correctly, Incanter can > generate SVG, so shouldn't be too difficult. > > * Content-types. Currently values are tagged to indicate they should be > rendered specially by the front-end. Is this the right way to do it? What > about tagged literals? > > * UI as a value. There's a lot that could be done with custom rendering of > values. Mathematica is particularly impressive in this regard, and it would > be interesting to think where this could go with clojure. I know Kovas > Boguta has thought about this a lot. > > * Clojurescript! I think this is a _really_ interesting one. I'd love to > see a pure-client-version that uses a clojurescript REPL server in a > web-worker or similar. I came to write Gorilla through thinking about this > angle originally, having previously messed around with javascript based > data analysis in the browser (see http://monkeycruncher.org - cute idea, > but no-one wants to use js to analyse their data!). In my opinion there's > some really important work to be done on opening up analysis - I'd love to > publish scientific papers not with a snapshot of my analysis, but with my > real, living, breathing analysis in them. And I love to do it on an open, > ubiquitous platform :-) > > Anyway, let me know what you think. Comments, issues and pull requests all > very, very welcome ;-) > > > Jony > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Job - clojure development at commodities hedge fund
Hi, We're a commodities hedge fund with most of our infrastructure being developed in-house using a clojure stack. Think clojure, datomic, immutant, pallet, looking at some UI ideas using LightTable and/or Om. If that sounds like your kind of thing and you want to join a small hard working team get in touch. We'd obviously love some finance and/or commodities background but that's not a hard requirement - we're happy to teach you that side of the business if you got the dev skills sorted. Physically we're located in Zug, Switzerland so the Zurich area and full-time employment is the ideal solution, but we're open to other arrangements for the right person (e.g. I am personally in London). Get in touch by sending an email to: patrik.sundb...@tuloscapital.com and hoss.hauks...@tuloscapital.com Thanks, Patrik -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: infinite loop print out of cyclic structure at repl
This paste seems gone - anyone has it available? I seem to get bitten by this kind of thing in emacs using nrepl and it pretty printing something and it gets into an infinite loop locking up my emacs session completely. Running the same from command line i can see same behavior (seems related to protocols in my case, but haven't spent much time on it(). Either way I'd love to work out a way to avoid the cycles and this paste sounds good. On Monday, January 18, 2010 10:21:52 PM UTC, Chouser wrote: > > > On Jan 18, 4:22 pm, Raoul Duke wrote: > >> hi, > >> > >> hmmm, i wish there were a way (or that it was the default) to tell the > >> repl to not continue to loop for ever over things it has already > >> "printed" out when i eval something that is a cyclic thing. anybody > >> have a patch, or thought on this? > > On Mon, Jan 18, 2010 at 4:38 PM, Mark Hamstra > > > wrote: > > See *print-length* and *print-level* in the core API. > > Or if you want unlimited depth, but want to avoid printing the > value of any reference object more than once, you can try this > little thing I hacked together a while ago: > > http://paste.lisp.org/display/83647 > > Note that it has to keep a reference to every IDeref object it > sees while it's printing, in order to detect duplicates. > > --Chouser > http://joyofclojure.com/ > > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: TONIGHT at Skills Matter! The London Clojure Community:Machine Learning With Clojure
Shouldn't that be TOMORROW? Says the 6th in the link. On Monday, November 5, 2012 11:20:17 AM UTC, Theo wrote: > > *The London Clojure Community:Machine Learning With Clojure > * > > Machine Learning involves developing systems to process (potentially very > large) datasets, developing algorithms and models that can then be used to > make predictions of future events. Neale Swinnerton will investigate which > features of Clojure work well for machine learning and discuss some of the > limitations and how to avoid them. > > > > Learn more! http://bit.ly/Wpxlpc > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Some Friend documentation and regarding documentation in general
On Sunday, October 28, 2012 9:56:35 PM UTC, Patrik Sundberg wrote: > > On Sunday, October 28, 2012 8:14:41 PM UTC, Chas Emerick wrote: > >> On Oct 28, 2012, at 2:57 PM, Patrik Sundberg wrote: >> >> I've looked at this for a bit now. It seems there are some slight >> inconsistencies in how the redirect info is used: >> >> Where the redirect-on-autth? is being set up for the interactive-form >> workflow it looks to me to be assumed to be a boolean flag. >> >> https://github.com/sundbp/friend/blob/master/src/cemerick/friend/workflows.clj#L79 >> >> At that point it's given as an argument when setting up the workflow >> (defaulting to true). >> >> Then when it's being used in the generic code it's first picked out - >> looking like boolean flag still: >> https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L145 >> >> but then all of a sudden assumed to be a string containing the url to >> redirect to: >> https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L149 >> >> Given that, for the interactive-form workflow, it can only be set at the >> time of creating the workflow, it seems impossible to actually achieve the >> flow where friend "remembers" which page under authentication that user >> tried to access, then do auth, and finally return user to the originally >> requested page in a dynamic fashion. Since given at workflow creation time >> it can't dynamically reflect things properly I'd have assumed. I'd have >> expected it to not be an argument at workflow creation time, but the >> originally requested url being dynamically kept track of at the point >> friend realizes it needs to redirect the user to do authentication, then >> that url being used on L149 up there when the workflow sets >> redirect-on-auth? to true. >> >> Am I misunderstanding the flow or is there a mixup here? The tests only >> tests for boolean state, not as a string url. >> >> >> You're misunderstanding. If ::redirect-on-auth? is any truthy value >> (which includes strings), then `redirect-new-auth` will either: >> >> (a) send a redirect to the ::unauthorized-uri as captured in the session, >> which is only ever set if the user previously requested a resource for >> which they were not authorized (see >> https://github.com/cemerick/friend/blob/master/src/cemerick/friend.clj#L200), >> >> or >> >> (b) redirect to the value of ::redirect-on-auth? if it is a string, or >> >> (c) redirect to the :default-landing-url specified in the configuration >> provided to `authenticate`. >> >> You're right that (b) will never be the case for the interactive-form >> workflow, fundamentally because `cemerick.friend.workflows/make-auth` >> merges the `auth-meta` defaults in last, rather than first. That's a valid >> point of enhancement; ticket/patch welcome. :-) >> >> Note that ::redirect-on-auth? _is_ poorly named: it was originally >> expected to only be a boolean, thus the '?'. Its name will need to change >> in the future to reflect its actual role. >> >> > Ok - I think that's actually what my understanding was :) It just seemed > that in the existing workflows if it is stringy (assume make-auth patched > although I didn't quite get that yet) it is a fixed string rather than a > dynamic value of the url user tried to access. I.e. I can give "/foo" as > redirect-on-auth? when setting up the interactive-form workflow, but that's > then a fixed url to redirecct to. To redirect to whatever page the user > tried to access I'd have thought we need store it away from the original > request before we go into the auth process, to later redirect back to it > once successfully authenticated. > > Reading the code again I now get it. The redirection I was looking for is there. ::unauthorized-uri is the uri I was looking for, misinterpreted the name to mean something else and overlooked it. I see how it fits together now. Will try to get to making the changes that came up in this discussion sometime this week. Thanks -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Some Friend documentation and regarding documentation in general
On Sunday, October 28, 2012 8:14:41 PM UTC, Chas Emerick wrote: > On Oct 28, 2012, at 2:57 PM, Patrik Sundberg wrote: > > I've looked at this for a bit now. It seems there are some slight > inconsistencies in how the redirect info is used: > > Where the redirect-on-autth? is being set up for the interactive-form > workflow it looks to me to be assumed to be a boolean flag. > > https://github.com/sundbp/friend/blob/master/src/cemerick/friend/workflows.clj#L79 > > At that point it's given as an argument when setting up the workflow > (defaulting to true). > > Then when it's being used in the generic code it's first picked out - > looking like boolean flag still: > https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L145 > > but then all of a sudden assumed to be a string containing the url to > redirect to: > https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L149 > > Given that, for the interactive-form workflow, it can only be set at the > time of creating the workflow, it seems impossible to actually achieve the > flow where friend "remembers" which page under authentication that user > tried to access, then do auth, and finally return user to the originally > requested page in a dynamic fashion. Since given at workflow creation time > it can't dynamically reflect things properly I'd have assumed. I'd have > expected it to not be an argument at workflow creation time, but the > originally requested url being dynamically kept track of at the point > friend realizes it needs to redirect the user to do authentication, then > that url being used on L149 up there when the workflow sets > redirect-on-auth? to true. > > Am I misunderstanding the flow or is there a mixup here? The tests only > tests for boolean state, not as a string url. > > > You're misunderstanding. If ::redirect-on-auth? is any truthy value > (which includes strings), then `redirect-new-auth` will either: > > (a) send a redirect to the ::unauthorized-uri as captured in the session, > which is only ever set if the user previously requested a resource for > which they were not authorized (see > https://github.com/cemerick/friend/blob/master/src/cemerick/friend.clj#L200), > or > > (b) redirect to the value of ::redirect-on-auth? if it is a string, or > > (c) redirect to the :default-landing-url specified in the configuration > provided to `authenticate`. > > You're right that (b) will never be the case for the interactive-form > workflow, fundamentally because `cemerick.friend.workflows/make-auth` > merges the `auth-meta` defaults in last, rather than first. That's a valid > point of enhancement; ticket/patch welcome. :-) > > Note that ::redirect-on-auth? _is_ poorly named: it was originally > expected to only be a boolean, thus the '?'. Its name will need to change > in the future to reflect its actual role. > > Ok - I think that's actually what my understanding was :) It just seemed that in the existing workflows if it is stringy (assume make-auth patched although I didn't quite get that yet) it is a fixed string rather than a dynamic value of the url user tried to access. I.e. I can give "/foo" as redirect-on-auth? when setting up the interactive-form workflow, but that's then a fixed url to redirecct to. To redirect to whatever page the user tried to access I'd have thought we need store it away from the original request before we go into the auth process, to later redirect back to it once successfully authenticated. Patrik -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Some Friend documentation and regarding documentation in general
I've looked at this for a bit now. It seems there are some slight inconsistencies in how the redirect info is used: Where the redirect-on-autth? is being set up for the interactive-form workflow it looks to me to be assumed to be a boolean flag. https://github.com/sundbp/friend/blob/master/src/cemerick/friend/workflows.clj#L79 At that point it's given as an argument when setting up the workflow (defaulting to true). Then when it's being used in the generic code it's first picked out - looking like boolean flag still: https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L145 but then all of a sudden assumed to be a string containing the url to redirect to: https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L149 Given that, for the interactive-form workflow, it can only be set at the time of creating the workflow, it seems impossible to actually achieve the flow where friend "remembers" which page under authentication that user tried to access, then do auth, and finally return user to the originally requested page in a dynamic fashion. Since given at workflow creation time it can't dynamically reflect things properly I'd have assumed. I'd have expected it to not be an argument at workflow creation time, but the originally requested url being dynamically kept track of at the point friend realizes it needs to redirect the user to do authentication, then that url being used on L149 up there when the workflow sets redirect-on-auth? to true. Am I misunderstanding the flow or is there a mixup here? The tests only tests for boolean state, not as a string url. On Thursday, October 25, 2012 2:54:49 PM UTC+1, Patrik Sundberg wrote: > > On Thursday, October 25, 2012 1:59:36 PM UTC+1, Chas Emerick wrote: > >> >> On Oct 25, 2012, at 8:04 AM, Patrik Sundberg wrote: >> >> > I've digested openid and using it with google, should have a working >> example to share when I have a time to put it together over weekend. >> > >> > I've got another common useage pattern I'd like to ask about: How do we >> accomplish automatic redirect to the "correct" page? >> > >> > Let's say user accesses /secret, isn't authenticated and gets >> redirected to /login by friend. once authenticated, how do we ensure we get >> redirected back to /secret? >> >> I think that's a bug in the OpenID workflow. Friend will do this >> redirection automatically if the workflow enables it: >> >> >> https://github.com/cemerick/friend/blob/master/src/cemerick/friend/workflows.clj#L79 >> >> >> There are a couple of testcases in the project that verify this; >> unfortunately, the OpenID workflow doesn't yet accept the same >> configuration option as the interactive form workflow. Please file an >> issue, and, if you are so bold, a patch. :-) >> >> > Got it, adding it to my weekend list. Thanks! > > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Some Friend documentation and regarding documentation in general
On Thursday, October 25, 2012 1:59:36 PM UTC+1, Chas Emerick wrote: > > On Oct 25, 2012, at 8:04 AM, Patrik Sundberg wrote: > > > I've digested openid and using it with google, should have a working > example to share when I have a time to put it together over weekend. > > > > I've got another common useage pattern I'd like to ask about: How do we > accomplish automatic redirect to the "correct" page? > > > > Let's say user accesses /secret, isn't authenticated and gets redirected > to /login by friend. once authenticated, how do we ensure we get redirected > back to /secret? > > I think that's a bug in the OpenID workflow. Friend will do this > redirection automatically if the workflow enables it: > > > https://github.com/cemerick/friend/blob/master/src/cemerick/friend/workflows.clj#L79 > > > There are a couple of testcases in the project that verify this; > unfortunately, the OpenID workflow doesn't yet accept the same > configuration option as the interactive form workflow. Please file an > issue, and, if you are so bold, a patch. :-) > > Got it, adding it to my weekend list. Thanks! -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Some Friend documentation and regarding documentation in general
I've digested openid and using it with google, should have a working example to share when I have a time to put it together over weekend. I've got another common useage pattern I'd like to ask about: How do we accomplish automatic redirect to the "correct" page? Let's say user accesses /secret, isn't authenticated and gets redirected to /login by friend. once authenticated, how do we ensure we get redirected back to /secret? On Wednesday, October 24, 2012 10:12:01 AM UTC+1, Patrik Sundberg wrote: > > On Wednesday, October 24, 2012 3:10:52 AM UTC+1, David Della Costa wrote: > >> Patrik, Pierre, have you folks checked out the mock app that Chas >> created in the test directory? It's not going to give you everything >> you're looking for but make it can help. There is an implementation >> of the OpenID workflow in there, including a credential-fn example: >> >> >> https://github.com/cemerick/friend/blob/master/test/test_friend/mock_app.clj >> >> > Been digesting that and reading the OpenID workflow + the openid2java docs > to work out what inputs mean what. I'm not quite there yet but starting to > have some idea, will experiment today to get auth with Google Account up > and running. > > >> This may also help, regarding credential functions: >> >> >> https://github.com/cemerick/friend/blob/master/test/test_friend/credentials.clj >> >> >> I also highly recommend looking at the bcrypt-credential-fn in the >> credentials.clj lib, in the src of the project itself: >> >> >> https://github.com/cemerick/friend/blob/master/src/cemerick/friend/credentials.clj >> >> >> > The credentials I grok more easily than the workflow - or more > specifically the openid workflow. The form based auth workflow is a lot > easier for me to follow, no probs there. That I find the openid workflow > more obtuse probably means I don't get OpenID quite yet so will do some > standard reading there as well. > > >> This is the default credentials function used in the mock app above, >> so it should help illustrate some of the concepts. I've spent a lot >> of time poring over the code too, so feel free to ping me with >> questions too, I may be able to help. >> >> > IMHO the doc is really lacking and I have to say I was expecting more >> > guidance in the code itself. >> >> Yes, it's still hard to wrap your head around the docs. Friend >> scratches an itch I have, and I think it's going to be rather >> important if people are trying to web apps quickly in Clojure, so I'm >> going to keep working on it and see how much I can clean things up and >> make concepts more clear. And I know Chas is interested in this as >> well, from his past comments. Any help and pull requests are welcome. >> ;-) >> >> I'm working on some updates to everything I've been working on, I'll >> post updates to the list shortly (later this week probably, maybe even >> today). >> >> > Agreed. Happy to contribute a working google acc openid auth once I get > there. > > Patrik > > >> DD >> >> 2012/10/24 Pierre R : >> > Thanks David for the extra doc. >> > >> > I have had a try with OpenID. Everything works kind of expected. >> > >> > I had a question about "302 redirection prior to authentication" that I >> > posted on github. >> > >> > Another question is how to link the concept of roles with the openid >> > credentials. >> > >> > IMHO the doc is really lacking and I have to say I was expecting more >> > guidance in the code itself. >> > >> > I guess a lot of stuff obvious to an experienced clojure developers are >> > still dark magic to me. >> > >> > In particular it is rather difficult to understand how to write a >> > crendential-fn and this link won't help you ;-) >> > https://github.com/cemerick/friend/blob/master/docs/credentials.md >> > >> > For "OpenId" I have blindly used the identity function without much >> > understanding ... >> > >> > I am using Friend to scratch a little auth server. Not sure it is the >> best >> > fit for that purpose. I will see. >> > >> > I hope Friend is going to be reviewed by an extended community of >> people >> > much more qualified than myself to talk about such matter. >> > >> > Still docs could be improve
Re: Some Friend documentation and regarding documentation in general
On Wednesday, October 24, 2012 3:10:52 AM UTC+1, David Della Costa wrote: > Patrik, Pierre, have you folks checked out the mock app that Chas > created in the test directory? It's not going to give you everything > you're looking for but make it can help. There is an implementation > of the OpenID workflow in there, including a credential-fn example: > > > https://github.com/cemerick/friend/blob/master/test/test_friend/mock_app.clj > > Been digesting that and reading the OpenID workflow + the openid2java docs to work out what inputs mean what. I'm not quite there yet but starting to have some idea, will experiment today to get auth with Google Account up and running. > This may also help, regarding credential functions: > > > https://github.com/cemerick/friend/blob/master/test/test_friend/credentials.clj > > > I also highly recommend looking at the bcrypt-credential-fn in the > credentials.clj lib, in the src of the project itself: > > > https://github.com/cemerick/friend/blob/master/src/cemerick/friend/credentials.clj > > > The credentials I grok more easily than the workflow - or more specifically the openid workflow. The form based auth workflow is a lot easier for me to follow, no probs there. That I find the openid workflow more obtuse probably means I don't get OpenID quite yet so will do some standard reading there as well. > This is the default credentials function used in the mock app above, > so it should help illustrate some of the concepts. I've spent a lot > of time poring over the code too, so feel free to ping me with > questions too, I may be able to help. > > > IMHO the doc is really lacking and I have to say I was expecting more > > guidance in the code itself. > > Yes, it's still hard to wrap your head around the docs. Friend > scratches an itch I have, and I think it's going to be rather > important if people are trying to web apps quickly in Clojure, so I'm > going to keep working on it and see how much I can clean things up and > make concepts more clear. And I know Chas is interested in this as > well, from his past comments. Any help and pull requests are welcome. > ;-) > > I'm working on some updates to everything I've been working on, I'll > post updates to the list shortly (later this week probably, maybe even > today). > > Agreed. Happy to contribute a working google acc openid auth once I get there. Patrik > DD > > 2012/10/24 Pierre R >: > > Thanks David for the extra doc. > > > > I have had a try with OpenID. Everything works kind of expected. > > > > I had a question about "302 redirection prior to authentication" that I > > posted on github. > > > > Another question is how to link the concept of roles with the openid > > credentials. > > > > IMHO the doc is really lacking and I have to say I was expecting more > > guidance in the code itself. > > > > I guess a lot of stuff obvious to an experienced clojure developers are > > still dark magic to me. > > > > In particular it is rather difficult to understand how to write a > > crendential-fn and this link won't help you ;-) > > https://github.com/cemerick/friend/blob/master/docs/credentials.md > > > > For "OpenId" I have blindly used the identity function without much > > understanding ... > > > > I am using Friend to scratch a little auth server. Not sure it is the > best > > fit for that purpose. I will see. > > > > I hope Friend is going to be reviewed by an extended community of people > > much more qualified than myself to talk about such matter. > > > > Still docs could be improved and I believe helps could come from pull > > requests to suggest the addition of code comments there and there. > > > > If I dig far enough in the code, I would be pleased to help. > > > > Thanks for the hard work. > > > > Cheers, > > > > Le mardi 23 octobre 2012 17:50:25 UTC+2, Patrik Sundberg a écrit : > >> > >> These are great tutorials. Thanks for publishing. > >> > >> Right now I'm looking for something similar using the OpenID workflow. > I > >> see it's there but how I use to for example create a "sign in with > google" > >> setup is less clear to me. > >> > >> Has anyone got a good OpenID example out there somewhere? > >> > >> On Saturday, October 6, 2012 4:50:05 PM UTC+1, David Della Costa wrote: > >>> > >>> Hi folks, > >&g
Re: Some Friend documentation and regarding documentation in general
These are great tutorials. Thanks for publishing. Right now I'm looking for something similar using the OpenID workflow. I see it's there but how I use to for example create a "sign in with google" setup is less clear to me. Has anyone got a good OpenID example out there somewhere? On Saturday, October 6, 2012 4:50:05 PM UTC+1, David Della Costa wrote: > > Hi folks, > > I've been pretty slack in communicating via the mailing list, but I > realized today that there is a lot of important dialogue going on here > so I have to make more of an effort to take part--I want to be a part of > this community! > > In any case, I've been using Friend a lot lately, since I come from > Ruby-on-Rails-land, and it addresses a lot of the pain points that > Devise does for me. > > But (as has been mentioned in other threads quite recently), > documentation is definitely the Clojure community's week point: it's > inconsistent, formatted inconsistently (Ring and Compojure, for example, > are wonderful exceptions), and updated erratically. When it's good, > it's great; but when it's not, it puts me off from using a library. For > example, I stayed away from Enlive for months before I realized what a > useful library it is--so I re-wrote the README to suit my tastes > (https://github.com/ddellacosta/enlive). > > I think Chas Emerick writes much better docs than much of what > accompanies most Clojure libraries, but he's quite an advanced Clojure > developer, and he's moving very fast--so as a newbie, I had difficulty > even with his relatively good docs for Friend. And I suspect you'll be > getting more and more folks from the web development world in the next > few years like me. So it will be good to have things from the > perspective of someone not just trying to grok the libraries that exist, > but also trying to understand how Clojure works, and how the eco-system > fits together. > > I've written some material on how to use Friend, including some OAuth2 > resources. I'd appreciate any feedback you can give, I'm pretty new to > Clojure (and Lisp in general). > > In any case: > > https://github.com/ddellacosta/friend-interactive-form-tutorial > https://github.com/ddellacosta/friend-oauth2-examples > https://github.com/ddellacosta/friend-oauth2 > > I have a bunch of other Clojure-related stuff on my github account too, > feedback is most welcome! > > Cheers, > DD > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Modelling for DAG with identity map - or not?
On Wednesday, September 19, 2012 10:52:26 AM UTC+1, Patrik Sundberg wrote: > > On Tuesday, September 18, 2012 10:10:35 PM UTC+1, hutch wrote: >> >> >> On 2012-09-16, at 3:21 PM, Patrik Sundberg wrote: >> >> I'm asking myself though if there's a more functional design for >> accomplishing the same goals? My main goals are to do things consistently >> so that changing a value X propagates properly, and being able to find >> dependencies of a given value. A DAG+identity map is my first take, but >> there may be something more natural for FP I'm completely missing. >> >> >> Sounds like a reasonable approach to me. There's nothing wrong with >> state, just how you manipulate it. The STM in Clojure is really nice in >> this regard. You might want to have a look at Functional Reactive >> Programming (FRP). There's a lot of stuff available about that in the >> Haskell community, but usually for UIs and things like that. They sometimes >> use spread sheets as an example (spread sheets can be thought of as a DAG >> with values and computations in cells… you can see the mapping between them >> in your application (where the mapping doesn't work or is hard might be >> pointing at something quite interesting). There's also something called >> 'Cells' in Common Lisp that might be interesting. I'm not sure what's been >> done in Clojure. >> >> > yeah, it's essentially a big mushy complex and persistable "spreadsheet" > I'm building, that's the right analogy that I tend to use myself (and > should have done in my post as well to make it easier to follow :)). Thanks > for the pointers, I'll go check those things out. > > btw, after started to play with it turns out records and protocols ends up > being the convenient way to do it, seems I don't need the flexibility of > multimethod dispatch + I do end up wanting some per type data to store. > > Quick follow up to say thank you for putting me onto cells. That looks very much like the kind of solution I'm trying to create, so will study up on the various cells implementations for clojure that are around and embrace/adapt from there to suit my domain. If anyone happen to know the latest and greatest on which ones lived and which ones didn't that'd be great. I see a lot of posts in 2009 about cells with many implementations so would be grateful to be pointed in a good direction as of 2012 by the cells implementors. Feature comments: - Lazy evaluation a must - Don't care so much about circular dependencies, I have good control over that and the domain is inherently hard to trip up in that way - Parallel evaluation nice but not critical Thanks -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Modelling for DAG with identity map - or not?
On Tuesday, September 18, 2012 10:10:35 PM UTC+1, hutch wrote: > > > On 2012-09-16, at 3:21 PM, Patrik Sundberg > > > wrote: > > I'm asking myself though if there's a more functional design for > accomplishing the same goals? My main goals are to do things consistently > so that changing a value X propagates properly, and being able to find > dependencies of a given value. A DAG+identity map is my first take, but > there may be something more natural for FP I'm completely missing. > > > Sounds like a reasonable approach to me. There's nothing wrong with state, > just how you manipulate it. The STM in Clojure is really nice in this > regard. You might want to have a look at Functional Reactive Programming > (FRP). There's a lot of stuff available about that in the Haskell > community, but usually for UIs and things like that. They sometimes use > spread sheets as an example (spread sheets can be thought of as a DAG with > values and computations in cells… you can see the mapping between them in > your application (where the mapping doesn't work or is hard might be > pointing at something quite interesting). There's also something called > 'Cells' in Common Lisp that might be interesting. I'm not sure what's been > done in Clojure. > > yeah, it's essentially a big mushy complex and persistable "spreadsheet" I'm building, that's the right analogy that I tend to use myself (and should have done in my post as well to make it easier to follow :)). Thanks for the pointers, I'll go check those things out. btw, after started to play with it turns out records and protocols ends up being the convenient way to do it, seems I don't need the flexibility of multimethod dispatch + I do end up wanting some per type data to store. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: [lein] Depending on tools.jar
On Monday, September 17, 2012 3:05:57 PM UTC+1, Patrik Sundberg wrote: > > On Monday, November 28, 2011 9:52:55 PM UTC, Walter van der Laan wrote: >> >> You can add something like this to project.clj: >> :resources-path "/usr/lib/jvm/java-6-sun/lib/tools.jar" >> >> Walter >> > > I found this thread an a couple of other ones relating to the problematic > tools.jar and lein 2. > > Does anyone have a way to add tools.jar to the classpath for a lein 2 > managed project? > > I'm trying to just do "lein test" for ritz, and getting > "java.lang.ClassNotFoundException: com.sun.jdi.VirtualMachine (jdi.clj:1)" > since tools.jar not on classpath. > > Have had no luck with :resources-path or the other suggestion of symlink > in ~/.lein/plugins (which I assume is more a lein1 thing). > > I'm on ubuntu 12.04 (openjdk 7 or oracle jdk 7). Any tips welcome! > > Adding this so others can benefit from it: hugod in the #leiningen irc channel helped me out. One way is to add something like this to profile: https://www.refheap.com/paste/5113 -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: [lein] Depending on tools.jar
On Monday, November 28, 2011 9:52:55 PM UTC, Walter van der Laan wrote: > > You can add something like this to project.clj: > :resources-path "/usr/lib/jvm/java-6-sun/lib/tools.jar" > > Walter > I found this thread an a couple of other ones relating to the problematic tools.jar and lein 2. Does anyone have a way to add tools.jar to the classpath for a lein 2 managed project? I'm trying to just do "lein test" for ritz, and getting "java.lang.ClassNotFoundException: com.sun.jdi.VirtualMachine (jdi.clj:1)" since tools.jar not on classpath. Have had no luck with :resources-path or the other suggestion of symlink in ~/.lein/plugins (which I assume is more a lein1 thing). I'm on ubuntu 12.04 (openjdk 7 or oracle jdk 7). Any tips welcome! -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Modelling for DAG with identity map - or not?
Hi, I'm a newbie at clojure and functional programming and I'm toying with the idea of switching a project of mine to clojure. Sorry for a long first post, and it may also be a bit abstract - but you never know before trying :) In my previous OO prototype the domain is modelled via 2 basic principles: 1. an implicit DAG (directed acyclic graph) is created at runtime as some calculations are performed. i.e. calc 1 depends on values X and Y, so build that graph. then X depends on A and B, etc. 2. the nodes in the graph are unique, e.g. handled via an identity map. i.e. if calculation 1 depends on the leaf 1 and then calculation 2 also depends on leaf 1 they point to the same leaf 1. unique in this case means either via some unique ID. The graph fulfils 2 main functions and 1 minor: 1. allows me to start from a given node X and find any nodes below that are of type Y (or has name Z or any other node based predicate) 2. do something to value of node X and see how that propagates through the graph 3. (minor) only the nodes needing refreshing gets recalculated (as a result of 2). i.e. graph works as an implicit and automatic cache. a nice to have but performance not my main goal. My existing prototype is done in jruby via a lot of meta programming and voodoo. It still doesn't quite flow perfectly naturally since I can't bend the syntax far enough (i.e. the user has to be aware of the existence of nodes and distinguish between a node and it's value when I'd like to keep all the graph/node stuff under wraps as far as the user is concerned). I can see how doing it in clojure I could get all the way to the kind of user API I'm looking for (plus performance and java interop would probably be better). The actual problem domain is modelling financial instruments if that makes it any more concrete. I.e. the price of security 1 depends on the price of security 2 to 1000, out of which half depends (in different ways) on the price of security 1001, which depends on paramter X the input Y of type A. Find any dependencies of type A starting at price of security 1, move paramter X of any such dependency by epsilon and check the effect of price of security 1, only recalculating the parts needed (i.e. security 1001, half of the 2-1000 secs, and security 1). My initial instinct is a design involving 1 graph per thread to start with (i.e. using a Var for graph and identity cache), the graph consisting of nodes and edges that can be represented as either records or maps, and functions attached to nodes for refreshing their values when a child has changed (using the values of child nodes). The graph get's created implicitly on first evaluation (and extended as one evaluates more nodes, and parts could end up rebuilding themselves if one changes some parameters etc). I can kind of see how I'd do it. A few things bothers me or are unclear: 1. There's quite a lot of state, which feels a bit unclojurey. 2. Implementing the "same" function for different types is not quite clear what best way to go is. Looks like multimethods perhaps. i.e. i'd like to just call (price secA) and (price secB) and the right thing happens even though completely different functions/parts of the graph get evaluated depending on the "type" of secA and secB. I don't think I need/want a record per type of security so protocols not looking like the way to go. I'm asking myself though if there's a more functional design for accomplishing the same goals? My main goals are to do things consistently so that changing a value X propagates properly, and being able to find dependencies of a given value. A DAG+identity map is my first take, but there may be something more natural for FP I'm completely missing. Thanks, Patrik -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en