Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions modules/study/src/test/PgnFixtures.scala
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ leaves White with a clear advantage. }) 15. Nd5! { , when White wins material: }
watch out. } (16... Bh5? { loses a queen and the game to } 17. Be5! $18 { . }) 17. hxg4 Bf8! 18. Rad1 Qb4 19. Rxd7 Nxd7 20. Rb1 Nf6 { . Black's activity
compensates for the missing pawn. }) 14... Ne6 { The knight move does not spoil anything, although it might have more accurate to exchange White's active knight for the other bishop, thus doubling White's pawns: } (14... Bxf5 15. exf5 Rfe8 16. g4 { Black's position looks a bit cramped and the knight on c5 currently has no good move, but chess is a very concrete game. Black should equalize through } (16. f6 { is less strong than it looks. Black has at least
two good replies: } 16... Bd6 (16... Bf8!? 17. Qg3 g6 18. Bxc7 Qd2!? $44 { is risky
but sound, as } 19. Red1 { loses outright to } 19... Qxd1+! 20. Rxd1 Rxd1+ 21. Nxd1 Re1# { . }) (16... gxf6 { is not exactly bad, but } 17. Qg3+ Kh8 18. Bxc7!? { looks pleasant for White, as } 18... Rg8? { loses to a queen sacrifice: } 19. Bxd8! Rxg3 20. Bxe7 { Everything hangs and } 20... Rxg2+ (20... Rxc3 21. Bxf6+!) 21. Kxg2 Qg4+ 22. Kf1 Qh3+ 23. Ke2 { allows White's king to escape. }) 17. Qg3 g6) 16... Bd6 17. Qf3 Bxf4 18. Qxf4 Qd6! 19. Qg3 { and now Black can try } (19. Qxd6 cxd6 20. b4?! Nd7 21. Ne4 Ne5! $36) 19... h5!? { with mutual chances. } (19... Qxg3+?! 20. hxg3 { is less accurate, as White's pawns would be better doubled than Black's, controling many important squares on the kingside. The h7-pawn could be vulnerable in some lines involving the g4-g5 advance. })) 15. Nxe7+ Qxe7 16. Bg3 Bh5?! { Given that Black needs to move his f-pawn sooner or later, it made sense to play } (16... f5! { , threatening f5-f4. After } 17. exf5 Bxf5 18. f3 Qb4 { Black gets sufficient counterplay against White's queenside pawns. }) 17. f3! $14 { This move limits the opponent's bishop. White has a slight edge due to his better pawn structure and a more active bishop. He can play for a win without any risk, which is an ideal scenario in a World Championship match. } 17... f6 { Black had to move his f-pawn sooner or later to bring his bishop back into play. That said, such a move also weakens his king a bit. It is not relevant now, but could matter later on. } 18. h3 h6 19. Kh2 { White improves his position little by little. There is no need to hurry, as Black cannot improve his position much, either. } 19... Bf7 20. Rad1 b6 { This is a logical move. The position resembles the Berlin defense, but in our game the pawn formation a5-b6-c5-c7 is more vulnerable, as a loss of the c7-pawn could cost Black another pawn and a game. In Berlin endgames such a danger hardly exists with Black's king on the queenside, and even with Black's king on the kingside White mostly needs to sacrifice a pawn (e5-e6) to win the c7-pawn and perhaps another one. In contrast, in our game the bishop on g3 already eyes c7. After } (20... Rxd1 21. Rxd1 (21. Nxd1!? $14) 21... Rd8 { White could try } 22. Qa7!? { , a move which is no longer possible after 20...b6. That said, Black
but sound, as } 19. Red1 { loses outright to } 19... Qxd1+! 20. Rxd1 Rxd1+ 21. Nxd1 Re1# { . }) (16... gxf6 { is not exactly bad, but } 17. Qg3+ Kh8 18. Bxc7!? { looks pleasant for White, as } 18... Rg8? { loses to a queen sacrifice: } 19. Bxd8! Rxg3 20. Bxe7 { Everything hangs and } 20... Rxg2+ (20... Rxc3 21. Bxf6+!) 21. Kxg2 Qg4+ 22. Kf1 Qh3+ 23. Ke2 { allows White's king to escape. }) 17. Qg3 g6) 16... Bd6 17. Qf3 Bxf4 18. Qxf4 Qd6! 19. Qg3 { and now Black can try } (19. Qxd6 cxd6 20. b4?! Nd7 21. Ne4 Ne5! $36) 19... h5!? { with mutual chances. } (19... Qxg3+?! 20. hxg3 { is less accurate, as White's pawns would be better doubled than Black's, controlling many important squares on the kingside. The h7-pawn could be vulnerable in some lines involving the g4-g5 advance. })) 15. Nxe7+ Qxe7 16. Bg3 Bh5?! { Given that Black needs to move his f-pawn sooner or later, it made sense to play } (16... f5! { , threatening f5-f4. After } 17. exf5 Bxf5 18. f3 Qb4 { Black gets sufficient counterplay against White's queenside pawns. }) 17. f3! $14 { This move limits the opponent's bishop. White has a slight edge due to his better pawn structure and a more active bishop. He can play for a win without any risk, which is an ideal scenario in a World Championship match. } 17... f6 { Black had to move his f-pawn sooner or later to bring his bishop back into play. That said, such a move also weakens his king a bit. It is not relevant now, but could matter later on. } 18. h3 h6 19. Kh2 { White improves his position little by little. There is no need to hurry, as Black cannot improve his position much, either. } 19... Bf7 20. Rad1 b6 { This is a logical move. The position resembles the Berlin defense, but in our game the pawn formation a5-b6-c5-c7 is more vulnerable, as a loss of the c7-pawn could cost Black another pawn and a game. In Berlin endgames such a danger hardly exists with Black's king on the queenside, and even with Black's king on the kingside White mostly needs to sacrifice a pawn (e5-e6) to win the c7-pawn and perhaps another one. In contrast, in our game the bishop on g3 already eyes c7. After } (20... Rxd1 21. Rxd1 (21. Nxd1!? $14) 21... Rd8 { White could try } 22. Qa7!? { , a move which is no longer possible after 20...b6. That said, Black
holds his own after } { , a move which is no longer possible after 20...b6. That said, Black holds his own after } 22... Rxd1 23. Nxd1 Qb4! { . }) 21. a3 { White could already play } (21. f4 Rxd1 22. Rxd1 $14 { , but protecting the b4-square makes sense. }) 21... a5 22. Ne2 (22. f4!? Rxd1 23. Rxd1 Bh5 $14) 22... Rxd1 (22... c5 $14 { is a good positional move. It weakens the d5-square, but White is unable to exploit it. After } 23. Nf4 { Black should avoid the knight swap with } 23... Nd4! { , as } (23... Nxf4?! 24. Qxf4 { would leave his queenside somewhat exposed. While } 24... Rxd1 25. Rxd1 Rc8 26. e5!? fxe5 27. Qxe5 Qxe5 28. Bxe5 Be8 $14 { is not too bad for Black, he would have weak pawns on both flanks. })) 23. Rxd1 Rd8 24. Rd3 { White maintains the pressure, hoping to exchange the rooks under favorable conditions. After } (24. Rxd8+ Qxd8 25. f4 c5 { Black should not face many problems. In many lines he can sacrifice a pawn, steering into a drawish opposite-coloured bishop endgame: } 26. Qd3 (26. f5 Nd4! 27. Qd3 b5!? 28. Nxd4 Qxd4 29. Qxd4 cxd4 30. Bxc7 a4 31. Bb6 Ba2 32. Bxd4 Bb1 { White's
extra pawn does not matter there. } { White's extra pawn does not matter there. }) 26... Qxd3 27. cxd3 Nd4 28. Nxd4 cxd4 29. f5 c6 30. Bc7 Bb3 31. Bxb6 a4 32. Bxd4 Bc2 33. Kg3 Bxd3 34. Kf3 h5!? $14 { . If White managed to win the c6-pawn, create a passed pawn on f6 and then push b2-b4 to be able to play a3-a4 after Black takes en passant a4xb3, he could generate real winning chances. That said, such a scenario would require too many things going White's way, which is unrealistic on a top level. }) 24... c5 { Black could also play } (24... Rxd3 25. Qxd3 (25. cxd3 c5!) 25... b5!? { with a later a5-a4, moving his queenside pawns outside the reach of White's bishop. Even a loss of the c7-pawn would not be a big problem then, if Black managed to exchange the knights. Knowing the further course of the game, I believe it to be a safer option }) 25. Qd2 c6?! { This move is inaccurate, as it allows an activation of White's pieces and loses a pawn. } (25... Rxd3 26. Qxd3 { is still better for White due to the vulnerability of Black's queenside pawns, but Black should be able to neutralize that advantage with an accurate defense. He can make waiting moves like } 26... Kh7 (26... Be8!? 27. Nc3 c6! { is another option. Then } 28. e5 fxe5 29. Bxe5 b5 30. f4 c4 $14 { is only
slightly worse for Black. }) 27. Nc3 c6 $14 { . It is not much fun, but who says that playing a World Championship match is fun? Top players are used to defending worse positions than this one. }) (25... Kf8 26. Rd5!? (26. Rxd8+ Nxd8) 26... Ke8 27. Qd3 c6 28. Rxd8+ Qxd8 29. Qa6 { is also unpleasant for
Expand Down Expand Up @@ -222,7 +222,7 @@ in his last classical tournament before the match. } (3. Nf3 { was a bit more
common move in Ian's games, although he also used it mostly in speed games. }) 3... d5 (3... Bb4 { is the most common move on a top level. Ding Liren also
mostly chooses it, but Ian Nepomniachtchi has surely prepared something there. }) 4. cxd5 exd5 5. Bg5 c6 6. e3 { The Carlsbad structure is strategically very
complex, as both sides have a multitude of plans. The resulting positions
mostly require good understanding rather then a precise calculation or
mostly require good understanding rather than a precise calculation or
imagination. White has slightly easier play, but Black has a solid position.
Carlsbad ("Karlsbad" in German, "Karlovy Vary" in Czech, "Карловы
Вары" in Russian) is a lovely Czech spa town near the border with Germany,
Expand Down Expand Up @@ -423,7 +423,7 @@ players often find it difficult to sit and defend passively. And it seems that
this position required precisely that. } (25... Bg6! { would have prevented
White from improving his position. Black is ready to counter a2-a4 with a7-a5
and to meet Ne4 with Bxe4. Playing on three ranks is not much fun. It is not
clear how should White strenghten his position. }) 26. Bxh5 (26. Bg4 Bxg4 27. hxg4 Nd6 28. Ne4 $14 { was another option, but White's continuation was no
clear how should White strengthen his position. }) 26. Bxh5 (26. Bg4 Bxg4 27. hxg4 Nd6 28. Ne4 $14 { was another option, but White's continuation was no
worse. }) 26... Qxh5 27. Re4 Qh6 28. Qf3 { The decisive moment of the game has
arisen. } (28. Kh2!? Nd6 29. R4e2 $14 { might have been more circumspect. }) 28... Nd4? { Black is ready to give back an extra pawn, but this move also
provokes an exchange sacrifice, which turns out to be very strong. } (28... g5! 29. g4!? { I assume that this was the idea behind 28.Qf3. Or was it just a
Expand Down Expand Up @@ -625,7 +625,7 @@ On the other hand, the player who is trailing should put pressure from the white
While we have to give credit to Ding for finding difficult moves, It came with a price which is time pressure. Ding's response to Nepo's 1.e4 wasn't up to mark in this match. } 1... e5 { Main weapon of Ding in the match. } 2. Nf3 Nc6 3. Bb5 a6 { Change from the Berlin defense which was played in game 9. } 4. Ba4 Nf6 5. O-O Be7 6. d3 b5 7. Bb3 d6 8. a3 { In game 5, Nepo chose 8.c3 and won a nice game. Here he chose to change a bit to surprise Ding. } 8... Na5 { Black is delaying castling to take control of the center and developing light square bishop. Ding played several games in this direction back in 2015-2016. I analysed this direction back in 2019 and I find it quite interesting. } (8... O-O!? 9. Nc3 Na5 10. Ba2 Be6 { Many top players played this way, including an online game between Nepo-Ding in 2022. }) 9. Ba2 c5 10. Nc3 Be6 11. Bg5 { Threatening to exchange the knight on f6 and get control of d5 square by placing the knight on d5. } (11. Nh4!? O-O 12. Nf5 Bxf5 13. exf5 d5 $13 { As we can see, black took control of the center at the expense of exchanging the light square bishop. White here must try to destabilise the Black's pawns in the center by playing 14.Bg5 or 14.Qf3 }) 11... O-O 12. Bxf6 Bxf6 13. Nd5 g6 { Ding played an online game against Nihal in December 2022. I am quite surprised that Ding has decided to
repeat it. } 14. Qd2 { Engine's top recommendation. GM Naroditsky has already played it. } 14... Bg7 15. Ng5 { Is the first new move in the game and quite logical. Here Ding sank into deep thought. To a certain extent, it is puzzling and worrisome as this is the top recommendation of the engine. } (15. Qg5!?) 15... c4 { Ding probably felt it is important to close the diagonal a2-g8 as it restricts the activity of White's light square bishop. } (15... Bh6 { Doesn't win a piece as white captures on e6 and attacks the queen on d8 } 16. Nxe6 Bxd2 17. Nxd8 Rfxd8 18. f4 $16 { White has an excellent position as all the pieces are nicely placed. Once the f file is opened, black would find it hard to defend the f7 pawn. }) (15... Nc6!? 16. c3 Rb8 $13) 16. Nxe6 fxe6 17. Ne3 Bh6 { Pinning the knight and defending the c4 pawn. } 18. Rad1 { Threatening to take on d6 pawn after the capture on c4. } 18... Rb8 { Well you can take my d6 pawn, but once you open the file, I will take your b2 pawn. A nice way of defending the c4 pawn. } 19. dxc4 { This is the crucial moment in this game. With this move, it is clear that in the next few moves, many pieces will be traded, leading to a rook endgame with no chances for White.
Did the match situation influence Nepo to go for this? Maybe yes. White has a nice advantage and could keep putting pressure on c4 by moving the queen from d2-e2. White doesn't risk anything by playing on. } 19... Nxc4 20. Bxc4 bxc4 21. Qxd6 Qxd6 22. Rxd6 Bxe3 23. fxe3 Rxf1+ 24. Kxf1 Rxb2 25. Rxe6 Rxc2 26. Rxa6 Ra2 27. Rc6 Rxa3 28. Rxc4 Rxe3 29. Kf2 Ra3 30. Rc5 { I am certain that both the players have seen until here. Nepo thought he could get rook three vs two endgame and push a while.
Ding rightly estimates that this is an easy draw and White is not able to keep the e4 pawn. } 30... Ra2+ 31. Kf3 Ra3+ 32. Kg4 Ra2 33. Kh3 Re2 { Now that Black managed to move White's king away from the e4 pawn, Ding can attack the e4 pawn. } 34. Rxe5 Kf7 35. Kg3 Kf6 36. Re8 Kf7 37. Re5 (37. Kf3 Rxg2) 37... Kf6 38. Re8 (38. Kf3 Kxe5 39. Kxe2 Kxe4) 38... Kf7 39. Re5 { 1/2-1/2 The game is a draw. } (39. Rh8 { This move could lead to either three vs 2 or 2 vs one rook endgame. Of course, it is an easy draw for a player like Ding. At the same time, thats the best White can hope for here! After a deserved rest day, Ding will be looking to strike with the white pieces. Whereas Nepo will try to equalise out of the opening. Game 12 might be the turning point of the match. }) 1/2-1/2
Ding rightly estimates that this is an easy draw and White is not able to keep the e4 pawn. } 30... Ra2+ 31. Kf3 Ra3+ 32. Kg4 Ra2 33. Kh3 Re2 { Now that Black managed to move White's king away from the e4 pawn, Ding can attack the e4 pawn. } 34. Rxe5 Kf7 35. Kg3 Kf6 36. Re8 Kf7 37. Re5 (37. Kf3 Rxg2) 37... Kf6 38. Re8 (38. Kf3 Kxe5 39. Kxe2 Kxe4) 38... Kf7 39. Re5 { 1/2-1/2 The game is a draw. } (39. Rh8 { This move could lead to either three vs 2 or 2 vs one rook endgame. Of course, it is an easy draw for a player like Ding. At the same time, that's the best White can hope for here! After a deserved rest day, Ding will be looking to strike with the white pieces. Whereas Nepo will try to equalise out of the opening. Game 12 might be the turning point of the match. }) 1/2-1/2

""",
"""
Expand Down
4 changes: 2 additions & 2 deletions modules/user/src/main/java/mindrot/BCrypt.java
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ public static String encode_base64(byte[] d)

/**
* Look up the 3 bits base64-encoded by the specified character,
* range-checking againt conversion table
* range-checking against conversion table
* @param x the base64-encoded value
* @return the decoded value of x
*/
Expand Down Expand Up @@ -529,7 +529,7 @@ private void encipher(int[] lr, int off) {
}

/**
* Cycically extract a word of key material
* Cyclically extract a word of key material
* @param data the string to extract the data from
* @param offp a "pointer" (as a one-entry array) to the
* current offset into data
Expand Down
2 changes: 1 addition & 1 deletion translation/source/coach.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<string name="areYouCoach">Are you a great chess coach with a %s?</string>
<string name="nmOrFideTitle" comment="nmOrFideTitle&#10;&#10;Part of sentence &quot;Are you a great chess coach with a NM or FIDE title?&quot;&#10;&#10;The text links to our title verification page: https://lichess.org/help/master">NM or FIDE title</string>
<string name="confirmTitle">Confirm your title here and we will review your application.</string>
<string name="sendApplication" comment="sendApplication&#10;&#10;%s is the lichess email adress">Send us an email at %s and we will review your application.</string>
<string name="sendApplication" comment="sendApplication&#10;&#10;%s is the lichess email address">Send us an email at %s and we will review your application.</string>
<string name="location">Location</string>
<string name="languages">Languages</string>
<string name="rating">Rating</string>
Expand Down
2 changes: 1 addition & 1 deletion translation/source/faq.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<string name="whenAmIEligibleRatinRefund">When am I eligible for the automatic rating refund from cheaters?</string>
<string name="ratingRefundExplanation">One minute after a player is marked, their 40 latest rated games in the last 3 days are taken. If you were their opponent in one of those games, you lost rating (because of a loss or a draw), and your rating was not provisional, you get a rating refund. The refund is capped based on your peak rating and your rating progress after the game. (For example, if your rating greatly increased after that game, you might get no refund or only a partial refund.) A refund will never exceed 150 points.</string>
<string name="preventLeavingGameWithoutResigning">What is done about players leaving games without resigning?</string>
<string name="leavingGameWithoutResigningExplanation">If your opponent frequently aborts/leaves games, they get "play banned", which means they're temporarily banned from playing games. This is not publically indicated on their profile. If this behaviour continues, the length of the playban increases - and prolonged behaviour of this nature may lead to account closure.</string>
<string name="leavingGameWithoutResigningExplanation">If your opponent frequently aborts/leaves games, they get "play banned", which means they're temporarily banned from playing games. This is not publicly indicated on their profile. If this behaviour continues, the length of the playban increases - and prolonged behaviour of this nature may lead to account closure.</string>
<string name="howCanIBecomeModerator">How can I become a moderator?</string>
<string name="youCannotApply">It’s not possible to apply to become a moderator. If we see someone who we think would be good as a moderator, we will contact them directly.</string>
<string name="isCorrespondenceDifferent">Is correspondence different from normal chess?</string>
Expand Down
2 changes: 1 addition & 1 deletion ui/chart/src/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export function maybeChart(el: HTMLCanvasElement): Chart | undefined {
return undefined;
}

/** Instead of using the annotation plugin, create a dataset to plot as a pseudo-annontation
/** Instead of using the annotation plugin, create a dataset to plot as a pseudo-annotation
* @returns a vertical line from {ply,-1.05} to {ply,+1.05}.
* */
export function plyLine(ply: number, mainline = true): ChartDataset<'line'> {
Expand Down
2 changes: 1 addition & 1 deletion ui/chart/src/division.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export default function (trans: Trans, div?: Division) {
}
const annotationColor = '#707070';

/** Instead of using the annotation plugin, create a dataset to plot as a pseudo-annontation
/** Instead of using the annotation plugin, create a dataset to plot as a pseudo-annotation
* @returns An array of vertical lines from {div,-1.05} to {div,+1.05}.
* */
const annotations: ChartDataset<'line'>[] = lines.map(line => ({
Expand Down
4 changes: 2 additions & 2 deletions ui/dgt/src/play.ts
Original file line number Diff line number Diff line change
Expand Up @@ -931,7 +931,7 @@ export default function (token: string) {
'onmessage - Multiple moves received on single message - movesToProcess: ' + movesToProcess,
);
if (localBoard.turn == currentGameColor) {
//If more than one move is received when it's the DGT board player's turn this may be a invalid move
//If more than one move is received when it's the DGT board player's turn this may be an invalid move
//Move will be quarantined by 2.5 seconds
const quarantinedlastLegalParam = lastLegalParam;
await sleep(2500);
Expand All @@ -957,7 +957,7 @@ export default function (token: string) {
}
}
}
//Update the lastLegalParam object to to help prevent duplicates and detect when more than one move is received
//Update the lastLegalParam object to help prevent duplicates and detect when more than one move is received
lastLegalParam = message.param;
for (let i = movesToProcess; i > 0; i--) {
//Get first move to process, usually the last since movesToProcess is usually 1
Expand Down
Loading