Funny story – one time the network went down for some reason. \u00c2\u00a0Most places use IP phones now, which use the network. \u00c2\u00a0Just to be safe, we had to call the exchanges to cancel our orders – but no phones! \u00c2\u00a0So we all whip out our cell phones and call that way. \u00c2\u00a01- You can’t do that since they’re not logged and monitored. and 2- “Does anyone have something other than AT&T? \u00c2\u00a0I can’t call anyone!”<\/p><\/blockquote>\n
Email has to go through your email servers and be backed up, instant messaging has to go through a proxy that logs all conversation, phones (at least for traders) have to keep recordings, etc etc. \u00c2\u00a0One of my better scripts was actually to do a daily dump of chat logs, bundle them per user, and send it as an email to a special email address. \u00c2\u00a0Killing two birds with one stone! \u00c2\u00a0 Regulators will seriously come in and say “we want every communication trader X made from this date to this date.” \u00c2\u00a0And you say “okay” or you get a fine. \u00c2\u00a0They also do spot-checks at least once per year. \u00c2\u00a0“Give us everything you traded from this date to this date.” \u00c2\u00a0And you say “okay” or you get a fine. \u00c2\u00a0Incidentally, if you want to see roughly what the code for chat log retention looked like:<\/p>\n
#!\/usr\/bin\/perl\r\nuse strict;use warnings;\r\nuse include;\r\nmy $ch='chat_host';\r\nmy $cu='chat_user';\r\nmy $cp='chat_pass';\r\nmy @worries=();\r\nmy $to='chatlogs@mycompany.com';\r\nmy $today=&include::getdate('YYYY-MM-DD');\r\nmy @senders = &include::sql($ch,$cu,$cp,\"select distinct(senderid) from message_log where date(modified)='$today'\")\r\n or &freakout($!);\r\nforeach my $sender(@senders)\r\n{\r\n my @lines=&include::sql($ch,$cu,$cp,\"select msg_text from message_log where date(modified)='$today' and senderid='$sender'\");\r\n if(!scalar(@lines))\r\n {\r\n push(@worries,\"No lines for $sender\");\r\n next;\r\n }\r\n &include::send_email($to,join(\"_\",split(\" \",$sender)).'@backuphost.mycompany.com','Chat logs for $today',join(\"\\n\",@lines))\r\n or push(@worries,$!);\r\n}\r\nif(scalar(@worries))\r\n{\r\n &include::send_email('me@mycompany.com','chat_backups@backuphost.mycompany.com','Possible problems with chat backups',join(\"\\n\",@worries));\r\n}\r\nsub freakout\r\n{\r\n my $wtf=shift;\r\n &include::send_email('me@mycompany.com','chat_backups@backuphost.mycompany.com','Error with chat logs for $today',$wtf);\r\n exit(1);\r\n}<\/pre>\nIt’s a \u00c2\u00a0simplified but only because the hard stuff is hidden in my include module I keep around to make my life easier – it was(is) literally this short. \u00c2\u00a0We traded every single day and there was chat (and chatbots) every day, so if there wasn’t anything in the logs there was definitely a problem. \u00c2\u00a0In plain language:<\/p>\n
Do some housekeeping (includes, variable setup for hostnames and the like, the date, etc)\r\nGet a list of everyone who sent an IM that day and if there's a problem, send a freakout email with what happened.\r\nFor every person in that list, send an email with their name as the \"from\" address and the chats they sent as the body\r\n (if there's a problem, add it to the list of worrying things)\r\nIf anything is worrying, send an email to that effect to me.<\/pre>\nThe reason this is so simple is kind of a lucky coincidence. \u00c2\u00a0The chat logs are in one table, the ID is the name of the person, and the text of the log includes the time and who it’s to. \u00c2\u00a0If it didn’t, I’d have to have another line to get the identity of the person – no big deal. \u00c2\u00a0I’d also have to have a temporary array of lines that I’d append the “to”, “time”, and “text” to as one entry, then send the email with the contents of that array instead.<\/p>\n","protected":false},"excerpt":{"rendered":"
Prop trading shops don’t just get free access to all of the exchanges they’re on. \u00c2\u00a0Seats are expensive, and for what they’re doing, not really necessary either. \u00c2\u00a0They generally get something called Sponsored Access. \u00c2\u00a0A big company will sponsor them on the exchange in return for a fee. \u00c2\u00a0But it’s not just access to the […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[22],"tags":[10,34],"_links":{"self":[{"href":"http:\/\/www.imaginarybillboards.com\/index.php?rest_route=\/wp\/v2\/posts\/110"}],"collection":[{"href":"http:\/\/www.imaginarybillboards.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.imaginarybillboards.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.imaginarybillboards.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.imaginarybillboards.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=110"}],"version-history":[{"count":6,"href":"http:\/\/www.imaginarybillboards.com\/index.php?rest_route=\/wp\/v2\/posts\/110\/revisions"}],"predecessor-version":[{"id":145,"href":"http:\/\/www.imaginarybillboards.com\/index.php?rest_route=\/wp\/v2\/posts\/110\/revisions\/145"}],"wp:attachment":[{"href":"http:\/\/www.imaginarybillboards.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.imaginarybillboards.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=110"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.imaginarybillboards.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}