= Q Tips Errata
:toc:
:toc-placement: preamble

Despite my best efforts to create the book with zero errors, readers
have pointed out a few bugs. The Kindle version has all corrections
and is available for re-download.  Recent versions of the printed book
have them as well.  Please report any new errata to
mailto:nick.psaris@gmail.com[Nick Psaris].

toc::[]

== Foreword

== Preface

== Chapter 1 _Introduction_

== Chapter 2 _Getting Started_

* p. 9, *2.1 Installing KDB+*, _Running q_, the fifth sentence should
 read: +*4*()core+ indicates that kdb+ is capable of seeing *4* cores
 on my machine.
+
_Posted 2015.05.03. Danila Deliya_
* p. 17, *2.3 Syntax Rules*, _Parentheses_, the first sentence should
 read: Parentheses can also be used *to* enforce operator precedence.
+
_Posted 2015.05.03. Danila Deliya_

== Chapter 3 _Generating Data_

== Chapter 4 _Functions_

* p. 44, *4.2 Box Muller*, _Reshape_, should read: The second line of
  the +.stat.bm+ function uses the "*#*" operator ...
+
_Posted 2015.03.27. Julien Quentin Tran_
* p. 44, *4.2 Box Muller*, _Reshape_, the second sentence should read:
   The basic form of the take operator "*#*" takes ...
+
_Posted 2015.03.27. Julien Quentin Tran_
* p. 44, *4.2 Box Muller*, _Reshape_, the footnote should read: +k+
   does *not* require semicolons ...
+
_Posted 2015.11.17. Gerard A. Verdone_
* p. 45, *4.2 Box Muller*, _Reshape_, the first sentence should start:
  For the special case where one of the dimensions *is* null, ...
+
_Posted 2016.01.10. David Z. Han_
* p. 46, *4.2 Box Muller*, _Loading Code_, the last sentence should
 conclude: we now move to a slower generator of normal random
 variables that only requires a single *uniform* variable as input.
+
_Posted 2015.05.03. Danila Deliya_
* p. 47, *4.3 Beasley-Springer-Moro*, _Horner's Method_, the first
  sentence should begin: The *fifth* line ...
+
_Posted 2015.05.03. Danila Deliya_
* p. 49, *4.3 Beasley-Springer-Moro*, _Over_, the second listing
  should multiply by .1:
+
----
q)0 (.9)\.1*til 5
0 0.1 0.29 0.561 0.9049
----
+
_Posted 2015.08.01. https://twitter.com/SrBufi_

== Chapter 5 _Code Organization_

* p. 53, *5.1 Libraries*, _Identity vs Equality_, the second sentence
  should read: For atoms, the match operator and the equality operator
  "=" have the *same* behavior.
+
_Posted 2015.03.27. Julien Quentin Tran_
* p. 57, *5.3 Directories*, The first sentence should read: The root
  namespace and all its children *are* designed for data.
+
_Posted 2015.11.17.  Gerard A. Verdone_

== Chapter 6 _A Random Walk_

== Chapter 7 _Building a Table_

== Chapter 8 _Large Tables_

== Chapter 9 _Trades and Quotes_

* p. 116, *9.3 Trades*, _Delaying a Time Series_, the second paragraph
  should begin: The +prev+ operator is similar *to* the +next+
  operator ...
+
_Posted 2015.05.13. Danila Deliya_
* p. 119, *9.3 Trades*, _Grouping_, The second listing should not have
  the extra:
+
----
q)o
----
+
_Posted 2015.03.27. Julien Quentin Tran_

== Chapter 10 _CEP Engine Components_
* p. 125, *10.1 Timer Events*, _Nulls and Infinities_, the third
  sentence of the last paragraph should end: perhaps the most
  appropriate trade price would be the last known trade *price*.
+
_Posted 2015.05.13. Danila Deliya_
* p. 129, *10.1 Timer Events*, _Drop_, the first sentence on the page
  should be: The second line of the function indexes into the table to
  find the job *+j+*.
+
_Posted 2015.05.13. Danila Deliya_
* p. 129, *10.1 Timer Events*, _Drop_, the fourth paragraph should
  also refer to the *+j+* dictionary.
+
_Posted 2015.05.13. Danila Deliya_
* p. 132, *10.2 Logging*, _Logging Library_, The second sentence of
   the third paragraph in the section should begin: In this case, the
   monadic function *`(1024*)`* ...
+
_Posted 2015.05.13. Danila Deliya_
* p. 132, *10.2 Logging*, _Logging Library_, The final listing should
  be labeled +.log.hdr+.
+
_Posted 2015.04.04. Lam Hin Yan_
* p. 135, *10.3 Command Line Options*, _Configuration_, The first new
  paragraph should mention five parameters: Our CEP server will
  require *five* parameters: a file path to load reference data, a
  time to run the end of day processing, a directory to save the
  market data, *a debug flag*, and a log level to control how much
  logging is displayed.
+
_Posted 2015.04.04. Lam Hin Yan_
* p. 135, *10.3 Command Line Options*, _Configuration_, The second
  paragraph should mention five parameters as well: The table now has
  one empty row, and *five* options.
+
_Posted 2015.04.04. Lam Hin Yan_
* p. 135,*10.3 Command Line Options*, _Parsing User Command Line
  Arguments_, The last paragraph should begin: The *second* line of
  the function ...
+
_Posted 2015.05.13. Danila Deliya_

== Chapter 11 _Running a CEP Engine_

== Chapter 12 _Security_

== Chapter 13 _Debugging_

== Chapter 14 _Q-SQL_

