Lozza technical notes

Lozza home

Some technical notes that are useful to me for retesting and may be of interest to other developers.

Things to Do/Test

  • Much more endgame knowledge.
  • Try removing || givesCheck to the futility/LMR predicate – most checks are pointless.
  • Material imbalance.
  • Do some more auto eval checking/tuning.
  • Bust up moves into specials, sorted and unsorted.
  • Try hash move before move gen etc (affects his tables).
  • Sort root moves by Q search.
  • SEE.
  • Done. Fail soft Q search?
  • If both sides cannot be attacked (Q + 2 pieces) and have no pawns divide eval by N?
  • Reduce eval relative to current number of non-reversible moves?
  • If IID does not find a hash can we return immediately because it implies mate/draw score?  Safe?
  • Don’t sort moves in ALL nodes?  All expected to fail low.
  • Don’t sort moves if depth < N or after M moves have been tried and we’re in the slider phase?
  • Improve check evasion code performance.
  • Dump history heuristic in favour of X.
  • Don’t do null move based on TT info.
  • Different extensions, reductions and pruning depending on node type?
  • Non TT based PV – more reliable.
  • Larger null move and LMR reductions?
  • LMP?
  • Beta pruning and razoring etc?
  • Exempt passed pawns from futility pruning.
  • Reductions etc based on TC?
  • Include kings and pawns in king attack?
  • Find a way to avoid pointless checks.
  • Give the user a wodge of options so that novel setups can be tried for fun.

25/5/15 – Lozza not seeing a lost position developing.

5k2/p7/3R4/2p3p1/1bP3P1/5N1P/3p1PK1/3r4 b – –

The opponents eval was steadily rising while Lozza’s was static. At the above position Lozza was clueless, even in the long TC of 40/25. The reason is pointless checks. Lozza does see the position as bad, but pushes it over the horizon with pointless delaying checks. Always extending checks and including promotions in Q search helped. See build 116.  But it would be better to somehow avoid this delaying tactic, because while once this lost position is reached, delaying tactics are fine, it stops Lozza seeing the position develop.  See also this CCC post.

Lozza mate-in-1 game

Lozza home

You must solve 10 mate-in-1 puzzles against the clock.  Time penalties are added for illegal and wrong moves.  You must drag the piece to the mating square to solve the puzzle.  The puzzles are loaded at random from a large collection sourced from here.

Click the image to play the game.


NB: All the puzzles are loaded to your computer the first time you play.  It can take a little while depending on the speed of your internet connection.

Vax preventable outbreaks

The Council for Foreign Relations published an interesting page recently showing  vaccine preventable disease outbreaks 2006 – 2015.   The data they used can be downloaded, so I used it in a very simple way to experiment with a Google WebGL globe.  Click the image below to see it.


All the outbreaks, regardless of date and disease (mostly measles, mumps, rubella, pertussis and polio) are shown in blue with attacks shown in yellow-ish.  The size of the spike is linearly proportional to the number of cases, but it’s capped at 40000.  The actual maximum number of cases is 130000 in one instance but including  that reduces the smaller outbreaks to just dots.

The WebGL globe was very easy to work with but could do with some documentation!

The WHO report that in 2013 there were 16 deaths every hour from measles.

Lozza acknowledgements

Lozza home

Edmund Moshammer for the indispensable jsUCI.

Norbert Raimund Leisner for designing Lozza logos.

Silvian Ruxy for testing Lozza.

Graham Banks for testing Lozza and including her in the CCRL ratings.  Also for an alternative Lozza logo.

Chris Oakman for the lovely chessboard.js UI.

David Bau for seedrandom.js which I use to seed the Zobrist hashes.

Jeff Hlywa for the fab chess.js.

Jason Tiscione for his 3D chessboard.

Harm Geert Muller for discussions and running the fun and useful monthly online tournaments that Lozza participates in.

CPW for algorithms.

CCC for algorithms and discussion.

There are some more specific acknowledgements in the code.

Using Lozza offline

Lozza home

These notes apply to most chess user interfaces.  The Arena UI is used as an example.

Lozza needs a Javascript engine to live in.  Usually this is a web browser, but a web browser just embeds a Javascript engine, so other applications can too.  The most common are mentioned below.


Download Edmund Moshammer’s jsUCI (embeds Google’s V8 Javascript engine) to a folder of your choice. Download lozza.js and place it in the same folder as jsUCI.

Console use:-

cd <jsuci folder>
.\jsuci_1_2.exe lozza.js

Arena use:-


