Re: Real World Example
I'm building a fairly large real-world system called Clortex [1], which is a rewrite of the Numenta Platform for Intelligent Computing (NuPIC) [2]. As it's a greenfield project, I've chosen to use Clojure components all the way through instead of fitting in with Java-based or .Net-based frameworks. There are good reasons why you should do this if you can, but obviously that doesn't help you directly with your question. [off topic] Wow... good thing I read your post... I was just about to do the same thing having followed the development of HTM for some time now and finding their reference implementation to be somewhat convoluted. I thought Clojure would be a better language for it... TBD. Let me know if/how I can help. Alan -- 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: Real World Example
Hi Alan, Thanks for your interest - everywhere I mention this in the Clojure world I get the same reaction! This is one of the reasons why I settled on Clojure a couple of months back (Erlang and Elixir were also good choices, but the Clojure movement has so much energy it was a no-brainer). I'm in the middle of developing the key algorithms for Clortex, and exploring a number of approaches at the same time, so the code is a bit of a tangle in places right now. Once it's a little more stable I'll make it public. In the meantime, if you're interested (and know HTM/CLA to some extent), please send me your github handle offlist and I'll add you as a contributor. Regards, Fergal On Fri, Apr 11, 2014 at 10:03 AM, Alan Moore kahunamo...@gmail.com wrote: I'm building a fairly large real-world system called Clortex [1], which is a rewrite of the Numenta Platform for Intelligent Computing (NuPIC) [2]. As it's a greenfield project, I've chosen to use Clojure components all the way through instead of fitting in with Java-based or .Net-based frameworks. There are good reasons why you should do this if you can, but obviously that doesn't help you directly with your question. [off topic] Wow... good thing I read your post... I was just about to do the same thing having followed the development of HTM for some time now and finding their reference implementation to be somewhat convoluted. I thought Clojure would be a better language for it... TBD. Let me know if/how I can help. Alan -- 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. -- Fergal Byrne, Brenter IT Author, Real Machine Intelligence with Clortex and NuPIC https://leanpub.com/realsmartmachines http://www.examsupport.iehttp://inbits.com - Better Living through Thoughtful Technology http://ie.linkedin.com/in/fergbyrne/ https://github.com/fergalbyrne e:fergalbyrnedub...@gmail.com t:+353 83 4214179 Formerly of Adnet edi...@adnet.ie http://www.adnet.ie -- 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: Real World Example
I'm in the early stages of developing a real-world app for a customer that will use a full clojure stack. It's maybe not as sexy as all the social networking examples you see, but I think it's more representative of the types of apps most people write to satisfy real business needs. The app is for a service company doing industrial electrical work, and will be used to manage jobs, schedule crews, order parts, tie into the accounting system for invoicing - typical stuff that every business needs to manage. It will have a web interface as well as mobile, since one of main goals is to equip the crews with tablets to use in the field. It's a big project that I wouldn't even attempt as a side project if it weren't for the leverage clojure gives me. One thing I would like to do is blog about the project as I work on it. I think this would not only be valuable for the community at large, but also would help me to vet my design choices based on feedback. I'm meeting with the customer tomorrow and will bring this up. I know him well, and I expect to get his approval, so hopefully I'll have the blog up in the next week or so. -- 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: Real World Example
Oh that would be very nice! On Thursday, April 10, 2014 9:22:35 AM UTC-4, Mike Haney wrote: I'm in the early stages of developing a real-world app for a customer that will use a full clojure stack. It's maybe not as sexy as all the social networking examples you see, but I think it's more representative of the types of apps most people write to satisfy real business needs. The app is for a service company doing industrial electrical work, and will be used to manage jobs, schedule crews, order parts, tie into the accounting system for invoicing - typical stuff that every business needs to manage. It will have a web interface as well as mobile, since one of main goals is to equip the crews with tablets to use in the field. It's a big project that I wouldn't even attempt as a side project if it weren't for the leverage clojure gives me. One thing I would like to do is blog about the project as I work on it. I think this would not only be valuable for the community at large, but also would help me to vet my design choices based on feedback. I'm meeting with the customer tomorrow and will bring this up. I know him well, and I expect to get his approval, so hopefully I'll have the blog up in the next week or so. -- 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: Real World Example
Hey Mike, are you doing this as a one-man-show? On Apr 10, 2014, at 6:22 AM, Mike Haney txmikes...@gmail.com wrote: I'm in the early stages of developing a real-world app for a customer that will use a full clojure stack. It's maybe not as sexy as all the social networking examples you see, but I think it's more representative of the types of apps most people write to satisfy real business needs. The app is for a service company doing industrial electrical work, and will be used to manage jobs, schedule crews, order parts, tie into the accounting system for invoicing - typical stuff that every business needs to manage. It will have a web interface as well as mobile, since one of main goals is to equip the crews with tablets to use in the field. It's a big project that I wouldn't even attempt as a side project if it weren't for the leverage clojure gives me. One thing I would like to do is blog about the project as I work on it. I think this would not only be valuable for the community at large, but also would help me to vet my design choices based on feedback. I'm meeting with the customer tomorrow and will bring this up. I know him well, and I expect to get his approval, so hopefully I'll have the blog up in the next week or so. -- 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. Best, Marcus Marcus Blankenship \\\ Problem Solver, Linear Thinker \\\ 541.805.2736 \ @justzeros \ skype:marcuscreo -- 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: Real World Example
I've also had a lot of success with Prismatic's Schemahttps://github.com/Prismatic/schema/library. I've found it to be a good middle ground between type hints, Protocols, etc, and a full blown type system, such as core.typedhttps://github.com/clojure/core.typed . Hth Tim Washington Interruptsoftware.com http://interruptsoftware.com On Wed, Apr 9, 2014 at 7:22 AM, Colin Yates colin.ya...@gmail.com wrote: Hi Fergal, Thanks for those links. I started using protocols and defrecords but I (maybe mistakenly) got the impression that they were frowned upon. As it turns out, maps (typically with a :type key) and multi methods go a long long way, but I still end up with fairly deep nesting of maps. Maybe that is the key - deep nesting of maps maybe cries out one object [data model] to rule them all and I need to decompose it further. Without types almost all the type hints would be either the map of sequence interface. It isn't so much the structure that is obscure, but the semantics of what that structure is modelling. As I hinted at, I am sure it is because my implementation model is still influenced too much by my OO background. Onwards and upwards as they say. Col On Wednesday, 9 April 2014 11:37:52 UTC+1, Fergal Byrne wrote: Hi Anthony, -- 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: Real World Example
Yes, it's just me. Crazy, right? Like I said, I wouldn't even have attempted it without the productivity gains I've seen since I've started using clojure. Fortunately, the customer isn't in we need this yesterday mode (a refreshing, but rare, circumstance). -- 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: Real World Example
Hi Anthony, unfortunately I can't point you to actual code examples (since this was work for a client), but I've got some screenshots screenrecordings of a few OpenGL/CL desktop apps written in Clojure. Both of them don't use Swing for UI, but a custom widget system sitting straight on OpenGL2+ (each control implemented as VBO): http://flickr.com/toxi/sets/72157630719227308/ This video gives a brief overview of the web application/cloud component of this project and was completely developed w/ Clojure (and some minor JS sprinkling): https://www.youtube.com/watch?v=WyVI5vnp570 Some more details how this was build (and libs used) are discussed in this old thread: https://groups.google.com/d/msg/clojure/Z995K48BZGA/IDSAEm-PKFkJ So far I haven't been able to properly document the project below yet, but that too is using the same desktop app setup as the prev project and am working hard to make time to prepare an open source release of this (incl. all libs): https://secure.flickr.com/photos/toxi/sets/72157636665658583/ An animated version of that physics based logo can be seen here (reload for different letters) http://resonate.io Hth! K. -- 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: Real World Example
Hello back! We are using Clojure on the JVM as the implementation language for a platform that will underpin our applications for the next decade. It is relatively new and so far we have implemented the analysis module which is essentially a generic charting engine. So far we have 5547 lines of production code (including comments) and 2600 lines of production code (including comments). That doesn't sound like much but I can tell you it is replacing a similar, but slightly smaller in scope analysis module written in Java which was around 40K lines of production code. Our architecture is Clojure on the back end exporting a number of JSON end points. It is backed by MS SQL using the fantastic https://github.com/jkk/honeysql library. For me, it is a dream coming from Java (and to a much lesser extent Scala), but it does have its costs. Moving from an OO world to an FP world isn't easy, particularly in the shapes your solutions end up with. I am also feeling the pain of not having types - everything is a sequence. This is a joy but it also means a whole bunch of information (i.e. type information) is lost. One of the wins in OO languages is the many number of places to hang semantic information - the name of the class, the structure of the class, the names of the methods etc. I also find many more intermediary variables in OO where as in Clojure it seems more idiomatic to have pipelines of transformation. I am feeling the lost of static types as I refactor APIs particularly. This is undoubtedly my failing not Clojure's and I just need to absorb more good FP paradigms. Would I give up my emacs and Clojure and paredit combination? Not a chance :). Col On Tuesday, 8 April 2014 20:23:06 UTC+1, Anthony Ortiz wrote: Hello world! I'm a C# developer who recently went to an interview at a major bank here in NYC and found that they've been using Clojure for their business logic for over a year already and that got me curious, so I find myself on unfamiliar territory learning how to program in a functional language. So far so good, Moxley Stratton's online tutorial combined with Try Clojure (the online interpreter) has been very helpful (kudos to you guys!) and I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR, something simple that would demonstrate how Clojure fits into the event-driven model on the client-side behind, let's say, WPF, and how it would interact with more Clojure on the service-side via, let's say, WCF. Does anyone know of an example they can direct me to? Many thanks! Anthony -- 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: Real World Example
Gah - 5547 production, 2600 of tests. A lot of that discrepancy is down to the very extensive documentation that https://github.com/gdeer81/marginalia allows you to write. Please forgive any other mistakes, working on less than an hours sleep due to my lovely kids. On Wednesday, 9 April 2014 09:14:38 UTC+1, Colin Yates wrote: Hello back! We are using Clojure on the JVM as the implementation language for a platform that will underpin our applications for the next decade. It is relatively new and so far we have implemented the analysis module which is essentially a generic charting engine. So far we have 5547 lines of production code (including comments) and 2600 lines of production code (including comments). That doesn't sound like much but I can tell you it is replacing a similar, but slightly smaller in scope analysis module written in Java which was around 40K lines of production code. Our architecture is Clojure on the back end exporting a number of JSON end points. It is backed by MS SQL using the fantastic https://github.com/jkk/honeysql library. For me, it is a dream coming from Java (and to a much lesser extent Scala), but it does have its costs. Moving from an OO world to an FP world isn't easy, particularly in the shapes your solutions end up with. I am also feeling the pain of not having types - everything is a sequence. This is a joy but it also means a whole bunch of information (i.e. type information) is lost. One of the wins in OO languages is the many number of places to hang semantic information - the name of the class, the structure of the class, the names of the methods etc. I also find many more intermediary variables in OO where as in Clojure it seems more idiomatic to have pipelines of transformation. I am feeling the lost of static types as I refactor APIs particularly. This is undoubtedly my failing not Clojure's and I just need to absorb more good FP paradigms. Would I give up my emacs and Clojure and paredit combination? Not a chance :). Col On Tuesday, 8 April 2014 20:23:06 UTC+1, Anthony Ortiz wrote: Hello world! I'm a C# developer who recently went to an interview at a major bank here in NYC and found that they've been using Clojure for their business logic for over a year already and that got me curious, so I find myself on unfamiliar territory learning how to program in a functional language. So far so good, Moxley Stratton's online tutorial combined with Try Clojure (the online interpreter) has been very helpful (kudos to you guys!) and I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR, something simple that would demonstrate how Clojure fits into the event-driven model on the client-side behind, let's say, WPF, and how it would interact with more Clojure on the service-side via, let's say, WCF. Does anyone know of an example they can direct me to? Many thanks! Anthony -- 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: Real World Example
Welcome, Anthony. I'm not aware of complete applications that fit your requirement, however I think you'll find value in the newly-minted Clojure Cookbook http://clojure-cookbook.com/ ... many, many examples of real-world problems, across domains, solved by Clojure practitioners. All the examples and solutions are available here: https://github.com/clojure-cookbook/clojure-cookbook Cheers, and once again, welcome! On Wednesday, April 9, 2014 12:53:06 AM UTC+5:30, Anthony Ortiz wrote: Hello world! I'm a C# developer who recently went to an interview at a major bank here in NYC and found that they've been using Clojure for their business logic for over a year already and that got me curious, so I find myself on unfamiliar territory learning how to program in a functional language. So far so good, Moxley Stratton's online tutorial combined with Try Clojure (the online interpreter) has been very helpful (kudos to you guys!) and I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR, something simple that would demonstrate how Clojure fits into the event-driven model on the client-side behind, let's say, WPF, and how it would interact with more Clojure on the service-side via, let's say, WCF. Does anyone know of an example they can direct me to? Many thanks! Anthony -- 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: Real World Example
Hi Anthony, I'm building a fairly large real-world system called Clortex [1], which is a rewrite of the Numenta Platform for Intelligent Computing (NuPIC) [2]. As it's a greenfield project, I've chosen to use Clojure components all the way through instead of fitting in with Java-based or .Net-based frameworks. There are good reasons why you should do this if you can, but obviously that doesn't help you directly with your question. There are many people introducing Clojure as a component in an existing ecosystem, as Colin explains, but usually this is done deep inside a big Java or .Net shop, and they're not showing the world the code. One possible route would be to see if any of the big Java or CLR Open Source apps are looking at doing some subsystems in Clojure. Colin, Great to hear your experiences. I'm no expert, but it's likely that you could ease much of the pain using protocols, type hints and deftypes or records. Also, Typed Clojure [3] is definitely worth looking at. [1] Clortex will be public on Github shortly, see http://fergalbyrne.github.io for docs, http://inbits.com for blog. [2] http://numenta.org [3] https://github.com/clojure/core.typed Regards, Fergal Byrne On Wed, Apr 9, 2014 at 10:18 AM, Aditya Athalye aditya.atha...@gmail.comwrote: Welcome, Anthony. I'm not aware of complete applications that fit your requirement, however I think you'll find value in the newly-minted Clojure Cookbook http://clojure-cookbook.com/ ... many, many examples of real-world problems, across domains, solved by Clojure practitioners. All the examples and solutions are available here: https://github.com/clojure-cookbook/clojure-cookbook Cheers, and once again, welcome! On Wednesday, April 9, 2014 12:53:06 AM UTC+5:30, Anthony Ortiz wrote: Hello world! I'm a C# developer who recently went to an interview at a major bank here in NYC and found that they've been using Clojure for their business logic for over a year already and that got me curious, so I find myself on unfamiliar territory learning how to program in a functional language. So far so good, Moxley Stratton's online tutorial combined with Try Clojure (the online interpreter) has been very helpful (kudos to you guys!) and I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR, something simple that would demonstrate how Clojure fits into the event-driven model on the client-side behind, let's say, WPF, and how it would interact with more Clojure on the service-side via, let's say, WCF. Does anyone know of an example they can direct me to? Many thanks! Anthony -- 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. -- Fergal Byrne, Brenter IT Author, Real Machine Intelligence with Clortex and NuPIC https://leanpub.com/realsmartmachines http://www.examsupport.iehttp://inbits.com - Better Living through Thoughtful Technology http://ie.linkedin.com/in/fergbyrne/ https://github.com/fergalbyrne e:fergalbyrnedub...@gmail.com t:+353 83 4214179 Formerly of Adnet edi...@adnet.ie http://www.adnet.ie -- 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: Real World Example
Hi Fergal, Thanks for those links. I started using protocols and defrecords but I (maybe mistakenly) got the impression that they were frowned upon. As it turns out, maps (typically with a :type key) and multi methods go a long long way, but I still end up with fairly deep nesting of maps. Maybe that is the key - deep nesting of maps maybe cries out one object [data model] to rule them all and I need to decompose it further. Without types almost all the type hints would be either the map of sequence interface. It isn't so much the structure that is obscure, but the semantics of what that structure is modelling. As I hinted at, I am sure it is because my implementation model is still influenced too much by my OO background. Onwards and upwards as they say. Col On Wednesday, 9 April 2014 11:37:52 UTC+1, Fergal Byrne wrote: Hi Anthony, I'm building a fairly large real-world system called Clortex [1], which is a rewrite of the Numenta Platform for Intelligent Computing (NuPIC) [2]. As it's a greenfield project, I've chosen to use Clojure components all the way through instead of fitting in with Java-based or .Net-based frameworks. There are good reasons why you should do this if you can, but obviously that doesn't help you directly with your question. There are many people introducing Clojure as a component in an existing ecosystem, as Colin explains, but usually this is done deep inside a big Java or .Net shop, and they're not showing the world the code. One possible route would be to see if any of the big Java or CLR Open Source apps are looking at doing some subsystems in Clojure. Colin, Great to hear your experiences. I'm no expert, but it's likely that you could ease much of the pain using protocols, type hints and deftypes or records. Also, Typed Clojure [3] is definitely worth looking at. [1] Clortex will be public on Github shortly, see http://fergalbyrne.github.io for docs, http://inbits.com for blog. [2] http://numenta.org [3] https://github.com/clojure/core.typed Regards, Fergal Byrne On Wed, Apr 9, 2014 at 10:18 AM, Aditya Athalye aditya@gmail.comjavascript: wrote: Welcome, Anthony. I'm not aware of complete applications that fit your requirement, however I think you'll find value in the newly-minted Clojure Cookbook http://clojure-cookbook.com/ ... many, many examples of real-world problems, across domains, solved by Clojure practitioners. All the examples and solutions are available here: https://github.com/clojure-cookbook/clojure-cookbook Cheers, and once again, welcome! On Wednesday, April 9, 2014 12:53:06 AM UTC+5:30, Anthony Ortiz wrote: Hello world! I'm a C# developer who recently went to an interview at a major bank here in NYC and found that they've been using Clojure for their business logic for over a year already and that got me curious, so I find myself on unfamiliar territory learning how to program in a functional language. So far so good, Moxley Stratton's online tutorial combined with Try Clojure (the online interpreter) has been very helpful (kudos to you guys!) and I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR, something simple that would demonstrate how Clojure fits into the event-driven model on the client-side behind, let's say, WPF, and how it would interact with more Clojure on the service-side via, let's say, WCF. Does anyone know of an example they can direct me to? Many thanks! Anthony -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.comjavascript: 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 javascript: 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 javascript:. For more options, visit https://groups.google.com/d/optout. -- Fergal Byrne, Brenter IT Author, Real Machine Intelligence with Clortex and NuPIC https://leanpub.com/realsmartmachines http://www.examsupport.iehttp://inbits.com - Better Living through Thoughtful Technology http://ie.linkedin.com/in/fergbyrne/ https://github.com/fergalbyrne e:fergalby...@gmail.com javascript: t:+353 83 4214179 Formerly of Adnet edi...@adnet.ie javascript: http://www.adnet.ie -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group
Re: Real World Example
Hi Colin, Cheers. I had exactly the same problem, so I've been trying out a few other ideas. One is to use datalog (or cascalog etc) and represent objects with entities and relationships between objects with refs (for datalog). I have some enormous data structures (2-300m synapses per layer, for example) but I find that Datomic and datalog are great for modelling really big and complex structures. There's a datomic wrapper library called adi [1] which adds a nice map-like interface on top of datalog. It's perfect for getting your schema right (you start off with a big map and it automagically does the schema), and you can do some really long link-following, but I'm not using it extensively yet (because everything is data, you can use adi for schema design and some queries, and raw datomic for the rest). I'll be writing extensively about each library or tool I've used on my blog (see sig). I'm writing about lein-midje-doc (also by zcaudate) at the moment, it's just wonderful. [1] https://github.com/zcaudate/adi Regards, Fergal Byrne On Wed, Apr 9, 2014 at 12:22 PM, Colin Yates colin.ya...@gmail.com wrote: Hi Fergal, Thanks for those links. I started using protocols and defrecords but I (maybe mistakenly) got the impression that they were frowned upon. As it turns out, maps (typically with a :type key) and multi methods go a long long way, but I still end up with fairly deep nesting of maps. Maybe that is the key - deep nesting of maps maybe cries out one object [data model] to rule them all and I need to decompose it further. Without types almost all the type hints would be either the map of sequence interface. It isn't so much the structure that is obscure, but the semantics of what that structure is modelling. As I hinted at, I am sure it is because my implementation model is still influenced too much by my OO background. Onwards and upwards as they say. Col On Wednesday, 9 April 2014 11:37:52 UTC+1, Fergal Byrne wrote: Hi Anthony, I'm building a fairly large real-world system called Clortex [1], which is a rewrite of the Numenta Platform for Intelligent Computing (NuPIC) [2]. As it's a greenfield project, I've chosen to use Clojure components all the way through instead of fitting in with Java-based or .Net-based frameworks. There are good reasons why you should do this if you can, but obviously that doesn't help you directly with your question. There are many people introducing Clojure as a component in an existing ecosystem, as Colin explains, but usually this is done deep inside a big Java or .Net shop, and they're not showing the world the code. One possible route would be to see if any of the big Java or CLR Open Source apps are looking at doing some subsystems in Clojure. Colin, Great to hear your experiences. I'm no expert, but it's likely that you could ease much of the pain using protocols, type hints and deftypes or records. Also, Typed Clojure [3] is definitely worth looking at. [1] Clortex will be public on Github shortly, see http://fergalbyrne.github.io for docs, http://inbits.com for blog. [2] http://numenta.org [3] https://github.com/clojure/core.typed Regards, Fergal Byrne On Wed, Apr 9, 2014 at 10:18 AM, Aditya Athalye aditya@gmail.comwrote: Welcome, Anthony. I'm not aware of complete applications that fit your requirement, however I think you'll find value in the newly-minted Clojure Cookbook http://clojure-cookbook.com/ ... many, many examples of real-world problems, across domains, solved by Clojure practitioners. All the examples and solutions are available here: https://github.com/clojure-cookbook/clojure-cookbook Cheers, and once again, welcome! On Wednesday, April 9, 2014 12:53:06 AM UTC+5:30, Anthony Ortiz wrote: Hello world! I'm a C# developer who recently went to an interview at a major bank here in NYC and found that they've been using Clojure for their business logic for over a year already and that got me curious, so I find myself on unfamiliar territory learning how to program in a functional language. So far so good, Moxley Stratton's online tutorial combined with Try Clojure (the online interpreter) has been very helpful (kudos to you guys!) and I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR, something simple that would demonstrate how Clojure fits into the event-driven model on the client-side behind, let's say, WPF, and how it would interact with more Clojure on the service-side via, let's say, WCF. Does anyone know of an example they can direct me to? Many thanks! Anthony -- 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
Re: Real World Example
lein-midje-doc really does look excellent. I went with marginalia but if that had been around at the time I would have jumped on it without a doubt. On Wednesday, 9 April 2014 13:20:51 UTC+1, Fergal Byrne wrote: Hi Colin, Cheers. I had exactly the same problem, so I've been trying out a few other ideas. One is to use datalog (or cascalog etc) and represent objects with entities and relationships between objects with refs (for datalog). I have some enormous data structures (2-300m synapses per layer, for example) but I find that Datomic and datalog are great for modelling really big and complex structures. There's a datomic wrapper library called adi [1] which adds a nice map-like interface on top of datalog. It's perfect for getting your schema right (you start off with a big map and it automagically does the schema), and you can do some really long link-following, but I'm not using it extensively yet (because everything is data, you can use adi for schema design and some queries, and raw datomic for the rest). I'll be writing extensively about each library or tool I've used on my blog (see sig). I'm writing about lein-midje-doc (also by zcaudate) at the moment, it's just wonderful. [1] https://github.com/zcaudate/adi Regards, Fergal Byrne On Wed, Apr 9, 2014 at 12:22 PM, Colin Yates colin...@gmail.comjavascript: wrote: Hi Fergal, Thanks for those links. I started using protocols and defrecords but I (maybe mistakenly) got the impression that they were frowned upon. As it turns out, maps (typically with a :type key) and multi methods go a long long way, but I still end up with fairly deep nesting of maps. Maybe that is the key - deep nesting of maps maybe cries out one object [data model] to rule them all and I need to decompose it further. Without types almost all the type hints would be either the map of sequence interface. It isn't so much the structure that is obscure, but the semantics of what that structure is modelling. As I hinted at, I am sure it is because my implementation model is still influenced too much by my OO background. Onwards and upwards as they say. Col On Wednesday, 9 April 2014 11:37:52 UTC+1, Fergal Byrne wrote: Hi Anthony, I'm building a fairly large real-world system called Clortex [1], which is a rewrite of the Numenta Platform for Intelligent Computing (NuPIC) [2]. As it's a greenfield project, I've chosen to use Clojure components all the way through instead of fitting in with Java-based or .Net-based frameworks. There are good reasons why you should do this if you can, but obviously that doesn't help you directly with your question. There are many people introducing Clojure as a component in an existing ecosystem, as Colin explains, but usually this is done deep inside a big Java or .Net shop, and they're not showing the world the code. One possible route would be to see if any of the big Java or CLR Open Source apps are looking at doing some subsystems in Clojure. Colin, Great to hear your experiences. I'm no expert, but it's likely that you could ease much of the pain using protocols, type hints and deftypes or records. Also, Typed Clojure [3] is definitely worth looking at. [1] Clortex will be public on Github shortly, see http://fergalbyrne.github.io for docs, http://inbits.com for blog. [2] http://numenta.org [3] https://github.com/clojure/core.typed Regards, Fergal Byrne On Wed, Apr 9, 2014 at 10:18 AM, Aditya Athalye aditya@gmail.comwrote: Welcome, Anthony. I'm not aware of complete applications that fit your requirement, however I think you'll find value in the newly-minted Clojure Cookbook http://clojure-cookbook.com/ ... many, many examples of real-world problems, across domains, solved by Clojure practitioners. All the examples and solutions are available here: https://github.com/clojure-cookbook/clojure-cookbook Cheers, and once again, welcome! On Wednesday, April 9, 2014 12:53:06 AM UTC+5:30, Anthony Ortiz wrote: Hello world! I'm a C# developer who recently went to an interview at a major bank here in NYC and found that they've been using Clojure for their business logic for over a year already and that got me curious, so I find myself on unfamiliar territory learning how to program in a functional language. So far so good, Moxley Stratton's online tutorial combined with Try Clojure (the online interpreter) has been very helpful (kudos to you guys!) and I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR, something simple that would demonstrate how Clojure fits into the event-driven model on the client-side behind, let's say, WPF, and how it would interact with more
Re: Real World Example
to you guys!) and I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR, something simple that would demonstrate how Clojure fits into the event-driven model on the client-side behind, let's say, WPF, and how it would interact with more Clojure on the service-side via, let's say, WCF. Does anyone know of an example they can direct me to? Many thanks! Anthony -- 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. -- Fergal Byrne, Brenter IT Author, Real Machine Intelligence with Clortex and NuPIC https://leanpub.com/realsmartmachines http://www.examsupport.iehttp://inbits.com - Better Living through Thoughtful Technology http://ie.linkedin.com/in/fergbyrne/ https://github.com/fergalbyrne e:fergalby...@gmail.com t:+353 83 4214179 Formerly of Adnet edi...@adnet.ie http://www.adnet.ie -- 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. -- Fergal Byrne, Brenter IT Author, Real Machine Intelligence with Clortex and NuPIC https://leanpub.com/realsmartmachines http://www.examsupport.iehttp://inbits.com - Better Living through Thoughtful Technology http://ie.linkedin.com/in/fergbyrne/ https://github.com/fergalbyrne e:fergalby...@gmail.com t:+353 83 4214179 Formerly of Adnet edi...@adnet.ie http://www.adnet.ie -- 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. -- Fergal Byrne, Brenter IT Author, Real Machine Intelligence with Clortex and NuPIC https://leanpub.com/realsmartmachines http://www.examsupport.iehttp://inbits.com - Better Living through Thoughtful Technology http://ie.linkedin.com/in/fergbyrne/ https://github.com/fergalbyrne e:fergalbyrnedub...@gmail.com t:+353 83 4214179 Formerly of Adnet edi...@adnet.ie http://www.adnet.ie -- 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: Real World Example
And for comparison at World Singles: Clojure source 101 files 17952 total loc, 1321 fns, 666 of which are private, 203 vars, 8 macros, 29 atoms Clojure tests 43 files 3790 total loc Clojure WebDriver tests 14 files 560 total loc (includes comments / whitespace etc - this is just the output of a simple script we run every week to track where we are on migration from our legacy code base and growth of our Clojure code) The atoms are nearly all just caches. We're moving away from private functions. Sean On Apr 9, 2014, at 1:17 AM, Colin Yates colin.ya...@gmail.com wrote: Gah - 5547 production, 2600 of tests. A lot of that discrepancy is down to the very extensive documentation that https://github.com/gdeer81/marginalia allows you to write. Please forgive any other mistakes, working on less than an hours sleep due to my lovely kids. On Wednesday, 9 April 2014 09:14:38 UTC+1, Colin Yates wrote: Hello back! We are using Clojure on the JVM as the implementation language for a platform that will underpin our applications for the next decade. It is relatively new and so far we have implemented the analysis module which is essentially a generic charting engine. So far we have 5547 lines of production code (including comments) and 2600 lines of production code (including comments). That doesn't sound like much but I can tell you it is replacing a similar, but slightly smaller in scope analysis module written in Java which was around 40K lines of production code. Our architecture is Clojure on the back end exporting a number of JSON end points. It is backed by MS SQL using the fantastic https://github.com/jkk/honeysql library. For me, it is a dream coming from Java (and to a much lesser extent Scala), but it does have its costs. Moving from an OO world to an FP world isn't easy, particularly in the shapes your solutions end up with. I am also feeling the pain of not having types - everything is a sequence. This is a joy but it also means a whole bunch of information (i.e. type information) is lost. One of the wins in OO languages is the many number of places to hang semantic information - the name of the class, the structure of the class, the names of the methods etc. I also find many more intermediary variables in OO where as in Clojure it seems more idiomatic to have pipelines of transformation. I am feeling the lost of static types as I refactor APIs particularly. This is undoubtedly my failing not Clojure's and I just need to absorb more good FP paradigms. Would I give up my emacs and Clojure and paredit combination? Not a chance :). Col On Tuesday, 8 April 2014 20:23:06 UTC+1, Anthony Ortiz wrote: Hello world! I'm a C# developer who recently went to an interview at a major bank here in NYC and found that they've been using Clojure for their business logic for over a year already and that got me curious, so I find myself on unfamiliar territory learning how to program in a functional language. So far so good, Moxley Stratton's online tutorial combined with Try Clojure (the online interpreter) has been very helpful (kudos to you guys!) and I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR, something simple that would demonstrate how Clojure fits into the event-driven model on the client-side behind, let's say, WPF, and how it would interact with more Clojure on the service-side via, let's say, WCF. Does anyone know of an example they can direct me to? Many thanks! Anthony signature.asc Description: Message signed with OpenPGP using GPGMail
Real World Example
Hello world! I'm a C# developer who recently went to an interview at a major bank here in NYC and found that they've been using Clojure for their business logic for over a year already and that got me curious, so I find myself on unfamiliar territory learning how to program in a functional language. So far so good, Moxley Stratton's online tutorial combined with Try Clojure (the online interpreter) has been very helpful (kudos to you guys!) and I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR, something simple that would demonstrate how Clojure fits into the event-driven model on the client-side behind, let's say, WPF, and how it would interact with more Clojure on the service-side via, let's say, WCF. Does anyone know of an example they can direct me to? Many thanks! Anthony -- 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: Real World Example
On Apr 8, 2014, at 12:23 PM, Anthony Ortiz anthonypa...@gmail.com wrote: I'm now going through the book 'Programming Clojure'. So far I've seen a lot of utility/academic examples such as fibonacci but little in the way of an actual real-world example of a top-to-bottom desktop application built using Clojure on either the JVM or CLR It's been a while since I read Programming Clojure but my sense is that Clojure Programming from O'Reilly (Emerick, Casper, Grand) would give you more of what you're looking for, and possibly the 2nd Ed of Clojure in Action from Manning (don't buy the 1st Ed - it's very out of date and a lot of the examples won't run). Welcome to Clojure! We're using Clojure for a lot of our application model at World Singles - an Internet dating platform - so we're using it to interact with MySQL, MongoDB, third party web services, to do data transformation (mostly to/from XML, JSON), and so on. We're also using it for the back end of a chat server (built around Netty and a Socket.IO server library). Happy to answer any questions about real world usage either on or off-list! Sean Corfield -- (904) 302-SEAN An Architect's View -- http://corfield.org/ Perfection is the enemy of the good. -- Gustave Flaubert, French realist novelist (1821-1880) signature.asc Description: Message signed with OpenPGP using GPGMail