Re: [JOB] Clojure Developer at World Singles (remote)

2017-03-21 Thread 'Andy Chambers' via Clojure
> globally diverse team

> Please note we will not be able to consider your application unless you 
are authorized to work in the United States.

US only counts as globally diverse these days?

-- 
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: JDBC Rollbacks and Exceptions

2015-11-12 Thread Andy Chambers
On Friday, October 30, 2015 at 5:22:40 PM UTC-7, Sean Corfield wrote:
>
> Could you provide a bit more context?
>
> We’re using clojure.java.jdbc very heavily in production and we don’t see 
> any problems with exceptions.
>

Hi Sean,

I threw up an example repo demonstrating the type of test I'd like to be 
able to write somehow. Maybe I'm just
trying to test something that should be tested in other ways.

https://github.com/cddr/jdbc-demo

Cheers,
Andy

-- 
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.


JDBC Rollbacks and Exceptions

2015-10-30 Thread Andy Chambers
Hey All,

Has anyone found a way to "reset" a connection after a rollback?

It seems like after an exception is triggered, the connection cannot be 
used again, even if you just want to rollback and continue with the next 
insert. This is a problem if you want to both clean the database state by 
rolling back at the end of the test, and write code that uses the database 
for example to maintain a unique constraint.

Cheers,
Andy

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: ANN: s3-wagon-private 1.2.0

2015-09-14 Thread Andy Chambers
Hi Daniel,

Thanks for taking over this project. And thanks for getting rid of the 
noisy logs.

On Tuesday, August 25, 2015 at 6:07:41 AM UTC-7, Daniel Compton wrote:
>
> Hi folks
>
> s3-wagon-private  is a 
> Leiningen plugin which lets you use a private S3 bucket as a Maven repo, 
> typically for internal artifacts that you don't want to publish to Clojars. 
> If you are spending any time at all lein installing your coworkers projects 
> to use their changes, chances are you could benefit from this (or a more 
> full featured Maven repo).
>
> I've taken over from Phil Hagelberg (technomancy) for maintaining the 
> s3-wagon-private  plugin 
> and am happy to announce the release of version 1.2.0 
> . 
> Almost all of the work for this was done by Allen Rohner for CircleCI, I've 
> just merged their fork back into the main project.
>
> The major internal changes in this release are updating the version of 
> aws-maven used, and replacing Jets3t with the official Amazon S3 client. 
> This eliminates the noisy logging that you would have seen if you had used 
> previous versions of s3-wagon-private.
>
> The list of IAM permissions required on your S3 bucket have changed 
> because of the change in S3 client, they now include:
>
>- getBucketLocation
>- listObjects
>- getObject
>- getObjectMetadata
>- putObject (when deploying)
>
> You can install it by adding :plugins [[s3-wagon-private "1.2.0"]] to 
> your project.clj.
>
> At Day8 we've been using the CircleCI fork for a couple of months with 
> success, but would appreciate any feedback or bug reports from other users 
> as you upgrade.
>
> Thanks!
>
> P.S. If anyone has an example of the magical incantations required to sign 
> a Maven pom and jar when deploying to Clojars through Maven, that would be 
> much appreciated.
> -- 
> -
> Daniel
>

-- 
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.


Manifold streams/deferreds raising errors downstream of a sink

2015-08-09 Thread Andy Chambers
Hey All,

I'm trying to build a library that exposes manifold streams for data 
producing applications. The intention
would be for these apps to s/put! to a sink stream returned by the producer 
function. However, I need to
take the value that is put in and pipe it into some other function before I 
know whether there is an error
and if there is an error, I'd like to propagate it back to the caller.

I understand that the value returned by put! is a deferred, and how to set 
the error state of a deferred but I
don't understand how I can arrange for the deferred to be manipulated 
downstream of where it has been
taken off the stream.

