Mandarin Chinese is the first foreign language Iβm learning by myself, and Iβm surprised there are so few universal best practices. Resources with hacks and tricks(like http://hackingchinese.com for Chinese) are a great starting point, but they still leave room for delusions.

Here are some of mine.

This book is a product of my own endeavour of understanding category theory. It is just that as I am explaining something, I am understanding it better. It is aimed at programmers, as well as anyone else who is interested in this stuff.

The main reason I am interested in Category Theory is that it allows us to formalise some common concepts that we use in our daily (intellectual) lives. Much of our language is based on intuition and rightfully so: relying on intuition is a very easy way to get your point across so it is understood by other human beings. However, that is part of the problem: sometimes intuition makes it too easy to communicate with someone. So easy that he might, in fact, understand things that you havenβt actually said. For example, when I say that two things are equal, it would seem obvious to you what I mean, although it isnβt obvious at all (how are they equal, at what context etc). That is the place when we might want to provide a more rigorous definition of what am I saying (even if I did not have one, to begin with). But providing such definition in natural language, which is designed to use intuition as a means of communication, is no easy task. It is in these situations that people often resort to diagrams to explain their thoughts. Diagrams are ubiquitous in science and mathematics because they are an understandable way to communicate a formal concept clearly. Category theory formalises the concept of a diagram and their components - arrows and objects and creates a language for presenting all kinds of ideas.

In this book, we will visit those formalisms and along the way, we would see all other kinds of mathematical objects, viewed under the primsm of categories.

Read
More

A modern practical book about cryptography for developers with code examples, covering core concepts like: hashes (like SHA-3 and BLAKE2), MAC codes (like HMAC and GMAC), key derivation functions (like Scrypt, Argon2), key agreement protocols (like DHKE, ECDH), symmetric ciphers (like AES and ChaCha20, cipher block modes, authenticated encryption, AEAD, AES-GCM, ChaCha20-Poly1305), asymmetric ciphers and public-key cryptosystems (RSA, ECC, ECIES), elliptic curve cryptography (ECC, secp256k1, curve25519), digital signatures (ECDSA and EdDSA), secure random numbers (PRNG, CSRNG) and quantum-safe cryptography, along with crypto libraries and developer tools, with a lots of code examples in Python and other languages.

Read
More

Every now and then, I read a question about learning how to break ciphers, or more generally how to become a cryptographer/cryptologist. From my viewpoint, the most important part of learning this skill is not advanced mathematics, but instead first learning how to think like a cryptographer. When you go to break a cipher, there are no instructions on how to do it. You simply need to get your hands dirty with the function under consideration and look for things that do not seem desirable for a secure function of that type. While having a bag of tricks is going to help, ultimately itβs your creativity, persistence, and skills that are more likely going to make the difference.

Read
More

This is the personal website of Dr. Kenneth Kuttler. You can download these books as a PDF, or read them online without downloading.

If you view the books online the website will keep track of where you were at in each respective book so you can come back and continue reading where you left off.

Data Structures and Algorithms is about solving problems efficiently. A bad programmer solves their problems inefficiently and a really bad programmer doesn’t even know why their solution is inefficient. So, the question is,

How do you rank an algorithm’s efficiency?The simple answer to that question is the

Big O Notation. How does that work? Let me explain!

In general, an automaton is a process for updating an array of cells where each cell is in one of a finite number of states and updating is according to a rule based on local neighborhoods and that rule is applied to every neighborhood. General introductions include [5-7]. The Game of Life is a 2-dimensional automaton that evolves from generation to generation using the following rule on each 3 by 3 neighborhood: if the center cell is dead (0) then it becomes alive at the next generation if exactly 3 of its eight neighbors are alive; if the center cell is alive (1), then it remains alive if 2 or 3 of its eight neighbors are alive. A Larger than Life (LtL) automaton has five parameters:

r, a, b, c, d. The radiusrdefines the size of the neighborhoods which are2r+1by2r+1. Letsdenote the number of alive cells in an2r+1by2r+1neighborhood, including the center. Then a dead cell becomes alive whena β€ s β€ band an alive cell remains alive ifc β€ s β€ d. In this notation, the Game of Life is the LtL rule 1 3 3 3 4 automaton. Notice that LtL automata easily generalize ton-dimensional automata. In Section 2 we will consider the 1-dimensional case before turning to the more traditional 2-dimensional LtL automata.In the 1990βs and later David Griffeath and Kellie Evans investigated many LtL automata. Indeed, it was the topic of Evanβs PhD thesis [8]. We will mention the particular LtL automata from [1] in Section 3 but the interested reader can find a wealth of material on their web pages [9-10] and in their publications [11-15].

Read
More