---
title: Blog
author: Omar Albeik
language: en
canonical_url: "https://omaralbeik.com/en/blog"
translation_url: "https://omaralbeik.com/ar/blog"
source_url: "https://omaralbeik.com/en/blog.md"
---

# Blog

- [Binding libVLC directly from Swift 6](https://omaralbeik.com/en/blog/binding-libvlc-directly-from-swift-6): An IPTV client needed Picture-in-Picture, and the VLCKit line it ran on does not have it. Notes on owning a C engine rather than consuming one — pointer isolation, lifetimes nothing checks, a patch set carried against VLC's own source, and what that costs. (article, 3 August 2026) [Markdown](https://omaralbeik.com/en/blog/binding-libvlc-directly-from-swift-6.md)
- [Namespace your Swift extensions](https://omaralbeik.com/en/blog/protocol-oriented-extensions): SwifterSwift passed five hundred extensions and began colliding with other libraries. A member added to a type you do not own is not scoped to your library at all — it is global, and no module qualifier reaches it. (article, 19 February 2022) [Markdown](https://omaralbeik.com/en/blog/protocol-oriented-extensions.md)
- [Enforce SSH instead of HTTPS for Git operations](https://omaralbeik.com/en/blog/enforce-ssh-instead-of-http-for-git-operations): GitHub stopped accepting passwords for Git in August 2021. A token in a credential helper solves the typing but not the expiry; a key solves both, and reaches the HTTPS URLs you did not write yourself. (note, 23 August 2021) [Markdown](https://omaralbeik.com/en/blog/enforce-ssh-instead-of-http-for-git-operations.md)
- [Three comparisons the standard library already does](https://omaralbeik.com/en/blog/let-the-standard-library-compare): Finding the first match, ordering by more than one key, and checking an index against a range. The hand-written version of each is longer, and two of the three are also slower. (note, 16 December 2019) [Markdown](https://omaralbeik.com/en/blog/let-the-standard-library-compare.md)
- [Property observers already give you the old and new value](https://omaralbeik.com/en/blog/use-property-observers): willSet and didSet take a parameter, and both have a default name — so naming them explicitly is usually redundant. The rules about when they do not fire matter more. (note, 6 December 2019) [Markdown](https://omaralbeik.com/en/blog/use-property-observers.md)
- [A typealias can take a type parameter](https://omaralbeik.com/en/blog/generics-in-typealias): Naming a completion handler once and writing Handler<Post> at each call site. It gives you readability and a single place to change the signature. It does not give you type safety. (note, 5 December 2019) [Markdown](https://omaralbeik.com/en/blog/generics-in-typealias.md)
- [When to use a safe collection subscript](https://omaralbeik.com/en/blog/safe-collection-subscript): The extension turns an out-of-bounds crash into nil. That is useful when the index comes from outside your own code, and hides a logic error when it does not. (note, 12 July 2019) [Markdown](https://omaralbeik.com/en/blog/safe-collection-subscript.md)
