C#

Puppeteer Sharp Monthly Report - June 2019

May was a month full of releases. We shipped v1.15, v1.16, v1.17 and a small v1.17.1. Ok, this was really short. Let me compensate that with a puppeteer gif. What’s next I want to prepare some examples using Azure Functions. We have a lot of questions related to Puppeteer in... [Read More]

Automating Microsoft Edge with Puppeteer-Sharp

As you may have heard, Microsoft made available to the public its Chromium-powered Edge browser. Maybe this question won’t qualify as technical interview question but: If Puppeteer-Sharp automates Chromium, and Microsoft Edge (insider) is powered by chromium, that would mean that… When you call Puppeteer.LaunchAsync, one of the values you... [Read More]

Getting ready for Puppeteer-Sharp Firefox

You might not know, but Puppeteer’s team is making good progress on a Puppeteer version for Firefox. That’s a big deal. If we have trouble sometimes trying to get a site look the same in all browsers, imagine trying to use the same debugging protocol. They even had to fork... [Read More]

Puppeteer Sharp Monthly Report - March 2019

We were able to ship v1.12 in February, ok it was in March, but let me count this as February :p Puppeteer v1.12 included quite an interesting refactor, introducing Worlds. This took us some time to adapt our code to that new implementation. What’s next I bet Puppeteer v1.13 is... [Read More]

Puppeteer Sharp Monthly Report - February 2019

We didn’t get a (Google’s) Puppeteer release last month, but that doesn’t mean that we didn’t make good progress on Puppeteer-Sharp. We were working a lot on tech debt. We tried to make our builds more reliable. Many builds tend to fail due to timeouts or race conditions, so we... [Read More]

C# wishlist - Nullable nulls shortcuts

I must admit that I love the way that Javascript evaluates truthy and falsy expressions. if (true) if ({}) if ([]) if (42) if ("foo") if (new Date()) if (-42) if (3.14) if (-3.14) if (Infinity) if (-Infinity) Coming from C# you tend to add > 0 or != '',... [Read More]
Tags: csharp dotnet

Pro Asynchronous Programming with .NET - Book Review

Pro Asynchronous Programming with .NET by Richard Blewett and Andrew Clymer was the third book on my list. About the book This book has some great explanations about the async internals in .NET. The problem I’ve found is that, maybe because it’s a book from 2013, it puts lots of... [Read More]
Tags: csharp books

Async in C# 5.0 book review

Async in C# 5.0 by Alex Davies was the second book in the list. It was a recommended reading on the Concurrency in C# Cookbook, so I knew it was going to be a good one. Now that I read both books, I would recommend Async in C# 5.0 as... [Read More]
Tags: csharp books

Puppeteer Sharp Monthly Report - January 2019

Happy new year Puppeteerers! (Is that even a word?) We launched v1.11 during December. The most important feature on v1.11 was drum rolls LINUX SUPPORT! I want to thank Dominic Böttger who setup our Linux CI and made some tweaks to make Puppeteer-Sharp work in Linux. We also worked a... [Read More]

Concurrency in C# Cookbook Book Review

Concurrency in C# Cookbook by Steve Cleary is the first of a series of books I planned to read to improve my async programming skills. In case you don’t know Steve Cleary, he’s an async rock star. His blog has great async posts, and his reputation on StackOverflow is impressive.... [Read More]
Tags: csharp books

Going deeper with async programming

When you start coding async apps in C# it looks super simple, almost magical. You put some asyncs here some awaits there, and you are done! But then, you start using asyncs more and more, and problems arise. As you don’t know how this new technology works, you start adopting... [Read More]
Tags: csharp books

A fairy tale about async voids, events and error handling

Let me tell you a story about async voids, SynchronizationContext, and async programming. A few days ago we got an issue on Puppeteer-Sharp describing two problems: Puppeteer-Sharp crashes with exceptions which cannot be caught. KeyNotFoundException trying to get a Frame The code was pretty simple: var launchOptions = new LaunchOptions()... [Read More]

Happy Birthday Puppeteer Sharp!