* p. 172, *14.1 Syntax*, _Dot Notation_, The last sentence should end:
  it *is* safer to always use explicit casting instead of using `dot`
  notation.
+
_Posted 2015.05.13. Danila Deliya_
* p. 177, *14.1 Syntax*, _Exec by_, The third paragraph should begin:
  This works because calling *+first+* ...
+
_Posted 2015.05.13. Danila Deliya_
* p. 181, *14.2 Pivot Tables*, _Building a Pivot Table_, The second
  sentence of the first paragraph should begin: Our dataset has a
  *price* ...
+
_Posted 2015.05.13. Danila Deliya_
* p. 184, *14.2 Pivot Tables*, _Writing a Pivot Function_, The
  implementation of +.util.pivot+ should read:
+
----
pivot:{[t]
 u:`$string asc distinct last f:flip key t;
 pf:{x#(`$string y)!z};
 p:?[t;();g!g:-1_ k;(pf;`u;last k:key f;last key flip value t)];
 p}
----
+
_Posted 2015.03.26. Nick Psaris_
* p. 194, *14.4 Joining Datasets*, _Asof joins_, The third sentence of
  the first paragraph should begin: In fact, *the* asof join +aj+
  operator ...
+
_Posted 2015.05.13. Danila Deliya_
* p. 198, *14.4 Joining Datasets*, _Asof joins_, The first sentence
  should read: Looking forward in time is generally a bad practice
  when attempting *to* reproduce a realistic simulation of historical
  events.
+
_Posted 2015.05.13. Danila Deliya_

== Chapter 15 _Big Data_

* p. 209, *15.1 Partitioning By Column*, _The +sym+ File_, The second
  listing should begin with the following command:
+
----
q)prices`id
----
+
_Posted 2015.05.13. Danila Deliya_
* p. 211, *15.2 Partitioning By Row*, _Virtual Column_, The section
  should begin: *Each table in our +qdb+ database starts with a +date+
  column.* But where did this column come from?
+
_Posted 2015.05.13. Danila Deliya_
* p. 218, *15.4 Compressing Tables*, _Compressing by Default_, The
  last sentence should read: To clear the compression configuration we
  can use the *`\x`* system command and +.z.zd+ will be cleared.
+
_Posted 2015.05.13. Danila Deliya_
* p. 221, *15.5 Mapped Data*, _Remote File Systems_, The last sentence
  of the first paragaph should end: it is conceivable that compressing
  the data can actually *increase* the performance of reading data
  from our kdb+ database.
+
_Posted 2015.05.17. Danila Deliya_
* p. 224, *15.6 Grid Computing*, _Slave Layout_, The last sentence
  should begin: The next chapter *discusses* ...
+
_Posted 2015.05.17. Danila Deliya_

== Chapter 16 _Remotely Accessing Data_

* p. 227, *16.1 Q to Q*, _Subscriptions_, The first sentence should
   read: Asynchronous messages are often used to send messages as fast
   *as* possible ...
+
_Posted 2015.04.04. Lam Hin Yan_

== Chapter 17 _Advanced Techniques_

* p. 237, *17.1 Profiling Q Functions*, _Instrumenting Functions_, The
  second sentence of the paragraph after the definition of
  +.prof.instr+ should begin: The *third* line of the function ...
+
_Posted 2015.05.17. Danila Deliya_
* p. 239, *17.1 Profiling Q Functions*, _Traversing the Directory
  Tree_, The second sentence of the first paragraph should read: So we
  can exclude +q+, +Q+, +h+, *+j+*, +o+, and +prof+ from the list of
  directories to inspect.
+
_Posted 2015.05.17. Danila Deliya_
* p. 251, *17.2 Derivative Pricing*, _Path Dependent Payoffs_, The
  first sentence should read: The Up and Out option is worth *less*.
+
_Posted 2015.05.17. Danila Deliya_
* p. 254, *17.2 Derivative Pricing*, _Brawn vs Brain_, The first
  sentence of the first paragraph should begin: For example, if we
  assign a projection of +.deriv.bsm+ to *+f+* ...
+
_Posted 2015.05.17. Danila Deliya_
* p. 258, *17.3 Histograms*, _Grouping Data_, The first sentence of
  the fourth paragraph should begin: The operator assumes, but does
  not enforce, *that* our list of bins ...
+
_Posted 2015.05.17. Danila Deliya_
* p. 261, *17.3 Histograms*, _Alternate Bin Algorithms_, The first
  sentence should read: But the +sturges+ method does not *handle*
  skewed data well.
+
_Posted 2015.05.17. Danila Deliya_
* p. 262, *17.3 Histograms*, _Alternate Bin Algorithms_, The second
  footnote should begin: *Freedman*, David; Diaconis, P. (1981).  ...
+
_Posted 2015.05.17. Danila Deliya_

== Selected Web Resources

* p. 267, _Kx Systems Links_, The description of [20] Kdb+ IPC protocol
  should end: Sample deserialization implementations can be found in
  the *Kx Connectivity Resources repository http://kx.com/q/c/*.
+
_Posted 2015.05.17. Danila Deliya_

== List of Terms
* p. 271, _Projection_, The last sentence should read: Monadic
  functions can not *be* projected, as the function will be instantly
  called.
+
_Posted 2015.05.17. Danila Deliya_

== Appendix A

* p. 274, _Utilities_, The implementation of +.util.pivot+ should read:
+
----
pivot:{[t]
 u:`$string asc distinct last f:flip key t;
 pf:{x#(`$string y)!z};
 p:?[t;();g!g:-1_ k;(pf;`u;last k:key f;last key flip value t)];
 p}
----
+
_Posted 2015.03.26. Nick Psaris_

