F# Weekly #28, 2025 – Beyond Zero-Allocation

Welcome to F# Weekly,

A roundup of F# content from this past week:

News

Videos

Blogs

🤔 "Why are you so focused on low-level memory operations in a functional language?" Here's the thing: We're not abandoning high-level abstractions. We're making them work everywhere 🎯 The path is more direct than you might think 👇speakez.tech/blog/beyond-…#FunctionalProgramming #FSharp

SpeakEZ.ai (@speakezai.bsky.social) 2025-07-11T19:58:09.044Z

Highlighted projects

New Releases

Have a recap of Isaac's showcase of rapid data analysis with F#. Although quite a dated video, it still holds true to F#'s power in being able to prototype quickly to get the result you're after… but most importantly, in a fun way! @fsharp.bsky.online #fsharp

Compositional IT (@compositional-it.com) 2025-07-09T09:45:20.646Z

That’s all for now. Have a great week.

If you want to help keep F# Weekly going, click here to jazz me with Coffee!

Buy Me A Coffee

F# Weekly #27, 2025 – Breaking changes: Yay or Nay?

Welcome to F# Weekly,

A roundup of F# content from this past week:

News

What are your thoughts on slight breaking changes in an upcoming release? #fsharp #fsharpplus github.com/fsprojects/F…

Oskar Gewalli (@wallymathieu.bsky.social) 2025-07-02T06:19:53.552Z

Videos

Blogs

Highlighted projects

New Releases

Having some #fsharp fun building Alloy's shadow API! 🎭 These look like System/Core calls but they're statically resolved to our dependency-free implementations. Same familiar F# idioms, zero BCL dependencies. It's like BCL cosplay for native compilation! 🚀 #dotnet

SpeakEZ.ai (@speakezai.bsky.social) 2025-07-03T20:44:11.991Z

That’s all for now. Have a great week.

If you want to help keep F# Weekly going, click here to jazz me with Coffee!

Buy Me A Coffee

F# Weekly #26, 2025 – Sprout: BDD Testing for F#

Welcome to F# Weekly,

A roundup of F# content from this past week:

News

Videos

Blogs

🧬 Gene samples nearly melted because someone mixed °F and °C. 🫠 With #AI proliferating, every system is now safety-critical. F# units of measure catch these potential errors at compile time with ZERO runtime cost. New #fsharp #mlir #llvm #systemsprogramming #aisafety blog: speakez.ai/blog/danger-…

SpeakEZ.ai (@speakezai.bsky.social) 2025-06-24T15:56:10.696Z

Highlighted projects

New Releases

#fsharp rocks! Here's a new entry into an already crowded arena of F# testing frameworks.This one is called Sprout and it is a DSL for writing BDD-style tests in F#.It is inspired by Jasmine and uses computation expressions with few, composable, abstractions.github.com/dlidstrom/Sp…

(@dlidstrom.bsky.social) 2025-06-23T10:09:56.077Z

That’s all for now. Have a great week.

If you want to help keep F# Weekly going, click here to jazz me with Coffee!

Buy Me A Coffee

Pi-hole DNS on UGOS PRO 1.6.0.2917

If you are reading this, you have most likely already updated to UGOS PRO 1.6.0.2917 and your Pi-hole Docker container failed with the error

failfull start project ‘pi-hole’ err: Container pihole StartingError response from daemon: driver failed programming external connectivity on endpoint pihole (…): Error starting userland proxy: listen tcp4 0.0.0.0:53: bind: address already in use

if you connect to your NAS over SSH and execute

ssh [email protected]
sudo lsof -i :53

you will see that this update comes with this built-in DNS server dnsmasq that already occupies port :53

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 
dnsmasq 1573 dnsmasq 4u IPv4 1961 0t0 UDP localhost:domain 
dnsmasq 1573 dnsmasq 5u IPv4 1962 0t0 TCP localhost:domain (LISTEN)

This DNS server is probably needed for a new feature that promises container apps access over UGREENlink: Added UGREENlink support for remote access to some container apps (firmware and client update required).

So what to do? Let’s find out how dnsmasq is configured.

ps aux | grep dnsmasq
dnsmasq   347028  0.0  0.0  41368  3008 ?        S    20:52   0:00 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /usr/ugreen/etc/dnsmasq/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --conf-file=/usr/ugreen/etc/dnsmasq/dnsmasq.conf --local-service --trust-anchor=.,20326,8,2,e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d

it shows that –conf-file is located at /usr/ugreen/etc/dnsmasq/dnsmasq.conf, let’s take a look what is inside

sudo nano /usr/ugreen/etc/dnsmasq/dnsmasq.conf

here is default content of this files

