Fun with Interfaces: Testing

  • Reading time:3 mins read

Oh how much fun we had today on my live stream, it’s just amazing. First, all the viewers had fun of waiting for me to go live for nearly an hour, and then at some point I managed to unplug my reflector. Perks of live streaming 😁

First of all, I would like to – once again – apologize to everyone who waited for me to go live. I’ll explain in the end of this blog what really happened. For now, let’s go on-topic.

Continue ReadingFun with Interfaces: Testing

Webinar: Leveraging Git

  • Reading time:2 mins read

It’s been a few days that I announced the “Leveraging Git” webinar on my Twitter and LinkedIn and I hope nobody will mind if I announce it on my blog.

So, here we go.

Every year I deliver between five to ten trainings. This year, I delivered a grand total of zero, due to the coronavirus outbreak. Times are changing, and I need to adapt. So, following the example set by my two friends, Waldo and AJ, who have already delivered webinars, I have decided to try the same.

The webinar focuses on Git as an essential development tool, rather than just a way to replace those ugly //BugFix.425> code annotations we were all used to in C/AL. Apart from creating a branch (when absolutely necessary), committing (often rarely), and perhaps merging (once in a while, being scared of it), most developers don’t do much more. Many don’t even know what power lurks beneath.

This webinar sheds light on Git, explains its internals, and arms you with new tools and knowledge to take Git to the next level, a level where not only you are using Git, but where you are leveraging it, day in, day out.

To learn more about the webinar, and to sign up, click this button:

Continue ReadingWebinar: Leveraging Git

Live Streaming Lessons Learned

  • Reading time:19 mins read

One thing we learned from lessons learned is that we don’t learn from lessons learned.

Somebody, alegedly

I don’t know where this quote comes from, a one-minute googling didn’t reveal it to me (but it isn’t mine, I’ve read it somewhere for sure).

Anyway, a month ago I started live streaming. This year with grand total of zero live conference sessions delivered must have been a contributing factor. I believe I miss speaking. So I decided to give it a try.

Now, almost exactly a month later, with five total streams delivered, four of which with actual relevant content (the first was merely an introduction), I know so much more about live streaming than when I started. Tell me I am wrong if you want, but I think sharing my lessons learned is a good idea. Maybe it motivates you to start streaming. Maybe it helps you start. Maybe… you never know!

So, this blog is a story of my journey, or adventure, with live streaming so far.

Continue ReadingLive Streaming Lessons Learned

Fun with Interfaces: Patterns

  • Reading time:3 mins read

Today I had my fifth live stream. The topic was interfaces, and this time I took a different angle at it: patterns. When I polled about live stream topics you’d like to hear about, most of you said “patterns”. So today’s stream covers several patterns and puts them in perspective of interfaces, or the opposite way around, however you like it.

The stream is available on my new http://vjeko.live/ page, and here it is if you hate clicking.

Continue ReadingFun with Interfaces: Patterns

Live Schedule for December

  • Reading time:4 mins read

After a lot of fun with interfaces on Friday, I’ve received a lot of very encouraging feedback. It seems that the decision to start live video blogging was right, and I am sticking with it.

I’ve realized that on Friday I didn’t announce any schedule for the period ahead, so here’s what we are going to do in coming Fridays.

Continue ReadingLive Schedule for December

Fun with Interfaces

  • Reading time:1 min read

Today I’ve streamed the Fun with Interfaces video blog at https://www.youtube.com/watch?v=QSMHL32c5mg and the recording is now published online.

This was the first session I ever delivered about interfaces, and I actually planned delivering this a lot earlier (I made a suggestion to run this at Directions ASIA before corona crisis hit), but never had a chance. I now polished the demos a bit and delivered it as-is (no slides, really, so – no theory, just practice).

I will have more to say on interfaces, definitely. Stuff like dependency injection, inversion of control, testability, etc. is all very interesting to discuss and very useful in our daily life with AL.

My today’s session not only shows what you can do with interfaces, but also what you cannot, and why. Maybe, who knows, at some point we get some improvements to address some of pain points from my video.

Thanks to everyone who joined me today, and I am looking forward to see all you next week in “Making InvokeExtensibilityMethod work” session.

Continue ReadingFun with Interfaces

Understanding renaming/moving files with git

  • Reading time:11 mins read

Source code files are living things. We add new ones and change their content on daily basis. Occasionally we delete them, too. Git is amazingly efficient when it comes to tracking these kinds of changes.

However, sometimes we need to change the file name, or file path, or both. And if you are an AL developer who has ever transformed a C/AL project into AL, you have probably done this at least once, for all .al files in the project.

And this is where git may surprise you. After you rename a file, sometimes you’ll notice that git detects it as a rename. But on other occasions it will not be the case.

Let’s dive in.

Continue ReadingUnderstanding renaming/moving files with git

How to replace DotNet in AL

  • Reading time:7 mins read

A lot of us still have a ton of C/AL code sitting around in existing databases that sooner or later will have to be moved into AL. A lot of us also have a ton of AL code using DotNet that we want to be able to run in Microsoft’s cloud (that is: not on-prem). And I guess most of us don’t want to maintain a DotNet-less and DotNet-ful versions of our code.