You don’t have to use the same folders, it was just an example.  If lozza.js is in a different folder to jsUCI you need to specify the path on the command line and in the UI – absolutely or relative to jsUCI.


Download and install node.js (embeds V8).  node.js adds itself to your path. Download lozza.js to a folder of your choice.

Console use:-

cd <lozza folder>
node lozza.js

Arena use:-


You can use node.js on Windows too instead of jsUCI.  When using node.js you can add Google Chrome V8 options to the command line to see the real time optimisation etc.


jxCore is a multi-threaded arrangement of node.js and also has a very nice packaging facility to turn the Lozza into an executable (this is how I generate executables for CCRL).  It can also target Mozilla’s Spider Monkey as an alternative to Google’s V8 engine as used by node.js and jcUCI.

The packaging facility creates an executable suitable for running on the platform doing the packaging.  So if you want Windows 64 and Linux executables, you need to package separately on each of those platforms.  It is however an effortless operation:-

jx package lozza.js lozza -native

That’s it.  The Javascript itself must detect (see lozza.js) it’s in a node.js context and do the appropriate IO – which is different to the IO needed in a web worker (web or jsUCI) context.

Lozza analysis UI

Lozza home


Optional URL parameters:-

fen=fen – Load the specified FEN.

act=ana – Auto start an analysis.  Be a little bit careful about using this as some people do not like their computer to use a lot of CPU time on an analysis without them starting it explicitly.

act=eva – auto start an evaluation.


http://op12no2.me/toys/lozza/fen.htm?fen=5k2/p7/3R4/2p3p1/1bP3P1/5N1P/3p1PK1/3r4 b – -&act=eva

Lozza UCI console UI

Lozza home


In addition to the standard UCI protocol , the following commands can be used:-


Stop the Lozza.   Useful to stop a long perft or analysis.  What actually happens is that the web worker containing Lozza is killed.


Start Lozza.  i.e. create a new web worker containing the Lozza.


Clear the previous output.

Continue reading Lozza UCI console UI

Lozza – Javascript chess

Lozza is a simple Javascript chess engine still in active development and currently rated about 2340 ELO.  Lozza is self-contained in a single .js file and typically runs in a web worker.  A controlling program  can communicate with Lozza using the string based UCI protocol over the JSON web worker interface. My own user interfaces are linked to below and can be used as examples of controlling programs.


Lozza is also available as a hosted google chrome app.

Below is a very simple example (live link) to fire up Lozza in a web worker and ask it to find the best move for a 10 ply search, sending all output to a HTML element called #dump using jQuery:-

var lozza = new Worker('lozza.js');