# 启用本地 DNS 缓存
cache-size=1000

#DNS记录生存时间(平衡实时性与性能)
local-ttl=600        # 默认缓存10分钟(上游未指定 TTL 时)
#max-cache-ttl=3600  # 强制所有记录最多缓存 1 小时

# 监听本地接口,不监听虚拟网络接口,避免冲突
listen-address=127.0.0.1,::1
bind-interfaces

# 使用指定上游 DNS
resolv-file=/usr/ugreen/etc/dnsmasq/dnsmasq-resolv.conf

# 安全性(可选)
#domain-needed(严格完全限定域名,不能是裸主机名)
#bogus-priv(上游 DNS 返回了私有 IP 地址,dnsmasq 会拒绝返回结果给客户端)

# 日志输出(调试用,可关闭)
#log-queries
# 仅记录错误
log-facility=/var/log/dnsmasq.log

According to this configuration, this DNS server listens only to local traffic and does not reply to requests from LAN IPs

listen-address=127.0.0.1,::1

t resolves DNS using the nameserver (8.8.8.8) specified in the resolv-file

resolv-file=/usr/ugreen/etc/dnsmasq/dnsmasq-resolv.conf

Workaround 1

Just stop dnsmasq if you do not plan to use UGREENlink remote access to container apps. This solutions is not recommended, especially if you use Virtual Machines functionality (see explanation from UGREEN Technical Support).

sudo systemctl stop dnsmasq
sudo systemctl disable dnsmasq

Workaround 2

Configure dnsmasq to use pi-hole for DNS resolution.

1. Expose Pi-hole on another port (for example :5553)

ports:
   - "5553:53/tcp"
   - "5553:53/udp"

2. Allow request from LAN IPs

listen-address=127.0.0.1,::1,192.168.68.53

3. Forward DNS requests to Pi-hole

#resolv-file=/usr/ugreen/etc/dnsmasq/dnsmasq-resolv.conf
no-resolv
server=192.168.68.53#5553

4. Replace 192.168.68.53 by you NAS IP address

5. Final configuration

# 启用本地 DNS 缓存
cache-size=1000

#DNS记录生存时间(平衡实时性与性能)
local-ttl=600        # 默认缓存10分钟(上游未指定 TTL 时)
#max-cache-ttl=3600  # 强制所有记录最多缓存 1 小时

# 监听本地接口,不监听虚拟网络接口,避免冲突
listen-address=127.0.0.1,::1,192.168.68.53
bind-interfaces

# 使用指定上游 DNS
#resolv-file=/usr/ugreen/etc/dnsmasq/dnsmasq-resolv.conf
no-resolv
server=192.168.68.53#5553

# 安全性(可选)
#domain-needed(严格完全限定域名,不能是裸主机名)
#bogus-priv(上游 DNS 返回了私有 IP 地址,dnsmasq 会拒绝返回结果给客户端)

# 日志输出(调试用,可关闭)
#log-queries
# 仅记录错误
log-facility=/var/log/dnsmasq.log

6. Test that DNS resolution works (from another machine)

dig 192.168.68.53 google.com

With this approach, you will lose benefits to pi-hole’s network overview feature. You will see that all traffic comes from the first DNS server (dnsmasq), and your devices will not be distinguishable.

Workaround 3

Use Macvlan network driver and ask docker to assign new IP for Pi-hole container (thanks to JCS and Krishna from Discord)

networks:
  macvlan_net:
    driver: macvlan
    driver_opts:
      parent: eth0 # Or your physical network interface
    ipam:
      config:
        - subnet: 192.168.1.0/24 # Replace with your desired subnet
          gateway: 192.168.1.1 # Replace with your gateway

services:
  pihole:
    image: pihole/pihole:latest
    networks:
      - macvlan_net
    ...

Technical Support

Update 2025-07-02: Here is what I got as a reply to my support ticker.

UGOS PRO system port 53 is occupied by the following service:
1. dnsmasq within the virtual machine environment
2. Host system's dnsmasq

If you want to disable dnsmasq, consider executing the following operations in the background:

1. Clean up virtual machine network configuration:

virsh net-destroy vnet-host
virsh net-destroy vnet-nat0
virsh net-destroy vnet-nat1
virsh net-destroy vnet-nat2


2. Then disable the Virtual Machine service in App Center, execute it on demand, and if you are not using a Virtual Machine, you don't need to execute it.

3. Stop the host machine's dnsmasq service.

systemctl stop dnsmasq


It needs to be made clear that:

1. Is deploying a Pi-hole container for DNS service filtering ads? If so, it will conflict with the NAS's own DNS service.

2. If you need to stop the dnsmasq service in the background, please be aware that it may affect virtual machine functionality.

