warning CS0618: ‘Html.FromHtml(string)’ is obsolete: ‘deprecated’

Recently, while supporting a team updating their dependencies on Xamarin.Android I found some code similar to the following:

Starting with API level 24, Html.FromHtml(string) is deprecated and Html.FromHtml(string, FromHtmlOptions) should be used instead.

Here’s how the code looks after updated:

The system does not support local kernel debugging

If you’re trying to do some local kernel debugging with one of Windows Debugging Tools’ debuggers and Windows isn’t booted into debug mode you’ll get a message like one of the following (all commands run from an elevated command prompt):

kd -kl

Microsoft (R) Windows Debugger Version 10.0.15063.400 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

The system does not support local kernel debugging.
Local kernel debugging requires Administrative privileges.
Only a single local kernel debugging session can run at a time.
Local kernel debugging is disabled by default. You must run “bcdedit -debug on” and reboot to enable it.
Debuggee initialization failed, HRESULT 0x80004001
Not implemented

windbg -kl

WinDbg:10.0.15063.400 AMD64
The system does not support local kernel debugging.

Local kernel debugging requires Administrative
privileges, and is not supported by WOW64.
Only a single local kernel debugging session can run at a time.
Local kernel debugging is disabled by default. You must run ‘bcdedit -debug on’ and reboot to enable it.

You can enable Windows debug mode by using…

bcdedit.exe -debug on

 or msconfig.exe, but if you have BitLocker enabled for your OS drive, you’ll have to have to enter the recovery key or recovery password.

Here’s the message from msconfig.exe:

System Configuration
BitLocker Drive Encryption is enabled on your OS drive. Because these changes modify the machine’s boot settings, the machine will enter recovery mode at next boot and you will need to provide a BitLocker recovery key or recovery password. Are you sure you want to proceed?
Yes No

Depending on what you’re up to, that’s just too much of a hassle. Fortunately there’s a tool from Sysinternals that removes the need of booting Windows into debug mode: livekd.

By default, livekd will run kd.exe, but you can tell it to run WinDbg by passing the -w option:

livekd -w

Several other options can be set when running livekd (see the link above for details). The ones it doesn’t understand are passed on to the chosen debugger.

Important to note that the feature set of the debugger when running through livekd is not the same as when running without it. See the docs for more information.




warning CS0618: ‘Device.OS’ is obsolete: ‘TargetPlatform is obsolete as of version 2.3.4. Please use RuntimePlatform instead.’

Here is a couple of compiler generated warnings I found on project I was recently reviewing:

  1. warning CS0618: ‘Device.OS’ is obsolete: ‘TargetPlatform is obsolete as of version 2.3.4. Please use RuntimePlatform instead.’
  2. warning CS0612: ‘TargetPlatform’ is obsolete

A CS0612 is generated when the code references a type or member to wich the parameterless ObsoleteAttribute was applied.

CS0618 is generated when the code references a type or member to wich a parameterized ObsoleteAttribute was applied.

In this case, the reference to Device.OS has to be replaced with a reference to Device.RuntimePlatform.

Since Device.OS was an enum of type TargetPlatform and Device.RuntimePlatform is a string, it is necessary to update the right hand of the expression as well.

For that you can use one of the string constants defined on the Device class:

  • iOS;
  • Android;
  • WinPhone;
  • UWP;
  • WinRT;
  • macOS;

Here’s how the code looked like originally:

And here’s how the looks code after the update:

Getting the latest version of Sysinternals’ tools

You can easily grab the latest version of any Sysinternals tool pointing your browser to https://live.sysinternals.com

Say you want to run Process Monitor, point your browser to:


and voila!

All browsers will download the file to your system, but Internet Explorer and Edge will give you the option to run the tool automatically as soon as it finishes downloading.

But here’s a neat trick I learned today while reading the first chapter of Troubleshooting with the Windows Sysinternals Tools (2nd Edition):

You can run any Sysinternals tool directly from a UNC path such as the following:


Being a UNC share, you can map it as a local drive and use it from Windows Explorer, from the command line or from PowerShell.

The book goes on to tell that for this to work, a Windows Service called WebClient needs to be running.

On recent versions of Windows it is stopped by default. There are a handfull of ways to start the service – both explicitly and implicitly. Some of them require user elevation, others don’t, but the neatest way I didn’t find in the book:

pushd \\live.sysinternals.com\tools

pushd will map the share to the first available drive starting from z: and change the current directory to it.

Although running this way is kind of slow (the files are being downloaded from the internet after all…), it is still usefull for those situations where you wanna get in, do whatever you gotta do, and leave without having to worry about deleting any files later.

When you’re ready to remove the mapping, popd will remove it and change the directory back to the one that was current when you pushd in.


