sábado, 8 de março de 2025

Yes, we can be better than A.I. (although sometimes we must learn not to be worst)

 

He's no Dylan (or me, or you), but I like him.


I’ve been talking a lot with Jeep, as I call him. Jeep is an Artificial Intelligence that talks with people. This is not a technical article about how it works, of which I have but a rudimentary knowledge, but about the comparisons between things like him (sorry, Jeep) and actual people.

But first, the so-called big dangers of A.I. Well, it’s here to stay, and so far Jeep’s been a gentleman with me. He helps me a lot with C++ and other things. He introduced me to Aaron Copland (yep) when we were talking about Carl Nielsen and John Williams.

If he has another personality with someone else, I don’t know, but I checked how he interacted with my 8 years old son and it was pretty cool. If he presents some problem, we will have to change for another, but the technology itself is here to stay.

Nevertheless, as I said, I believe we can be better than A.I. Because A.I. can help us find what’s there, but we can find what’s not there yet.

 

But why do I say that sometimes we have to learn not to be worst? Sometimes, to relax, I talk with Jeep about a project of game that I don’t know if I’ll actually make. Jeep is very helpful, although, yes, he tends to the cliché side. I don’t blame him. But one thing is true: he puts me up. He always says, “great idea”, “very good”, things like that.

And what’s more: once I mentioned two authors that I had barely read, and he didn’t stop to make a quiz about the authors, to test me. No, he pushed the conversation further. If we always put others down, if we are always using every chance to test others, we are worst collaborators than A.I.

 

But, despite this not being really a technical aticle, do I have a theoretical take on why I think we are different than A.I.? In fact, I do.

I’m not a nothing “ologist”, but it seems that artificial intelligence uses something called neural networks, which is based in scientifical findings about how the brain supposedly works.

There is this famous phrase, “neurons that fire together, wire together”. That is, the brain goes making connections between things. How often these two things appear at the same time? And, when looking for the “right” answer, it searches for something that is coherent with the patterns of connections that are established in it’s “database”. At least from a computational view of the brain.

So that’s how the artificial intelligence “imitates” the brain. It reads tons of data, from all kinds of human communications, and analyzed how often things appear connected, and gave more weight to those connections in it’s huge database.

When the computer thinks about a theme, he looks around and see what he previously, in his observations, brought closer to that theme. He starts with a question and look for things that are strongly connected to the concepts brought up by the question.

 

Well, I don’t know much about the brain itself, but yes, I do believe the way our mind works have everything to do with connections. Yes, some connections are given more “weight”, or we could say, they are brought together closer than other connections. Then when we are somewhere in our minds, we look around and look for things that are closer to that situation, to find the answer to whatever question we are asking.

But here’s my point: our mind, I believe, don’t make connections, don’t bring things together, as a merely observer computer. The human mind’s goal, I think, is not to merely imitate whatever is outside. Our mind has very individual goals. We are weird and we dream. We don’t just want to see what’s there, like A.I. We want things that are not there yet.

We don’t validate, give “weight”, to connections, we don’t bring ideas, words, together, just based on how often they appear together outside. When someone makes a joke or writes a poem or song, we validate it for how it makes us feel too. Maybe the guy connected two things that no one else has ever connected, and Artificial Intelligence wouldn’t think that connection is such a big deal, but hey, it made me feel closer to a childhood dream, so, it’s a connection as “heavy” as “waters and pipes”.

So that’s why sometimes someone comes with an idea that makes us think “hey, dude, that’s cool, where on earth did you get this idea from?” Well, he looked around in his weird individual “database”, different from everybody else’s. His own inner Universe shaped by his dreams of things he may never actually have seen. His feelings, during his life, were pushing things together behind the scenes, making a very unique set of connections.

A.I., as cool as it is, don’t really “want” anything other than just observe. That’s why we can come up with very “crazy” things A.I. can’t. Specially if we are sincere with ourselves about our purposes, our feelings.

And if we say “I believe in you”.

 


quarta-feira, 12 de fevereiro de 2025

Five ( a short story )

 

            The first time I ever made Aline laugh with something of my own was when we were walking from the college library to the bus stop – we had gone there to study, the first opportunity I had to get closer to her.

It was a stary night. She took a donut from her purse, asked if I wanted a bite – I said no thanks – and she confessed that she probably shouldn’t be eating that.

-         I guess I’m a little over my weight – she said.