F# Weekly #25, 2025 – 7 Reasons F# Sucks

Welcome to F# Weekly,

A roundup of F# content from this past week:

News

Videos

7 Reasons F# Suckshamy.xyz/blog/2025-06… #fsharp

Hamilton Greene (@sirhamy.bsky.social) 2025-06-18T16:42:45.182Z

Blogs

Highlighted projects

New Releases

Ionide’s C# dependency moved from mandatory ➡️ recommended. Result: the extension pack now works on any VS Code fork (Cursor, VSCodium, etc.). Get in touch with one of the CIT team to find out how this will benefit your project. 🌍 #fsharp #vscode #oss @fsharponline.bsky.social

Compositional IT (@compositional-it.com) 2025-06-18T09:45:20.245Z

That’s all for now. Have a great week.

If you want to help keep F# Weekly going, click here to jazz me with Coffee!

Buy Me A Coffee

F# Weekly #24, 2025 – Fidelity & BAREWire

Welcome to F# Weekly,

A roundup of F# content from this past week:

News

💡 One of the benefits of the Fidelity framework design for #clang and #cpp users are memory and type safe wrappers for APIs without rewriting code. With #fsharp idioms and BAREWire memory mapping support, we can create "shadow APIs" that make drop-in replacements possible. speakez.ai/blog/wrappin…

SpeakEZ.ai (@speakezai.bsky.social) 2025-06-13T17:49:52.986Z

Videos

Blogs

F# vNext:

Highlighted projects

New Releases

We have several tools "on bench" as we shore up some MVPs for our roadmap. Again that meant dusting off internal design documents. So this public "think piece" moves us to more open design process along with open code. #fsharp #dotnet #clang #rust #cpp #ai #machinelearning speakez.ai/blog/intelli…

SpeakEZ.ai (@speakezai.bsky.social) 2025-06-14T08:43:48.618Z

That’s all for now. Have a great week.

If you want to help keep F# Weekly going, click here to jazz me with Coffee!

Buy Me A Coffee

F# Weekly #23, 2025 – Catch up on Microsoft Build

Welcome to F# Weekly,

A roundup of F# content from this past week:

News

Videos

Connecting Blazor C# for the front end and Sharpino F# for the back end. youtu.be/bCY8y4qgcQY?… Italian with auto-subtites (sorry for the audio quality). #fsharp

Tony Lucca (@tonyxzt.bsky.social) 2025-06-04T16:35:33.020Z

Blogs

We've had this design "on the board" for a while but just put it in a blog post. We're hoping it will help articulate our vision to the #fsharp as well as #mlir and #llvm communities to foster conversation and contribution as more of this surfaces from our lab. speakez.ai/blog/native-…

SpeakEZ.ai (@speakezai.bsky.social) 2025-06-03T13:43:32.030Z

F# vNext:

Highlighted projects

New Releases

That’s all for now. Have a great week.

If you want to help keep F# Weekly going, click here to jazz me with Coffee!

Buy Me A Coffee

F# Weekly #22, 2025 – Ionide with Cursor

Welcome to F# Weekly,

A roundup of F# content from this past week:

News

Videos

Blogs

You can now use F# and Ionide with @cursor.com.web.brid.gy 🥰 #fsharp #fable github.com/ionide/ionid…

Dag Brattli (@dbrattli.bsky.social) 2025-05-31T05:34:29.073Z

F# vNext:

Highlighted projects

New Releases

That’s all for now. Have a great week.

If you want to help keep F# Weekly going, click here to jazz me with Coffee!

Buy Me A Coffee

F# Weekly #21, 2025 – Build 2025 & ReSharper in VS Code

Welcome to F# Weekly,

A roundup of F# content from this past week:

News

#ReSharper has been at the heart of #JetBrainsRider since day one, offering the complete .NET development experience. We're excited to see its powerful features become available to VS Code users as well. Here's to having options for every developer's workflow 🎉🍾

JetBrains Rider (@jetbrains-rider.bsky.social) 2025-05-19T11:52:33.844Z

Build 2025 (Full Playlist)

Videos

Blogs

Highlighted projects

Just added #fsharp #MCP example, compatible with #oxpecker !github.com/Lanayx/Oxpec…

Vladimir Shchur (@lanayx.bsky.social) 2025-05-21T04:14:35.137Z

New Releases

Watch @damianedwards.com blow your mind with the demo!youtu.be/98MizuB7i-w#dotnet #csharp

David Fowler (@davidfowl.com) 2025-05-23T15:56:01.501Z

That’s all for now. Have a great week.

If you want to help keep F# Weekly going, click here to jazz me with Coffee!

Buy Me A Coffee