Technology Tales

Notes drawn from experiences in consumer and enterprise technology

23:35, 13th August 2025

This is a public GitHub repository that serves as a collaborative platform for sharing SAS Studio Custom Steps, which are user interface tools that enable SAS Studio users on SAS Viya platforms to complete specific tasks through standardised workflows. The repository contains over 100 custom steps spanning various categories including data quality operations, natural language processing, computer vision, machine learning, cloud integration, file management, and synthetic data generation. Contributors have developed tools for tasks such as data anonymisation, sentiment analysis, image processing, database connections, API interactions, and automated report generation. The repository operates under an Apache 2.0 licence and welcomes community contributions through established guidelines, providing comprehensive documentation and tutorials to help users implement these custom steps within their SAS Studio environments. Recent activity shows ongoing maintenance with regular updates to documentation, bug fixes, and the addition of new functionality, particularly in areas like large language model integration and advanced analytics workflows.

23:34, 13th August 2025

The SAS Airflow Provider is an Apache 2.0 licensed open-source package that enables users to execute SAS Studio Flows and Jobs within Apache Airflow workflows. The provider offers comprehensive functionality including the ability to run SAS Studio Flows stored on file systems or in SAS Content, selection of compute contexts for execution, optional return of SAS logs to Airflow, parameter specification for code generation, proper handling of return codes with exception raising for failed flows, and flexible authentication through either OAuth tokens or username-password combinations. Installation can be accomplished through PyPI or by building from the repository sources, whilst connections to SAS Viya require configuration through the Airflow interface with host, login credentials, and optional OAuth token specification in JSON format. The provider supports TLS verification settings and custom certificate bundles for secure connections, and includes example DAG's for implementation guidance, though users must first create SAS Studio Flows or Job Definitions before referencing them in their workflows.

23:32, 13th August 2025

This Visual Studio Code extension provides comprehensive support for the SAS programming language, enabling users to connect directly to both SAS Viya and SAS 9.4 servers to run code within the familiar development environment. The extension offers syntax highlighting, code completion, help documentation, and snippets for SAS programming, whilst also supporting SQL, Python, and Lua syntax highlighting capabilities. Users can navigate SAS Content and libraries through an integrated table viewer, create notebooks for multiple programming languages, and benefit from features such as code folding, outline views, and line commenting functionality. The open-source project operates under an Apache 2.0 licence and actively welcomes community contributions, with support available through SAS Communities, comprehensive documentation, and GitHub issue tracking. Recent development activity has focused on enhancing file navigation capabilities, improving dependency management, and expanding multilingual support across various European and Asian languages.

23:26, 13th August 2025

To update SAS Analytics Pro on Viya with a new licence, users must first download the JWT licence file from their software order on the My SAS portal after logging in and selecting their order details. The process involves stopping the currently running container using either container-manager commands or Docker stop commands, then copying the new licence file to the deploy/sasinside directory. On Windows systems, users can restart the container using either the container-manager with the new licence path parameter or by editing the launch script to reference the new licence file name before running the deployment command. For macOS and Linux environments, the same steps apply with the addition of modifying file permissions using chmod 0644 on the licence file. Kubernetes deployments require updating the configuration YAML file by inserting the complete contents of the licence file under the apro.SETINIT_TEXT parameter whilst maintaining proper indentation, then redeploying using kubectl apply commands. Throughout all platforms, users should save their current licence file as a precautionary measure before beginning the update process.

23:21, 13th August 2025

WUSS 2022 Virtual Encores

Western Users of SAS Software offered a series of virtual half-day training classes in early 2023, drawing on popular content from their 2022 conference in San Francisco. Running from February to April 2023, the programme covered a broad range of technical subjects delivered by experienced industry practitioners.

Topics included SAS Macro Language fundamentals and advanced techniques, CDISC ADaM implementation and principles, data analytics concepts and solutions, custom Excel reporting using PROC REPORT and ODS, and the integration of SAS with both Python and R. Instructors included independent programmers, university lecturers and research analysts, each bringing substantial real-world and academic experience to their respective subjects.

14:07, 4th August 2025

In Python, using __slots__ can effectively enhance code performance by reducing memory usage and increasing the speed of attribute access. Normally, Python objects store attributes in a dictionary, which offers flexibility but incurs additional memory usage and slower access times. By declaring __slots__, developers can specify a fixed set of attributes that the object will need, thereby eliminating the need for a dictionary and leading to more efficient memory management. Though the performance gains from __slots__ may be subtle in small datasets, they become more pronounced as data scales, reducing memory consumption and improving speed dramatically. This technique proves invaluable for memory-bound tasks, such as machine learning, where optimising computational resources is crucial.