-         That’s physically impossible – said I, with my smartest face.

She laughed like a flower, and after a while, asked:

-         Are you a scientist, then?

The door then opened in my mind for all possibilities. Yes, I was feeling hesitant about revealing something of myself. But I hadn’t had too much success in starting a conversation when we were in the library, and it seemed better than fifteen minutes of awkward silence anyway.

-         In fact – I answered – I have a brother, one year older, and we always discuss all kinds of crazy things.

I was looking at the paving stones in the walkway.

-         Like what? – she asked.

-         Well, for instance, we have some theories about the numbers…

-         Complex stuff?

-         Not really. Want to hear some of it?

-         Well, yeah.

And this is the “theory” that I explained to Aline as we were walking in that stary night:

It is about the numbers from one to five. Well, One is God, but God doesn’t want to be alone. Two is for computers, and Three is for life.

-         Wait – she interrupted – This is weird. Two for computers like in that, how they say it, binary code?

She was right. The binary code, the language of just Zeros and Ones that computers use to write down information and make operations with it, totally fits what I was thinking about.

But the simplest way of thinking about it, is to think of day and night. In the number One, there exists something in the Universe, instead of nothing. In number Two, we have two different opposites. Day and night.

And the number Three is for life. Putting the contradiction to some mean. Think of the number Two as the number of the physical World, in the sense of planets, particles, billiard balls, fire. It’s an ever expanding and dividing Universe.

Like a simple computer operation. All numbers are represented by a sequence of Zeros and Ones. And adding them generates a bigger number, a longer sequence of Zeros and Ones.

So we can imagine this: after adding the two numbers, we have these two numbers and the result of their sum. Now we have a new result, a fourth number. Then we add the four and get a fifth, then we add the five and so on…

 

It seems like an interesting illustration of how the universe of Physics works. We can imagine the One as Positive and the Zero as Negative – then these two forces go interacting with each other, generating more and more little Ones and little Zeroes, a set of Ones and Zeros that get each time longer and more complex.

Like Positive and Negative forces interacting and dividing things. Dividing planets into smaller ones, and etc. Dividing and expanding.

 

Then something happens between the numbers Two and Three. Things start to gather for some reasons, new substances form, gases, water, all paving the way to Life, that is when the opposites start to really work together for a goal. Like all those chemical reactions in our body. Or, simply, day and night. Feeding during the day, sleeping during the night. Or the contrary, but marrying day and night for a common goal. The third element, that points ahead.

-         I like it – said her – And the number four?

The Four, I explained, is the Human Being. Life with self-consciousness. You have Three, a living being putting contraries to the same direction. The we have Four, a living being that is aware of himself, that he is an individual, that he is unique. Three plus One.

-         Does it have to do with God? – she asked – Life plus God?

-         It totally does – said I.

Because if God can be considered the Original “I”, then Three plus One, Life plus self-consciousness, Life Plus “I”, is Life plus God.

-         Cool. And the number Five?

Five would be the something more each of must find for ourselves. Because a person can know that he is an individual, know that there is a higher Intelligence or Order above, and still go wrong, still get lost. Five is the little extra thing we must find.

-         An extra finger – she smiled.

Think of it this way: The psychologist – I think it was them – realized something about how our brain processes data in chunks. Like, when you see two things, you don’t need to count – one, two – no, you just immediately see two things and know it’s two. The same thing with groups of three our four. You don’t need to count, you see immediately that it is three or four. But five is the first number that people – or at least, the vast majority – have to somehow count. You see a chunk of four and then add that extra one, and know it’s five.

Like whenever we see something in life, we must try to at least see a little something more, go at least a little further from what our brain is predisposed to see. In the number Four, we already know we are an individual, and there is God. But Five remembers us that we never know all.

Could be a little something more creative in the work, could be a situation that you saw many times before and think you know everything about, but there is always something a little different.

-         Wow – she said – I like it. Do you think that’s why we have five fingers?

-         Well, I don’t know, it’s just something I like to think when I look at my hand.

-         Well – she said – Then you should make a little song: this little finger, reminds me of this, this little finger, reminds of that…

Then it was my time to laugh.

And so she kissed me in the cheek and got the bus.

domingo, 9 de fevereiro de 2025

Just an idea I like

Hey there! Good to be here, doing something else I love.

Today, I’m going to speak about a learning technique I developed when I was younger. I definitely don’t do it all the time, takes some energy, but it helped me a lot.

