purr changed the topic of #elliottcable to: you
eligrey has quit [Quit: Leaving]
yorick has quit [Remote host closed the connection]
eligrey has joined #elliottcable
<devyn> why, whyyy does MS like hungarian notation so much
<devyn> shit like <div id="oDiv"> in old IE examples
alextgordon has quit [Quit: Textual IRC Client: www.textualapp.com]
fwg has quit [Ping timeout: 245 seconds]
<devyn> well, I'm listening to japanese ska
<joelteon> hungarian notation is weird in css
<devyn> ...in CSS
<joelteon> in html
<devyn> idk but if you look at examples on MSDN for older IE technologies that we're forced to use
<devyn> like all of the filter: shit
<devyn> they always come up with completely stupid code
<joelteon> yeah
<devyn> I fucking love how Microsoft thought they should put JavaScript inside CSS
niggler has quit [Quit: Computer has gone to sleep.]
<whitequark> ELLIOTTCABLE: why?
<whitequark> devyn: hi!
<devyn> whitequark: hi!
<whitequark> have you looked at my code?
<whitequark> also I want to discuss the way of transferring and storing market depth data
<whitequark> and overall structure and federation
<joelteon> if i set up a minecraft server, any of you guys want on it
niggler has joined #elliottcable
<ELLIOTTCABLE> whitequark: hm?
<ELLIOTTCABLE> joelteon: I'd play with you (=
<ELLIOTTCABLE> joelteon: depends on the mods in play, though. I'm not a huge fan of vanilla.
<whitequark> ELLIOTTCABLE: why are you thinking you're a bad programmer?
<devyn> whitequark: I couldn't get it to compile
<whitequark> devyn: oh? what fails?
<ELLIOTTCABLE> irccloud is being weird
<ELLIOTTCABLE> whitequark: *so* many reasons.
<devyn> Error: Unbound type constructor Exchange.timestamp
<ELLIOTTCABLE> hard to distill into stuff here.
<devyn> File "exchanges/btc_e.mli", line 1, characters 26-44:
<whitequark> ELLIOTTCABLE: you could try :3
<devyn> (should have put that first)
<whitequark> devyn: hmmm interesting
<whitequark> you sure you have an up-to-date checkout?
<devyn> yeah
<whitequark> try ocamlbuild -clean and rebuild
<devyn> oh, cleaning worked
<devyn> heh
<whitequark> I'm currently working on adaptive HTTP pools.
<whitequark> so it could automatically adjust to whatever's the actual number of threads hammering the api
<devyn> whitequark: holy shit, what is this doing
<whitequark> devyn: it requests trade data for all currencies on btc-e and stores them in data/
<ELLIOTTCABLE> I know a *fuckton* of theory, about How To Write Good Code. I can argue for days about various concerns when balancing debugging time against writing time, or designing intuitive APIs, or … whatever.
<devyn> oh neat, but it's running very fast haha
<ELLIOTTCABLE> I mean, I've been programming for years, and reading in detail anything I come across giving advice on being a good programmer, etceteras.
<whitequark> devyn: is that bad? :3
<devyn> :p
<devyn> not sure how comfortable I am with polling an API that frequently
<devyn> but
<devyn> okay
<devyn> :p
<whitequark> devyn: it's been running for 10 hours here
<whitequark> and nothing happened
<whitequark> so I suppose it's ok
<devyn> obviously it's picking up on trades pretty frequently, so
<ELLIOTTCABLE> what is?
<ELLIOTTCABLE> what're you guys talking about?
<devyn> ELLIOTTCABLE: whitequark and I (mostly whitequark) are making a BTC-e trading bot in OCaml
<ELLIOTTCABLE> … trading bot … why …
<whitequark> maybe not just btc-e, it could work with any exchange
<whitequark> ELLIOTTCABLE: for fun?
<devyn> for fun and profit
<devyn> :)
<devyn> anyway, I've got a few hours of work to do still and then I'll try to grok your code and see if I can generate some statistics based on the data (say, StochRSI and MACD)
<whitequark> devyn: wanna hear about my overall architecture? I think it's pretty neat
<devyn> you're welcome to explain it
<devyn> I might not read it for a bit
<whitequark> oh ok
<whitequark> so the basic idea is that a bot is a series of pipes, or streams. most of the time (right until you need to actually send some orders) you just connect those pipes with combinators
<whitequark> examples of combinators would be:
<whitequark> 1) multiplicate one pipe and make n pipes out of it
<whitequark> 2) load or save data to file
<whitequark> 3) calculate ticker based on raw trade data
<whitequark> 4) perform delta compression or decompression of depth data--it's better to transmit or store it in compressed form, but some APIs give it fully (btce) and others give you just changes, so you have to accomodate for that
<whitequark> 5) calculate some indicators. note how this can be repeated with the output itself
<whitequark> 6) send a stream across network to another instance of the bot
<whitequark> that may be important because right now, it spends 20% of time parsing json
<whitequark> and ocaml is non-parallel
<whitequark> 7) filter outgoing orders to make sure they are sane !
<whitequark> because that's a pipe too
<whitequark> ELLIOTTCABLE: why are you so surprised? :)
<whitequark> (also I'm still listening to you, even if it not looks like it)
<ELLIOTTCABLE> 'sokay
<ELLIOTTCABLE> not in the mood to explain. watching movie with the girlfriend, ish, and reading
<whitequark> ok
<whitequark> I'll record it so: "elliott is not in the mood today"
* ELLIOTTCABLE laughs
<ELLIOTTCABLE> man, when I say that to my girlfriend, I get straight-up raped
<ELLIOTTCABLE> so I'm gonna avoid that terminology religiously
<devyn> ELLIOTTCABLE, why don't you love me
<whitequark> devyn: wat.
<purr> beep.
<ELLIOTTCABLE> devyn: why do you think I don't love you?
<devyn> you're never in the mood
<ELLIOTTCABLE> meh'd
<whitequark> rainbo
<whitequark> er
<devyn> lolwhat
<purr> lolwhat
<whitequark> nevermind
<whitequark> not going to type it again
<whitequark> irssi really ought to have an easier way of adding way too much color
<devyn> rainbow
<whitequark> devyn: you fail too
<devyn> lol
<joelteon> ELLIOTTCABLE: fair enough
<joelteon> ;____________________________________;
<ELLIOTTCABLE> just had what might be a really good idea.
<ELLIOTTCABLE> want to hear y'all's thoughts:
<ELLIOTTCABLE> Bitcoin as a paid-software registration system.
<ELLIOTTCABLE> To use a piece of software, all you do is send N BTC to a particular, public, receiving address;
<whitequark> more generally, using blockchain as a global, reliable storage for small amounts of data
<ELLIOTTCABLE> then the software itself can verify that you are the owner of a private-key that, at one point, provided such a transaction. “I paid for that software.”
<whitequark> of authenticated data, even
<ELLIOTTCABLE> same applies to other such things.
<ELLIOTTCABLE> nah, not the same
<ELLIOTTCABLE> I get that, name coin and all are cool
<whitequark> what you say is namecoin for software registration lol
<purr> lol
<ELLIOTTCABLE> but I *particularly* mean, doing *exactly* what the block chain is designed to do: prove that a particular Identified Individual paid So Much.
<whitequark> not to say it's bad
<whitequark> hm
<ELLIOTTCABLE> like, that's different
<ELLIOTTCABLE> this is a use of Bitcoin that doesn't, at all, repurpose the design
<ELLIOTTCABLE> works on the existing block chain. could implement it *right now*.
<whitequark> devyn: finished new adaptive Http_pool
<whitequark> it is... amazingly effective
<whitequark> it's like 2x faster now
<devyn> optimization is orgasmic
<joelteon> yeah i like optimization
<joelteon> I just found out yesterday that there's a stream fusion library for haskell
<joelteon> that basically just replaces data.list
<whitequark> optimizing haskell code is like
<whitequark> oxymoron
<joelteon> well, it was comparable performance with C in the example
<devyn> oh come on, GHC is an insane compiler
<devyn> it's amazing how well it can compile considering the bloat Haskell has
<whitequark> ^ exactly
<whitequark> btw, perf (from linux-tools) is amazing
<whitequark> it's a noncooperative sampling profiler (requires a native binary with symbols and that's it) which is really really good
<whitequark> nice UI, fast, and it even shows kernel threads!
<devyn> huh
<whitequark> for example it shows how the bot spends 4% of time in iwl_trans_pcie_read32
<whitequark> you can also zoom in shared objects, view assembly annotated with profile data, etc
<devyn> wow
<devyn> really impressive
<whitequark> told you!
<whitequark> ok, this trips cloudflare's limits
<whitequark> unsurprisingly
<devyn> hahaha
<whitequark> should add a rate limiter
<ELLIOTTCABLE> devyn: “optimization is orgasmic” wat.
<purr> beep.
<devyn> it is, though
<devyn> programmers optimizing things is totally like fapping
<ELLIOTTCABLE> ew.
<ELLIOTTCABLE> It says a lot that you automatically equate the term “orgasmic” to tapping.
<ELLIOTTCABLE> Just sayin'. ;)
<devyn> lol ELLIOTTCABLE
<purr> lol
<whitequark> hahah
sneakin_ has joined #elliottcable
<sneakin_> hi
<purr> sneakin_: hi!
<sneakin_> my job is done.
<whitequark> devyn: ok I added rate limiting
<whitequark> but now the pool is thrashing
eligrey has quit [Quit: Leaving]
<ELLIOTTCABLE> shit.
<ELLIOTTCABLE> fuckin' JAX, U SUCK
<sneakin_> so you're not away elliot.
<ELLIOTTCABLE> oh! hi!
<ELLIOTTCABLE> sneakin_: bitcoin <3
sneakin_ has quit [Ping timeout: 250 seconds]
sneakin_ has joined #elliottcable
<sneakin_> other than the 20 GiB download.
<whitequark> devyn: ok fixed it
<whitequark> it's quite amazing to watch how the system adjusts itself waaaay better than you could do manually
<devyn> whitequark: wow much volatility
<cuttle> ELLIOTTCABLE:
<whitequark> cuttle:
<ELLIOTTCABLE> cuttle:
<devyn> cuttle:
<ELLIOTTCABLE> sneakin_: Hm?
<cuttle> devyn:
<cuttle> whitequark:
<whitequark> devyn:
<cuttle> sufjan stevens <3
<devyn> devyn:
niggler has quit [Quit: Computer has gone to sleep.]
<whitequark> devyn: the best latency I can get here with polling is 700ms
<whitequark> but average is something like 2500ms
<devyn> maybe the latency is high due to the rate at which you're requesting? what happens if you limit it very significantly
<devyn> lovely. linux kernel panic
<devyn> huh seems like an old bug regression possibly
<devyn> weird, bug in the red black tree implementation of all things
<whitequark> devyn: no, if I decrease the rate it's even lower
<whitequark> er, higher
<whitequark> i.e. nothing is throttling me
<devyn> oh ok
<devyn> just a guess
<whitequark> (by latency I mean dt between trade and now, not between request and now)
<devyn> serioulsy
<devyn> seriously
<devyn> of all things
<devyn> kernel panic
<devyn> in this
<whitequark> how much ram do you have?
<devyn> 16 GB
<whitequark> and no ecc?
<whitequark> my guess it's a bitflip
<whitequark> cosmic rays lol
<purr> lol
<devyn> hmmm, /possibly/ but I looked and apparently there was a bug related to it in an older kernel
<whitequark> well, either this or something else shat in that area of memory
<devyn> well it caught a NULL pointer dereference and panic'd
<devyn> so I think it's a bug
<devyn> not a bitflip
<devyn> like the older bug, a double erase
<whitequark> oh yeah
<devyn> considering it's in rb_erase
<whitequark> wow I googled and found this:
<whitequark> The Internet Communications Engine (Ice) is a modern object-oriented toolkit that enables you to build distributed applications with minimal
<whitequark> effort
<whitequark> the manual is a 2706-page pdf
<whitequark> minimal effort my ass
<whitequark> Provide a full set of features that support development of realistic distributed applicaAvoid unnecessary complexity, making the platform easy to learn and to use.
<whitequark> HAHAHAHAHA
<devyn> haha enterprise type people do think 2706 pages is easy
<whitequark> it has its own database and scripting language for it
<devyn> lol
<purr> lol
<devyn> yet another example of people taking the OO pattern too far
<whitequark> and what seems like a clone of LDAP
<whitequark> and a firewall
<devyn> Ice.Communicator communicator = Ice.Util.initialize();
<devyn> Ice.ObjectAdapter adapter = communicator.createObjectAdapterWithEndpoints(
<devyn> "converter", "tcp -p 10000");
<devyn> adapter.add(new ConverterI(), communicator.stringToIdentity("converter"));
<devyn> adapter.activate();
<devyn> communicator.waitForShutdown();
<devyn> communicator.destroy();
<devyn> lol
<whitequark> A particularly interesting use of a servant locator is as an evictor [1]. An evictor is a servant locator that maintains a cache of servants:
<whitequark> wat
<devyn> ahahaha
<whitequark> References
<whitequark> 1. Henning, M., and S. Vinoski. 1999. Advanced CORBA Programming with C++. Reading, MA: Addison-Wesley.
<whitequark> oh, that explains
<whitequark> The diagram above shows a single Ice object with five facets. Each facet has a name, known as the facet name. Within a single Ice object,
<whitequark> all facets must have unique names. Facet names are arbitrary strings that are assigned by the server that implements an Ice object. A facet
<whitequark> with an empty facet name is legal and known as the default facet. Unless you arrange otherwise, an Ice object has a single default facet; by
<whitequark> default, operations that involve Ice objects and servants operate on the default facet.
<whitequark> this is basically
<whitequark> COM
<whitequark> and IUnknown
<devyn> hah
<whitequark> as an example they show how to make a file class
<whitequark> by attaching a stat (modification, etc times) interface to file interface with an UUID
<whitequark> the manual is actually pretty well-written, not the usual enterprisey crap
<devyn> my work decided to use sencha touch for a mobile app
<devyn> it is awful
<devyn> seems like sencha's strategy was to basically make a horribly engineered product, market it to hell, and then charge a ton for support
<whitequark> that is so surprising
<devyn> ikr :)
<whitequark> actually that ice thing is something I may use
<whitequark> it's even GPL
<devyn> what why
<devyn> ot
<whitequark> well, I'm looking at the manual
<whitequark> it's written by smart people, if somewhat overengineered
<whitequark> but also has pretty neat features
<devyn> idk, seems old and businessy
<devyn> like SOAP
<whitequark> nah, soap is orders of magnitude worse
<whitequark> I've worked with it
<devyn> so have I
<devyn> temporarily; I just gave up and saw they offered an OData API too which was better but didn't provide as many features
<devyn> but it was good enough
<whitequark> lol
<purr> lol
<devyn> there's a song called 'nichinichisou' (日々草)
<devyn> and I was like wtf is that
<devyn> it has nothing to do with what it looks like (day day grass)
<devyn> it's "madagascar periwinkle"
<devyn> lolwtf
<purr> lolwtf
<devyn> whitequark: hahahaha
<devyn> at first I was like wtf is a menon
<devyn> but now I see
<devyn> also I'm done with work shit
<whitequark> cool
<whitequark> I'm finishing streaming ticker
<whitequark> fold over streams!
<whitequark> FP is fucking powrful
<devyn> kinda late now though, might want to look at the trader tomorrow
<devyn> 3am
<devyn> :p
<whitequark> ooh I see
<devyn> but I will be able to for sure
<devyn> don't really have anything else I have to do
<whitequark> cool
<whitequark> I'll probably finish depth delta compression by that time
<devyn> lol
<purr> lol
<whitequark> so basically all that remains are algorithms
<devyn> for simulation, we want to make sure that we're not misrepresenting things
<devyn> i.e. assuming that whatever trade we make is definitely going to go through
<whitequark> ie, verify it against depth data?
<devyn> probably. could also watch to see whether a similar trade ends up going through
<whitequark> I've been thinking to make it indistinguishable for algorithms whether they run in simulation or live
<whitequark> to make simulation more realistic
<whitequark> this mainly implies that algorithms cannot rely on current wall clock time
<devyn> well that's not a problem, is it
<devyn> ?
<devyn> oh but
<whitequark> nah, just explaining a design point
<devyn> hmm
<devyn> no, no, we have trade timestamps
<devyn> so no problem
<whitequark> yep
<whitequark> they're a bit in the past though
<devyn> that's not a problem
<whitequark> (they are *always* in the past. lightspeed!)
<whitequark> that *could* be a problem in one case
<whitequark> say due to network congestion traffic stops and then resumes after 30s
<whitequark> so a giant drop of data comes in, but it's all outdated
<whitequark> to guard against this, I think that decisions of algorithms must also be timestamped
<devyn> but we're not assuming that it's recent anyway
<devyn> of course
<whitequark> (question: how? they may take data from multiple sources)
<devyn> we basically have to divide everything into x-sized periods
<devyn> *then* run whatever indicators over that
<devyn> so say, 5 minute periods
<devyn> or 1 minute
<devyn> or whatever
<whitequark> oh
<whitequark> right
sneakin_ has quit [Ping timeout: 250 seconds]
yorick has joined #elliottcable
fwg has joined #elliottcable
jvulc has left #elliottcable [#elliottcable]
sharkbot has quit [Remote host closed the connection]
sharkbot has joined #elliottcable
alextgordon has joined #elliottcable
fwg has quit [Ping timeout: 245 seconds]
fwg has joined #elliottcable
eligrey has joined #elliottcable
fwg has quit [Ping timeout: 264 seconds]
fwg has joined #elliottcable
fwg has quit [Changing host]
fwg has joined #elliottcable
fwg has quit [Ping timeout: 252 seconds]