2017 in Retrospective, 2018 in Perspective

site2017 was a difficult year for me, for personal reasons. So I didn’t blog that much, to be honest.

I was renewed again as Microsoft MVP, an excellent way to start the year! Hooray! Open-mouthed smile

In 2017 my second hardcopy book, Mastering ASP.NET Core 2.0, came out. It was tough, as it is a long book, and it spread from ASP.NET Core 1.1 to 2.0, but I am generally pleased with the result. You can get it in print or ebook format.

I started, with the support from Fusion Cowork and the Aveiro development community, the Fusion/Aveiro Tech Talks here in Aveiro. We’ve had 3 sessions so far, and more are on the list.

Entity Framework Core 2 was released and I talked about it. Also posted about ASP.NET Core 2, but not as much as I would have liked to.

I also covered Postal.NET, my pet project for writing decoupled .NET standard applications.

Started writing content for Stackify, and I got two posts out: .NET Core 2.1 Release: What to Expect in 2018 and How to Call WCF Services and Create SOAP Services with ASP.NET Core. More to come! Winking smile

In early 2017 I made some prophecies about what technologies would be cool that year. Looking back, I can see that I got some of them right, others probably not. I didn’t cover R or WebAssembly, and I was happy I didn’t, as I really didn’t see much going on around them – but I may be wrong, though. I also left out Blockchain, which seems to be the next cool thing. Maybe this is the year for them!

I didn’t write a single post on ASP.NET WebForms or SharePoint; this probably means that they are dead to me. I basically only work with ASP.NET Core or .NET Standard nowadays.

I would like to resume my old classics – NHibernate pitfalls, Entity Framework pitfalls – plus MongoDB in .NET, Visual Studio tips and Java vs C#. All are in the pipeline, plus some C# language improvements and some MediatR, NHibernate and Elasticsearch too! Winking smile

Something that I’ve been working on is the list of Portuguese (meaning, written by portuguese-speaking developers or in portuguese) development sites: https://weblogs.asp.net/ricardoperes/sites-portugueses-sobre-desenvolvimento-de-software. I would really like to keep this up to date! For this to be helpful, however, it should only contain “live” sites, those that have activity. I count on you folks to keep me posted on that! Winking smile