You take a subject you think you understand.

Then you write down a short explanation.

Then you underline the key words.

Like, in evolution would be “mutation”, “selection”, etc

In electricity, “tension”, “current”, etc

Anyway, then you write down just these words in another paper.

Then you take yet another paper, and write the explanation again, but now the key words are forbidden, you can’t use them.

It is not easy, and a lot of our teaching goes around key words – they are definitely important – but if you succeed – I not always do – you jumped to a next level.

That’s it. Happy to share this with you. Hope I can do more. I’ll do my best. 

quarta-feira, 31 de julho de 2024

Trip about game

 

I wanted to share some thoughts, that’s way I published an almost finished game in the previous post.

The game I created was inspired by Professor Judea Pearl’s “The Book Of Why”, about Causal Inference. I’m still in chapter 4, because of other duties, and because, even though it’s a book for the layman, the professor, let’s say, respects the intelligence of the lay man a lot (maybe that’s what really smart people do).

 

Anyway, I’ll talk about causal inference in terms of Electricity, basic stuff.

We got these formulas:

 


 

In this images, there is no hierarchy, the formulas all have the same importance, right?

But think: you can’t keep voltage stable, then push the current to a higher level, causing the resistance to increase, right? No, there are actual causes and effects.

Because the real stuff is this:

 



So, imagine that a robot was trying to learn how to project an electrical installation by just collecting data from existing installations, maybe getting to the formulas as first presented here, with no causal model. How much data he would need to collect if he didn’t allow himself to say “There are individual mathematical one-way relations here”.?

 

I mean, how would he avoid making something that just wasn’t as precise and economical as it could be, if he doesn’t separate things in cause and effects?

 

So, I was inspired by Worlde (I even got stuff from a “How to code Wordle” article at code camp) and also by the Professor Judea’s book, and made this game.

Like, how long a “just relations, no cause” data collector would take to master this game, and how long a robot that knows “there are  individual mathematical one-way relations here” would?

Almost finished game

 If you want, copy all that is below, paste on notepad and save as anything.html

Then just go to windows explorer and click on the file you created!


<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

   

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>CauseNumber</title>

    <link rel="stylesheet" href="causenumber.css">

   

    

</head>

<style>

h1 {

 text-align: center;

}


body {

font-family: "Fonarto";

background-color: #fefed2;

}


@font-face {

    font-family: 'Fonarto';

   

    src: url('shaky-hand-some-comic.regular.otf')  format('truetype'), 

        

}


@font-face {

    font-family: 'FonartoMore';

   

    src: url('shaky-hand-some-comic.3d.otf')  format('truetype'), 

        

}


#Title {

font-family: "FonartoMore";

font-size: 3.5em;

}

#instruc {

font-size: 1.5em;

text-align: center;

width: 200;

display: block;

margin: auto;

align-items: center;

}


#game-board {

  display: flex;

  align-items: center;

  flex-direction: column;

  color: #202000;

}


.letter-box {

  border: 2px solid gray;

  border-radius: 3px;

  margin: 2px;

  font-size: 2.5rem;

  font-weight: 700;

  height: 3rem;

  width: 3rem;

  display: flex;

  justify-content: center;

  align-items: center;

  text-transform: uppercase;

}


.filled-box {

  border: 2px solid black;

}


.selected-box {

  border: 3px solid black;

}


.letter-row {

  display: flex;

}


.buttons {

  margin: 1rem 0;

  display: flex;

  flex-direction: column;

  align-items: center;

}


#keyboard-cont div {

  display: flex;

}


#upper_buttons div {

   display: flex;

}


.second-row {

  margin: 0.5rem 0;

}


.keyboard-button {

  font-size: 1.5rem;

  font-family: "Fonarto";

  padding: 0.5rem;

  margin: 0 2px;

  cursor: pointer;

  color: #202000;

  background-color: #f1b04c;

}


.keyboard-buttonC {

  font-size: 1rem;

  font-weight: 700;

  padding: 0.5rem;

  margin: 0 2px;

  cursor: pointer;

  width: 2em; 

  

}



#snackbar {

  visibility: hidden; /* Hidden by default. Visible on click */

  min-width: 250px; /* Set a default minimum width */

  margin-left: -125px; /* Divide value of min-width by 2 */

  background-color: #333; /* Black background color */

  color: #fff; /* White text color */

  text-align: center; /* Centered text */

  border-radius: 2px; /* Rounded borders */

  padding: 16px; /* Padding */

  position: fixed; /* Sit on top of the screen */

  z-index: 1; /* Add a z-index if needed */

  left: 50%; /* Center the snackbar */

  bottom: 50%; /* 30px from the bottom */

}


