<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Omar Albeik</title><description>Software engineer · product designer · digital transformation advisor</description><link>https://omaralbeik.com</link><language>en</language><atom:link href="https://omaralbeik.com/en/rss.xml" rel="self" type="application/rss+xml"/><atom:link href="https://omaralbeik.com/ar/rss.xml" rel="alternate" type="application/rss+xml" hreflang="ar" title="عمر البيك"/><lastBuildDate>Mon, 03 Aug 2026 00:00:00 GMT</lastBuildDate><item><title>Binding libVLC directly from Swift 6</title><link>https://omaralbeik.com/en/blog/binding-libvlc-directly-from-swift-6</link><guid isPermaLink="true">https://omaralbeik.com/en/blog/binding-libvlc-directly-from-swift-6</guid><description>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&apos;s own source, and what that costs.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><category>software</category><category>engineering</category></item><item><title>Namespace your Swift extensions</title><link>https://omaralbeik.com/en/blog/protocol-oriented-extensions</link><guid isPermaLink="true">https://omaralbeik.com/en/blog/protocol-oriented-extensions</guid><description>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.</description><pubDate>Sat, 19 Feb 2022 00:00:00 GMT</pubDate><category>software</category><category>engineering</category></item><item><title>Enforce SSH instead of HTTPS for Git operations</title><link>https://omaralbeik.com/en/blog/enforce-ssh-instead-of-http-for-git-operations</link><guid isPermaLink="true">https://omaralbeik.com/en/blog/enforce-ssh-instead-of-http-for-git-operations</guid><description>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.</description><pubDate>Mon, 23 Aug 2021 00:00:00 GMT</pubDate><category>software</category><category>engineering</category></item><item><title>Three comparisons the standard library already does</title><link>https://omaralbeik.com/en/blog/let-the-standard-library-compare</link><guid isPermaLink="true">https://omaralbeik.com/en/blog/let-the-standard-library-compare</guid><description>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.</description><pubDate>Mon, 16 Dec 2019 00:00:00 GMT</pubDate><category>software</category><category>engineering</category></item><item><title>Property observers already give you the old and new value</title><link>https://omaralbeik.com/en/blog/use-property-observers</link><guid isPermaLink="true">https://omaralbeik.com/en/blog/use-property-observers</guid><description>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.</description><pubDate>Fri, 06 Dec 2019 00:00:00 GMT</pubDate><category>software</category><category>engineering</category></item><item><title>A typealias can take a type parameter</title><link>https://omaralbeik.com/en/blog/generics-in-typealias</link><guid isPermaLink="true">https://omaralbeik.com/en/blog/generics-in-typealias</guid><description>Naming a completion handler once and writing Handler&lt;Post&gt; at each call site. It gives you readability and a single place to change the signature. It does not give you type safety.</description><pubDate>Thu, 05 Dec 2019 00:00:00 GMT</pubDate><category>software</category><category>engineering</category></item><item><title>When to use a safe collection subscript</title><link>https://omaralbeik.com/en/blog/safe-collection-subscript</link><guid isPermaLink="true">https://omaralbeik.com/en/blog/safe-collection-subscript</guid><description>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.</description><pubDate>Fri, 12 Jul 2019 00:00:00 GMT</pubDate><category>software</category><category>engineering</category></item></channel></rss>