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