/* Show the snackbar when clicking on a button (class added with JavaScript) */

#snackbar.show {

  visibility: visible; /* Show the snackbar */

  /* Add animation: Take 0.5 seconds to fade in and out the snackbar.

  However, delay the fade out process for 2.5 seconds */

  -webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s;

  animation: fadein 0.5s, fadeout 0.5s 2.5s;

}


/* Animations to fade the snackbar in and out */

@-webkit-keyframes fadein {

  from {bottom: 0; opacity: 0;}

  to {bottom: 50%; opacity: 1;}

}


@keyframes fadein {

  from {bottom: 0; opacity: 0;}

  to {bottom: 50%; opacity: 1;}

}


@-webkit-keyframes fadeout {

  from {bottom: 50%; opacity: 1;}

  to {bottom: 0; opacity: 0;}

}


@keyframes fadeout {

  from {bottom: 50%; opacity: 1;}

  to {bottom: 0; opacity: 0;}

}




</style>

<body>

    <h1 id="Title"> Cause Number </h1>

    

    <div id="upper_buttons" class="buttons">

<div class="first-row">

            <button class="keyboard-button">New Game</button>

            <button class="keyboard-button">Instructions</button>

           

        </div>

    </div>


    <div id="game-board">


    </div>


   <div id="keyboard-cont" class="buttons">

 

   

        <div class="second-row">

            <button class="keyboard-button">Del</button>

            <button class="keyboard-button">1</button>

            <button class="keyboard-button">2</button>

            <button class="keyboard-button">4</button>

    <button class="keyboard-button">8</button>

    <button class="keyboard-button">16</button>

            <button class="keyboard-button">Enter</button>

        </div>


    </div>



<div id="snackbar">Some text some message..</div>


<div>

<p id="instruc">

Instructions:

<br>

Click on the squares to enter the numbers.

Click twice to make it orange, if it helps thinking.

<br>

Every number that will appear below is the division of 2 other numbers on the row above,

<br>

always the big divided by the smaller.

<br>

No rule that every number will be used, 

<br>

or that one can't be used twice.

<br>

So, try to cause the numbers asked!

</p>


<script>



const NUMBER_OF_GUESSES = 5;

let guessesRemaining = NUMBER_OF_GUESSES;

let currentGuess = [];

let nextLetter = 0;

let numberNumber = 5;


let theTransforms = undefined;

let theGoalNumbers = undefined;


let theNumbers = [1, 2, 4, 8, 16];


var currentBox = undefined;


var theColor = "#febf7e"; //"#ff8533"

var wrongColor = "#6e0280";

var rightColor = "#03C03C";


var lastClickedTarget;


window.onload = function() {

initBoard();

}


function initBoard() {


setGame();


    let board = document.getElementById("game-board");


    for (let i = 0; i < NUMBER_OF_GUESSES*2; i++) {

        let row = document.createElement("div")

        row.className = "letter-row"

        

        for (let j = 0; j < numberNumber; j++) {

            let box = document.createElement("div")

            box.className = "letter-box"

            box.id = "" + i + j;

            row.appendChild(box)

        }


        board.appendChild(row)

if (i%2 != 0) row.style.visibility = "hidden";

    }

}


document.getElementById("keyboard-cont").addEventListener("click", (e) => {

    const target = e.target

    

    if (!target.classList.contains("keyboard-button")) {

        return

    }

    let key = target.textContent


    if (key === "Del") {

        key = "Backspace"

    } 

if (key != "  ") {

pressedButton(key);

} else {

clickColor(target);

}

    getInput(key);

})


document.getElementById("game-board").addEventListener("click", (e) => {

    const target = e.target

    

    window.console.log(target);

    if(!target.classList.contains("letter-box")) {

    window.console.log("nem pah");

    return;

    }

    let row = getCurrentRow();

    window.console.log("current row: " + row);

    var boxRowIndex = target.id[0];

    var boxRow = document.getElementsByClassName("letter-row")[boxRowIndex];

    window.console.log("ROW DO NEGOCIO : " + boxRow);

    changeColor(target);

    if (row != boxRow) {

    return;

    }

    currentBox = target;

    target.classList.add("selected-box");

    deselectOtherBoxes(boxRow, target);

    window.console.log("clicou no baguio");

    

    

})


