Metaprogramming in Swift, and the issue with Process and relative paths Find out why your Swift CLI tool isn't capable of dealing with relative paths, and how to solve it!
Convert between image (pixels) and scaleAspectFit UIImageView coordinates like a champ! When working with images in iOS, it's sometimes necessary to convert between an image's pixel coordinates and the coordinates of the UIImageView that displays the image. Here's how to do it.
Life is short, and I am wasting mine away I envy most lead fictional characters of well-enough written stories. With their foes, their moral dilemmas, the high(ish) stakes. Wether they live in a manichean or a complex world, what matters usually is obvious. In these worlds, one knows what they have to care about if they want Here?
Making a zoomable Image, in SwiftUI This should have been simple, but it wasn't. So if you too are having a hard time making a zoomable image in SwiftUI, come on in!
A few awesome useful and nice to have tools Intro. Mainly Mac-oriented Homebrew My go-to tool to install pretty much anything on my Mac, Homebrew is a nearly ubiquitous tool in the Mac-using developer community. Don't believe me? It can be used to install every single macOS app listed here. And that includes the awesome screensaver listed at the
Preserve your images' transparency when saving and sharing them, in Swift Loosing your rounded corners or transparent background when saving an image to the user's photo library or sharing it with UIActivityViewController? It's because it's be turned into a JPEG. Here's how to solve that.
Everybody's doing it (a Stable Diffusion test post) A few years back, in February 2019, I, like quite a handful of people, heard for the first time of OpenAI's GPT-2. And while it sure was impressive, it only gave us a glimpse of what GPT-3 would be able to do a year later. Impressive wouldn't start to describe
From a base64 API Key to a json file, in bash, on macOS While working on a client's app's CI pipeline, I needed to use an API key. However, it was stored as a base64 environment variable, when the tool I needed to use required it to be plaintext in a JSON file. Fun times.
We aren’t that remarkable I've heard quite a few times that we, as a species, are terrible, destroying the Earth, ourselves, and that we are, all in all, the worse. That's assuming a lot. First and foremost, that we are as smart and great as we think ourselves to be.
Escape a newline in bash on macOS While setting up a new step for a client's CI pipeline on a macOS agent, I needed to export an API key containing line breaks to a JSON file. Meaning I had to escape line breaks, in bash, on macOS. Turns out, it's not as easy as it sounds. Who would've guessed?
Build OpenCV Contrib as a .xcframework, for iOS, on a M1 We needed an OpenCV Contrib module in an iOS app, using Swift Package Manager. I thought the hardest part would be using OpenCV. How wrong I was.
Work is a market With remote work on the rise, I've seen people debating the fairness of companies adjusting pay based on one's location and cost of living. As if there ever was an intrinsic justification to compensation. Spoiler: there isn't.
Add a height-flexible placeholder to your UITextView Once you have tasted SwiftUI, this kind of UIKit lacking makes you wish you could refactor a client's whole codebase at a snap from your fingers. At least the UI side of it. But, alas, there is no magic spell for that. Yet. What kind of lacking? UITextView doesn't have
Prevent TypeORM from eating up all your memory Recently, a client told me that the code I had written to sync their systems and a new datasource blew up their AWS EC2 instances. Apparently, the synchronisation engine kept getting killed for using up too much memory. More than a few gigabytes, actually. To sync a few tens of
Fixing the "this cannot include CR/LF" error when doing Basic auth in Ruby Sometimes, opting for sensible defaults seems obvious. Yet, sometimes, the default and most obvious option isn't the most sensible.
Failing to install Windows on your Mac, after Bootcamp let you down, part 1 Where we take the world down with us, and burn it all to the ground. All to play Portal 2. Seems oddly fitting.
Complex-ish SQL queries in Typescript using TypeORM I have, as a teenager, fiddled around with phpMyAdmin when fooling around with WordPress and OGSpy, back when OGSTeam still relied on SVN for versioning, and I didn't know crap about development, let alone architecture.
Print class-validator validation errors in NestJS A simple way to print any and all errors in Nest.js, for people who aren't experienced with it.
Validate a nested array of objects GET query parameter using a DTO & class-validator in NestJS Sometimes, the smallest things take up quite a bit of time. This time, it was a simple serialisation issue.
It comes down to people buy-in The thought came down onto me as I was leaving a job interview. I don't know where it came from. I didn't care. It was here now. And it was obvious. Whatever the idea. Whatever the project. It all comes down to people buy-in.
Everything to be said has already been said… There’s a quote by André Gide, a French author, that goes along those lines: "Everything to be said has already been said. But since nobody was listening, it has to be said all over again" ...
How to retrieve a nested relationship using TypeORM You have a TypeORM entity. It has a relationship. The relationship entity has a nested relationship to a third. And you need that third entity to save the world and crack the bank vault open. How the hell do we get it?
The dog and the dragon This story comes from a book, where one of the protagonists tells it to another. One who direly needs to hear it. And little did I know; so did I. This is a story that disturbed me greatly. It almost made me cry. And I couldn't stop from thinking about
On blanks and "hum"s… When we don't know, when we need to take some time to consider our answer, to build it. We own it. We own it, we shut up, and we take the time it will take. It's not an issue. On the contrary!
How to export one of those pesky weird PDF forms as a regular PDF Failing to open a PDF form using Preview? Want to export a PDF form to a regular PDF (on macOS)? Here's the solution you weren't looking for.
Make your UIButtons come to life After giving our UIViews' both shadows AND rounded corners, today we will learn how to animate UIButtons and make them visually respond to our users' touch!
Covid vaccines reticence is a trust issue I have a piece on how most things we try to accomplish in life often come down to people buy-in that has been sitting as a draft for over a year. I still hope to actually finish and publish it here some day in the near future, but answering to
No space left on your Cloud9 environment? Here's how to solve that While using Cloud9, and installing node dependencies, my instance ran out of space. I couldn't finish setting up my project, and the terminal's autocompletion was dead in the water.
Getting the last two values from an RxSwift Observable I really can't remember why, but at some point I needed to get a RxSwift Observable's last two values, to compare them and decide what to do next.
A world of waste Do you want to sell sugar water for the rest of your life or come with me and change the world?
Freelance Firebase Extension Developer @Purchasely Period: 2021/05 - 2021/07 • Technologies: Firestore, Firebase Cloud Functions, Firebase, APIs & Node.js • Language: Typescript
Freelance Full Stack Developer @Theodo Period: 2021/04 - 2021/06 • Technologies: Firestore, Google Cloud Functions, GCP, APIs, Node.js, React • Language: Typescript
Solve most of your Xcode problems through Cargo Cult If you are an iOS or macOS developper, you probably work with Xcode. And if you work with Xcode, you've most probably had some weird times where, suddenly, things just stopped working. Here's how to solve that
Separate concerns and optimize client performances with CQRS using Firestore & Firebase Cloud Functions Optimize your mobile app's performances and run "big" and "complex" queries in NoSQL, using CQRS & Serverless! (in our case, Firestore & Firebase Cloud Functions)
Add a bottom divider to your SwiftUI view! Where we learn to look around thoroughly before blindly trusting strangers.
Give your UIViews and UIButtons some rounded edges and a shadow! Somehow, making a button rounded, and then adding a shadow to it, seems to be more difficult than it should. Here's how to do it in Swift!
Life Over The Air Ever heard of the School of the Air? It's an Australian thing, from deep within the Australian outback. A peculiar and quite unusual one at that, until recently.
Make your Firebase Storage files available on upload Ever uploaded a file to Firebase Storage, only to be hit with a 403 error when trying to access it? Here's how to get a publicly accessible URL for the file you just uploaded.
Memoize your API calls in Swift using functions' scopes! Improve your iOS app's performance and battery usage by not repeating expensive computation and network calls, using memoization, in Swift!
Stop hard coding your cells identifiers Tired of having your app crash on runtime because of a misspelled a tableView's or collectionView's cell identifier? Learn here how to stop that from happening, today!
Freelance iOS Developer @Deleev Period: 2020/02 - 2021/07 • Technologies: APIs (integration), RxSwift, UIKit • Language: Swift
What do to when your Node.js code crashes because of a circular JSON You're trying to figure out what some object looks like, and since you're not running your code locally you don't have access to a proper debugger. So you print it. And your whole Node.js app crashes. What do you do?
Scrap an Instagram’s post’s author; a gentle introduction to web scraping in Node.js Want a 'soft' introduction to web scraping? Need to get some data from an Instagram post? Here's how to get it done, in Node.js, using cheerio!
Swiftly deal with pagination in Swift Not satisfied with how you're handling pagination in your Swift iOS app? Pretty sure there has to be a better way to paginate your UICollectionView or UITableView? So did I, and here's how I did it!
Localize your push notifications in Node.js Being a backend developer, there's an unusual thing with push notifications. Devices display what we send. The clients don't have a say in it; they can't remodel and transform them. Meaning, we basically have to do some UI (User Interface), and localize it.
Upload a remote file to Firebase Storage (in Node.js) Struggling to upload remote files to Firebase Storage? Running on Node.js? You're in luck!
Always handle your table & collection view cell selection properly, using functions When writing iOS, you will always end up using UITableView or UICollectionView. With them come cells, delegates, datasources, cellForRow(at indexPath:), didSelect,... I've often seen it become (and inherited) an ugly mess. Not anymore.
Preventing distractions on macOS If you're like me, notifications, alerts and boucing things when working is at least annoying, and down right distracting when you're having a hard time focusing. Like I am right now, which is why I'm writing this post instead of actually working on my side project.
Add an Apple App Site Association (AASA) to your Wix, Squarespace or whatever website, using Cloudflare Workers I currently work at Spotr [https://spotr.app], a company building a mobile app. We rely on Wix for the landing page, for the simple reason that it's simple enough to use for the rest of team to update it and design it themselves, letting me focus on back-end and
How to debug your JSON in Xcode when JSONDecoder fails Sometimes, JSONDecoder fails. And when that happens, it can be difficult to figure out what went wrong. Not if you can print Data instances!
How to elegantly make sure you only setup your ViewController's UI on viewDidLoad When handling navigation, we often end up having to pass some sort of state to our view controllers, wether directly or indirectly. Setting endless optional publicly exposed properties feels dirty and is a pain, while setting @IBOutlets before viewDidLoad is crash prone. Let's solve that together.
Backend Developer @Spotr Period: 2019/06 - 2020/02 • Technologies: Firebase Firestore, Firebase Cloud Functions, Firebase Storage, Cloudflare Workers, Node.js, CQRS, APIs • Language: Typescript
Full Stack Developer @Vocalcom Period: 2019/04 - 2019/06 • Technologies: React, jQuery, Bootstrap, CSS, .NET • Languages: JavaScript, TypeScript, C#
Dynamize (aka variablize) your AWS deployment account using the Serverless framework Last time we dynamized your serverless resources based on your deployment stage. Now we'll dynamize your AWS deployment account! Yes, that's right, automation all the way!
Setup CORS in Serverless AWS Struggling with CORS? Wondering how to get rid of those 'the preflight request has failed' or that 'origin https://whatever.com is not allowed' errors? Let's sort this together.
Dynamize (aka "variabilize") your serverless resources' parameters with the Serverless Framework! Do some proper namespacing for your DynamoDB tables and kinesis streams, avoid collisions between your features in ci and automatically clean up after you!
Block ads and trackers on your Mac with Little Snitch Can't figure out which ad-blocker you can trust? Tired of seeing these mattress ads just after you bought one online? Look no further and adopt LittleSnitch!
Use Cognito Federated Identities to authorize API Gateway access... and test it without an SDK! You're building a Serverless microservice on AWS, authenticated via Cognito Federated Identity, and would like to test it? Read along!
Freelance iOS Developer @Travelcar Period: 2019/01 - 2019/02 • Technologies: UIKit, CoreBluetooth, private SDKs integration, APIs (integration) • Language: Swift
Freelance iOS Developer @Deleev November 2018 to September 2019 (11 months) App: La Belle Vie Developing new features and maintaining a Swift iOS app
Don't think twice: Caching AWS Lambda behind a custom domain with CloudFront Cache your AWS Lambda functions results and make your life easier with a custom domain using Cloudfront!
␛the serverless vendor lock-in You've learned about serverless but want to avoid getting locked-in? Already got burned and promised to yourself it wouldn't happen again? Come aboard!
Using rewire with Jest in Typescript Want to test some private methods or mock unexposed functions? Having trouble using rewire in Typescript Land? You are in the right place.
Thrice blessed, Oh Core Data ! I was told to stay as far away as I could from Core Data. Some hate the poor thing, and others... don't really dislike him? Let's add my own story to this.
Freelance iOS Developer @Mastermind September 2018 (< 1 month) Support and reinforce the existing team to get the app's redesign implemented before beta release. Mostly updating UI, working with XIBs and Storyboards, with a little animation on layers (CoreAnimation)
Freelance iOS Developer @Spotr January 2018 to April 2018 (4 months) I revamped the whole app using RxSwift and MVVM-C, smoothing the performances, and improving stability, as well as adding different metrics to analytics (such as detecting screenshots and where they were taken) and some features (live likes and comments using Pusher.io).
Mobile Developer @Devoteam Digital Factory Period: 2017/05 - 2017/09 • Technologies: UIKit, RxSwift, some Android frameworks • Language: Swift, Java
iOS Developer @Spotr July 2016 to May 2017 (11 months) Developper of the Spotr app, written in Swift 3, using Carthage as a dependency manager, Alamofire for the network requests, along with SDWebImage and a few other frameworks. It also features a backend integration (Stamplay) through RESTful API, and Algolia (via SDK).