(defn producer []
  (let [in (s/stream)]

(s/consume (fn [msg]
 (d/future
   (prn oops, going to error now)
   (throw (Exception. (str msg) in)

in))
   
@(s/put! (producer) 42)

As written, you get a success response even though an exception was 
triggered by the function that consumes
the in stream. Is it possible to re-write this so that the exception 
bubbles up to where the put! is deref'd?

Cheers,
Andy

-- 
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: Education on Dynamic Binding

2015-06-02 Thread andy . chambers
There's this one from 
uswitch http://oobaloo.co.uk/dynamic-error-capture-with-clojure but it 
doesn't really have a motivating example to highlight why that particular 
approach is better.

Or this one which hints at 
monads: http://adambard.com/blog/acceptable-error-handling-in-clojure/

I also found this one: https://github.com/MichaelDrogalis/dire which was 
cool because it referenced 
http://www.erlang.org/download/armstrong_thesis_2003.pdf which made for an 
interesting read.

Looks like slingshot is fairly popular so I should probably go and 
investigate that.

On Thursday, 28 May 2015 23:57:21 UTC-7, piast...@gmail.com wrote:

 What blog posts did you find useful?


 On Tuesday, May 26, 2015 at 10:01:29 PM UTC-4, andy.c...@fundingcircle.com 
 wrote:

 This page on Jira says that dynamic binding should be documented as The 
 Clojure Way to do error handling. Was this ever done? I managed to find a 
 few blog posts discussing approach but nothing official.

 http://dev.clojure.org/display/design/Error+Handling

 Cheers,
 Andy



-- 
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.


Education on Dynamic Binding

2015-05-26 Thread andy . chambers
This page on Jira says that dynamic binding should be documented as The 
Clojure Way to do error handling. Was this ever done? I managed to find a 
few blog posts discussing approach but nothing official.

http://dev.clojure.org/display/design/Error+Handling

Cheers,
Andy

-- 
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: Managing database schema

2015-05-26 Thread andy . chambers
One problem we found with ragtime is that if multiple developers are 
working on a schema simultaneously, it's quite easy to get into a state 
where `lein ragtime migrate` will complain about finding a migration it 
doesn't expect. I think you can work around this by rolling back to the 
nearest common ancestor and then going forward again but it's just a bit of 
a speed bump to be aware of.

On Thursday, 14 May 2015 02:19:01 UTC-7, Gadzhi Musaev wrote:

 Have you looked at ragtime? Particularly it's sql.files library. As far as 
 I see, it will suit your needs.

 https://github.com/weavejester/ragtime

 On 14 May 2015 at 11:45, Colin Yates colin...@gmail.com javascript: 
 wrote:

 Is there a lib that will allow me to have my sql defined in a file which 
 I can reference from Clojure? I cannot use one of the existing migration 
 libraries as I need to do more than just manipulate SQL on a version 
 upgrade.

 I am aware of yesql which would be great but it didn't work out for DDL. 
 Specifically yesql seems to associate one block of sql for each name. I 
 want to have multiple blocks (e.g. a 'create table ...' as well as a number 
 of 'alter table create index idx_').

 I have tried embedding the sql as a string in the .clj file. This isn't 
 as painful as it might sound but is still painful enough.

 Any suggestions?

  -- 
 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 
 javascript:
 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.




-- 
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.


Minimum Viable Database Component

2015-04-29 Thread Andy Chambers
Hi All,

I'm trying to follow the component architecture for an app I'm working on 
and wondered if I was missing something. In the Just enough structure 
talk, one of the examples Stuart presents is a DB component that contains 
just a small selection of DB related functions (i.e. insert, and query 
IIRC) so that when you need to mock it out for your tests, you don't have 
to implement the entire JDBC interface.

This makes sense but I'm wondering if anyone has released such a subset 
(possibly expanded to include things like transactions, and maybe a few 
utility query builders) as open source ideally with a corresponding mock 
implementation. With the popularity of the component library, I'm surprised 
not to find ready made components I can just plug into my app.

If there's nothing like this already, then I guess I have an idea for a new 
project. Anyone think this is a good idea or would everyone's ideal DB 
component look a little different? Look forward to hearing your thoughts.

Cheers,
Andy

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [ANN] Sweet Liberty: Set Your Data Free with Clojure and REST

2015-02-21 Thread Andy Chambers


On Tuesday, February 17, 2015 at 11:24:48 AM UTC-5, Bill Piel wrote:

 Blog post: 
 https://blog.rjmetrics.com/2015/02/15/sweet-liberty-set-your-data-free-with-clojure-and-rest/


 Sweet-Liberty is a library for building database-backed RESTful services 
 using Clojure. You can think of it as a means to build and configure 
 components that translate between REST and SQL. Or, you might say that it 
 helps you wrap a REST interface around a relational database. Besides 
 standard CRUD operations (available via appropriate HTTP methods), it also 
 supports some other features through query parameters, such as: filtering, 
 paging and returning a subset of fields. 


 Feedback is welcome and appreciated. Thanks


It looks cool!

I started out on a similar track but using datomic as the storage and ended 
up with http://github.com/cddr/crud 

Since you have implemented paging, you might be interested in 
reading http://use-the-index-luke.com/sql/partial-results/fetch-next-page 
which provides a method of paging with different (IMO better) trade-offs to 
the method you see in most tutorials.

Cheers,
Andy

-- 
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.


Performant string concatenation (of many, large strings)

2015-02-13 Thread Andy Chambers
Is there a reason you're collecting the result into a string rather than just 
writing out to a file?

-- 
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: Question about test.check, and knossos

2014-10-24 Thread Andy Chambers
On Thursday, October 23, 2014 10:04:52 AM UTC-4, Jan Stępień wrote:

I've begun to work on such a tool not long ago. Thomas Arts, who gave a 
 talk at
 our local FP user group meetup [mλ], inspired me to try out the approach 
 you're
 describing in Clojure. After some experiments I got the library to a state 
 where
 it could generate test cases for java.util.HashSet. I looked for prior art 
 in
 the area of concurrency and detection of race conditions. That's when I
 discovered Philip Potter's Knossos-based approach [pp]. I find it very
 interesting but I haven't yet had time to try it out. It'd be great to 
 have it
 integrated, though.

 I demonstrated the tentative API in [gist], where some simple properties of
 HashSet and Clojure vector are checked. The gist also shows how an 
 exemplary
 failure looks, including shrinking. I'll try to get the implementation to a
 reasonable state and push it to GitHub soon.

 Feedback is very welcome!


Cool! This looks very similar to the Erlang implementation. I look forward 
to seeing it up on github.

Cheers,
Andy



-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Question about test.check, and knossos

2014-10-23 Thread Andy Chambers
Hi All,

Lately I've been exploring the world introduced to me by watching the John 
Hughes' quickcheck video from
clojure west. Awesome stuff!

Eventually I found the testing for fun and profit[1] paper which left me 
wanting to test my apps using
a model based system like the paper describes. It looks like 
test-check-knossos[2] takes a stab at applying
knossos[3] to this problem.

However the examples in that repo don't capture the the aspect of using 
state to generate test commands to be
executed against the system. It's just a random stream of :take/:reset 
operations whereas the registry example
in the paper seems to require that the function which generates the 
sequence of test commands has access to
the state of the system under test at the start of each command.

So is there a missing clojure library here? Is anybody working on something 
that allows this style of model
testing? If not, would it make sense for someone writing one to leverage 
knossos in any way?

Cheers,
Andy

[1]: http://people.inf.elte.hu/center/fulltext.pdf
[2]: https://github.com/philandstuff/test-check-knossos
[3]: https://github.com/aphyr/knossos

-- 
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: Question about test.check, and knossos

2014-10-23 Thread Andy Chambers
On Thursday, October 23, 2014 9:23:36 PM UTC-4, tcrayford wrote:

 Hi Andy, All,

 I wrote a tool like this: https://github.com/tcrayford/laundromat

 it's super hacky, and the api is definitely in beta. I asked some folk 
 about reviewing this api, got little feedback, and figured it wasn't that 
 much of a wanted thing after all. I still use it internally, but it's 
 pretty bad at what it does right now. I'd love to hear if more folk are 
 interested or if anybody's interested in contributing.


Hi Tom,

Your project looks interesting and I definitely think it has value. Where 
were you expecting feedback? When I have questions about a project like 
this, I'm never sure where to ask them. Stackoverflow? A github issue? 
Google groups? Anyway it looks pretty cool to my untrained eye but I'd be 
interested in hearing what Reid Draper or Kyle Kingsbury has to say about 
it.

Do you mind me asking what made you decide to diverge from the original 
Erlang implementation? Also what makes it bad? I'd be interested in helping 
out if I can.

Cheers,
Andy


-- 
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: Question about test.check, and knossos

2014-10-23 Thread Andy Chambers
On Thursday, October 23, 2014 11:21:44 PM UTC-4, Andy Chambers wrote:

 On Thursday, October 23, 2014 9:23:36 PM UTC-4, tcrayford wrote:

 Hi Andy, All,

 I wrote a tool like this: https://github.com/tcrayford/laundromat

 it's super hacky, and the api is definitely in beta. I asked some folk 
 about reviewing this api, got little feedback, and figured it wasn't that 
 much of a wanted thing after all. I still use it internally, but it's 
 pretty bad at what it does right now. I'd love to hear if more folk are 
 interested or if anybody's interested in contributing.


 Hi Tom,

 Your project looks interesting and I definitely think it has value. Where 
 were you expecting feedback? When I have questions about a project like 
 this, I'm never sure where to ask them. Stackoverflow? A github issue? 
 Google groups? Anyway it looks pretty cool to my untrained eye but I'd be 
 interested in hearing what Reid Draper or Kyle Kingsbury has to say about 
 it.

 Do you mind me asking what made you decide to diverge from the original 
 Erlang implementation? Also what makes it bad? I'd be interested in helping 
 out if I can.


Also, while I'm here talking about test.check, there's a couple of bugs I'd 
like to report.

 * There's no link to the API docs in the README
 * I did manage to find some docs here 
(http://clojure.github.io/test.check/) but there is no link to the source 
like there is in the compojure codox documentation

I tried to use JIRA after signing the CA but the secure signing page 
doesn't seem to be working at the moment (screenshot attached).

Cheers,
Andy



-- 
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.


combining methods

2009-08-07 Thread Andy Chambers

Hey All,

Does clojure have an equivalent of either CLOS's `call-next-method' or
java's super?

For example, given the multi-method, and the interfaces ICDISCElement
and IODMDef, where IODMDef extends ICDISCElement

(defmulti validate class)

(defmethod validate ICDISCElement [elem]
  ;;generic validation of all elements)

(defmethod validate IODMDef [def]
  ;;how can I do stuff in here then pass control to the other validate
method)


--~--~-~--~~~---~--~~
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: The Application Context Pattern

2009-02-27 Thread Andy Chambers

2009/2/27 Marko Kocić marko.ko...@gmail.com:

 Interesting approach, nice explained.

 Does anyone have similar example using one of the cells
 implementations?
 What would be pros/cons between this and cells approach?

The cells implementations I've seen posted to this list (in fact pretty much all
cells reimplementations) haven't yet approached the sophistication of
kenny-cells.

It's like editors.  Everyone reckons they can make one better than emacs (or
vi) but underestimate the man-hours that have gone into them over the years
and end up with something that maybe looks as good (or better) superficially
but when you delve into the details, just doesn't cut the mustard.

I'd love to see some kind of clojure-cells but it's still a long way off.

--~--~-~--~~~---~--~~
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
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
-~--~~~~--~~--~--~---