Patricia Sauer - Authentic Programming

Dev Log

April 2024

The logo of Math Experts
April 22, 2024

Today, I have been working on better app store titles, subtitles, and descriptions of my app Math Experts in all 5 supported languages. By doing so, I hope to increase traffic and sales of my app.


The logo of Math Experts
April 21, 2024

Today, I have released version 2.4 of Math Experts. The release includes the new times tables mode as well as localized names of the app. I localized the app name because I assume that users search for apps in their mother tongue. Therefore, localized app names could increase traffic and maybe sales as well.

Creating the release took a lot of time today, because I got an email from apple stating that my release contains issues ("ITMS-91053: Missing API declaration"). I needed to do some investigation to figure out what this means and which options I have. I started by googling for my issues and from that investigating the sources of the libraries I use to figure out where the issues come from. I doubted everything: I doubted to be a good software developer, I doubted that I could solve these issues, and I doubted that I could release any new app. In the end, I added the necessary PrivacyInfo and gave reasons for using the specified APIs. As the reasons were pre-defined, I just had to understand the possible reasons and chose the most appropriate ones.


The logo of Math Experts
April 20, 2024

Today, I have prepared the next release of Math Experts. I have enhanced the app store description texts for all languages I support (English, German, French, Spanish, and Portuguese). It was a lot of work. I needed to come up with texts describing the new times tables feature and finding proper translations which hopefully make sense. Additionally, I re-arranged the texts in the app store descriptions to make clear why the user should choose Math Experts. To emphasize why Math Experts is a good choice, I added texts stating that Math Experts is a safe learning environment because it does not show adds and that I take privacy into account by storing the data on the user's phone only.

While I was on that I decided I could try giving the app a localized name. I hope that this increases the visibility of my app in the app stores assuming users search for apps in their mother tongue.


The logo of Monster Friends: Simon Says
April 18, 2024

Today, I did several things:

I aligned the menu buttons of my Simon Says game and improved the overall look

I fixed a bug with the user input sequence. Somehow, the input user sequence always had a max length of 1 which made it impossible to go beyond level 1. It was already working at some point but somehow I broke it πŸ˜…

I replaced the usage of TouchableOpacity with TouchableWithoutFeedback and when the user clicks on a TouchableWithoutFeedback, the clicked monster is scaled like it is scaled when the generated sequence is played. By doing so, I learned that TouchableWithoutFeedback does not accept styling or layout props and I had to wrap the content of the TouchableWithoutFeedback into a View.

Before:

<TouchableOpacity
  disabled={!isUserTurn}
  onPress={() => addToUserSequence(3)}
  onPressIn={() => setCurrentlyPressedMonster(3)}
  onPressOut={() => setCurrentlyPressedMonster(undefined)}
  style={{
    width: iconWidth,
    height: iconWidth,
  }}
>
  <Image
    style={{ width: '80%', height: '80%' }}
    source={require('../assets/monsters/monster003.png')}
    resizeMode="contain"
  />
</TouchableOpacity>

After:

<TouchableWithoutFeedback
  disabled={!isUserTurn}
  onPress={() => addToUserSequence(3)}
  onPressIn={() => setCurrentlyPressedMonster(3)}
  onPressOut={() => setCurrentlyPressedMonster(undefined)}
>
  <View
    style={{
      width: iconWidth,
      height: iconWidth,
    }}
  >
    <Image
      style={{ width: '80%', height: '80%' }}
      source={require('../assets/monsters/monster003.png')}
      resizeMode="contain"
    />
  </View>
</TouchableWithoutFeedback>

The logo of Monster Friends: Simon Says
April 17, 2024

Today, I introduced colors assigned to each monster and when a monster is played within the generated sequence, the app displays the color of the current monster as well making it easier to remember sequences. Additionally, I decided to check for a new record after each round because the user might click on the 'Back' button and I want to ensure storing the current record properly. Now that I think about it, I might do so when clicking "Back" as well. Might be that I change it again because it might be inefficient to check for a new record after each round 😬


The logo of Monster Friends: Simon Says
April 16, 2024

Today, I added a nice radial gradient to the circle around which the monsters are positioned.


The logo of Monster Friends: Simon Says
April 15, 2024

Today, I implemented changing the background color of the circle around which the monsters are positioned to the color of the monster currently being played within the generated sequence.


The logo of Monster Friends: Simon Says
April 14, 2024

Today, I played around with fonts for my app. That's a task I really don't like that much but it needs to be done anyways. To have some fun after that, I implemented storing and retrieving records per difficulty level.


The logo of Monster Friends: Simon Says
April 12, 2024

Today, I disabled the monster buttons after successfully checking for the sequence match. This means that while a sequence is played, ddthe mosnter buttons cannot be clicked. For playing the initial sequence that was already the case but I forgot to disable the monster buttons after each round.


The logo of Monster Friends: Simon Says
April 11, 2024

Today, I have been working on playing the generated sequence, visualizing it, and recognizing user input. I am proud of some of my implementation decisions. The flow is as follows: a level is defined (1 when starting the game), a sequnece is being generated, and the sequence is being played. Instead of calling a playSequence function right after generating it, I implemented two useEffect hooks:

// generate sequence
useEffect(() => {
  setSequence(generateSequence(level, difficulty));
}, [level]); // intentionally leaving out difficulty

// play sequence
useEffect(() => {
  //
}, [sequence]);

Earlier, I would have tried to execute playSequence right after setSequence(generateSequence(level, difficulty));:

// generate and play sequence
useEffect(() => {
  setSequence(generateSequence(level, difficulty));
  playSequence(sequence);
}, [level]); // intentionally leaving out difficulty

but as state variables ar set asynchronously (i.e. not updated directly) in react native, this might have caused problems. So I think my solution is pretty good and from that I see some improvements in understanding react native πŸ™‚


The logo of Monster Friends: Simon Says
April 08, 2024

Today, I started working on my brand new project "Monster Friends: Simon Says". I created a basic main menu and a game view featuring 3 difficulty levels. Most of the time I spent aligning the monsters around a circle. I think the app still looks shitty. Let's see where it goes.

The initial ui of monster friends: simon says









Β© 2018 - 2024 Patricia Sauer