ASP.NET For The oWin

It’s been a while since my last post but I’m eager to come back blogging again.

I’ve started at a new job back in May supporting software development teams and since then I’ve been getting back up to speed with the .NET Framework and studying like crazy all things ASP.NET.

The ASP.NET stack has changed a lot in the ten years since the last time I looked seriously into it as a whole while preparing for certification exams. Using just user management and role management as an example, in the span of ten years ASP.NET went from ASP.NET Membership to ASP.NET Simple Membership to ASP.NET Universal Providers to ASP.NET Identity (to ASP.NET Core Identity? – I haven’t yet taken a look into that to see how different it is from its classical ASP.NET counterpart).

The good news is that for the most part it all has gone open source. I feel that not many people appreciate how much the source code worths as a learning tool.

Now let me get back into building an OAuth 2.0 authentication server using OWIN.

High Performance Browser Networking

Acabei de terminar a leitura do High Performance Browser Networking, uma ótima introdução ao tópico de como o browser lida com a infra-estrutura de rede.

Eu já tinha alguma noção de como a(s) rede(s) pode(m) impactar aplicações rodando em PCs, mas nunca tinha pegado pra ler material que discutisse isto sob o ponto de vista de aplicações mobile, principalmente de apps que rodam quando o celular está conectado a redes 3G, 4G, etc.

Dado que o acesso à internet se dá cada vez mais por redes wireless (Wi-Fi, 3G, etc), o tipo de informação contida no livro é fundamental para o projeto de sistemas que pretendam oferecer um mínimo de usabilidade a seus usuários.

O livro pode ser lido gratuitamente online em https://hpbn.co/, mas se prefere um livro um livro impresso, pode encontrá-lo na Amazon e outras lojas online.


Um ano de Poética em Construção

Pessoal, neste sábado (27/08) a partir das 15h o Grupo de Estudos Poética em Construção estará celebrando um ano de atividades e estaremos na Casa Elefante mostrando os trabalhos dos participantes do grupo além de outras atividades ligadas à fotografia.

Estarei com uma projeção da minha série “Bom Retiro Aluga“.

A Casa Elefante fica na Rua Dr. Cesário Mota Júnior, 277 ali pertinho da Santa Cecília.

Outras informações podem ser encontradas na página do evento.

Seria muito bom tê-lo lá conosco. Aparece lá!

Bye bye, Evernote. Hello once again, OneNote

It makes really, really bad PR removing features from a product – whatever it’s price.

It’s been proven over and over again by behavioral psychology and behavioral economy that most people are much more sensitive to loosing what they already got than earning something new.
It’s all about setting expectations. When you install a trial version, you know the product will eventually stop working because that’s part of the deal.

But when there’s multi-tiered product with different versions containing different features at different price points, most users don’t expect to loose features for a given tier. People don’t expect to be be downgraded even if all they signed up for was the free version.

Definitely, that’s not how to grow a customer base. Quite the other way around.

Bye bye Evernote.
Hello once again, OneNote.


Sobre O Estado da imprensa escrita

Hoje pela manhã recebi a newsletter do Estadão.
Entre as notícias, uma me chamou a atenção: As 10 cidades mais baratas do mundo para turistas. E as 10 mais caras.

Clico no link e caio numa página onde só tem imagens. Todas com a mesma legenda:

“O site de planejamento e reserva de viagens TripAdvisor divulgou nesta terça-feira (19 de julho) o índice TripIndex Cidades, que identifica as cidades mais baratas e mais caras do mundo para turistas… … Confira a lista

A ênfase no “Confira a lista” é por minha conta. Não tem lista. Não tem o nome da cidade a qual se refere cada uma das fotos. Não diz quais as cidades mais baratas, tampouco quais as mais caras.

Olhando os comentários, vejo vários leitores reclamando sobre a falta de mais informações.

Faço uma busca no Google e entre as primeiras respostas vem um link para uma “matéria” no próprio Estadão: As cidades mais baratas do mundo para turistas; veja lista.

Ênfase no “veja lista” [sic] por minha conta. Não tem lista. De novo.

Faço nova busca no Google. Desta vez procurando pela fonte, o próprio TripAdvisor. A pesquisa trás links para vários sites que de alguma forma reproduzem a notícia. Finalmente encontro um link para a fonte que está em inglês.

Decido postar o link nos comentários para facilitar a vida de outros leitores.

Vejo o comentário de outro leitor dizendo que o nome das cidades está lá sim. Basta passar com o mouse em cima da imagem, que aparece uma tooltip com o nome da cidade. (In)felizmente, meu celular não tem mouse.

Meu interesse pelo assunto acaba. Já tenho o que eu queria. A informação. Direto da fonte. E a vida segue.