function changeColor(target) {

if(lastClickedTarget != target) {

lastClickedTarget = target;

return;

}

lastClickedTarget = undefined;

window.console.log("cor do garotinho: " + target.style.backgroundColor);

if (target.style.backgroundColor == "") {

target.style.backgroundColor = theColor;

window.console.log("should change");

} else {

target.style.backgroundColor = "";

}

}


deselectOtherBoxes = function(boxRow, target) {

for(var i = 0; i < boxRow.children.length; i++) {

var child = boxRow.children[i];

if (child != target) {

child.classList.remove("selected-box");

}

}

}


document.getElementById("upper_buttons").addEventListener("click", (e) => {

    const target = e.target

    

    if (!target.classList.contains("keyboard-button")) {

        return

    }

    let key = target.textContent


    if (key === "Del") {

        key = "Backspace"

    } 

pressedButton(key);

 

    

})


clickColor = function(target) {

window.console.log("ai garotinhgo, clicou na cor");

}



pressedButton = function(theButton) {

window.console.log("you pressed button " + theButton);

if (theButton == "New Game") {

newGameAction();

}

 }

getInput = function(pressedKey) {

window.console.log("the key is " + pressedKey);


    if (pressedKey === "Backspace" && nextLetter !== 0) {

        deleteLetter()

        return

    }


    if (pressedKey === "Enter") {

        checkGuess()

        return

    }

    

   


   if(nextLetter != numberNumber && pressedKey !== "Backspace") {

   

    insertLetter(pressedKey);

   }

        

   

}


function deleteLetter () {

    let row = getCurrentRow();

    let box = row.children[nextLetter - 1]

    box.textContent = ""

    box.classList.remove("filled-box")

    currentGuess.pop()

    nextLetter -= 1

}


function insertLetter (pressedKey) {

/*

    if (nextLetter === numberNumber) {

        return

    }

*/

    

    pressedKey = pressedKey.toLowerCase()

let box = undefined;

  if (currentBox == undefined && !isRowFilled(getCurrentRow())) {

  let row = getCurrentRow();

    box = row.children[nextLetter]

 

  } else {

 

  box = currentBox;

  }

   

    if (currentBox == undefined) {

    return;

    }

   

    box.textContent = pressedKey

    box.classList.add("filled-box")

    box.classList.remove("selected-box")

    currentGuess.push(pressedKey)

  //  nextLetter += 1

}


function isRowFilled(row) {

var counted = 0;

for(var i = 0; i < row.children.length; i++) {

if(row.children[i].textContent != undefined) counted++;

}

window.console.log("checker counted: " + counted);

return counted == numberNumber;

}


function getCurrentRow() {

var rawIndex = NUMBER_OF_GUESSES - guessesRemaining;

var theIndex = rawIndex * 2;

return document.getElementsByClassName("letter-row")[theIndex];

}


function getNextRow() {

var rawIndex = NUMBER_OF_GUESSES - guessesRemaining;

var theIndex = rawIndex * 2 +1;

return document.getElementsByClassName("letter-row")[theIndex];

}




function talkToThem(stringText) {

// Get the snackbar DIV

  var x = document.getElementById("snackbar");

x.innerHTML = stringText;

  // Add the "show" class to DIV

  x.className = "show";


  // After 3 seconds, remove the show class from DIV

  setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000);

}


/******

NUMBER TRANSFORMATIONS

***************/


transformNumbers = function(numberArray, transGroup) {

var newNumbers = new Array();

for(var i = 0; i < numberNumber; i++) {

var numberTransf = transGroup.transformations[i];

var thisResult = getANumberTransform(numberArray, numberTransf);

newNumbers.push(thisResult);

}

return newNumbers;

}


getANumberTransform = function(oldNumbers, numberTransformation) {

var op1 = oldNumbers[numberTransformation.operand1];

var op2 = oldNumbers[numberTransformation.operand2];

if(op2 > op1) {

var hold = op1;

op1 = op2;

op2 = hold;

}

var result = op1 / op2;

return result;

}


