Posts for #Programming

Basta 2021 is still going on, but I have completed my talks for this event. All went well - to varying degrees, since I’m a critical person - and many thanks to those who attended my talks or my workshop!

Here are the links to access online slides, or to download PDF slide documents and source code samples.

Protocol Buffers are Google’s implementation of an improved data serialization format. Improved, that is, in comparison to JSON – which is after all what the world is mostly running on at this time. After reading various hype posts about how cool and efficient the format is, I was curious to find out how much of it is true.

In case you’re not interested in the details, and because I started my little test with a pretty good idea of what the results would be, let me summarize my findings up front:

Sometimes I don’t fancy debugging a piece of code in the browser. I mean that as in “use the debugger” - I’d much rather see some log output. This can be more useful than step-by-step debugging because the program flow is not interrupted, which can cause strange behavior in its own right, and because log output makes it easier to see how values go in and out of functions as the program runs through its flow.

Since I prefer writing code in a functional style, I often have the problem that it’s not easy to quickly insert console.log calls. For instance I was just looking at this piece of code:

Yesterday I presented my talk Being Functional to the London .NET User Group. First of all: thanks to Dylan and Ian and whoever else was involved for organizing this event and inviting me, and to Skills Matter for making their fantastic CodeNode venue available to the group! I had a great time and I believe everybody else did, too 😃

Feel free to get back to me if you have any questions or comments! Here's the download of samples and slides I used during the talk.

The online publication Informatik Aktuell has just published a German language article I wrote for them on topics of functional programming in C#. Read it here: Funktionales C# für Fortgeschrittene

I finally got round to something today that has been waiting for a very long time: I published my Functional C# library FCSlib on github and NuGet. I first started working on parts of this back in 2008 and put the library together when I wrote my book Functional Programming in C#.

There are still things I’d like to do for the github project – most importantly, I know I have a set of tests somewhere, but because I was using the library for various purposes over years and I didn’t have source control organized well enough, that stuff is spread out a bit. I need to find everything and probably create a bunch of additional tests for some proper coverage, and hopefully I’ll be able to do that in the future. I also hope to add some documentation, but meanwhile read the book or dig around yourself 😃

At DevExpress, we frequently hear about issues customers have with our updates. I personally hear about these when I teach our training classes or meet customers at events. I felt like saying a few words about this and I decided to post them here rather than on the DevExpress blogs because they represent my personal opinion and advice – I wouldn’t say (or think) they would conflict with any “official” company line, if there was one on this, but I also didn’t want to risk the impression that my points and personal opinions form such a company line. When I say “we” in this post, I’m not implying that anybody else would have to share my opinions, it’s simply a shortcut for “myself and others at DevExpress”.

As you probably know, DevExpress releases major and minor updates. The major ones use the first two parts of the version number: 15.2 or 16.1. The minor updates use the third part, as in 15.2.4, 15.2.5. Major updates bring major new features and large changes, minor updates are bug fix releases only. Both types of updates can introduce breaking changes, though we try to keep this to an absolute minimum for minor updates – unfortunately, fixing buggy behavior can still be a breaking change!

Once more it’s been a great conference, thank you all for attending my talks and my workshop! As promised, here are the download links for the slides and samples:

I ran into this problem the other day where I updated Xamarin on my Mac and I was playing with various solutions that involved Android projects. I kept receiving this build error:

Error: //XamarinForms1.Droid.csproj: //XamarinForms1.Droid.csproj could not import "$(MSBuildExtensionsPath)\\Xamarin\\Android\\Xamarin.Android.CSharp.targets" (XamarinForms1.Droid)

While doing some regex demos, I noticed some strange behavior that doesn’t seem to comply with the docs. I’m working with balancing group definitions as described here. In conjunction with those, it should be possible to use the syntax (?(start)(?!)) to fail the expression in case the balanced elements don’t even out (or rather, if there aren’t sufficient end elements). This conditional expression is documented here in these words:

Matches […] if […] a named […] capturing group has a match