RSSAmplifier

Blog

Marcin Krzyżanowski

Fix it

blog.krzyzanowskim.comRSS feed ↗15 posts

Latest posts

Shipping Snake Oil

“Shipping Snake Oil” recounts how he created a fake AI project and watched it trend on GitHub -drawing millions of views and demands for nonexistent source code - as a satire of the AI hype cycle.

TextKit 2 - the promised land

After 4 years with Apple's TextKit 2: The promised 'better' text engine has unstable scrolling, unreliable height estimates, and viewport issues so bad that even Apple's TextEdit suffers from them. Good architecture, but the implementation makes it frustratingly difficult for real-world apps.

Local unit tests with Xcode

Put unit tests next to tested Swift code, and run tests from the same Xcode target.

CoreText Swift Academy - part 3

In Part 2 , I discussed selected font metrics. Now let's see how to layout text line or lines. Text Layout Text layout is non-trivial task. CoreText provides handful of useful functions to layout text in a rectangle frame, or along a custom path. The most common usecase is

CoreText Swift Academy - part 2

In Part 1 , I created a label view, where I draw a text in it. Now let's see what happened there: Font & Attibuted String How about font? Font is important part of drawing text. CoreText relies on Attributed String. Simple NSAttributedString() instance without any attribute, defaults to System

CoreText Swift Academy - part 1

Ever wanted to layout letters? implement label view? create text edit component from the ground? bear with me. CoreText is low-level framework for laying out text and handling fonts. Low level like "C language level low", but also like "Font glyph level low". What CoreText

Use consumer rights to refund for faulty MacBook - diary

In February 2020, a keyboard in my MacBook Pro 15.4-inch (model 2018) has broken down. I noticed typical repeating keys. Nothing new for the MacBook with the butterfly keyboard. I also noticed I have screen scratch (that I connect with staingate ). I bought it in July 2018, which

JSON Coding is what we need 90% of the time

Let's face the truth. If happen you work with any other data format than JSON, you're in a 10% niche (estimates may vary). Even though the default JSONEncoder for Swift Codable is not the fastest - it's soooo convenient to use. Just make a struct or a class

URL Bookmarks: yes and no

The way URL Bookmarking is designed and implemented, makes it untrusty source of truth. It can be esily misused, that makes bookmark useless.

The lost art of legendary Apple UX

Mobile experience Apple changes Terms of Service and me, as a paid Developer Program Membership have to accept new agreement. So I open App Store Connect app - introduced in Jan 4, 2018 - so pretty new product. Not new enough to display web view with an agreement text and "Accept&

@rpath what?

what? In short: dynamic linking happened. Dynamic linking - what it is? It's an operation that happens when part of the code spreads across different files (called libraries), and the binary content of the library is loaded in runtime. A dynamic linker (which is a system tool) finds a symbol

Dealing with Swift toolchain

Design a project that uses different versions of swift for different parts of the project. Combine multiple toolchains together and use it.

Any[Object]

You use Swift AnyObject wrong. Don't use AnyObject as a generics constraint. Don't do "is AnyObject", "as? AnyObject" to check if a variable is a class type. Don't use "AnyObject". Use "class" for a class-only protocol. Use "Any".

Swift Runtime Performance - talk

Last week I had my last appearance with talk about Swift runtime performance . I enjoy the topic, and I had a ton of fun with preparing the speech, with the on-stage experience and afterward discussions. Since I'm done with this talk, I'd like to make a note

Funding (my) OpenSource work

Yes, ObjectivePGP is backed by the organization of a Fortune 500 company founder. We signed a 1-year long grant agreement, two months ago, and I'm delighted with it. What does that mean? That happened. My three years old project got funding. Around May we had the first talk