lozza.onmessage = function (e) {

lozza.postMessage('uci');             // get build etc
lozza.postMessage('ucinewgame');      // reset TT
lozza.postMessage('position startpos');
lozza.postMessage('go depth 10');     // 10 ply search

Lozza can auto-detect if it’s running in a node.js context to allow seamless use online in a browser or offline in node.  This allows Lozza run both online and offline on pretty much any platform, including Windows, Linux and Mac.

For example here is a dump of the same 10 ply search using node from the Windows command line:-


The “info string debug *” lines show overall time and node count etc and are not strictly part of the UCI protocol.  You can either filter them out or change this.debugging to false in the UCI class.

Lozza can be used outside of a web worker by including lozza.js in your HTML file and then using the loz* classes directly.  This is useful for profiling etc.

Please feel free to use Lozza in any chess based projects with the condition of a link back to here. The Play UI  is a good choice to see a more complete example of how to fire up Lozza in a web worker and then communicate with it.    Please also feel free to send me queries: op12no2@gmail.com or @op12no2.



There is a not-necessarily-stable coalface version here:-


I would very much like to thank these people for help during the (continuing) development of Lozza.

Other posts:-


Indirect protection demo


A little demo to show how people are indirectly protected in an epidemic when enough people are vaccinated – herd immunity.

It should work on touch and non touch devices including phones; the layout being responsive to screen size.

The demo is not suitable for thinking about the elimination of a disease in an endemic steady state.  It is rooted in an epidemic context.

Continue reading Indirect protection demo

vaxfax.me search engine

vaxfax.me is a project oriented around a google custom search engine.  It searches hundreds of science/evidence based websites (and only those websites) for reliable vaccination information.



It was created primarily with parents and parents-to-be in mind – to help them navigate past the mass of vaccine misinformation on the internet.

Continue reading vaxfax.me search engine

Homeopaths in denial

This is a tidy-up of a comment I posted on homeopath Steve Scrutton’s blog.

Steve, you don’t seem to understand what a denial means.

Imagine somebody (a he in this case) who anecdotally helps people by playing the piano. This goes on for years. People listen to the music and often feel better – either then or a little while later. Every now and again somebody with a serious illness will get better – breast cancer say (relatively high remission rate) – and he makes sure the world knows about cases like that (selection bias). Continue reading Homeopaths in denial

Vaccines are not 100% effective

It is not uncommon to see online discussions with arguments of the form “if your child is vaccinated, what risk is there from my unvaccinated child?”.

The fact is that while vaccines are generally very good, they are not 100% effective in terms of seroconversion rates. Some vaccinated individuals can still catch and transmit the diseases they have been vaccinated against; although often the symptoms are usually less severe than in the unvaccinated case. Continue reading Vaccines are not 100% effective

Vaccination resources

Many vaccination resources are entrenched in ideology and bias. Some are easy to spot with their emotional but anecdotal stories, conspiracy theories, logical fallacies and downright misinformation. Others have in initial air of respectability and may even appear to be science based, until you dig a little deeper and reveal that the science is cherry picked with studies that are methodologically weak, have since been retracted, or have subsequently been shown to have reached false conclusions. Continue reading Vaccination resources

The chemical makes the poison – apparently

Thimerosal is a mercury based organic compound that is used both as a preservative in vaccines and as a sterilising agent during the vaccine manufacturing process.

With the exception of some multi-dose flu vaccines, thimerosal was removed as a preservative from all childhood vaccines in 2001, with the last expiry date being Jan 14 2003. It is however, still present as trace quantities of mercury in some childhood vaccines (e.g. DTaP vaccines) due to the manufacturing process:- Continue reading The chemical makes the poison – apparently

Meryl down the rabbit hole

meryl doery down the rabbit holeThis is a slight modification of a comment I posted on an article about Meryl Dorey in the Australian Northern Star.

Ayaan Hirsi Ali was once asked how to get through to Somali women that their life was one of total repression and she answered “dissonance”. Her idea being that if you repeatedly hit people with the truth, their beliefs may eventually crack – dissonance will accumulate until a point is reached that no amount of rationalising can support the root belief/bias/ideology. Continue reading Meryl down the rabbit hole

The Australian Vaccination Network is an anti-vaccination group

Like many anti-vaccination groups, the Australian Vaccination Network (AVN) presents itself as “pro-choice” or “informed decision” or “balanced” and at first glance the website seems to support that view, but dig a little deeper and their true orientation becomes clear.  What for example is balanced about a tee-shirt that can be purchased in their online shop saying “Love them, Protect them, Never inject them”. Continue reading The Australian Vaccination Network is an anti-vaccination group

Vaccines do not weaken a child’s immune system

Paul Offit et. al. review the evidence as to whether or not vaccinations overwhelm a child’s immune system, concluding:-

Current studies do not support the hypothesis that multiple vaccines overwhelm, weaken, or “use up” the immune system. On the contrary, young infants have an enormous capacity to respond to multiple vaccines, as well as to the many other challenges present in the environment. By providing protection against a number of bacterial and viral pathogens, vaccines prevent the “weakening” of the immune system and consequent secondary bacterial infections occasionally caused by natural infection. Continue reading Vaccines do not weaken a child’s immune system

In a highly vaccinated context more infections can be found in those who are vaccinated


Much is often made of the fact that in a highly vaccinated context the number of infected vaccinated individuals can be greater than the number of infected unvaccinated individuals; the conclusion being that vaccination doesn’t work – but that conclusion is a logical fallacy. Continue reading In a highly vaccinated context more infections can be found in those who are vaccinated

Vaccination is a social responsibility

What a wonderful thing it is to be able to vaccinate our children, not just to protect them, but those around them that are too young to be completely vaccinated or cannot be vaccinated for heath reasons. What a wonderful gift herd immunity is to and from humanity. Yes there are risks of adverse reactions to vaccination but such risks are microscopic and completely outweighed by the benefits. Continue reading Vaccination is a social responsibility

Antivax porkies

Joseph Mercola and Barbara Loe Fisher recently had a good old chinwag about vaccination, or to be more accurate anti-vaccination.  They start with the recent news that the FDA have recommended that clinicians temporarily suspend use of Rotarix and end with a truly scary section in which they argue we’d be better off without some vaccines, including Rotarix.

There was even a horrific section on smallpox where Fisher used the ‘naturally falling mortality rate’ argument while conveniently ignoring incidence; a common ploy found all over antivax sites and the weird and wonderful outer fringes of medical journalism – JPANDS for example. Continue reading Antivax porkies