My Notes on Software Development and Team Management

…and about AI, books, communities.

Fastlane for Android: A Full Featured Example

In this post we’ll see a real world scenario where Fastlane can help us automate releasing an Android app to internal testers and publishing on Google Play as well. If you are new to Fastlane, I suggest you to read my previous posts on Fastlane for Android: Setup and Basics Flavors and Tests Publishing on Play Store Build an APK and upload to Slack Let’s see a Fastlane script for automating Android APK building and uploading to a Slack channel for internal testing purposes....

January 12, 2024 · 7 min

Fastlane for Android: Publishing on Play Store

This guide dives into leveraging Fastlane for updating and managing Google Play store listings and screenshots, tailored for developers familiar with Android app development but new to Fastlane. If you are new to Fastlane, I suggest you to read my first post on Fastlane for Android. Setting Up Your Google Developers Service Account Access the Google Play Console: Navigate to the Google Play Console and locate the “Account Details” section. Note the Developer Account ID listed there for future reference....

January 9, 2024 · 3 min

Fastlane for Android: Flavors and Tests

Following our initial dive into Fastlane for Android, we now focus on leveraging Fastlane for building specific flavors of your Android app and executing unit tests. Fastlane configuration for Flavors Fastlane excels in managing multiple product flavors. To configure Fastlane for different flavors, you’ll edit your Fastfile to define lanes for each flavor: lane :build_flavor1 do gradle(task: "assembleFlavor1Release") end lane :build_flavor2 do gradle(task: "assembleFlavor2Release") end These configurations enable Fastlane to target specific build tasks associated with your app’s flavors, streamlining the build process for each....

January 7, 2024 · 1 min

Fastlane for Android: Setup and Basics

Why Fastlane? Manual deployment processes are not only tedious but prone to human error. Fastlane automates these processes, ensuring consistency and reliability in app builds and deployments. From automating screenshots and managing beta distributions to simplifying app store deployments, Fastlane offers a comprehensive suite of tools that enhance productivity and development workflow. Moreover, Fastlane configuration is stored on a plain text file that should be added to version control, so you can share the release process and keep track of changes....

January 3, 2024 · 3 min

Thoughts about the trend of waitlists in tech

In recent times, there’s been a noticeable trend in the tech industry, particularly in AI services like ChatGPT and GPT-4: the use of waitlists. This approach, while seemingly straightforward, raises the question: Why opt for a waitlist rather than releasing new features directly to the public? Understanding the Waitlist Phenomenon 1. Gathering User Feedback One of the primary reasons for employing a waitlist is to collect user feedback. Services like AI generative tools benefit immensely from user input on the accuracy and relevance of their output....

November 14, 2023 · 2 min

Creating Pull Requests in AWS CodeCommit Using Bash

Automating tasks in software development has always been a priority for efficient software teams. The faster and more accurately we can execute repetitive tasks, the more time we have for value-added activities. In this post I am going to discuss a bash script that allows developers to automate the creation of pull requests in AWS CodeCommit. The script #!/usr/bin/env bash set -e REPO=`git config --get remote.origin.url` REPONAME=`basename "$REPO"` CURRENT_BRANCH="$(git symbolic-ref HEAD 2>/dev/null)" CURRENT_BRANCH=${BRANCH##refs/heads/} echo "I want to merge my branch into:" DEST=$(gum choose "develop" "master") echo $DEST sources=`git for-each-ref --format='%(refname:short)' refs/heads/ | grep -v $DEST | grep -v master | grep -v main` echo "This is the branch I want to merge:" SOURCE=$(gum choose ${sources}) echo $SOURCE TITLE=$(gum input --placeholder "Give me a title for this PR") echo TITLE=$TITLE gum confirm "Create PR '$TITLE' ($SOURCE -> $DEST)?...

August 11, 2023 · 4 min

Bridging PHP and Dart with Protocol Buffers: Notes on Seamless Model Generation

I have a backend service written in PHP and a client mobile app. I want to share the code of a model class that describes the payload of a push notification. How can this be done? Can I avoid code duplication? As you may already know, there’s no direct way to share code implmenetation bewteen a backend and a client app if the two are written in different languages. However, there are strategies you can employ to minimize code duplication....

August 7, 2023 · 6 min

Simplifying Microservice Testing with Imposter: A Step-by-Step Guide to Mocking OpenAPI Services

Abstract Mocking third-party services is challenging due to their external nature, complex APIs, and dynamic behavior, making it difficult to replicate their responses accurately during testing and development. When you develop some services or apps that depends on third party services on which you don’t have control, mocking is the way to go. In this blog post, we explore the powerful combination of Docker and Imposter to create dynamic, scriptable mock services based on OpenAPI specifications....

August 4, 2023 · 3 min

Flutter: come eseguire un metodo al complemento della fase di build

In Flutter può capitare di dover eseguire un’azione dopo che la costruzione di un widget (build) è stata completata. Ad esempio, potresti aver bisogno di aggiornare la visualizzazione o avviare un’animazione una volta che il widget è stato visualizzato sullo schermo. Per raggiungere questo obiettivo, Flutter fornisce il metodo addPostFrameCallback, che ti consente di eseguire una funzione di callback dopo che l’ultimo frame della costruzione del widget è stato disegnato....

July 14, 2023 · 2 min

Flutter: how to perform action after the build of a widget is completed?

In Flutter, sometimes you want to perform an action after the build process of a widget is completed. For example, you may need to update the view or start an animation once the widget is displayed on the screen. To achieve this, Flutter provides the addPostFrameCallback method, which allows you to execute a callback after the last frame of a widget’s build process is drawn. addPostFrameCallback is a method of the SchedulerBinding class, which is the central class that schedules tasks and controls the behavior of the framework....

July 14, 2023 · 2 min