One year ago today I pushed my first commit to the Puppeteer-Sharp repo. As most “first commits” it was a small commit, adding the readme and the gitignore, but that commit marked the beginning of a year full of learned lessons. What did we accomplish so far? 18 releases 237... [Read More]

How do you spell 👹 in C#?

A few days ago, I had to implement a new feature on Puppeteer-Sharp. The library needed to be able to send emojis through its typing simulation. Trying to send and read an 👹 from a WebSocket might be quite confusing. You could get an □ on the other side or... [Read More]
Tags: csharp

C# wishlist - Internal interfaces

I know that changing how internfaces work in C# would be something hard to accomplish, and its implementation is quite “by the book”. But let me dream for a while and share this idea. When you create an internal interface, what you are saying is that any class implementing that... [Read More]
Tags: csharp dotnet

C# wishlist - Extension methods for events

Node.js has a pretty cool useful feature which is the ability to listen to an event only once. Using the eventEmitter.once() method, it is possible to register a listener that is called at most once for a particular event. Once the event is emitted, the listener is unregistered and then... [Read More]
Tags: csharp dotnet

Puppeteer Sharp Monthly Report - July 2018

The World Cup is here, but it didn’t stop is from releasing v1.1 in June! v1.1 is the first version created from a diff between two puppeteer versions: v1.0 and v1.1. This brought about some challenges, but let’s talk about features first. New Features The Downloader class has been improved... [Read More]

Puppeteer Sharp v0.7 Released!

We are shipping Puppeteer Sharp v0.7 with many cool new features: Element selectors and evaluation over elements. But our big challenge on v0.7 was one of the hard things in computer science: Naming Things. Puppeteer has these 5 cool functions: $(selector): It calls document.querySelector and returns an ElementHandle. $$(selector): It... [Read More]

Puppeteer Sharp Monthly Report - May 2018

April was a great month for Puppeteer Sharp. We launched v0.4, which is huge! But not only that, we’ve got two more contributors. That means that I had to spend more time getting the issues and milestones ready for them as well as doing more code review. I wouldn’t have... [Read More]

Puppeteer Sharp v0.4 is here and it's huge!

I’m so excited to announce that Puppetter Sharp v0.4 is ready to download from Nuget. It includes more than 25 Page APIs such as: Full Page.GoToAsync/ReloadAsync support Emulate/EmulateMedia/SetViewport/SetUserAgent Get and Set cookies SetContent Evaluate javascript functions and expressions WaitFor expressions await page.GoToAsync("http://www.mysite.com"); //Do you need to wait for your javascript... [Read More]

Puppeteer Sharp Monthly Report - April 2018

March was an exciting Month for Puppeteer Sharp. CI Server is up an running. Version 0.3 was released, implementing IDisposable, many Puppeteer features (such as User dat dir support) and also fixing many process leaks. We also released v.0.3.1, adding .NET Framework support. We are now working on v0.4, which... [Read More]

Killing boilerplates in ASP.NET - Volume 1

We all hate boilerplates, right? That bunch of code that you copy over and over again. Boilerplates are not a complex piece of code but code so simple that we don’t take time to think about it. In this post, I will cover how to reduce some boilerplates we use... [Read More]
Tags: csharp aspnet

Implementing PageSession in ASP.NET Webforms

Maintaining the state of a large page can be quite a challenge. Let’s say you were asked to implement a page with four tabs, each with two GridViews. Each Gridview would be editable and you would have one save button which would execute all database actions. The most common solutions... [Read More]
Tags: csharp aspnet

Puppeteer Sharp Monthly Report - March 2018

Puppeteer Sharp v0.1 released! I’m super excited to announce that the first usable version of Puppeteer Sharp is ready to download from Nuget. The first milestone on the roadmap is completed. What can you do so far? PDF support You can export any page to PDF file. var browser =... [Read More]

Implementing a BasePage in your ASP.NET Webforms Project

I started to prepare two posts, one about Page Sessions and the other one about reducing QueryString, ViewState and Session boilerplate. But I realized that both solutions were implemented on a BasePage. So I felt that I first needed to write about the importance of implementing a BasePage in a... [Read More]
Tags: csharp aspnet