Re: lazy sequence termination
Thanks - I wasn't sure how much to assume so that's appreciated. I will definitely check for the correctness of the predicate vs the date - that would really be a face palm! OTOH I feel good that I'm actually writing sane Clojure code even if it is broken with my data ;-) Ray On Tuesday, 28 May 2013 23:46:34 UTC+2, Michael Gardner wrote: > > On May 28, 2013, at 15:05 , Mond Ray > > wrote: > > > Quite a few views but no bites ... what have I done wrong in asking this > question? If you can't help with the problem would you please take a moment > to help me understand what has put you off? > > It would help to post less code, to make it easier for people to zero in > on the critical parts. For example, it's not necessary to include > 'fetch-atom-chunk and 'fetch-atom-feed since you can just post some sample > parsed data (which you did). > > When I try running your predicate against your sample data, the predicate > returns false because 2013-05-27 isn't after the feed's :UPDATED date. > Might you have the arguments to 'after? reversed? -- -- 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: lazy sequence termination
On May 28, 2013, at 15:05 , Mond Ray wrote: > Quite a few views but no bites ... what have I done wrong in asking this > question? If you can't help with the problem would you please take a moment > to help me understand what has put you off? It would help to post less code, to make it easier for people to zero in on the critical parts. For example, it's not necessary to include 'fetch-atom-chunk and 'fetch-atom-feed since you can just post some sample parsed data (which you did). When I try running your predicate against your sample data, the predicate returns false because 2013-05-27 isn't after the feed's :UPDATED date. Might you have the arguments to 'after? reversed? -- -- 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: lazy sequence termination
Ah ... client/get is part of the standard httpclient library so it's not my code - it fetches from a url. Sorry I should have included the libraries that I used. On Tuesday, May 28, 2013 10:33:52 PM UTC+2, nchurch wrote: > > Could you include the code in client/get? Not sure where that comes > from and it would be helpful to run the code to see what happensno > guarantees though =) > > On May 28, 1:05 pm, Mond Ray wrote: > > Quite a few views but no bites ... what have I done wrong in asking this > > question? If you can't help with the problem would you please take a > moment > > to help me understand what has put you off? > > > > Too much code not enough data? > > > > Problem too complex to grasp with the supplied info? > > > > Too dull? > > > > Am I asking too much ... in other words I have got this far and I should > be > > expected to know the answer (I really feel like I should too by the > way!) > > > > Use of the term Clojurians? > > > > Something else? > > > > Thanks > > > > Ray > > > > > > > > > > > > > > > > On Tuesday, 28 May 2013 13:44:57 UTC+2, Mond Ray wrote: > > > > > Hi Clojurians, > > > > > I have a program which generates a lazy sequence to read ATOM feed > chunks. > > > That part works OK but now I want to only take a limited number of the > > > chunks based on some predicate. My predicate is currently returning an > > > empty list so I think (hope!) I am missing something simple. > > > > > Here is an excerpt from the feed (yes the feed is in JSON and I have > used > > > cheshire to map to Clojure data): > > > > > {:FEED_ID "5650f3ad-b793-42c6-9fef-80ba105f847d", :TITLE "Delta Feed", > > > :UPDATED "2013-05-28T11:15:34.860+02:00", :GENERATOR "Products", :LINK > > > {:REL "Self", :HREF "http://some-url"}, :PREVIOUS_LINK {:REL > > > "prev-archive", :HREF "http://another-url"}, . > > > > > Here is the sequence generator: > > > > > (defn fetch-atom-chunk > > > "Returns an ATOM chunk from the feed-url" > > > [feed-url] > > > (:ATOM_FEED (:body (client/get feed-url {:as :json} > > > > > (defn fetch-atom-feed > > > "Returns a list of ATOM chunks from the feed-url going back to the > > > from-date" > > > ; [feed-url from-date] (fetch-atom-feed feed-url from-date ()) > > > [feed-url] > > > (let [chunk (fetch-atom-chunk feed-url)] > > > (lazy-seq > > > (cons chunk (fetch-atom-feed (:HREF (:PREVIOUS_LINK chunk))) > > > > > Here is the predicate: > > > > > (defn feed-date-to-clj-date > > > "Patch for ATOM feed date formats like > '2013-05-27T14:35:00.982+02:00' > > >we have to remove the final ':' from the string to enable its > > > conversion" > > > [feed-date] > > > (.parse (java.text.SimpleDateFormat. "-MM-dd'T'HH:mm:ss.SSSZ") > > > (str/replace feed-date #"(.*)(\d\d):(\d\d)" "$1$2$3"))) > > > > > (defn after? > > > "Returns true if first-date is after second-date" > > > [first-date second-date] > > > (> (.getTime first-date) (.getTime second-date))) > > > > > (defn more-feed-chunks-needed? > > > "Look at the atom chunk and decide if we have enough" > > > [from-date atom-chunk] > > > (after? from-date (feed-date-to-clj-date (:UPDATED atom-chunk > > > > > And here is how I run it forever: > > > > > (fetch-atom-feed "https://producta.blah.com/feed/current";) > > > > > And here is how I run it with a predicate: > > > > > (def date-from (.parse (java.text.SimpleDateFormat. "-MM-dd") > > > "2013-05-27")) > > > (take-while #(more-feed-chunks-needed? date-from %) (fetch-atom-feed " > > >https://producta.blah.com/feed/current";)) > > > > > Maybe this is too detailed for the group (do let me know) but > otherwise I > > > would appreciate your advice / tips on what I could try. > > > > > Thanks > > > > > Ray > -- -- 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: lazy sequence termination
Could you include the code in client/get? Not sure where that comes from and it would be helpful to run the code to see what happensno guarantees though =) On May 28, 1:05 pm, Mond Ray wrote: > Quite a few views but no bites ... what have I done wrong in asking this > question? If you can't help with the problem would you please take a moment > to help me understand what has put you off? > > Too much code not enough data? > > Problem too complex to grasp with the supplied info? > > Too dull? > > Am I asking too much ... in other words I have got this far and I should be > expected to know the answer (I really feel like I should too by the way!) > > Use of the term Clojurians? > > Something else? > > Thanks > > Ray > > > > > > > > On Tuesday, 28 May 2013 13:44:57 UTC+2, Mond Ray wrote: > > > Hi Clojurians, > > > I have a program which generates a lazy sequence to read ATOM feed chunks. > > That part works OK but now I want to only take a limited number of the > > chunks based on some predicate. My predicate is currently returning an > > empty list so I think (hope!) I am missing something simple. > > > Here is an excerpt from the feed (yes the feed is in JSON and I have used > > cheshire to map to Clojure data): > > > {:FEED_ID "5650f3ad-b793-42c6-9fef-80ba105f847d", :TITLE "Delta Feed", > > :UPDATED "2013-05-28T11:15:34.860+02:00", :GENERATOR "Products", :LINK > > {:REL "Self", :HREF "http://some-url"}, :PREVIOUS_LINK {:REL > > "prev-archive", :HREF "http://another-url"}, . > > > Here is the sequence generator: > > > (defn fetch-atom-chunk > > "Returns an ATOM chunk from the feed-url" > > [feed-url] > > (:ATOM_FEED (:body (client/get feed-url {:as :json} > > > (defn fetch-atom-feed > > "Returns a list of ATOM chunks from the feed-url going back to the > > from-date" > > ; [feed-url from-date] (fetch-atom-feed feed-url from-date ()) > > [feed-url] > > (let [chunk (fetch-atom-chunk feed-url)] > > (lazy-seq > > (cons chunk (fetch-atom-feed (:HREF (:PREVIOUS_LINK chunk))) > > > Here is the predicate: > > > (defn feed-date-to-clj-date > > "Patch for ATOM feed date formats like '2013-05-27T14:35:00.982+02:00' > > we have to remove the final ':' from the string to enable its > > conversion" > > [feed-date] > > (.parse (java.text.SimpleDateFormat. "-MM-dd'T'HH:mm:ss.SSSZ") > > (str/replace feed-date #"(.*)(\d\d):(\d\d)" "$1$2$3"))) > > > (defn after? > > "Returns true if first-date is after second-date" > > [first-date second-date] > > (> (.getTime first-date) (.getTime second-date))) > > > (defn more-feed-chunks-needed? > > "Look at the atom chunk and decide if we have enough" > > [from-date atom-chunk] > > (after? from-date (feed-date-to-clj-date (:UPDATED atom-chunk > > > And here is how I run it forever: > > > (fetch-atom-feed "https://producta.blah.com/feed/current";) > > > And here is how I run it with a predicate: > > > (def date-from (.parse (java.text.SimpleDateFormat. "-MM-dd") > > "2013-05-27")) > > (take-while #(more-feed-chunks-needed? date-from %) (fetch-atom-feed " > >https://producta.blah.com/feed/current";)) > > > Maybe this is too detailed for the group (do let me know) but otherwise I > > would appreciate your advice / tips on what I could try. > > > Thanks > > > Ray -- -- 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: lazy sequence termination
Quite a few views but no bites ... what have I done wrong in asking this question? If you can't help with the problem would you please take a moment to help me understand what has put you off? Too much code not enough data? Problem too complex to grasp with the supplied info? Too dull? Am I asking too much ... in other words I have got this far and I should be expected to know the answer (I really feel like I should too by the way!) Use of the term Clojurians? Something else? Thanks Ray On Tuesday, 28 May 2013 13:44:57 UTC+2, Mond Ray wrote: > > Hi Clojurians, > > I have a program which generates a lazy sequence to read ATOM feed chunks. > That part works OK but now I want to only take a limited number of the > chunks based on some predicate. My predicate is currently returning an > empty list so I think (hope!) I am missing something simple. > > Here is an excerpt from the feed (yes the feed is in JSON and I have used > cheshire to map to Clojure data): > > {:FEED_ID "5650f3ad-b793-42c6-9fef-80ba105f847d", :TITLE "Delta Feed", > :UPDATED "2013-05-28T11:15:34.860+02:00", :GENERATOR "Products", :LINK > {:REL "Self", :HREF "http://some-url"}, :PREVIOUS_LINK {:REL > "prev-archive", :HREF "http://another-url"}, . > > Here is the sequence generator: > > (defn fetch-atom-chunk > "Returns an ATOM chunk from the feed-url" > [feed-url] > (:ATOM_FEED (:body (client/get feed-url {:as :json} > > (defn fetch-atom-feed > "Returns a list of ATOM chunks from the feed-url going back to the > from-date" > ; [feed-url from-date] (fetch-atom-feed feed-url from-date ()) > [feed-url] > (let [chunk (fetch-atom-chunk feed-url)] > (lazy-seq > (cons chunk (fetch-atom-feed (:HREF (:PREVIOUS_LINK chunk))) > > Here is the predicate: > > (defn feed-date-to-clj-date > "Patch for ATOM feed date formats like '2013-05-27T14:35:00.982+02:00' >we have to remove the final ':' from the string to enable its > conversion" > [feed-date] > (.parse (java.text.SimpleDateFormat. "-MM-dd'T'HH:mm:ss.SSSZ") > (str/replace feed-date #"(.*)(\d\d):(\d\d)" "$1$2$3"))) > > (defn after? > "Returns true if first-date is after second-date" > [first-date second-date] > (> (.getTime first-date) (.getTime second-date))) > > (defn more-feed-chunks-needed? > "Look at the atom chunk and decide if we have enough" > [from-date atom-chunk] > (after? from-date (feed-date-to-clj-date (:UPDATED atom-chunk > > And here is how I run it forever: > > (fetch-atom-feed "https://producta.blah.com/feed/current";) > > And here is how I run it with a predicate: > > (def date-from (.parse (java.text.SimpleDateFormat. "-MM-dd") > "2013-05-27")) > (take-while #(more-feed-chunks-needed? date-from %) (fetch-atom-feed " > https://producta.blah.com/feed/current";)) > > Maybe this is too detailed for the group (do let me know) but otherwise I > would appreciate your advice / tips on what I could try. > > Thanks > > Ray > > > -- -- 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.
lazy sequence termination
Hi Clojurians, I have a program which generates a lazy sequence to read ATOM feed chunks. That part works OK but now I want to only take a limited number of the chunks based on some predicate. My predicate is currently returning an empty list so I think (hope!) I am missing something simple. Here is an excerpt from the feed (yes the feed is in JSON and I have used cheshire to map to Clojure data): {:FEED_ID "5650f3ad-b793-42c6-9fef-80ba105f847d", :TITLE "Delta Feed", :UPDATED "2013-05-28T11:15:34.860+02:00", :GENERATOR "Products", :LINK {:REL "Self", :HREF "http://some-url"}, :PREVIOUS_LINK {:REL "prev-archive", :HREF "http://another-url"}, . Here is the sequence generator: (defn fetch-atom-chunk "Returns an ATOM chunk from the feed-url" [feed-url] (:ATOM_FEED (:body (client/get feed-url {:as :json} (defn fetch-atom-feed "Returns a list of ATOM chunks from the feed-url going back to the from-date" ; [feed-url from-date] (fetch-atom-feed feed-url from-date ()) [feed-url] (let [chunk (fetch-atom-chunk feed-url)] (lazy-seq (cons chunk (fetch-atom-feed (:HREF (:PREVIOUS_LINK chunk))) Here is the predicate: (defn feed-date-to-clj-date "Patch for ATOM feed date formats like '2013-05-27T14:35:00.982+02:00' we have to remove the final ':' from the string to enable its conversion" [feed-date] (.parse (java.text.SimpleDateFormat. "-MM-dd'T'HH:mm:ss.SSSZ") (str/replace feed-date #"(.*)(\d\d):(\d\d)" "$1$2$3"))) (defn after? "Returns true if first-date is after second-date" [first-date second-date] (> (.getTime first-date) (.getTime second-date))) (defn more-feed-chunks-needed? "Look at the atom chunk and decide if we have enough" [from-date atom-chunk] (after? from-date (feed-date-to-clj-date (:UPDATED atom-chunk And here is how I run it forever: (fetch-atom-feed "https://producta.blah.com/feed/current";) And here is how I run it with a predicate: (def date-from (.parse (java.text.SimpleDateFormat. "-MM-dd") "2013-05-27")) (take-while #(more-feed-chunks-needed? date-from %) (fetch-atom-feed "https://producta.blah.com/feed/current";)) Maybe this is too detailed for the group (do let me know) but otherwise I would appreciate your advice / tips on what I could try. Thanks Ray -- -- 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.