Anyway, thank you all for reading this blog, you’re the reason I write it! Keep dropping by and sending me your comments/questions/corrections/complaints! Smile

  • Technologies to Follow in 2017

    Introduction

    A lot is happening and it’s difficult to keep track of everything. Based on my work and on what I see over the Internet, I decided to write a post about the technologies – tools, languages, servers, operating systems, etc – that I find more interesting and promising. I know, some of these will be controversial, others are not exactly new, I am even mixing totally different things together, but, hey, it’s my opinion – feel free to share your objections here! Winking smile

    I am not going to cover the myriad of JavaScript frameworks, because they’re just too many. I will only talk about what I know. For that same reason, I’m not talking about Akka, Go, Scala, Python, Ruby, Erlang, etc, because, honestly, I never used them. Also, I don’t cover Java, although Kafka is written in Java, because I haven’t used Java in anger for more than 10 years. I read that it’s having some problems, with some key people leaving Oracle, persisting security problems and the delaying of releases, but I’m sure Java is here to stay. Others will be more fit to talk about it.

    .NET Core

    .NET Core is Microsoft’s next version .NET framework, only this time totally modular, open source and multi-platform. Runs on Linux and MacOS, not just Windows. Still doesn’t have all the features of classic .NET, but it will get there: next version (2.0) will more than double the supported APIs. Right now, it’s perfect for writing .NET MVC apps and web APIs that need to run in other operating systems, including inside Docker containers. Get it from https://github.com/dotnet/core.

    Node.js

    A JavaScript runtime for the desktop instead of the browser. Uses an event-driven, asynchronous I/O model for high performance and scalability. Has probably the largest ecosystem of open source libraries in the world – NPM. Free and open source, with new features continuously being released. Currently uses Google’s V8 engine, but Microsoft submitted a patch to allow it to run Chakra, it’s JavaScript engine! Exciting times! Its site is https://nodejs.org.

    Docker

    You favorite container technology! Now supported in both Amazon Web Services and Azure, and with native support in Windows Server 2016. This is a must have for highly scalable applications. Free but it’s possible to get a paid repository online. A lot going on around it, the only problem is that things tend to change in non-retro-compatible ways, still need maturing. See more at http://docker.com.

    Elasticsearch

    A distributed and open source search engine based on Lucene. A blazing fast NoSQL database with replication capabilities, it is the most widely known component of the ELK stack, together with Kibana (for reporting and visualizations), Logstash (for data import) and Beats (for data shipping). Even Azure Search uses it behind the covers. Free but some tools are paid. Get it from http://elastic.co.

    ECMAScript 2015

    The next generation JavaScript, also known as ECMAScript 6. Heavily influenced by TypeScript, it offers a number of features from compiled languages, such as lambda functions, classes, type safety, etc. Before it’s available everywhere, people are using Babel.js to compile it to classic JavaScript. Google Chrome’s V8 engine already supports a great deal of it, as does Firefox. The specification is available here: http://www.ecma-international.org/ecma-262/6.0/.

    HTML5

    Is there any other, I hear you ask? Well, except if you need to support that old two-letter browser who had an infamous version 8, not really. Together with HTML 5 came a wealth of APIs that now allow us to have near-desktop quality apps on the web, and in some mobile browsers too. Latest standard is 5 but 5.1 is due to come out this year. Interestingly, HTML5 is more and more not just about web applications but also being used for desktop ones: for example, the Spotify desktop client is an HTML5 app. The specification is available at https://www.w3.org/TR/html5.

    Kafka

    A high throughput, low-latency open source message broker from the Apache foundation. Can stream data in real-time for massive simultaneous clients and has bindings for several languages. Similar to a distributed transaction log with exactly once semantics. More info here: https://kafka.apache.org.

    TypeScript

    A superset of JavaScript offering type safety and class-based object-oriented features. Nice wrappers around promises using similar syntax to C#’s async/await. It is compiled to JavaScript, so it can run anywhere JavaScript can. Free license. The official site is https://www.typescriptlang.org.

    MongoDB

    An open source NoSQL document database designed for high performance and with interesting clustering features. Mappings for all common languages, including scripting ones. With it you get JSON storage, indexes and automatic expiration. With free and commercial licenses. See more at http://www.mongodb.com.

    Git

    A free and open source distributed source control from the author of Linux. Now being used everywhere, even Microsoft is using it instead of their own TFS. Not an easy beast to master, I may add. Also worth mentioning GitFlow, a proposed workflow for branching and release management. The official site is https://git-scm.com.

    Nginx

    A high performance web server, HTTP cache and reverse proxy server for several TCP protocols. Can serve .NET and any other language, probably best used as a reverse proxy, particularly in the case of .NET Core. Runs on Windows and several UNIX flavors. It is free to use. Available from https://www.nginx.com.

    Octopus Deploy

    An automated deployment and release management tool for .NET applications. Latest versions can deploy both web apps as well as Windows services. Plays nicely with Continuous Integration and build tools such as Jenkins and TeamCity. Both free and commercial licenses. The web site is https://octopus.com.

    Azure

    Microsoft’s Cloud offering, the competitor of Amazon Web Services. Loaded with powerful services and features, which include amazing machine learning services, containerization as a service, queuing, and anything that can be expected from a Cloud service. Possible to get a time-limited trial for free. The official site is https://azure.microsoft.com.

    Amazon Web Services

    One of the two major players in the Cloud market, the other being Azure. Still has the biggest market share and offers a number of interesting features. Leaning slightly more towards Java and JavaScript than to .NET. Anyone can get a free account, as long as a credit card is supplied. See more at https://aws.amazon.com.

    Linux

    The free and open source operating system that just a few years ago Microsoft compared to a virus! Based on UNIX, now not just for geeks, it is everywhere, especially with the arriving of Docker. Several distributions available, to match anyone’s preferences, some free and some commercial. Windows 10 now even runs bash natively! See more at https://kernel.org.

    Visual Studio Code

    A powerful and extensible yet lightweight IDE from Microsoft based on GitHub’s Electron, which can run in a number of platforms, from Windows and Linux to MacOS. Includes support for a number of languages, Git integration, debugging capabilities – which make it stand from others such as Sublime or Atom – and an extension mechanism. Hey, it’s free! Get it from http://code.visualstudio.com.

    Xamarin

    A cross-platform implementation of .NET, for Windows Phone, Android and iOS. Before .NET Core came along – in fact, even after that – it is the preferred tool for creating applications that need to target multiple platforms. Now offered for free by Microsoft. but the Enterprise version will require a Visual Studio paid license. Microsoft promised to make it open source. Official site is https://www.xamarin.com.

    Google Analytics

    A web analytics service offered for free by Google, although paid subscriptions also exist. Can be used to track not only traffic but also custom events, and also in mobile apps. It’s unbelievable the amount of information that one can get out of it. See it in https://analytics.google.com.

    SQL Server 2016

    In-memory tables, JSON support, Query Store, integrated R, row and column-level security, etc, make this one of the most interesting versions of SQL Server ever. Available for free with limitations as Express edition, and as a paid license. More info from http://microsoft.com/sqlserver.

    Let’s Encrypt

    Free SSL certificates for the masses! No need to pay for a certificate, now you can get any number for free. Easily installable in any server (even IIS), but expires every 90 days. Get yours from https://letsencrypt.org.

    TensorFlow

    TensorFlow is Google’s second generation open source library for machine intelligence. It uses data flow graphs to represent mathematical operations and is the core of several Google products, such as Gmail, Google Photos and others. It offers Python and C++ bindings and recently it compiles on Windows as well as Linux and Mac OSX. Get it from https://github.com/tensorflow/tensorflow.

    GitLab

    GitLab is a free (with an enterprise license too) repository manager built on Git. It is fast moving with a plethora of very useful features. You can install it on premises or run it in the cloud. Offers integration with LDAP servers for authentication, offers a pretty decent Continuous Integration feature, plus a lot of other cool stuff. Check it out at https://about.gitlab.com.

    Redis

    A distributed cache with open source implementations in Linux and Windows. Currently, probably the most used one. Offered by both Azure and AWS. Not just BLOB cache, offers interesting structures. Learn about it at https://redis.io.

    Conclusion

    So, what are your thoughts – am I missing something? Do you agree or disagree with my choices? I’d love to hear from you!

    2016 in Review

    Another year is over, time to review what I did this time… so here it goes:

    Some trends:

    Not all was good, though… was unable to finish on time an article for a development magazine… and was late on delivering another ebook… and couldn’t start another book, due to pure lack of time… more news on the first two next year, hopefully!

    Next year I imagine I will be writing more and more on .NET Core and specifically ASP.NET Core. Probably some Elasticsearch and Docker (new!) too. Some “classic” topics will have more contents soon:

    Azure and AWS will probably pop up too. Too soon to tell!

    Anyway, I wish you all an excellent 2017! Thanks for visiting me, keep dropping by! Winking smile

    Coming Up Next

    The following topics have been somewhat neglected… I promised to write follow ups to existing posts, but have been unable to so far. Hopefully I will resume them soon, in some cases I already started working on them:

    As always, I’m keen to hear from you, so, do drop me a note if you have any questions or suggestions!

    .NET Encore

    Wiktionary defines encore as “A brief extra performance, done after the main performance is complete”. Guess what, it kind of describes what .NET Core is!

    Some of you may be asking: why do we need this at all? Don’t we already have Portable Class Libraries (PCL), Windows Phone (WP) and Universal Windows Platform (UWP) apps? Well, for once, UWP is just for Windows 10, Windows Phone targets the current – soon to go away – versions of Windows Phone 8.x, and PCLs are a terrible mess.

    What developers have been asking for is a true One platform: cross platform (pardon the repetition), open source, modular and modern, meaning, fully embracing separation of concerns, dependency injection, inversion of control and all the other patterns that we have been using for quite some time now. That’s what .NET Core is!

    In a nutshell, .NET Core is a set of APIs that are made available as open source and cross platform, meaning, the same functionality will be available on Windows, Mac, FreeBSD and Linux, but also, why not, Android and iPhone. It was (and is currently being) written from scratch with performance, modularity and scalability as first order concerns. It is composed of several Nuget packages, and this fragmentation will likely be a problem to start, because people won’t know what is the package to add for something that they have been doing for ages without the need of one, or maybe just one – Entity Framework Core, for example, is spread around EntityFramework.SqlServer, EntityFramework.Commands, EntityFramework.Core, EntityFramework.Migrations, etc. Fortunately, sites such as http://packagesearch.azurewebsites.net can help with this process.

    This raises some challenges but also opens new opportunities. Let’s face it, Windows Server licenses are not exactly cheap, and having the possibility to deploy backend applications to Linux is very attractive. Yes, people have been using the .NET framework to build powerful enterprise-level application on Windows, and can continue to do so, but now we can reach out to other operating systems knowing that it is going to be fully supported by Microsoft. To make it lighter, the upcoming Windows “Nano” Server will only run .NET Core and will no longer feature a user interface. You can now contribute to .NET Core, you have access to the code and you can send your modification requests.

    Yes, we won’t be able to use WPF, Windows Forms and Web Forms with .NET Core, at least, for now. WPF and Windows Forms have strong dependencies on Windows internals, and Web Forms has been deprecated in favor of MVC, but I guess it will just take some time until a clone of it appears on .NET Core, there’s nothing preventing it, quite the opposite. These APIs are still there, and will definitely continue and evolve. We will need to get accustomed to the new names, tools – welcome back, command line! – and APIs, but, as soon as Microsoft finally stabilizes the names, it won’t take long.

    Interesting times, for sure! Winking smile

    Sites Portugueses Sobre Desenvolvimento de Software

    Actualizado a 11/05/2017

    (Portuguese only, sorry!)

    Os seguintes sites sobre desenvolvimento de software, nas suas várias vertentes, são escritos por portugueses, seja em português, seja em inglês. Não se trata de descriminação, mas apenas de divulgar o que é feito por portugueses, onde quer que se encontrem.

    Pretende-se que seja uma lista de sites vivos, ou seja, que tenham tido alguma actividade no ano transacto ou no actual. Irei periodicamente verificá-los.

    Eventualmente, irei incluir outra informação, por exemplo, principais tecnologias abordadas (ex: Java, .NET, SharePoint, SQL Server, Dynamics, etc).

    Se conhecerem outros, se pretenderem corrigir ou complementar alguma informação, ou se não quiserem que o vosso site apareça listado, contactem-me!

    Nome URL Autor(es)

    Língua

    Development With A Dot https://weblogs.asp.net/ricardoperes Ricardo Peres (@rjperes75) Inglês
    Broculos http://www.broculos.net Dércia Silva e Nuno Freitas Inglês
    My Time Break For SharePoint http://aaclage.blogspot.pt André Lage (@aaclage) Inglês
    XptCRM http://www.xptcrm.com Pedro Azevedo (@azevedo_pedro) Português
    Mónica’s Blog http://mrodriguesblog.azurewebsites.net Mónica Rodrigues (@monica85rodrig) Português
    Adão Feliz http://adaofeliz.com Adão Feliz (@adaofeliz) Inglês
    typeof(saramgsilva) http://www.saramgsilva.com/ Sara Silva (@saramgsilva) Inglês
    Niko Neugebauer http://www.nikoport.com Niko Neugebauer (@nikoneugebauer) Inglês
    André Vala https://andrevala.com André Vala (@atomicvee) Inglês
    Bruno Lopes’ Lack of imagination http://blog.brunomlopes.com Bruno Lopes (@brunomlopes) Inglês
    Rui Quintino Blog https://rquintino.wordpress.com Rui Quintino (@rquintino) Inglês
    Tiago Duarte http://ftduarte.blogspot.pt Tiago Duarte Inglês
    Ponto de Partilha http://pontodepartilha.blogspot.pt Pedro Mateus Inglês
    Sandro Pereira https://sandroaspbiztalkblog.wordpress.com Sandro Pereira (@sandro_asp) Inglês
    Rui Romano Blog https://ruiromanoblog.wordpress.com Rui Romano (@ruiromano) Inglês
    UmProgramador.NET http://umprogramador.net Ricardo Santos (@kamoleano) Inglês
    Tech Talk PT https://techtalkpt.wordpress.com Ricardo Magalhães Inglês
    Stepping stones for crossing technological ponds https://mystepstones.wordpress.com Rui Melo (@ruimelo) Inglês
    Demétrio Silva – Especialista SharePoint e SQL Server https://demetriosilva.wordpress.com Demétrio Silva (@demetriosqldba) Português
    Rui Machado Blog https://rpmachado.wordpress.com Rui Machado (@ruimachado89) Inglês
    Exceptional Code https://exceptionalcode.wordpress.com/ João Angelo (@jmpangelo) Inglês
    André de Carvalho http://acarvalho.tiddlyspace.com André Carvalho Inglês
    Murilo Miranda http://www.sqlshack.com/author/murilo-miranda Murilo Miranda (@murilocmiranda) Inglês
    Pedro’s Tech Mumblings http://build-failed.blogspot.pt Pedro Sousa Inglês
    Jorge Moura https://ojmoura.wordpress.com Jorge Moura (@jorge_moura) Inglês
    Roberto Cortez http://www.radcortez.com Roberto Cortez (@radcortez) Inglês
    Nuno Árias Silva Website http://www.nuno-silva.net Nuno Árias Silva (@nunoariassilva) Inglês
    Digital Mind Ignition http://digitalmindignition.com Alexandre Marreiros (@alexmarreiros) Inglês
    Visual Basic em Português http://www.jorgepaulino.com Jorge Paulino (@vbtuga) Português
    Let’s Exchange http://letsexchange.blogspot.com Nuno Mota (@nfmota) Inglês
    João Sousa Blog https://joaoeduardosousa.wordpress.com João Sousa (@joaoedusousa) Inglês
    Sérgio Agostinho Dev http://sergioagostinho-dev.blogspot.pt Sérgio Agostinho Inglês
    Guilherme Ferreira http://gsferreira.com Guilherme Ferreira (@gsferreira) Inglês
    WHERE BLOG = ‘PDRSNTSFRRR’ http://pdrsntsfrrr.com Pedro Ferreira (@pdrsntsfrrr) Português
    vsloureiroblog https://vsloureiro.wordpress.com Vitor Loureiro Inglês
    pedrolamas.com – Windows Development https://www.pedrolamas.com Pedro Lamas (@pedrolamas) Inglês
    ruimarinho.NET http://ruimarinho.net Rui Marinho (@ruiespinho) Inglês
    André Varandas http://andrevarandas.com André Varandas (@iamvarandas) Inglês
    Rambling about .NET https://nunofilipecosta.wordpress.com Nuno Filipe Costa (@nunofcosta) Inglês
    The Blinking Caret http://www.blinkingcaret.com Rui Figueiredo (@ruidfigueiredo) Inglês
    Ricardo Fiel https://ricardofiel.com Ricardo Fiel (@theplastictoy) Inglês
    Adão, the developer http://adaodeveloper.blogspot.com Pedro Gomes Adão Inglês
    Fábio Carvalho https://fcsharepoint.com Fábio Carvalho (@fcsharepoint) Inglês
    Nuno Cancelo https://nunocancelo.wordpress.com Nuno Cancelo (@masterzdran) Inglês
    Miguel Alho – Ramblings on developing applications http://www.miguelalho.pt Miguel Alho (@mytymyky) Inglês
    The Privilege of Making the Wrong Choice http://www.eduardopiairo.com Eduardo Piairo (@edpiairo) Inglês
    Tiny Bits https://medium.com/bitmaker-software BitMaker Software (@bitstiny) Inglês
    Pedro Félix’s shared memory https://pfelix.wordpress.com Pedro Félix (@pmhsfelix) Inglês
    HANDS ON SharePoint http://sharepoint.handsontek.net João Ferreira (@joao12ferreira) Inglês
    André’s ramblings on the web https://andreduarte.info André Duarte (@onemanclapping) Inglês
    Agile Management Walkthrough https://pedrogustavotorres.wordpress.com Pedro Gustavo Torres (@_pedro_torres) Português
    Mr Fields https://vetras.github.io Carlos Campos (@vetraspt) Inglês
    My ramblings on Azure http://007fff.blogspot.pt Fernando Madruga (@FMBMadruga) Inglês
    Tiago Costa blog http://www.tiagocosta.eu Tiago Costa (@tiagocostapt) Inglês
    Lusocoder https://lusocoder.com João Cardoso (@joaocardoso) Inglês
    Luís Gonçalves | Sharing interests https://luisfsgoncalves.wordpress.com Luís Gonçalves Inglês
    Rui Jarimba https://ruijarimba.wordpress.com Rui Jarimba (@ruijarimba) Inglês
    António Lourenço http://antoniolourenco.com António Lourenço (@ciistado) Português

     

    2015 in Retrospective

    Well, 2016 has arrived, time to look at 2015!

    This was the year I was first awarded as Microsoft MVP – by the way, I got renewed! – and the year I left CRITICAL Software for Simplifydigital and started coming to London every month. A very exciting and challenging year indeed. Made lots of new friends and started using loads of new technologies. A lot was unsaid, but something got registered!

    Here is my personal list of my favorite blog posts of the year, in no particular order (well, from recent to older):

     

    I can see some trends, not just in this list, but in all of the published posts:

    • Moving to ASP.NET 5;
    • Gradually dropping Web Forms in favor of MVC;
    • More Entity Framework than NHibernate;
    • Posts on plain .NET/C# instead of a particular API;
    • Some contents on SharePoint too, which will probably continue;
    • I wrote my first (and probably the last) posts on WPF/Silverlight, although I didn’t pick any for this list.

     

    I also continued some of my “classic” topics:

     

    And started new ones, which will continue throughout the year:

     

    Did a couple of book reviews for Packt Publishing and was even one of the technical reviewers of Learning NHibernate 4.

    Also, I started to gather a list of portuguese (meaning, authored by portuguese people or written in portuguese) on development, but it has proven difficult. I will get back to this soon.

    I had the chance to speak at a number of events:

     

    And my first article for Programar magazine was out, on ASP.NET 5, and even made the cover of the June edition!

    Last but not least, I released another ebook on the Syncfusion Succinctly series: ASP.NET Multitenant Applications Succinctly Released. There will be some news on this later this year, stay tuned! Winking smile

    I have to thank all of my friends and colleagues (current and former) and all the great people at CRITICAL Software, Simplifydigital, Microsoft, Packt Publishing, Syncfusion, my MVP colleagues and all my friends in the Portuguese development communities that provided inspiration, friendship and support and who had the patience to put up with me!

    Now, coming back to 2016, I can imagine I will be talking more about:

    • ASP.NET 5 and MVC 6;
    • Azure;
    • SharePoint 2016;
    • Entity Framework 7.x;
    • MongoDB;
    • ElasticSearch;
    • SQL Server 2016;
    • Docker;
    • JavaScript frameworks;
    • Node.js.

     

    Well, that’s it. Have a great 2016 and keep dropping by! Winking smile As always, I’d love to hear from you!

    Ongoing Series of Posts

    So, for your – and my – information, these are the post series currently going on in my blog:

    Comunidades Portuguesas de Desenvolvimento

    (This post is in Portuguese only)

    Para quem não conhecer, existem as seguintes comunidades portuguesas de desenvolvimento e afins:

    Se tiverem conhecimento de outras, por favor, avisem!