Sooner or later, you’ll want all of DotNet out of your AL. Even if you are a seasoned .NET developer, you’ll want all DotNet out of AL.

Anyway, when you need to replace DotNet, what options do you have? Let’s take a look at all possible paths.

Continue ReadingHow to replace DotNet in AL

Migrating Control Add-ins from C/SIDE to AL

  • Reading time:1 min read

Thanks to everyone who watched my live stream today! The audience wasn’t big, but it’s a very narrow topic, not of broad interest. Still, I am glad I got a few interesting questions that actually introduced my future topics quite nicely.

You can find the recording here:

As promised, I have published the GetImageResource.js file on my GitHub. You can find it here:

https://github.com/vjekob/RandomBits/tree/main/src/js

(There you can also find some usage notes and explanation why you may want to use that file in your control add-ins)

Once again – thanks, and see you next week in a topic that should draw a lot more audience: AL interfaces!

Continue ReadingMigrating Control Add-ins from C/SIDE to AL

Live Schedule for Period Ahead

  • Reading time:5 mins read

Thanks to everyone who attended my live blog yesterday, and to everyone who subscribed. It was so encouraging to see that you like this idea.

As announced yesterday, my live blog will run on a fixed schedule – every Friday, at 14:00 CET (8:00 AM EST) I’ll get online to present a topic and discuss it live with you. This is the schedule for the next two Fridays:

November 20: Migrating Control Add-ins from C/SIDE to AL

This is going to be a live coding session. I’ll take a working control add-in developed in a mish-mash of tools we used to develop them back in the stone age, and migrate all that into AL. I’ll present two viable approaches for this, that I’ll call a “white box approach” and a “black box approach”.

While doing this, I’ll also discuss what can be done, what can’t be done, and things you want to watch out for while performing the migration.

November 27: Fun with Interfaces

Again, a mostly live coding session. I’ll present AL interface type, what it’s good for, and how to use it. Of course, I’ll address the usage through enum type, but I’ll also talk a lot about other use cases. Interfaces allow us to fix some old and long-standing anti-patterns, and introduce some nice new patterns, and you can expect me talking about that, too.

It was great to see that – when I asked about what topics you’d like to see me cover – there were both interfaces and design patterns in AL. It tells me we are on the same page here.

December: You tell me

I have no firm plan for December yet. I actually want you folks to have most of say in what my live blog will be about. Yesterday, you gave me some ideas and today I want to let you choose.

In the poll below, select up to two topics you’d like me to cover in the first two live slots in December.

[poll id=”2″]

The poll runs until noon on November 19th, the top two answers will be my topics for December 4 and 11.

What topics do I have in mind?

Other than the topics you (will/have) suggest(ed), I have a few topics of my own that I’d like to bring some attention to:

  • Communicating between AL and JavaScript: this is something that every control add-in author encounters, and the documentation is practically non-existent. Usually, I cover this to great depth in my control add-in trainings and I’ve talked a lot about this in my TechDays sessions, but still I want it properly documented here as well. This has almost been my very first topic for my live blog, but then I changed my mind. Still, I may cheat a bit – it’s very likely I actually pick this for my December 4th session, and push your suggestions a week further. Let’s see.
  • Musings around transaction control in AL. We’ve had AssertError Error('') for a long time, and now we don’t (really) have it anymore. We need to fall back to (or simply keep relying on) if Codeunit.Run(). But this is very limited in terms what and how we pass state between caller and callee. This will be a “let’s code and theorize together” kind of session, more about discussing what we have and where we would like to go from here and why, than presenting actual “how to this or that”.
  • TypeScript vs JavaScript when developing control add-ins. Could be an interesting topic, I don’t know. I have been coding in JavaScript since 1996, practically from the beginning. Obviously, I got used to all of its quirks. TypeScript didn’t at first seem to convince me, but recently I’ve written far more TypeScript than JavaScript. Let me know if this is something you want us to discuss. This could be a Q&A session with some code.
  • What happens to your JavaScript code when browsers run it. This would be a deep dive into browser runtime, how it processes your JavaScript, how it runs it. Here, I’d address some misconceptions people have about it. I think this could be a nice session to cover an important aspect of the web client runtime. It’s crucial to understand how things work to be able to pull the maximum out of them.
  • Musings around event infrastructure in AL and BC runtime. Personally, I’ve never been totally convinced that the events – the way they work – are the best we could possibly have. Don’t get me wrong – they are amazing at allowing us to build loosely-coupled architectures and to seamlessly plug in our code into other people’s code. But there is much more they could be if Microsoft wanted to take an extra step. I’d love to discuss this topic with you. Who knows, maybe we manage to convince Microsoft that we need a bit more push here. Or maybe you manage to convince me that I am getting it all wrong. Who knows.

Let me know in the comments what other topics you’d like me to cover, and also what you think of these topics I suggest here. Enjoy the weekend, and see you next Friday!

Continue ReadingLive Schedule for Period Ahead