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

Entity Framework Core Cookbook – Second Edition

Some of you may be aware that my new book for Packt Publishing is out! It is titled Entity Framework Core Cookbook – Second Edition because it was meant to be the second edition of Entity Framework 4.1: Expert’s Cookbook. In fact, it is mostly a full rewrite.

It is organized in chapters:

Chapter 1: Improving Entity Framework in the Real World

Chapter 2: Mapping Entities

Chapter 3: Validation and Changes

Chapter 4: Transactions and Concurrency Control

Chapter 5: Querying

Chapter 6: Advanced Scenarios

Chapter 7: Performance and Scalability

Appendix: Pitfalls

When I started writing it, .NET Core was still in early RC1. Things changed a lot from RC1 to RC2 and then again to RTM, so I had to revisit all chapters in the end. It was a pity that EF Core 1.1 was released shortly after the book was closed, because I could have talked about it too. Also, there are things that I could have covered, like extending Entity Framework Core, but there were so many of them! Smile Maybe in a future time!

Those of you who are interested can get a copy from the Pack Publishing site or from other sellers, either as an e-book or in hardcopy.

I want to thank everyone at Packt Publishing, namely Chaitanya Nair, Merint Mathew and Siddhi Chavan for their professionalism and support!

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 16/03/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

 

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!

Day Against DRM 2015 Campaign

For those who don’t know, today is the International Day Against DRM!

To celebrate that, Packt Publishing is offering all their ebooks and videos for only 10$ for the next 24 hours: http://bit.ly/1zMa8Sg.

You can find more information on their site: https://www.packtpub.com/packt/offers/day-against-drm.

2015 Banner

So, go get them! The campaign only lasts 24 hours! Winking smile