[JOB] Wanted Clojure/Lisp Job
Hi, I am in Sydney Australia, and looking for a job. My current interests and skills/abilities are: - Design and implementation of reusable team libraries using Clojure - Design and implementation of microservices with Restful API using Clojure - Design and implementation of SW develop process using Git and AWS - Design and implementation of CI/CD using Jenkins, Git and AWS - Design and implementation of automation using various scripts and AWS - Design and implementation of advanced DB schema using PostgreSQL - Design and implementation of a general Machine Learning architecture using R and AWS Most of above points are not individual level targets, but team level contribution. I am kin to build an “engineering shop” not a “sweat shop”. The main strength of me is, of course, Lisp programming. I love to express my ideas in Lisp programming languages(and to make myself and other colleagues free from non-programming tasks, I started working on SW development process, CI/CD, and automation). I am very fluent with Clojure, Common Lisp, and Scheme. I can freely express my ideas with these Lisp dialects. My programming style is “make machines repeats” rather than “punch-in duplication using human labors”. Therefore, my code usually does not have any concept level duplication as well as implementation level duplication. Please feel free to ask my code examples to "oz dot jongwon dot choi" at Google Mail. Thanks - Jong-won Choi -- 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.
Practical ways to deal with 'bag-of-properties' syndrome, AKA dynamic typing?
Use defrecord. People still can mess by using it as map, but it is a different problem. -- 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.
usage of "and"
Typo? (and cnt (pos? cnt)) -- 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: Using a dynamic var for my database connection for implicit connections+transactions
Cut paste from my own code base: (def ^:dynamic *db-conn*) (defmacro with-db-connection [ body] `(jdbc/with-db-connection [con# (get-db-conn)] (binding [*db-conn* con#] ~@body))) A few points. Do not give any value to the dynamic var, make it unbound and make it fail early for unexpected usage. Set a value via binding and make a macro then use the dynamic var only through the macro (i.e., hide its existence) That's how I normally use dynamic vars. Some people afraid of using it, but it is like a knife - If you know how to use it, it is useful to remove unnecessary complexity. On Friday, 31 July 2015 10:44:31 UTC+10, J. Pablo Fernández wrote: Hello Clojurians, I found passing around the database connection to each function that uses it very error prone when you are using transactions as passing the wrong one could mean a query runs outside the transaction when in the source code it is inside the with-db-transaction function. So I ended up defining the db namespace like this: (ns db) (defonce ^:dynamic conn (atom nil)) (defn connect! (reset conn (generate-new-connection))) (defn run-query [query] (run-query query @conn) [query conn] (run-the-query-in-connection query conn)) This is pseudo-code of course, simplified to highlight the part that I'm most unfamiliar with: (defonce ^:dynamic conn (atom nil)) The reason why it's an atom is so that connect! can *set* it and the reason why it's a dynamic var is so I can do this: (jdbc/with-db-transaction [db-connection-with-transaction @db/conn] (binding [db/conn (atom db-connection-with-transaction)] (db/run-query SELECT *)) and the query will be implicitly run inside the transaction. Does it make sense? Is this wrong? will it fail in unexpected ways? Is there a better way? 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 --- 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: Advice for building backend REST services from scratch using clojure
With Lispy languages, you can do whatever you want without worrying too much about underlying web server, db, etc. I use my own constructors like: (define-crud-handler :employee [:path [customers cust-id sites site-id employees] :auth-required? true] {:collection {:create (employees-create cust-id site-id) :read (employees-collection-read cust-id site-id :req-params [number draw] [number start] [number length] order search) :partial-update (update-employees-collection-pref [number cust-id] [number site-id] :req-params [keyword payment-schedule] next-pay-date) :delete employees-collection-delete } :element {:read (employees-element-read cust-id site-id employee-id) :update (employees-element-modify cust-id site-id employee-id) :delete employees-element-delete }}) ... (define-crud-fn employees-element-modify [cust-id site-id employee-id] (dl/update-item :employee {:site-id site-id :id employee-id} (into {} (map (fn [[k v]] [k [:put v]]) (get-json-parameters))) :return :updated-new)) In this way, I can maintain proper abstraction layers and free to change underlying web server or db. On Friday, 11 April 2014 00:13:19 UTC+10, Kashyap CK wrote: Hi, I have the opportunity to build a set of services from scratch. I plan to use clojure for this. I'd like to experiment with options available out there - options such as - what webserver, what database etc. I'd like it very much if you could share some of your experiences in this and possibly some pitfalls to avoid. Regards, Kashyap -- 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: Advice for building backend REST services from scratch using clojure
With Lispy languages, you can do whatever you want without worrying too much about underlying web server, db, etc. I use my own constructors like: (define-crud-handler :employee [:path [customers cust-id sites site-id employees] :auth-required? true] {:collection {:create (employees-create cust-id site-id) :read (employees-collection-read cust-id site-id :req-params [number draw] [number start] [number length] order search) :partial-update (update-employees-collection-pref [number cust-id] [number site-id] :req-params [keyword payment-schedule] next-pay-date) :delete (employees-collection-delete cust-id site-id) } :element {:read (employees-element-read cust-id site-id employee-id) :update (employees-element-modify cust-id site-id employee-id) :delete (employees-element-delete cust-id site-id employee-id) }}) ... (define-crud-fn employees-element-modify [cust-id site-id employee-id] (dl/update-item :employee {:site-id site-id :id employee-id} (into {} (map (fn [[k v]] [k [:put v]]) (get-json-parameters))) :return :updated-new)) In this way, I can maintain proper abstraction layers and free to change underlying web server or db. -- 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.
[ANN] Dynohub: DynamoDB client + transaction layer
Dynohub, a Clojure DynamoDB client with transaction layer https://github.com/ozjongwon/dynohub Dynohub is a transperent DynamoDB client with a port of transaction library(https://github.com/awslabs/dynamodb-transactions) There are three layers of abstraction: * Dynohub - a plain client layer * Dynolite - a handy client layer on top of Dynohub * Dynotx - a transaction enabled client layer on top of Dynolite (NOTE: All the limits of Amazon's transaction library also applied to Dynohub's transaction layer, Dynotx) Using 'with-transaction' macro you can add transaction! An example (from test): (deftest conflicting-tx-test (testing Conflicts (setup-db) (dt/with-transaction [t1] (dt/put-item test-table {:id conflictingTransactions_Item1 :which-transaction? t1}) (dt/put-item test-table {:id conflictingTransactions_Item2}) (dt/with-transaction [t2] (dt/put-item test-table {:id conflictingTransactions_Item1 :which-transaction? t2 - I win!}) (utils/ignore-errors (dt/commit t1)) (dt/put-item test-table {:id conflictingTransactions_Item3}))) (is (empty? (dl/scan :_tx_table_))) (is (empty? (dl/scan :_image_table_))) (is (empty? (dl/get-item test-table {:id conflictingTransactions_Item2}))) (is (not (empty? (dl/get-item test-table {:id conflictingTransactions_Item3} (is (= (get (dl/get-item test-table {:id conflictingTransactions_Item1}) :which-transaction?) t2 - I win! Any bug reports will be appreciated. Cheers - Jong-won Choi -- 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: ns/use/require/import inconsistent an confusing
Even though I've written only one toy web framework in Clojure[1], (I think) I know the difference. Because there is documentation for use and ns, I'll add my own only :) I interpret (use 'ns) as Use 'ns namespace within *current* namespace - from your example, 'user'. Usually for REPL. (ns ...) is a definition of namespace. You can define any namespace in any file, I guess (I didn't try that but it seems it's the right thing to me). I interpret (ns ns1 (:use 'ns2) as Define ns1 namespace and from ns1 namespace use stuff in ns2 namespace. Usually for files. I bet ns is a macro and use 'use' - that's what I'll do. You should try macroexpand those things to learn how it works and think such a way. Once you have this ability, when you see something new and read doc or usage of it, you can imagine if it is function or macro, and (for macro) how underlying macroexpansion would look like, etc. [1]:https://github.com/defstruct/tbw On Wednesday, 30 November 2011 22:06:04 UTC+11, j1n3l0 wrote: Also in a REPL you can do the following: user (use 'example.core) nil user But in a source file you have to do: (ns stuff.core (:use 'example.core)) I think I've seen the reason for this difference once before but can someone more learned *please* explain :) -- 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
ANN: template based web v0.1.0
Hello I've just released the first RC1 of my first Clojure toy project[1]. This is basically old style put tags in HTML and process such tags in your code. I copied the idea from html-template[2]. Because this is my first Clojure coding effort, there might be mistakes. Any comment and suggestion will be appreciated. You can check how to use tbw from an example application[3](copied from Mark McGranaghan's Developing and Deploying a Simple Clojure Web Application[4]) Thanks Jong-won Choi [1]:https://github.com/defstruct/tbw [2]:http://weitz.de/html-template/ [3]:https://github.com/defstruct/tbw/blob/master/examples/adder.clj [4]:http://mmcgrana.github.com/2010/07/develop-deploy-clojure-web- applications.html -- 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: Lookup on a symbol?
No that doesn't make any sense, but I (think I) know what is going on there. (:a 1 2) === (get 1 :a 2) Jong-won On Nov 25, 1:35 pm, jaime xiejianm...@gmail.com wrote: But we still don't know why it behaves like this and for what reason. does (:a 1 2) returns 2 make any sense?? -- 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: Lookup on a symbol?
I'd expect the same, but in the code (https://github.com/clojure/ clojure/blob/master/src/jvm/clojure/lang/RT.java) get and getFrom do not raise any error. On Nov 24, 6:30 pm, Sean Corfield seancorfi...@gmail.com wrote: (:a 1 2) yields 2 which surprises me a bit... I'd expect an error because 1 is not a collection that :a can look itself up in. -- 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: Getting index of char from end
Andreas, how're you doing? Frankly my impression of Clojure is just like this posting. You know usually with Common Lisp my common sense works - it provides more than I expect. With Clojure I have to double check because my expectation is more than Clojure provides, mostly. And it ends up being using Java side - which might be more than I expect in a harsh way! (It is like doing assembly programming in C) I believe Clojure is great for Java programmers but not sure for Common Lisp programmers. But it is definitely an interesting toy! (I'm writing a toy web framework in Clojure to see how far I can go) Hope you're doing well! (PS: You shouldn't put such code into ADO production code! :-) On Nov 13, 7:55 pm, Andreas Kostler andreas.koestler.le...@gmail.com wrote: How about using the clojure sequence functions? (require '[clojure.contrib.seq-utils :as seq-utils]) (defn last-index-of [c string] (first (seq-utils/find-first (fn [[_ a]] (= a c)) (reverse (seq-utils/indexed string) P.S. Jong Won, how are you liking Clojure? I've met you in Parramatta and joined the ADO team :) Nice to have you on the group here :) Cheers Andreas -- 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
Getting index of char from end
Hi I'm wondering the best way to express: (position #\a abba :from-end t) Should I use interop? (.lastIndexOf abba (int \a)) 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