Posts on Adam Swiderskihttps://swiderski.tech/posts/Recent content in Posts on Adam SwiderskiHugo -- gohugo.ioen-us[email protected] (Adam Świderski)[email protected] (Adam Świderski)Wed, 25 Mar 2026 00:00:00 +0000AI continuous development - My Toilet-to-Prod Pipelinehttps://swiderski.tech/2026-03-25-toilet-to-prod-pipeline/Wed, 25 Mar 2026 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2026-03-25-toilet-to-prod-pipeline/The Itch I’ve always liked playing with scripts, CI, and automating things. But this time, with LLMs, I think I outdid myself.
I built a workflow that starts as a Telegram chat, which helps me shape the specs for a feature that launches as a GitHub issue. From there, I use a Docker image for planning changes, implementing code, running reviews, and merging code when quality gates and the CI build pass.Do You Want to Learn About Our Lord and Savior SOLIDhttps://swiderski.tech/2026-02-18-solid-dogma/Wed, 18 Feb 2026 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2026-02-18-solid-dogma/I woke up with the flu, felt adventurous, and, for a while, wanted to disrupt things. So this one is going to be about not praising the SOLID principles.
There are no rocks that you could hide from this acronym. Doesn’t matter what technology, languages, or frameworks you use. But maybe it should?
Quick reminder, the acronym stands for:
Single Responsibility Principle (SRP) Open/Closed Principle (OCP) Liskov Substitution Principle (LSP) Interface Segregation Principle (ISP) Dependency Inversion Principle (DIP) You would be right to connect it to Uncle Bob, but he just wrapped it into an acronym; those rules have been around since 70.Bomb the Silo From Inside: Why Mission Teams Workhttps://swiderski.tech/2026-01-28-mission-teams/Wed, 28 Jan 2026 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2026-01-28-mission-teams/Most software teams are split up by technical layers—backend, frontend, and mobile. This seems logical, but it often creates bottlenecks, delays, and frustration. Mission teams flip the script: cross-functional developers own features end to end, from idea to release. This approach speeds up delivery, builds real ownership, and cuts down on endless handoffs. Too perfect to be true? It demands more upfront effort in communication and shared knowledge, but the payoff is worth it.Look at Me, I'm the iOS Developer Nowhttps://swiderski.tech/2022-10-12-candle-studio-story/Sun, 12 Oct 2025 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2022-10-12-candle-studio-story/Look at Me, I’m the iOS Developer Now Timeline: September 14 - October 3, 2025 (19 days) Lines of code I wrote: 0 (Claude did it all) Apple Store rejections: 3 Hours debugging CI/CD: 5 Result: Live app with paid subscriptions Check the app!
I’m the iOS developer now. I mean, kinda, I just released my first purely native iOS app to the App Store. It took just a week of filling out forms and being rejected because some rule, 9.The Unix Philosophy Meets AI: Building Composable LLM Tools with MCPhttps://swiderski.tech/2025-09-02-mcp-tools-llm-meets-unix/Tue, 02 Sep 2025 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2025-09-02-mcp-tools-llm-meets-unix/The potential of LLM’s capabilities is still being explored and expanded. Instances of hallucinations and odd responses, often followed by a polite ’let me try again’, are becoming increasingly rare with each model version. Context windows are expanding, and with innovative methods to compress ongoing conversations, the size of the context window is becoming less of a concern. However, a significant limitation remains: model knowledge. It’s trained on data; it doesn’t inherently ‘know’ data.The Genie's Curse: My Month with AI-Augmented Codinghttps://swiderski.tech/2025-07-25-ai-genie/Fri, 25 Jul 2025 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2025-07-25-ai-genie/You know that meme where a guy asks a genie to grant his wish, and the genie’s sole purpose is to twist that wish to make him miserable? Like he wishes for $1 million and gets it, but inflation is 300,000,000% so he can’t even afford bubble gum with it.
After a month of experience with vibe/AI-augmented coding, I have a similar feeling.
The Project I used Cursor to build a native Android app for Todo/Pomodoro.I built my own split keyboardhttps://swiderski.tech/2025-03-18-split-keyboard-build/Tue, 18 Mar 2025 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2025-03-18-split-keyboard-build/Back in the day, when I was more actively playing the electric guitar, there was an interesting topic on my favorite guitar forum. Guitarists often add some attachment to the guitar but not to the amp or effects. And you need all of that to make your sound on electric guitar. One guy suggested that it’s because we touch the instrument with our hands all the time, its physical connection creating a mental bond.The Stoic Engineer's Guide to Technical Debthttps://swiderski.tech/2024-11-12-tech-debt-communication/Tue, 12 Nov 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-11-12-tech-debt-communication/TL;DR: Technical debt isn’t just a coding problem—it’s a communication challenge. Through better dialogue between engineers and management, we can transform it from a source of conflict into a strategic tool. This post explores practical ways to discuss, document, and decide which technical challenges are worth addressing.
The Encounter While waiting for my flight at the airport, I overheard a conversation that made me rethink how we handle technical debt.I'm done with multiplatform software developmenthttps://swiderski.tech/2024-11-01-done-with-multiplatform/Fri, 01 Nov 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-11-01-done-with-multiplatform/How I got here I had several chances to try a few ways of multiplatform software development. I used Ionic/Phonegap in the early days of mobile development. I enjoyed Flutter and bounced away from ReactNative. However, I was curious about the Kotlin Compose Multiplatform way. So I could use the technology I already know to build Android, desktop, and iOS apps, sharing internal logic, and UI elements.
It’s supposed to be stable on the desktop.Using Design Patterns as Communication Skillhttps://swiderski.tech/2024-10-13-Design-patterns-as-communication-skill/Sun, 13 Oct 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-10-13-Design-patterns-as-communication-skill/Hermits The man, the legend once said “I did not study computer science to work with people”, when asked to be present at a meeting. It’s a popular slogan present on coffee mugs and T-shirts of software engineers. At least in my country :) Are meetings and calls the only way we, engineers, communicate? If we limit those to the bare minimum, work like hermits in our basements, do not answer Slack messages or emails, and do not write any documentation, there is one way we do talk to each other, that we won’t get rid of.Breaking Free from Analysis Paralysishttps://swiderski.tech/2024-06-07-breaking-free-from-analysis-paralysis/Fri, 07 Jun 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-06-07-breaking-free-from-analysis-paralysis/Pet project Ever found yourself paralyzed by endless choices when starting a new project? I recently did, and it all began with binge-watching way too much ThePrimeagen. Inspired, I decided to learn GoLang, thinking it would be the perfect next step for my half-baked Vim skills. I had this pet project idea simmering for months, and GoLang seemed like a solid choice for the backend. But as I soon discovered, the journey from idea to implementation is riddled with obstacles, especially when you’re not a seasoned backend developer.Avoiding the pitfalls of Architecture Astronauticshttps://swiderski.tech/2024-05-14-architecture-astronautics/Tue, 14 May 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-05-14-architecture-astronautics/Exegi Monumentum I’ve crafted software more lasting than bronze,
Loftier than pyramids, resilient and strong,
Paraphrase of Horace’s ‘Exegi Monumentum’ poem.
Have you ever felt that way about your code? You’ve just created a piece of engineering art, not just some working solution that meets the requirements. You didn’t even look at the requirements, who needs them when you can focus on technology and architecture? Utilizing modern tech and approaches you’ve heard about at conferences and meetups.Veni, Vidi, Rewrittenhttps://swiderski.tech/2024-05-07-rewrite-seems-like-a-bad-idea/Tue, 07 May 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-05-07-rewrite-seems-like-a-bad-idea/What made me think Once I worked in a company, where we had native mobile apps for Android and iOS, including tablets. With mostly the same features. And even looked the same, meaning the Android app was imitating native iOS behaviors (for whatever reason). But since platforms are different, and Android had to mimic what iOS was getting for free, the development cycles were often out of sync. Which was not good when you made a media announcement about a new feature.Refactor to UseCaseshttps://swiderski.tech/2024-04-23-refactor-to-usecases/Tue, 23 Apr 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-04-23-refactor-to-usecases/Extract Method You know this basic refactoring technique, when you highlight a block of code and ask IDE to extract method? Or you do it manually, doesn’t matter. The point is to have human-readable focused methods instead of long blocks of instructions. One problem you may create is that the extracted method is still using fields or other methods from your class. It’s not pure. It may be, but simple extraction won’t do this.Developer's golden cagehttps://swiderski.tech/2024-04-08-developers-golden-cage/Mon, 08 Apr 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-04-08-developers-golden-cage/The observation Recently I started working on different tech stack. I’m primarily an Android developer, I know Kotlin, Java, and Groovy, using Jetbrains IDEs. Now I work on a backend project in TypeScript, with GraphQL API, using VS Code. Quite a difference.
I noticed how much I miss the static typing, the decent IDE support for types, and simple mocking for tests.
So I started thinking, is it TypeScript and VS code that sucks, or I just became too comfortable with the tools I know.Android Presentation Patterns: MVIhttps://swiderski.tech/2024-02-24-MVI/Sat, 24 Feb 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-02-24-MVI/I have already covered MVC, MVP, and MVVM. But…
There is another Just when you might think that MVVM is already sufficient, if not perfect, for the majority of cases, I introduce you to yet another MV-structured architecture. However, there’s a twist. This one, known as Model View Intent, is more fluid in nature compared to the previously mentioned patterns. In my opinion, it spans a spectrum starting from a basic MVVM with event/action communication flow and extending to Redux for global app state management, with the inclusion of feature or module-specific local state storage.Android Presentation Patterns: MVVMhttps://swiderski.tech/2024-02-09-MVVM/Fri, 09 Feb 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-02-09-MVVM/Evolution There is a clear trajectory in presentation pattern evolution - decreased coupling. In MVC, components were closely situated, with numerous direct interactions. MVP addressed this by introducing a standard interface structure. It’s now possible to test some interactions without relying on UI (although it may sound somewhat peculiar when discussing presentation patterns, I admit). Nevertheless, there are still some challenges, such as maintaining view state or artificial awareness of view lifecycle in MVP.Android Presentation Patterns: MVPhttps://swiderski.tech/2024-01-29-MVP/Sun, 04 Feb 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-01-29-MVP/But MVC does the job! When examining the MVC pattern as described here, it’s evident that the direct relationship between the View and Controller is problematic. Tight coupling results in challenging testing, where changes in one class necessitate updates in another, and it doesn’t scale well. In complex views, there can be multiple conditions for setting values in UI elements, depending on the current state of the UI and responses from the Model.Android Presentation Patterns: MVChttps://swiderski.tech/2024-01-27-MVC/Sat, 27 Jan 2024 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2024-01-27-MVC/Disclaimer: You probably shouldn’t use MVC in your Android app, there are much better solutions nowadays, that I mention later in this post.
Hello old friend Model-View-Controller is old indeed, for IT standards at least. Its origins are dating back to the development of Smalltalk-80 in the 1970s. You remember book “Design Patterns” by the Gang of 4? Yup, its mentioned there (and the book has examples in Smalltalk). It was introduced to address the challenges of creating graphical user interfaces.Continuous Integration and Deployment: A Developer's Best Friendshttps://swiderski.tech/2023-06-16-ci-is-your-friend/Fri, 16 Jun 2023 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2023-06-16-ci-is-your-friend/Intro In today’s fast-paced software development landscape, Continuous Integration and Continuous Deployment (CI/CD) have become indispensable tools for developers. If you are already familiar with this concept, this post may not be for you. However, if you’re new to CI/CD and want to learn what it is, how to set it up, and why it’s cool, you’re in the right place. CI/CD can eliminate some manual labor, streamline workflows, and make your development process more efficient and reliable.Would you go for mobile development again, after 10 years of doing it?https://swiderski.tech/would-i-do-mobile-again/Sun, 29 Jan 2023 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/would-i-do-mobile-again/Would I? I went to a meetup in my city last week and a guy I just met there popped a question after a while of conversation: with my experience, would I go for mobile software development again or pick a different area?
And it got me thinking Yes, I would do this again, I’m even more motivated now.
I remember how excited I was about the idea that you can write software for a tiny computer that lives in your pocket.Why should you use Tech proposalshttps://swiderski.tech/tech_proposals/Mon, 04 Apr 2022 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/tech_proposals/“Post-implementation documentation” As the lecturers maliciously called it when they checked university-grade projects, the idea of which was to plan a project, document it, and then implement it according to plan. In practice, I usually was implementing it first so it just worked, and then documented the result. And let anyone who hasn’t done that throw a stone first :)
Lecturers (in Polish universities) are often older people with no commercial experience, used to water-fall project planning.Android service binding fix for API 30https://swiderski.tech/2021-09-03-android-service-binding-on-api30/Fri, 03 Sep 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/2021-09-03-android-service-binding-on-api30/TL;DR If you want to use bindService() with external application services built with API 30 and above, add the attribute with the service package name to the client app manifest. More info in the documentation. Without it, bindService() will return False and the logs will tell you that an Intent-compatible service has not been found.
My repo with a working example
Problem I am recently working on communication between applications in Android.Command Pattern in Kotlinhttps://swiderski.tech/kotlin-command-pattern/Sun, 22 Aug 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin-command-pattern/Purpose The Command pattern wraps the request into a specific object that has all the information necessary to perform its task. You can think of it as the next stage of refactoring, where at first we extract the code to a separate method, and then to a separate object, taking the arguments needed to execute the request in the constructor.
Since the request is an object, it can be sent to a separate object (CommandProcessor) for execution, which allows for their queuing and facilitates logging events.Remote Loggerhttps://swiderski.tech/remote-logger/Fri, 06 Aug 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/remote-logger/Respect the Logcat The primary Android developer tool - Logcat. It is so widely used, always at hand, that it is difficult to imagine a situation where you have to work without it. However, I’ve found myself in such a situation. And I decided to write and share a tool that helped me survive this drama.
The challenge I was given a task to test a certain library, and since I work in #fintech, there often are some additional security checks.Mediator in Kotlinhttps://swiderski.tech/kotlin_mediator_pattern/Sat, 17 Jul 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin_mediator_pattern/Purpose We define a Mediator as an object encapsulating interactions between other objects (components) from a given set. The pattern limits, or even cuts off completely, direct dependencies between classes. Components can only communicate with each other through the Mediator, which becomes the central hub for information and control. The Mediator controls the flow of information using its internal logic.
This can be compared to the air traffic control tower (ATC).Decorator Pattern in Kotlinhttps://swiderski.tech/kotlin-decorator-pattern/Sat, 03 Jul 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin-decorator-pattern/Purpose The Decorator allows you to dynamically add or change the behavior of a specific object of a given class, without affecting other objects of the same class. In some cases, this allows you to significantly reduce the number of classes by moving the shared behavior to the Decorator, rather than extending the inheritance structure.
The decorator’s job is to “wrap” (hence another name: “Wrapper”) the original object and modify or overwrite its behavior.Adapter Pattern in Kotlinhttps://swiderski.tech/kotlin-adapter-pattern/Sat, 26 Jun 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin-adapter-pattern/Purpose As the name suggests, the Adapter pattern transforms the class interface to another one requested by the client. Using the Adapter allows incompatible classes to interact with each other. Another term for this pattern is Wrapper.
The adapter allows you to “map” an adapted interface (Adaptee) to the expected interface (Target) by the client class without adding another level of inheritance. Such inheritance would not always be possible if Target was a class rather than an interface.IntelliJ IDEA as a LaTeX editorhttps://swiderski.tech/intellij-latex-editor/Mon, 21 Jun 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/intellij-latex-editor/TL;DR: IntelliJ Idea is great for working with LaTeX. The basic functionality is provided by plugins, and a lot of additional automation can be set using File Watchers. I only miss displaying chapters and sections like in TexStudio.
LaTeX in IntelliJ IDEA I don’t work with LaTeX very often, but this format has many advantages, especially when working on longer written forms, containing a lot of graphics, diagrams, mathematical formulas, etc.Facade Pattern in Kotlinhttps://swiderski.tech/kotlin-facade-pattern/Mon, 07 Jun 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin-facade-pattern/Purpose The facade is a very basic pattern, whose task is to obscure the details of a group of classes - the module responsible for some functionality.
This can be compared to the facade of the building, which in itself has no function. The building consists of rooms, corridors, stairs, installations. It is the facade that indicates the entrance to the building, and the appearance may suggest its purpose.
The purpose of the pattern is to simplify customer access to the functionality of the obscured module.Strategy Pattern in Kotlinhttps://swiderski.tech/kotlin-strategy-pattern/Sun, 30 May 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin-strategy-pattern/Purpose The Strategy design pattern defines a family of algorithms and allows them to be used interchangeably. By algorithm, here I mean any logic, be it sorting, searching, or computing some value from data. It does not matter. It is, in a sense, an extension of the Template Method pattern, but inversely to it, Strategy prefers composition over inheritance. Strategies do not inherit from any specific class but only implement a common interface.Kotlin Template Methodhttps://swiderski.tech/kotlin-template-method/Thu, 13 May 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin-template-method/Purpose The template method is a very simple design pattern, that separates the shared class parts from distinctive ones. The core idea is to have an abstract parent class containing the algorithm steps and allowing inheriting classes to overwrite individual steps, but not the algorithm that uses those steps itself.
Think about Pizza - steps to make it are more-less the same, despite the type of pizza. You need to make a dough, apply sauce and ingredients, and finally bake it.Kotlin Abstract Factoryhttps://swiderski.tech/kotlin-abstract-factory/Tue, 02 Mar 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin-abstract-factory/Purpose The name of this pattern doesn’t suggest directly how it differs from other construction patterns, like Builder or Factory Method. In the Abstract Factory it’s not about creating a single object instance, but the whole family of connected objects. It still sounds like an ordinary Factory that can produce GUI controls for example. To have the Abstract Factory you should add another layer of abstraction and have a mechanism for creating GUI controls in few variants, like for Linux, Windows, or MacOS, but still have a generic API for the pattern client.Kotlin Factory Methodhttps://swiderski.tech/kotlin-factory-method/Fri, 26 Feb 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin-factory-method/Purpose Just like Builder, the Factory is a creational pattern. It describes an interface used to deliver instances. Instead of calling object constructor, we can call a method of the Factory which will generate interface implementation - the concrete object. What makes it different from Builder is that usually none or very few arguments need to be passed. It’s Factory’s job to fulfill all required by the object dependencies.
Factory can deliver objects of various types implementing the same interface just by the passed arguments.Kotlin Static Factory Methodshttps://swiderski.tech/kotlin-static-factory-methods/Sun, 14 Feb 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin-static-factory-methods/Purpose There is a concise error in the title, there are no static methods in Kotlin. But there are ways to achieve similar behavior to proposed by Joshua Bloch in Effective Java book - using static factory methods instead of constructors. This is also completely different from the Factory Method design pattern, don’t confuse those.
Long story short, these are methods that create object instances based on supplied arguments (or even without them) and that you can call from anywhere without the need of having an instance of a class that contains them.Kotlin Builder Patternhttps://swiderski.tech/kotlin-builder-pattern/Fri, 29 Jan 2021 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/kotlin-builder-pattern/Purpose Builder pattern is used to simplify creating complex objects with non-trivial building logic, or with many constructor parameters. It allows making immutable objects because all properties can be set by the Builder with no need to use object setters.
Builder sort of removes from the user the need to understand the internal object create implementation and guarantees correct object setup or returning an error.
The advantage of using Builder over traditional constructor is being able to pass many vararg arguments, because every Builder method can take one, while the whole constructor can take only one.Code Review Retrohttps://swiderski.tech/code-review-retro/Thu, 06 Aug 2020 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/code-review-retro/Importance of Code Review I sure do hope that I don’t need to convince anyone how important is the process of code review. If you need some guidelines on how to do it well I can recommend this Yelp blog post Here I’d just like to perform a retrospective of my own code review experiences.
A bit of history When I started my developer career in a rather small company - we were not doing code reviews.Ultimate Github Page Deploymenthttps://swiderski.tech/github-page-deployment/Tue, 04 Aug 2020 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/github-page-deployment/Mr Hyde Text you are reading is available on Jekyll blog hosted on GitHub, with the use of free Github Pages. Long story short: Jekyll is a template engine changing markdown documents on static HTML webpages, that you can then host anywyere, because you don’t need databases or server that has PHP or Python.
Usual process Normally process of adding new post looks like this:
I write markdown document with setting parameters like title, date and tags when I’m happy with what I wrote (never), I commit changes and push it to repository on GitHub.IntelliJ settings repohttps://swiderski.tech/intellij-settings-repo/Sun, 19 Jul 2020 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/intellij-settings-repo/My setup looks like this: I have Windows PC with Linux installed on a separate drive, also I have 2 MacBooks for work, and rarely used Linux ThinkPad. Keeping my IntelliJ settings in sync at all of those machines wasn’t really possible. If I find some setting that improves my workflow at my office machine, and after some time I want to work on a pet project on my own PC - I get this itch of not having this setting I had on MacBook… so I can export my settings and then import it.Shell script basicshttps://swiderski.tech/shellscriptbasics/Sun, 03 May 2020 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/shellscriptbasics/Why Recently I had to do some tasks that required me to fallowing a strict checklist. It wasn’t anything complex, no creativity required - just do as list tells you to do. I was also one of the creators of the checklist.
I had to do it a few times, almost regularly, sometimes in short notice but nothing extreme.
So obviously I made errors because I knew the checklist so well I wasn’t paying attention.Overlibrarizationhttps://swiderski.tech/overlibrarization/Sun, 20 Jan 2019 18:57:02 +0000[email protected] (Adam Świderski)https://swiderski.tech/overlibrarization/It seems great Write code once use it many times. Creating smaller pieces of code forces developers to write encapsulated software that follows single responsibility principle and is easy to test. Such code piece (AKA module) can be then published as a versioned artifact - a private library, that can be reused in more than one project. We are getting quality and reusability, how cool is that! Well that’s the theory.Android build hacks #3 - documentation with Dokkahttps://swiderski.tech/android-build-hacks-3-documentation/Mon, 05 Nov 2018 20:05:58 +0000[email protected] (Adam Świderski)https://swiderski.tech/android-build-hacks-3-documentation/This is third part in series of articles about Android build configuration, all parts will be linked right below.
#1 Build basics
#2 Build time optimization
#3 Documentation with Dokka
Homework Wait what? You’ve wrote beautiful self-documenting code and someone tells you to create DOCUMENTATION for it? It’s already there! Well named methods and variables, design patterns used. If anyone wants to know how it works, he just needs to read through it - well named method by well named method…Android Build Hacks #2 - build time optimizationhttps://swiderski.tech/android-build-hacks-2/Sun, 16 Sep 2018 10:36:34 +0000[email protected] (Adam Świderski)https://swiderski.tech/android-build-hacks-2/This is second part in series of articles about Android build configuration, all parts will be linked right below.
#1 Build basics
#2 Build time optimization
Motivation Main reason I’ve been interested in build config tricks was to speed up development builds. As developer I’m building apps many times each day, often just to change one small thing and check if it works. Each second took of build time means a lot if you build often.Android Build Hacks #1 - build basicshttps://swiderski.tech/android-build-hacks-1/Mon, 23 Jul 2018 22:24:27 +0000[email protected] (Adam Świderski)https://swiderski.tech/android-build-hacks-1/This is first part in series of articles about Android build configuration, all parts will be linked right below.
#1 Build basics
#2 Build time optimization
Build configuration! This is not the most exciting part of software engineering. Each technology, language, framework has it’s own rules so there are no universal patterns, Uncle Bob will not help us here. But just like this worker on left, tightening the screw of Empire State Building skeleton, developers should polish their builds - build config itself is not the application (like skeleton is not the building), but application is useless if you cannot build release version.Hacking Android app with Fridahttps://swiderski.tech/android-frida-hacking/Sat, 31 Mar 2018 17:43:37 +0000[email protected] (Adam Świderski)https://swiderski.tech/android-frida-hacking/Side image is of course Frida Kahlo auto portrait, besides her name she has no connection with topic
Motivation Lately I attended to Sekurak hacking party - it’s event organized by Sekurak where they show how easy is to hack stuff like IP cameras, routers, phones. I guess Sekurak is known mainly in Poland, but they are real professionals in area of security. During this event Michał Bentkowski was showing how easy it is to spy on Android app communication and also change app behavior using tool named Frida.Nyan your terminalhttps://swiderski.tech/nyan-your-terminal/Sun, 04 Mar 2018 08:23:03 +0000[email protected] (Adam Świderski)https://swiderski.tech/nyan-your-terminal/Disclaimer #1: I’m an Android developer, not sysadmin. I use terminal to help me with my workflow, not as my main tool, so please keep this in mind :)
Disclaimer #2: This is based on Linux (Ubuntu), but most stuff should work on OSX also.
Terminal? If you are a developer (and not a Windows peasant), you might had to use terminal for day to day stuff like installing node.js or python packages, or running scripts.Android local libraries with Mavenhttps://swiderski.tech/android-local-maven/Sun, 21 Jan 2018 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/android-local-maven/Intro Have you ever created Android library? You know, when you are working on specific functionality in some project and get enlightenment “hey, I could use this in some other project!”. No? Well… you should - at least sometimes :) I don’t mean creating new ultimate architecture framework every week (we are not JavaScript developers after all), but writing simple tools that you know how to use and that will make your work easer on future projects.Color changing progress barhttps://swiderski.tech/color-changing-progress-bar/Sun, 24 Apr 2016 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/color-changing-progress-bar/In my project I wanted to have progress bar that shows how much time you have until your food is not good to eat any longer. I’m not UX specialist, but I know that usually when you see green color you think it’s all ok and red is some danger. So I decided to have small progress bar in each product list item showing time till it should land in trashcan.First posthttps://swiderski.tech/first-post/Sat, 16 Apr 2016 00:00:00 +0000[email protected] (Adam Świderski)https://swiderski.tech/first-post/This is first post, so I just want to say HI!
Currently I’m working on my graduation project at Poznań University of Technology, that contains Android app written in Kotlin, and sever app in Python with Django. So if you are interested in how I will make this work, stay tuned :)
Project name is Frigo and logo looks like that:
Hopefully it will help you manage your food better.