<Dynasty>
I assume this hasn't made its way into the base language?
<Drup>
not yet
<Dynasty>
thanks for the links Drup, this looks pretty promising
deavid has quit [Ping timeout: 272 seconds]
deavid has joined #ocaml
palomer has quit [Quit: palomer]
palomer has joined #ocaml
AltGr has joined #ocaml
govg has quit [Ping timeout: 264 seconds]
antkong has quit [Quit: antkong]
toomuchtvrotsurb has joined #ocaml
dsturb has joined #ocaml
toomuchtvrotsurb has quit [Remote host closed the connection]
fluter has quit [Ping timeout: 250 seconds]
<palomer>
hey guys
<palomer>
anyone here ever put up a conduit server?
<palomer>
I’m trying to figure out how to do an http response
toomuchtvrotsurb has joined #ocaml
fluter has joined #ocaml
rgrinberg has quit [Ping timeout: 240 seconds]
antkong_ has joined #ocaml
rgrinberg has joined #ocaml
dsturb` has joined #ocaml
dsturb has quit [Ping timeout: 250 seconds]
dsturb`` has joined #ocaml
dsturb` has quit [Ping timeout: 260 seconds]
govg has joined #ocaml
AltGr has left #ocaml [#ocaml]
empyrean has quit [Ping timeout: 240 seconds]
palomer_ has joined #ocaml
palomer has quit [Ping timeout: 240 seconds]
palomer_ is now known as palomer
toomuchtvrotsurb has quit [Remote host closed the connection]
toomuchtvrotsurb has joined #ocaml
toomuchtvrotsurb has quit [Remote host closed the connection]
toomuchtvrotsurb has joined #ocaml
toomuchtvrotsurb has quit [Remote host closed the connection]
govg has quit [Ping timeout: 252 seconds]
govg has joined #ocaml
toomuchtvrotsurb has joined #ocaml
govg has quit [Ping timeout: 252 seconds]
Dynasty has quit [Quit: ChatZilla 0.9.92 [Firefox 41.0/20150925121647]]
manuel__ has joined #ocaml
joncfoo has quit [Ping timeout: 240 seconds]
fluter has quit [Ping timeout: 250 seconds]
darkf has joined #ocaml
BitPuffin|osx has quit [Ping timeout: 255 seconds]
fluter has joined #ocaml
dsturb`` has quit [Remote host closed the connection]
<SomeDamnBody>
is there any way to define a different pointer type in ctypes?
<SomeDamnBody>
like, there's void ptr, string ptr... all that other stuff
<SomeDamnBody>
I just have an anonymouse opaque pointer to some implementation that I'm not provided. I would like the name in the ocaml code to reflect that
<SomeDamnBody>
in the case I have a c function: void my_func(mytype * xyz)
<SomeDamnBody>
I would like to have a new type in ocaml, mytype ptr
manuel__ has quit [Quit: manuel__]
lopex has quit [Quit: Connection closed for inactivity]
AltGr has joined #ocaml
toomuchtvrotsurb has quit [Read error: Connection reset by peer]
toomucht_ has joined #ocaml
fluter has quit [Ping timeout: 250 seconds]
fluter has joined #ocaml
keen___________3 has joined #ocaml
keen___________2 has quit [Ping timeout: 252 seconds]
MercurialAlchemi has joined #ocaml
<palomer>
I can’t make heads or tails of this http stuff
mac10688 has quit [Ping timeout: 250 seconds]
palomer has quit [Quit: palomer]
ygrek has joined #ocaml
palomer has joined #ocaml
toomucht_ has quit [Remote host closed the connection]
<palomer>
I’ve been reading these cohttp docs for an hour now
<palomer>
still don’t get it
psy_ has joined #ocaml
psy_ has quit [Max SendQ exceeded]
toomuchtvrotsurb has joined #ocaml
psy_ has joined #ocaml
psy_ has quit [Max SendQ exceeded]
toomuchtvrotsurb has quit [Ping timeout: 246 seconds]
psy_ has joined #ocaml
MercurialAlchemi has quit [Ping timeout: 240 seconds]
zpe has joined #ocaml
zpe has quit [Remote host closed the connection]
palomer has quit [Quit: palomer]
palomer_ has joined #ocaml
tibor_ has joined #ocaml
<palomer_>
does anyone know anything about this error? Error: Error while linking server.d.cmo:
<palomer_>
Reference to undefined global `Conduit_lwt_unix'
toomuchtvrotsurb has quit [Ping timeout: 250 seconds]
martintrojer has quit [Max SendQ exceeded]
martintrojer has joined #ocaml
tane has quit [Quit: Verlassend]
sh0t has joined #ocaml
rand__ has joined #ocaml
sh0t has quit [Ping timeout: 268 seconds]
WanderingGlitch has quit [Ping timeout: 246 seconds]
WanderingGlitch has joined #ocaml
antkong_ has quit [Quit: antkong_]
toomuchtvrotsurb has joined #ocaml
toomuchtvrotsurb has quit [Ping timeout: 240 seconds]
aidalgol has quit [Quit: zZzZZzzz]
freehck has joined #ocaml
<freehck>
Hello everyone.
<freehck>
I wonder how could I define a t type.
<ely-se>
Could you be more specific?
<freehck>
For example I saw Hashtbl.t type which is used for hash tables.
<freehck>
I created a module for Digraph.
<freehck>
And want to call this Digraph.t
<freehck>
It seems to be a good name I think.
<freehck>
Now it's called Digraph.digraph
<ely-se>
it's idiomatic to call it "t" to avoid stutter
<freehck>
ely-se: sotty, my dictionary doesn't contain the translation for the word "slutter". Could you explain me this/
<freehck>
ah, shutter...
<ely-se>
stutter means repeating the same thing over and over again :P
<freehck>
So could I call Digraph.digraph as a Digraph.t?
<freehck>
Did I understod you well?
<ely-se>
calling it Digraph.t is probably what you want to do, yes.
<freehck>
Ha! :)
<freehck>
ely-se: thx! :)
mort___ has joined #ocaml
antkong has joined #ocaml
jonludlam has joined #ocaml
<flux>
and if you need another essential module-related type.. it can be u ;-)
<flux>
just kidding, don't do that
obadz has quit [Ping timeout: 244 seconds]
rgrinberg has quit [Ping timeout: 264 seconds]
obadz has joined #ocaml
scriptdevil has joined #ocaml
orbifx has joined #ocaml
tane has joined #ocaml
AltGr has left #ocaml [#ocaml]
AltGr has joined #ocaml
lopex has joined #ocaml
toomuchtvrotsurb has joined #ocaml
Haudegen has quit [Ping timeout: 246 seconds]
larhat1 has quit [Quit: Leaving.]
toomuchtvrotsurb has quit [Ping timeout: 252 seconds]
Haudegen has joined #ocaml
AltGr has left #ocaml [#ocaml]
ely-se has quit [Quit: lunch]
ousado has joined #ocaml
ousado has joined #ocaml
zpe has joined #ocaml
rgrinberg has joined #ocaml
Kakadu has joined #ocaml
rand__ has quit [Quit: leaving]
rgrinberg has quit [Ping timeout: 246 seconds]
larhat has joined #ocaml
obadz has quit [Ping timeout: 244 seconds]
obadz has joined #ocaml
ggole has joined #ocaml
yomimono has joined #ocaml
zpe has quit [Remote host closed the connection]
zpe has joined #ocaml
octachron has joined #ocaml
zpe has quit [Ping timeout: 240 seconds]
ely-se has joined #ocaml
zpe has joined #ocaml
larhat has quit [Quit: Leaving.]
larhat has joined #ocaml
larhat has quit [Client Quit]
larhat has joined #ocaml
tane has quit [Quit: Verlassend]
huza has joined #ocaml
toomuchtvrotsurb has joined #ocaml
ceryo has joined #ocaml
ceryo has quit [Client Quit]
sepp2k has joined #ocaml
ceryo has joined #ocaml
toomuchtvrotsurb has quit [Ping timeout: 256 seconds]
ceryo has quit [Client Quit]
raphaelss has quit [Ping timeout: 264 seconds]
scriptdevil has quit [Ping timeout: 252 seconds]
rossberg has quit [Ping timeout: 240 seconds]
scriptdevil has joined #ocaml
rossberg has joined #ocaml
antkong has quit [Quit: antkong]
rgrinberg has joined #ocaml
antkong_ has joined #ocaml
rgrinberg has quit [Ping timeout: 256 seconds]
dsheets has joined #ocaml
<Leonidas>
flux: Digraph.u?
<Leonidas>
What's wrong with .u?
<Leonidas>
I mean, .t is the canonical name, but sometimes you need a second name.
<flux>
maybe you can give it an actual name then.
<Leonidas>
ok, maybe :-)
<flux>
not to say there couldn't be situations where .u is suitable, but most often there aren't
<flux>
for example look at the Event module
<flux>
if it came with t and u it would be a mess :)
<Leonidas>
hahaha, the codebase I was working with had an unwritten convention that no binding name could be longer than 4 characters and preferably 2 characters or less.
<Drup>
(flux: there is a u in lwt ...)
<flux>
drup, should there be.. :)
<Leonidas>
(it was heavily inspired by the Pierce-books so I guess the names came from some pseudocode in these books)
<Drup>
flux: precisely, no.
<Leonidas>
"The type of thread wakeners."
<Leonidas>
hmm.
<Leonidas>
"fresh air in web programming" <- is this slogan new? I can't remember seeing it before
<Leonidas>
it's hilarious
<Leonidas>
(in the positive sense)
<Drup>
It's very old :p
orbifx has quit [Quit: WeeChat 1.3]
dsheets has quit [Ping timeout: 260 seconds]
_andre has joined #ocaml
toomuchtvrotsurb has joined #ocaml
toomuchtvrotsurb has quit [Ping timeout: 265 seconds]
AltGr has joined #ocaml
manuel__ has joined #ocaml
AltGr has left #ocaml [#ocaml]
<SomeDamnBody>
Does anybody know how to fully restart merlin mode? It keeps giving errors... like, once it crashes on some input...
<Drup>
M-x merlin-restart-process
<def`>
SomeDamnBody: report the issue please
<SomeDamnBody>
where to?
qrvpzvb has joined #ocaml
<def`>
here.
<Drup>
the bug tracker ? ^^'
<SomeDamnBody>
ergh there's 60 things open on merlin's github page
<SomeDamnBody>
in any case, it sounds like issue 428
rgrinberg has joined #ocaml
mort___ has left #ocaml [#ocaml]
rgrinberg has quit [Ping timeout: 252 seconds]
empyrean has joined #ocaml
qrvpzvb has quit [Quit: WeeChat 1.3]
scriptdevil has quit [Ping timeout: 272 seconds]
tane has joined #ocaml
huza has quit [Quit: WeeChat 0.3.8]
<SomeDamnBody>
ah I think that I was able to fix it with merlin-kill-process
<SomeDamnBody>
make
<SomeDamnBody>
oops lol
zpe has quit [Remote host closed the connection]
dsheets has joined #ocaml
ohama has quit [Ping timeout: 240 seconds]
ohama has joined #ocaml
toomuchtvrotsurb has joined #ocaml
toomuchtvrotsurb has quit [Ping timeout: 272 seconds]
blik71 has joined #ocaml
scriptdevil has joined #ocaml
scriptdevil has quit [Remote host closed the connection]
orbifx has joined #ocaml
ely-se has quit [Quit: leaving]
frawgie_ has quit [Remote host closed the connection]
rgrinberg has joined #ocaml
ely-se has joined #ocaml
manuel__ has quit [Quit: manuel__]
slash^ has joined #ocaml
toomuchtvrotsurb has joined #ocaml
manuel__ has joined #ocaml
psy_ has joined #ocaml
psy_ has quit [Max SendQ exceeded]
psy_ has joined #ocaml
manuel__ has quit [Quit: manuel__]
antkong_ has quit [Quit: antkong_]
ely-se has quit [Quit: leaving]
manuel__ has joined #ocaml
smondet_ is now known as smondet
psy_ has quit [Ping timeout: 264 seconds]
toomuchtvrotsurb has quit [Remote host closed the connection]
blik71 has quit [Ping timeout: 264 seconds]
reynir is now known as rascul_
rascul_ is now known as reynir
cball has joined #ocaml
ely-se has joined #ocaml
tane has quit [Ping timeout: 240 seconds]
kushal has joined #ocaml
dhil has joined #ocaml
ely-se has quit [Quit: leaving]
MercurialAlchemi has joined #ocaml
slash^ has quit [Read error: Connection reset by peer]
orbifx has quit [Quit: WeeChat 1.3]
toomuchtvrotsurb has joined #ocaml
psy_ has joined #ocaml
darkf has quit [Quit: Leaving]
xman has joined #ocaml
<xman>
I have a record with lots of fields, and I would like to define another record with a different value for only one of the fields. Is there any way to simply express it?
<Drup>
{foo with field = value}
toomuchtvrotsurb has quit [Remote host closed the connection]
<xman>
great!
toomuchtvrotsurb has joined #ocaml
<xman>
thanks
palomer has joined #ocaml
tibor_ has joined #ocaml
^elyse^ has joined #ocaml
<palomer>
hey guys
<palomer>
I’m trying to understand some sourcecode
<palomer>
and I’d like to be able to jump around instantly to value and type definitions
WanderingGlitch has quit [Changing host]
WanderingGlitch has joined #ocaml
tane has joined #ocaml
<companion_cube>
I'm not sure, but merlin might be able to do this
<companion_cube>
at least it shows types
ericsmithvt has joined #ocaml
^elyse^ has quit [Quit: Leaving]
jwatzman|work has joined #ocaml
<ggole>
Yeah, merlin can jump to definitions
<ggole>
You'll need to compile with -bin-annot and set up a .merlin so it can find everything
<palomer>
so cool!
<palomer>
I need to recompile merlin?
<ggole>
No, the project
shinnya has joined #ocaml
<palomer>
ahhh
<palomer>
does anyone know where I can find the docs for cohttp?
<palomer>
like the values and the types and the modules
blik71 has quit [Remote host closed the connection]
kushal has joined #ocaml
jeffmo has joined #ocaml
empyrean has joined #ocaml
empyrean has quit [Client Quit]
mort___ has joined #ocaml
pilne has joined #ocaml
palomer has quit [Quit: palomer]
rgrinberg has quit [Ping timeout: 246 seconds]
rgrinberg has joined #ocaml
Kakadu has quit [Quit: Page closed]
kushal has quit [Quit: Leaving]
slash^ has joined #ocaml
palomer has joined #ocaml
<palomer>
looks complicated o_O
<palomer>
I’m using lwt and I have a thread that’s continuously saving my state to disk
<palomer>
so my processing threat is p and my saving thread is s, should I do Lwt.join [p;s] ?
<palomer>
to have both running at the same time
Haudegen has quit [Ping timeout: 260 seconds]
tane has joined #ocaml
manuel__ has quit [Quit: manuel__]
zaquest has quit [Quit: Leaving]
zaquest has joined #ocaml
<def`>
palomer: they will both be running concurrently, join is to wait for both of them to be done
dhil has quit [Quit: Leaving]
Haudegen has joined #ocaml
<palomer>
oh, cool
<palomer>
both of them never terminate
<palomer>
so join is the best option I guess
<def`>
then Lwt.join will never terminate :)
<palomer>
actually, if either one terminates I want it to terminate
<palomer>
because that signals an error
<def`>
then prefer choose or pick
<def`>
oh if one of them throw an exception, it will get propagated to the join
<palomer>
ahh, in that case join is fine
<palomer>
let foo x = (… lwt code) >>= foo x <— is this tail recursive?
<def`>
then you should put the exception handler for both in the join :)
<def`>
palomer: if I remember well, if you thread as some asynchrony going on, yes it will be
<palomer>
what do you mean by “thread as some asynchrony going on”?
manuel__ has joined #ocaml
<def`>
palomer: if you're doing only pure things (the thread never yields or blocks), I think Lwt never context-switch
<def`>
and I am not sure it is tail-recursive in this case, let me check
<def`>
(I would be surprised if it is not the case actually :))
<palomer>
if it isn’t, how are you supposed to have an infinitely running http server?
<def`>
an infinitely running servers access the network, this is blocking :)
<def`>
let rec nothing () = return () >>= nothing;; <-- this is pure and never terminating :)
<palomer>
I’d assume an http server follows the pattern: let rec process () = read () >>= (fancy processing) >>= process
<def`>
Hmm
<palomer>
nothing is return () ?
<def`>
return unit and bind on itself
<palomer>
what do you mean by bind on itself?
<def`>
>>= nothing
<def`>
Ok it is tail-recursive.
<def`>
palomer: for the http server, I'd say there are two loops: one accepting clients, and one executed for each client
<def`>
the outer loop is likely to run Lwt.async to let the client thread live its life
<def`>
(to summarize the somewhat confusing thing above: if your code is not pure, it is making use of concurrency, it's not too important whether it is tail-recursive: control flow is stored in the heap, you will consume memory but no stack)
dsheets has quit [Ping timeout: 255 seconds]
<def`>
(if your code is pure, made only of binds and returns and looping, it risk consuming arbitrarily many stack, so tail-recursion is more important)
sgeisenh has joined #ocaml
raazdaan has joined #ocaml
toomucht_ has joined #ocaml
toomuchtvrotsurb has quit [Ping timeout: 250 seconds]
<habs1>
Taking a college class on ocaml and this is the most recent homework: http://sprunge.us/dRbX?ocaml We're supposed to hardcode the equality_test_results list and submit the code online where it will be auto-compiled and graded based on if it passes the tests.
<habs1>
My question is, is this homework really fair? As in, can I depend on the fact that None == None, assuming all I know is that the autograder is a valid Ocaml compiler (we aren't even given the version)?
habs1 is now known as habs
slash^ has quit [Read error: Connection reset by peer]
manuel__ has quit [Quit: manuel__]
Kakadu has joined #ocaml
xificurC has quit [Quit: WeeChat 1.3]
orbifx has quit [Quit: AtomicIRC: The nuclear option.]
<Drup>
You do know you have locations in the error messages right ? Where is the actual error ?
<octachron>
orbifx, it sounds like you are not "extracting" the argument with Term.eval at the end point
<bbc>
how do you use the term ?
<orbifx>
I've not used it yet
<orbifx>
Lies
<bbc>
do you mean you are compiling just that and it fails?
<orbifx>
I do use it.. inplace for a string argument
<orbifx>
doh
<orbifx>
Drup: had a looked the position
<bbc>
show us how you use it then :)
<orbifx>
sorry guys, too much presuming instead of observing
<orbifx>
i have a:
<orbifx>
let xyz = [ (string, string); ... ]
<orbifx>
and I was using in one of the tuples as the second argument
<bbc>
you must not use the "string Cmdliner.Term.t" directly
wiml has joined #ocaml
<orbifx>
obviously
<bbc>
you should declare some function that takes a string as argument and pass it to Cmdliner.Term.eval
<orbifx>
hmm this aint a function
<bbc>
what isn't?
<orbifx>
its a list of tuples
<orbifx>
which I know deep down is a functions
<orbifx>
I see in your code bbc you have used Term.(pure analyse & variable)
<orbifx>
thanks octachron
<apache2>
is there an easy way to go from a c struct { 0xFF, 0x01, 0x30} to a Num or Big_int ?
MercurialAlchemi has quit [Ping timeout: 256 seconds]
<orbifx>
Drup: meant to write "had I looked at the position"
rgrinberg has quit [Ping timeout: 240 seconds]
rgrinberg has joined #ocaml
<bbc>
orbifx: with the line you pointed out, I say that evaluating the term should call analyze with the argument path parsed from the command-line
<bbc>
so when eval is called on this term, it actually executes "analyze path" where path was parsed from the command-line according to the description I gave (Cmdliner.Arg....)
<orbifx>
yeah
<orbifx>
makes sense
<orbifx>
now have to see how to adapt it to my case
<orbifx>
wondering if I should tern the declaration of my list to a function and pass the argument there
<orbifx>
I guess I had structured my program in a declerative way
<orbifx>
it is probably not written for those under a week's experience with ocaml
<bbc>
have you used a similar language before?
<companion_cube>
you can also start with Arg, you know
<orbifx>
Haskell
<bbc>
yes, maybe you would be better off with a more simple library
<bbc>
Cmdliner is nice but being confused by its types is probably normal
<orbifx>
companion_cube: yes, but I'm making looking to escape imperative-procedural style
<companion_cube>
that's a reasonable edneavour
<orbifx>
well, from a newbie's perspective "With Cmdliner your program evaluates a term. A term is a value of type Cmdliner.Term.t" is not very enlightening.
<orbifx>
it's a recursive definition of "term"
<orbifx>
I;
mehdi__ has joined #ocaml
<orbifx>
I'm sure as I read on more carefully this time, I'll get my "aha" moment.
mehdi_ has quit [Ping timeout: 246 seconds]
raazdaan has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
stormogulen has quit [Ping timeout: 272 seconds]
<Drup>
(bunzli's libraries in general, while small and rather self contained, are not really for beginners)
demonimin has quit [Remote host closed the connection]
<orbifx>
seems so
<orbifx>
so basically Term.eval is where the rest of the program should be executed from?
demonimin has joined #ocaml
<Drup>
Term.eval evaluates the term against the command line. The term is composed of arguments (composed with Arg) and other functions (created with const and pure)
<octachron>
orbifx, I would personally say that Term.eval "run" the program that was abstractly defined as Term.t
<orbifx>
ok
<bbc>
I didn't know about "const". It looks like it will be a replacement for "pure" but has not been released yet
<orbifx>
I dare say a monad that lifts the rest of the functions?
<Drup>
It's not a monad
<Drup>
bbc: yeah, I still don't understand why this was changed :/
<orbifx>
Drup why not a monad?
sepp2k has quit [Quit: Leaving.]
<Drup>
because it doesn't have a bind
<orbifx>
ok
<orbifx>
I see a $ in the examples
<orbifx>
(const revolt $ const ())
<orbifx>
and is it not "binding" the Arg-s?
<Drup>
f $ x = f x
<Drup>
it's application
<Drup>
It's basically @@ before it existed :D
<orbifx>
because they need to lift () before using it?
<orbifx>
and what about the Arg parameters?
<Drup>
what about them ?
<bbc>
you could look at ($) like a map function
<Drup>
You are affected by the haskell illness of trying to see monads everywhere :D
<Drup>
bbc: but it's not, it's the basic, normal, function application
<Drup>
It's just here to avoid parens ...
<orbifx>
bbc: I it's the same as Haskell, but for a moment I thought it might be some other kind of sequencing for the eval.
<bbc>
Drup: sorry, I misread the type. but application wouldn't have "('a -> 'b) t -> 'a t -> 'b t" as type, would it?
<Drup>
ooh, I understand your confusion now, yeah
<Drup>
bbc: No, it's the *application* :D
dsheets has joined #ocaml
<octachron>
Drup, you mean the application for the underlying applicative functor, isn't it?
<Drup>
Oh, hum, I got confused with &
<Drup>
ignore me ~~'
<bbc>
:)
<orbifx>
lol
<orbifx>
what a carfuffle :P
<bbc>
orbifx: actually, I don't really remember how the types work out every time I use the library
<orbifx>
good news is I have finished assimilating Cmdliner to my little program
<Drup>
(so, hum, it's still called "application though)
<Drup>
orbifx: since you are into haskell, look up "applicative functors" in the typeclassopedia)
<orbifx>
and it's working :)
<bbc>
if you get the idea that you can define what arguments you want to parse with Arg, how you want to combine them to pass them to your function with Term and to eval it, you'll be fine
<orbifx>
Drup: thanks yeah
rgrinberg has joined #ocaml
<orbifx>
bbc: yeah the problem was that I didn't want to "function-ise" the list of key-values (for no sensible reason) :P
<orbifx>
done it now
<bbc>
I see what you mean, you've made quite a step then :)
<pilne>
whoever thought a long "intro" that involves typing large expressions into the REPL >.< is there a way to... edit things (like navigate through code already typed?)
<Drup>
pilne: use utop
<pilne>
vas is das utop you speak of?
shinnya has joined #ocaml
manuel__ has quit [Quit: manuel__]
<Drup>
pilne: opam install utop, and you'll see :)
<pilne>
hrm
toomuchtvrotsurb has quit [Remote host closed the connection]
toomuchtvrotsurb has joined #ocaml
madroach has quit [Ping timeout: 264 seconds]
madroach has joined #ocaml
rgrinberg has quit [Ping timeout: 250 seconds]
Denommus` has quit [Read error: Connection reset by peer]
Denommus` has joined #ocaml
NhanH is now known as nhanH
nhanH is now known as NhanHo
NhanHo is now known as NhanH
NhanH is now known as NhanHo
tane has quit [Quit: Verlassend]
NhanHo is now known as NhanH
ollehar has quit [Quit: ollehar]
SomeDamnBody has quit [Ping timeout: 265 seconds]
toomuchtvrotsurb has quit [Remote host closed the connection]