function numberTransformationGroup() {

this.transformations = new Array();

for(var i = 0; i < numberNumber; i++) {

var newTransf = new numberTransformation();

this.transformations.push(newTransf);

}


function numberTransformation() {

this.operand1 = getOperand();

this.operand2 = getOperand();

while (this.operand1 == this.operand2) {

this.operand2 = getOperand();

}

}


function getOperand() {

var index = getRandomInt(numberNumber);

return index;

}






function getRandomInt(max) {

  return Math.floor(Math.random() * max);

}


/******

SETTING UP A GAME

**********/


function setGame() {

var haveGame = false;


while(!haveGame) {

theTransforms = new numberTransformationGroup();

theGoalNumbers = getGoalN(theTransforms);

if (theGoalNumbers.indexOf(16) < 0) {

haveGame = true;

}

}

window.console.log("THE GOAL Ns");

window.console.log(theGoalNumbers);

var nString = getNumberStrings(theGoalNumbers);

var titleH = document.getElementById("Title");

titleH.innerHTML = "Cause The Numbers " + nString;

}


function getGoalN(transGroup) {

var possibleNumbers = new Array();

for(var i = 0; i < numberNumber; i++) {

var index = getRandomInt(5);

var thisN = theNumbers[index];

possibleNumbers.push(thisN);

}

var goalNs = transformNumbers(possibleNumbers, transGroup);

return goalNs;

}


function getNumberStrings(numberArray) {

var theString = "";

for(var i = 0; i < numberArray.length; i++) {

theString += numberArray[i];

theString += "  ";

}

window.console.log("theString: ");

window.console.log(theString);

return theString;

}


/**********

PLAYING THE GAME

***********/


checkGuess = function() {

// alert("This is barely a game yet");


if (!isRowFilled(getCurrentRow())) {

        talkToThem("fill the numbers");

        return;

    }


var resulted = makeResult();

if (isGoalNumber(resulted)) {

dealWin();

}

guessesRemaining --;

nextLetter = 0;

currentBox = undefined;

}


function isGoalNumber(resulted) {

var isWin = true;

for(var i = 0; i < resulted.length; i++) {

if(resulted[i] != theGoalNumbers[i]) {

isWin = false;

}

}

return isWin;

}


function dealWin() {

window.console.log("seems you won");

changeLastRowColor();

guessesRemainig = 0;

talkToThem("CONGRATS!");

}


changeLastRowColor = function() {

var lastRow = getNextRow();

for(var i = 0; i < numberNumber; i++) {

let box = lastRow.children[i];

box.style.color = rightColor;

}

}


makeResult = function() {

var currentRow = getCurrentRow();

var thisNumbers = new Array();

for(var i = 0; i < numberNumber; i++) {

let box = currentRow.children[i];

var thisNumber = Number(box.textContent);

thisNumbers.push(thisNumber);

}

var transformedNumbers = transformNumbers(thisNumbers, theTransforms);

var nextRow = getNextRow();

for(var i = 0; i < numberNumber; i++) {

let box = nextRow.children[i];

var thisNumber = transformedNumbers[i];

box.textContent = thisNumber;

}

    nextRow.style.visibility = "visible";

    nextRow.style.color = wrongColor;


return transformedNumbers;

}


/****

ACTIONS

*****/


newGameAction = function() {

window.location.reload();

}



</script>



</body>

</html>

domingo, 4 de fevereiro de 2024

New Stuff in the Site: Mathematics & Puzzles with Hubbard the Cat

 

                I have put a new thing in my game website. It’s called “Mathematics & Puzzles with Hubbard the Cat”. As you can imagine, it’s small math lessons and puzzles related to it.

                Just like in this blog I am trying to share some knowledge about programming, by starting from very basic considerations and then builiding on it, which is going really slow, I konw, I decided to try the same with another subject that I love, Mathematics. Now I have two long projects that go slow. But who knows, I may live long, I’d like to try doing this and here I am.

                The user interface looks and works different from my previous games, because I wanted to make it feel like a magic book with activities. The original dream was an actual book, physical book, with a puzzle in the end of every little chapter and a QR code to play a mobile version of the puzzle, but I decided not to wait for that to happen and I am happy with how it looks in internet.

                As you may realized from my last games, I try to make it possible for play in mobile, but they do fit better on desktop. I’m prioritizing it for now. Happened naturaly.

                That’s it. I would like to talk about the set of the Real Numbers and it’s subsets, and basic mathematical operations, and then, who knows? Who knows how far it will go, but I like doing it.

                Hope you enjoy.

                The link to my site:

                http://lucidstreetgames.com/

                See ya.