🎄 It’s that magical time of year again! 🎅🏻 Christmas is twinkling on the horizon, and that means one thing — it’s time for the 12th annual F# Advent in English!
It’s incredible to think that our tradition began all the way back in 2014. For over a decade, the F# community has gathered during Advent to share stories, ideas, code experiments, and a shared love for this beautiful language. 💜
This year, we’re keeping the festive momentum going — with 24 main slots leading up to Christmas Eve, plus a few bonus entries to make room for all the amazing contributors who want to join in.
So grab a cup of cocoa ☕, fire up your favorite editor, and let’s make this 2025 F# Advent one to remember — filled with insight, creativity, and community cheer. 🌟
Rules
Choose F# a related topic for your blog post and reserve the slot on BlueSky, Mastodon, X or leave a comment on this post. Please note that you do not have to announce the topic until the date (but you can).
Prepare a blog post or video in English.
Publish your post on a specified date (according to the calendar).
Post the link to your post on BlueSky, Mastodon or X with hashtags #fsharp and #FsAdvent.
Two years ago, we decided to spice up the Advent season by creating a private board for those participating in Advent of Code (AoC) and coding in F#. If you’re planning to dive into AoC this December, we’d love for you to join us. Let’s make this holiday season one to remember!
Reminder for every who solves adventofcode.com in #fsharp It also starts tomorrow, and we have a private board with F# folks 393584-7799c026. You are welcome to join!
Can you believe it’s that time of year again? 🎅🏻 Christmas is just around the corner, and we’re gearing up for the 11th annual F# Advent in English! It’s hard to believe that our journey started back in 2014. Each year since, we’ve come together during the Advent season to share our F# stories, experiences, and unbridled passion.
This year will be no different, although we’re switching things up a bit. We’re starting with a main schedule that includes 24 slots, and we’ll be adding extra slots to make sure there’s room for everyone who wants to participate.
Join F# Advent Calendar today!
Rules
Choose F# a related topic for your blog post and reserve the slot on BlueSky, Mastodon, X or leave a comment on this post. Please note that you do not have to announce the topic until the date (but you can).
Prepare a blog post or video in English.
Publish your post on a specified date (according to the calendar).
Post the link to your post on Twitter or Mastodon with hashtags #fsharp and #FsAdvent.
Two years ago, we decided to spice up the Advent season by creating a private board for those participating in Advent of Code (AoC) and coding in F#. If you’re planning to dive into AoC this December, we’d love for you to join us. Let’s make this holiday season one to remember!
Reminder for every who solves adventofcode.com in #fsharp It also starts tomorrow, and we have a private board with F# folks 393584-7799c026. You are welcome to join!
Since 2014, faithfully every Monday, I’ve dispatched the F# Weekly Newsletter to your mailboxes, amounting to nearly 500 editions to date. From the outset, I’ve adopted Tinyletter, a simple platform allowing seamless subscription and delivery of the F# Weekly newsletter.
However, Mailchimp, who took over TinyLetter in 2011, decided to bring it to an end on February 29, 2024. Consequently, I find myself compelled to seek a new home for the newsletter.
Seeing as the F# Weekly newsletter boasts nearly 1000 subscribers—a number exceeding the free tier limit offered by most services—I made the decision to move the newsletter into my WordPress blog, a resource I’ve already invested in, rather than integrating or purchasing a new service. Some of you are already reading this post from within your inbox.
You may wonder, what does this mean to you? It implies that you will also receive email notifications about my occasional blog posts, aside from the F# Weekly newsletters. If this deviates from your initial subscription interest, I deeply apologize. Feel free to modify or cancel your subscription. Gratefully, I’ve managed to configure WordPress to allow you to set your subscription preferences (as seen in the screenshot below). If my “musings” outnumber your tolerance, you can simply select the F# Weekly category 😁
I am immensely grateful to you for joining me on this journey and consuming every piece of F# news I’ve delivered. Still not subscribed? You can do so from this page 😉
Update #2: Twitter/X API Drama
Several moons ago, I put together an automation system that enabled me to gather #fsharp tweets with links, trimming my time spent crafting each F# Weekly down from 3-4 hours to about a single hour. Half a decade ago, I made this tool publicly available, transitioning it to .NET Core and Azure Functions, and deployed it on Azure via my MVP Azure credits.
But as fate would have it, in March 2023, Elon Musk decided to phase out Twitter API v1.1, charging a hefty $100+ monthly fee from enthusiasts who rely on programmatically reading tweets. This abrupt change drove me back to manually penning F# Weekly by hand, a decision that left me heartbroken. 💔
If you’ve noticed a dip in the quality of F# Weekly or found that I’ve overlooked your posts or videos on occasion:
Make sure to attach the #fsharp tag to your posts if you choose to announce them on X.
Don’t hesitate to tag me directly or @fsharponline if you’d like more visibility or retweets. If either account retweets your post, it’s almost certain to catch my eye during newsletter assembly.
If X isn’t your platform of choice, feel free to mention me on Mastodon or send me an email at sergey.tihon[at]gmail.com if you abstain from social media altogether.
If you have any genius ideas on improving the news collection process, making it more resilient, or possibly even rolling it out on a wider scale, I’m all ears! Don’t hesitate to reach out on social media or leave a comment on this post.
Update #3: Warm Gratitude for Donations
In 2021, I set up the buy me a coffee service as a delightful way for you to treat me to a cup of coffee. I want to pour out a tidal wave of THANKS to everyone who kindly donated over the last 3 years! Your generosity warms my heart. ❤️
The donations have sprinkled extra joy into my everyday life, allowing me to occasionally indulge in non-essential buys without the guilt of dipping into family funds. Here are a few examples of how I’ve put your contributions to use (beyond covering my WordPress subscription and domain expenses):
First and foremost, I’ve made a monthly donation to the Ionide project, and I would earnestly implore you to consider the same if you’re able. It’s crucial that we preserve the presence of a free, cross-platform F# IDE.
I’ve been battling with hand discomfort, which sometimes shoots pain back into my wrists and fingers. I regularly find myself alternating mouses and occasionally keyboards. This year, I decided to give myself an early Christmas present—an ergonomic columnar curved keyboard, the MoErgo Glove 80 with Red Pro Linear 35gf switches, and so far, it has won me over. 😊 I’ve swiftly adjusted to a comfortable typing speed that allows me to work without interruptions throughout the day.
Three years ago, I embarked on a journey to balance my screen time by swapping my digital device for the tactile joy of printed books, finding solace in their immersive stories just before bedtime. The therapeutic effect has improved not only my sleep but also my overall well-being. Over time, I’ve amassed a collection of captivating books. For those who share my love for reading, feel free to send me a friend request on Goodreads. I’m always intrigued to know what tales are keeping you hooked!
Recently, I found it impossible to resist spoiling my “big dog” 🐶 with a cozy new kennel for her to curl up in.
Once again, my heartfelt thanks to all of you for your generosity and for investing your time into reading F# Weekly. Here’s wishing you a 2024 brimming with joy and success!
Christmas is approaching again 🎅🏻. It’s almost unbelievable that we’re celebrating the 10th annual F# Advent in English! Our journey began back in 2014, and since then, every year has seen us come together during the Advent season to share our F# stories, experiences, and unbridled passion.
This year is not an exception, but we will do it slightly differently. We kick things off with a main schedule featuring 32 slots, and we’ll be adding extra slots to accommodate all our eager participants.
Join F# Advent Calendar today!
Rules
Choose F# a related topic for your blog post and reserve the slot on Twitter, Mastodon or leave a comment on this post. Please note that you do not have to announce the topic until the date (but you can).
Prepare a blog post or video in English.
Publish your post on a specified date (according to the calendar).
Post the link to your post on Twitter or Mastodon with hashtags #fsharp and #FsAdvent.
In the preceding year, we decided to inject some extra enjoyment into the Advent season by establishing a private board for participants of Advent of Code (AoC) who code in F#. If you’re gearing up for AoC this December, we invite you to come and join us. Let’s make this holiday season even more memorable!
You solve Advent of Code in #fsharp and want to see who do it as well ? Join my board private board 393584-7799c026. Please do not distribute it outside F# Community and do not join if you use another language (or do not follow me 😊).
Christmas is approaching again, and now is the time to prepare our spirit for it with the goodness of F#. Please join, reserve one of 56 slots, and spread your thoughts and love to F# with the community.
Join F# Advent Calendar today!
Rules
Choose F# a related topic for your blog post and reserve the slot on Twitter, Mastodon or leave a comment on this post. Please note that you do not have to announce the topic until the date (but you can).
Prepare a blog post in English.
Publish your post on a specified date (according to the calendar).
Post the link to your post on Twitter or Mastodon with hashtags #fsharp and #FsAdvent.
Christmas is approaching again, and now is the time to prepare our spirit for it with the goodness of F#. Please join, reserve one of 62 slots and spread your thoughts and love to F# with the community.
This time you also have a possibility to support me (the host) with some coffee. This is optional but very appreciated if you like an event 😁.
Join F# Advent Calendar today!
Rules
Choose F# related topic for your blog post and reserve the slot on Twitter or leave a comment to this post. Please note that you do not have to announce the topic until the date (but you can).
Prepare a blog post in English.
Publish your post on a specified date (according to the calendar).
Post the link to your post on Twitter with hashtags #fsharp and #FsAdvent.
If you have sophisticated user feedback like rating (or likes and most importantly dislikes) then we can use Matrix Factorization algorithm to estimate unknown ratings.
If we have not only rating but other product fields, we can use more advanced algorithm called “Field-Aware Factorization Machine”
If we have no rating at all then “One Class Matrix Factorization” is the only option for us.
In this post I would like to focus on the last option.
One-Class Matrix Factorization
This algorithm can be used when data is limited. For example:
Books store: We have history of purchases (list of pairs userId + bookId) without user’s feedback and want to recommend new books for existing users.
Amazon store: We have history of co-purchases (list of pairs productId + productId) and want to recommend products in section “Customers Who Bought This Item Also Bought”.
Social network: We have information about user friendship (list of pairs userId + userId) and want to recommend users in section “People You May Know”.
As you already understood, it is applicable for a pair of 2 categorical variables, not only for userId + productId pairs.
Google showed several relevant posts about the usage of ML.NET One Class Matrix Factorizarion:
After reading all these 3 samples I realised that I do not fully understand what is Label column is used for. Later I came to a conclusion that all three samples most likely are incorrect and here is why.
There are three input columns required, one for matrix row indexes, one for matrix column indexes, and one for values (i.e., labels) in matrix. They together define a matrix in COO format. The type for label column is a vector of Single (float) while the other two columns are key type scalar.
COO stores a list of (row, column, value) tuples. Ideally, the entries are sorted first by row index and then by column index, to improve random access times. This is another format that is good for incremental matrix construction
So anyway we need three columns. If in the classic Matrix Factorization the Label column is the rating, then for One-Class Matrix Factorization we need to fill it with something else.
The second gem is
The coordinate descent method included is specifically for one-class matrix factorization where all observed ratings are positive signals (that is, all rating values are 1). Notice that the only way to invoke one-class matrix factorization is to assign one-class squared loss to loss function when calling MatrixFactorization(Options). See Page 6 and Page 28 here for a brief introduction to standard matrix factorization and one-class matrix factorization. The default setting induces standard matrix factorization. The underlying library used in ML.NET matrix factorization can be found on a Github repository.
As you see, Label is expected to be always 1, because we watched only One Class (positive rating): user downloaded a book, user purchased 2 items together, there is a friendship between two users.
In the case when data set does not provide rating to us, it is our responsibility to provide 1s to MatrixFactorizationTrainer and specify MatrixFactorizationTrainer.LossFunctionType as loss function.
This year was hard for all of us, we definitely deserve Christmas spirit and F# goodness. Please join, reserve one of 60 slots and spread your thoughts and love to F# with the community.
Join F# Advent Calendar today!
Rules
Choose F# related topic for your blog post and reserve the slot on Twitter or leave a comment to this post. Please note that you do not have to announce the topic until the date (but you can).
Prepare a blog post in English.
Publish your post on a specified date (according to the calendar).
Post the link to your post on Twitter with hashtags #fsharp and #FsAdvent.
Update 2019/11/14: As well as year before we will do extra slots again. We will start from slot for [Dec 18 – Dec 24] week, and when they are filled I will add slots for [Dec 11 – Dec 17], then for [Dec 1 – Dec 10] and finally [Dec 25-Dec 31].
F# Advent Calendar is a long tradition in F# community
Advent 2019 is coming, this year we have 56 free slots. Please join, reserve a slot and spread your thoughts and love to F# with the community.
This year I completely forgot to celebrate 7th birthday of F# Weekly. The very first F# Weekly #43, 2012 was published at 29/10/2012. Since than every 43th edition was an anniversary edition. Help me please celebrate the date – book your slot in #FsAdvent and deliver post in time!
Join F# Advent Calendar today!
Rules
Choose F# related topic for your blog post and reserve the slot on Twitter or leave a comment to this post. Please note that you do not have to announce the topic until the date (but you can).
Prepare a blog post in English.
Publish your post on a specified date (according to the calendar).
Post the link to your post on Twitter with hashtags #fsharp and #FsAdvent.