A collection of articles I wrote. Feel free to send me corrections.
Flutter for SwiftUI Developers: A "small" introduction into Flutter for SwiftUI developers. Spoiler: The two are quite similar, yet different.
[read the article ...]Model View Controller for SwiftUI: Takes a look on how to use the good old MVC to structure SwiftUI applications, with or without a small microframework.
[read the article ...]SwiftUI Tools w/ just SwiftPM: Shows how to use the new @main Swift attribute to build an app with just Swift Package Manager, i.e. without Xcode.
[read the article ...]Processing DocC: Looks at the structure of Apple's new DocC documentation system, shows how to load DocC archives in Swift and how to export them as a static wesbite.
[read the article ...]WebAssembly in Swift: Embedding and running WebAssembly (Wasm) modules in a Swift program. Using Wasmer, a runtime for Wasm, wrapped in a simple Swift API.
[read the article ...]Swift XML-RPC: XML-RPC is a funny little protocol from 1998 to call HTTP endpoints. Due to its wide availability across different languages it can still be useful. We are going to have a look at XML-RPC and write a small client and server in Swift.
[read the article ...]Intro to Network.framework: The framework is Apple's implementation of the Transport Services API (taps), which is intended to replace the BSD Sockets API. We show how to implement TCP servers and provide an HTTP protocol implementation (NWHTTPProtocol) for it.
[read the article ...]SwiftBlocksUI: Slack can be enhanced with interactive dialogs and dynamic, self-updating, messages. Buttons, Pickers, TextFields and more.
Using SwiftBlocksUI these widgets can be built declaratively, "SwiftUI style".
[read the article ...]Introducing Direct to SwiftUI: Direct to SwiftUI is an adaption of an old WebObjects technology called Direct to Web, but for SwiftUI. Instant CRUD apps, configurable using a declarative rule system, yet fully integrated with SwiftUI.
[read the article ...]SwiftUI Rules: SwiftUI supports a feature called the Environment. It allows the injection of values into child views without the need to explicitly pass them along. SwiftUIRules adds a declarative rule system, think: Cascading Style Sheets for SwiftUI.
[read the article ...]The missing ☑️: SwiftWebUI: At WWDC 2019 Apple announced SwiftUI. A single “cross platform”, “declarative” framework used to build tvOS, macOS, watchOS and iOS UIs. SwiftWebUI is bringing that to the Web ✔️
[read the article ...]@dynamicCallable Part 3: Mustacheable: Mustache templates as a function (short: MaaF).
The final part in our Dynamic Callable article series: This one shows how one can expose templates languages like Mustache into regular Swift functions.
[read the article ...]@dynamicCallable Part 2: Swift/ObjC Bridge: A tutorial showing how to build your own Swift/Objective-C bridge, again using the new Swift 5 Dynamic Callable and Dynamic Member Lookup features.
[read the article ...]@dynamicCallable: Unix Tools as Swift Functions: A new Swift 5 feature are Dynamic Callable's. We combine this with the related Dynamic Member Lookup to expose the filesystem and Unix shell commands as regular Swift functions.
[read the article ...]Chat with your Raspi: Learn how to control LinkerKit components attached to a Raspberry Pi in Swift. We demo how to use Swift NIO and swift-nio-irc to build a small chatbot talking to the components.
[read the article ...]An Introduction to WebObjects, in Swift: We'll explore how WebObjects worked, what made it great (MVC on the web!) and why it isn't much relevant anymore. All in Swift, using the SwiftObjects implementation of the WO API.
[read the article ...]Bringing Swift NIO to the iPhone: In this article we look at how you can run a simple Swift NIO server on a mobile device.
We implement the on-device server part in µExpress and consume the output in a simple WebKit view.
[read the article ...]A µTutorial on Swift NIO: In a surprise move, Apple released Swift NIO on March 1st 2018, a Netty implementation for Swift. This article looks on how to use that package, and we build a tiny but useful Node-like web framework along the way: µExpress.
[read the article ...]Using the Swift Server API 0.1.0: The Swift Server APIs Project is an effort the provide a common HTTP implementation to be used in the various Swift server frameworks. This is a small tutorial on how to use the API to write a small HTTP endpoint in Swift. And as a bonus: how to host it as an Apache module.
[read the article ...]Swift macOS to RaspberryPi X toolchain: Want to use Swift on RaspberryPi? Not looking forward to wait ages until Swift compiles finish on the board? Then this article is for you. It shows you how to setup a Swift ARM cross compilation toolchain on your Mac.
[read the article ...]mod_swift Hello World: mod_swift allows you to write regular Apache modules in plain Swift. Just compile a Swift Package Manager project using `swift apache build` and it'll produce a neat, compiled Apache module for you.
[read the article ...]Noze.io for Non-Node people: Noze.io is an attempt to carry over the Node.js ideas into pure Swift. This article is tiny intro on how asynchronous pull streams work. And yes, there is also the reverse: Noze.io for Node people.
[read the article ...]Using the SOPE Rule Engine: A very cool but little known feature available in WebObjects - and in SOPE - is the EOControl based rule system. It is used extensively by the DirectToWeb framework (part of WebObjects 4.5) to write database based web applications which require no code and are just composed of a set of rules plus a database model.
[read the article ...]Writing an XML-RPC Client in Objective-C: A small introduction on how to access XML-RPC web-services in Objective-C using NGXmlRpc. The XML-RPC support in SOPE is scattered in some frameworks (for good reasons 😉) They are: libXmlRpc, libNGObjWeb and libNGXmlRpc. The XML parsing is actually done in sope-xml/XmlRpc.
[read the article ...]WO Templates vs XML WOx Templates: SOPE currently allows for two different template formats, the traditional WebObjects one (with the # addition) as well as a new XML based one. This document tries to outline some pros and cons for each.
[read the article ...]SOPE Methods: How to declare SOPE methods. What methods a SOPE object provides is specified in the product.plist of a SOPE "product bundle". For each method SOPE will register a callable "invocation" object in the appropriate SoClass. This is different to Objective-C and similar to Python (methods are just regular objects!).
[read the article ...]Profiling OGo Instances: OGo has quite a lot of profiling capabilities. In case someone is interested ... profiling information for OGo is exported using the "WOStats" direct action, e.g.: http://host/OGo/x/WOStats it returns an XML document (styled to a table on Internet Explorer 5+) which contains extremely useful information after an OGo instance is run "warm".
[read the article ...]OGo Document Storage Plugins: The document storage of OGo projects is implemented as a server based plugin API. This contains some more information on that. An OGo "project" is a groupware object that acts a central collection of other OGo objects and has associated tasks, contacts, notes, .. - and an associated document storage.
[read the article ...]How many users can OGo support?: Some information on the very common question of how many users OGo can support ... Every now and then people ask the (annoying 😉) question: Q: "What I would like to know is does anyone have a definitive answer to how many people OGo can support before it starts to suffer from general slow downs?".
[read the article ...]Telephony Integration with OGo: OGo can integrate with telephony systems in some ways ... All (most of?) the phone numbers are already generated by a single dynamic (template) element "SkyDialNumber". The source is located in WebUI/Common/OGoUIElements/SkyDialNumber.m.
[read the article ...]