18:34, 26th July 2025

Ansible apt update all packages on Ubuntu / Debian Linux

Ansible's apt module can be used to manage package updates across multiple Debian and Ubuntu Linux servers simultaneously. By configuring a playbook with parameters such as update_cache, force_apt_get and cache_valid_time, system administrators can refresh package caches and upgrade all installed packages to their latest versions across every server in a defined inventory.

The playbook can also check for the existence of the file /var/run/reboot-required, which indicates that a kernel update has taken place, and use the reboot module to automatically restart affected servers, waiting for them to come back online before continuing with further tasks. For more complex environments involving LXD-based Linux containers, a custom shell script can be copied to remote hosts and executed as part of the same playbook, applying updates to containers running various Linux distributions including Debian, Ubuntu, Alpine and Rocky Linux.

13:58, 26th July 2025

There are three primary barriers to adopting automated testing, and that a lack of time is not typically one of them. The first issue is code that is not designed to be testable by nature. Many development teams face challenges with legacy codebases, where the architecture hinders test automation. This includes tightly coupled components, hard-coded configurations, and missing interfaces for injecting test doubles or dependencies. A substantial refactoring or architectural redesign is often necessary for meaningful automated testing to be implemented. Secondly, the lack of accessible and realistic test data can prevent tests from being written, as relying on production data poses significant risks.

Developers should create a self-contained testing environment using fake data, mocks, and factories to simulate data. Utilising factory functions to wrap reusable data structures allows for reliable and maintainable tests. Lastly, the tight coupling with external dependencies can turn test runs into unpredictable experiences. Code should be refactored to decouple business logic from external systems using interfaces, adapters, or dependency injection, allowing tests to run independently of such dependencies. Adhering to these strategies can make automated testing a natural part of the development process.

16:52, 19th July 2025

Stack Overflow, presenting from WeAreDevelopers in Berlin, has unveiled its new vision: to be the world's most vital source for technologists by providing a trusted human intelligence layer in the AI era. Their mission focuses on cultivating community, powering learning, and unlocking growth. Recent survey findings reveal 83% of developers use AI tools, yet 46% distrust AI outputs, highlighting Stack Overflow's crucial role in providing reliable information. The company has simplified its brand architecture, with public platforms now unified under "Stack Overflow" and business offerings labelled "Stack Overflow Business." New features include Community Activity displays, revamped Chat functionality, an AI-powered search tool, and Coding Challenges. For enterprise users, Stack Internal offers Knowledge Ingestion, new Connectors for Microsoft Graph and Backstage.io, and an upcoming bidirectional MCP server to enhance AI interaction with trusted data.

22:06, 9th July 2025

Observable is a JavaScript-based reactive programming environment that offers R users significant benefits for interactive data visualisation. This framework allows for advanced customisation using various JavaScript libraries whilst eliminating the need for server-side code execution, resulting in faster rendering of interactive visualisations in browsers. Though Observable can handle some data wrangling, R remains superior for statistical modelling; fortunately, Quarto enables users to combine both tools effectively. Users can perform data manipulation in R, pass the processed data to Observable, and then create sophisticated visualisations. The integration process is straightforward, requiring only Quarto installation and simple code blocks that transfer data between environments. For those interested in JavaScript libraries like D3.js but deterred by their complexity, this approach provides a gentler introduction to creating compelling, interactive data visualisations whilst leveraging R's robust analytical capabilities.

  • The content, images, and materials on this website are protected by copyright law and may not be reproduced, distributed, transmitted, displayed, or published in any form without the prior written permission of the copyright holder. All trademarks, logos, and brand names mentioned on this website are the property of their respective owners. Unauthorised use or duplication of these materials may violate copyright, trademark and other applicable laws, and could result in criminal or civil penalties.

  • All comments on this website are moderated and should contribute meaningfully to the discussion. We welcome diverse viewpoints expressed respectfully, but reserve the right to remove any comments containing hate speech, profanity, personal attacks, spam, promotional content or other inappropriate material without notice. Please note that comment moderation may take up to 24 hours, and that repeatedly violating these guidelines may result in being banned from future participation.

  • By submitting a comment, you grant us the right to publish and edit it as needed, whilst retaining your ownership of the content. Your email address will never be published or shared, though it is required for moderation purposes.