Attie Heunis's Journey

The ramblings of a Caucasian African American

  • Philadelphia between Christmas & New Year

    Yesterday we took a(nother) Philly sightseeing trip. This time we took the train with SEPTA’s Independence Pass. Friends informed us of this pass and for folks in the suburbs like us, it’s perfect for a day-trip to Philly. I always say this when we go in to Philly for fun, but it’s a great city. So much to see and do there at any time of the year. But between Christmas & New Year’s the city makes an extra effort.

    We went to China Town, Macy’s (saw the Christmas show) & Dilworth Park where Elke – always up for a challenge – went ice skating. Then we had dinner at El Vez, an outstanding Mexican Restaurant.

    It was such a nice day. And to top it all the Eagles won their game to reach the NFL playoffs so that added to the great vibe.

    Fly Eagles Fly!

  • Having been in software for 20+ years, the one thing that remains consistent is change. As soon as you think you have a technological stack working perfectly something new is released and disrupts it all! New technology often provides significant value so developers & architects are eager to utilize it, but it’s not always clear where “things go”.

    I also understand very well that technology preferences are like the proverbial religious wars. Azure vs AWS, Angular vs React, Java vs C#, Linux vs Windows and so forth. And that’s OK. However this post is for people like myself, who feel comfortable with Microsoft’s .NET stack. The .NET Framework has been around since 2002 and that has allowed it to gain a lot of maturity. With .NET Core, Microsoft have applied the many lessons from .NET Framework to build a new & better platform. Read more about why enterprises are turning to .NET Core. I have no hesitation in recommending .NET Core for your enterprise-level web application.

    I do also think it’s worth mentioning that Azure is purposefully not positioning themselves as Microsoft only providers. In fact, there’s a recent stat that shows how Linux now dominates Azure – who would’ve predicted this only a few years ago!?

    So, at this moment time, I would use these components to build a brand new enterprise-level web application.

    Infrastructure

    Azure Web App on Azure App Service

    Yes I know, what about containers? I love containers! Containers are great if you want to avoid maintaining an OS in the broad sense and you want to build for different OSes and providers. Docker has wonderful products and is fully supported in Azure with both Azure Kubernetes Services (AKS) and App Service.

    However if you only require an application host and you know you’re going to stick with Windows OS and Azure, I would still recommend Azure Web App. It’s Infrastructure-as-a-Service, which makes it so simple. You can think of this as the same concept as a container, but it’s a little lower-level; so containerized IIS almost.

    Azure Web Apps also provides everything you would need to run mission-critical web applications for the enterprise like scaling up and out, high availability, geo-replication and so forth across multiple slots (for dev, test & production environments for instance). It also has excellent insights (analysis) with almost zero setup. Not to mention real-time debugging with Visual Studio.

    Server-side Framework

    ASP.NET Core 2.2

    Although the .NET Framework (currently at version 4.7.2) has been a very successful framework for a very long time, but for any new applications I would strongly recommend .NET Core (currently at version 2.2, although version 3 is in Preview at the time of writing).

    .NET Core is a vastly refactored framework that is open-source (a fact often lost on many people), more compliant with better performance. It also has a great CLI for folks who prefer CLI and text-based editors over the powerful, yet bulky Visual Studio. I talk about IDEs and tools below.

    To code the on the server-side you should use C#. VB.NET is not worth a long-term investment; despite Microsoft’s assurances I see this as a declining language. C# is a wonderful, continually evolving language that is as good if not better than any of the others.

    Data Store

    Almost all web applications require a data store. A common use case for web applications is dashboards, reporting or Business Intelligence (BI) from big(ger) data sets (often in Data Warehouses Blob Storage, Data Lakes etc.), but those data sets are mostly unrelated the web application itself and therefore falls outside the scope of this post. I might talk more about that in a future post.

    Azure Cosmos DB

    For web application data storage, I recommend Azure Cosmos DB especially if you’re comfortable with JSON and have an adequate understanding of document-based databases, also referred to as NoSQL. These databases are not relational like SQL Server or Oracle. But very often, especially for web applications, relational models don’t offer any extra value but add complexity and reduced performance.

    Cosmos DB is enterprise ready with a great SLA.

    Azure SQL Database

    If you’re already comfortable with relational databases and don’t want to invest in learning NoSQL then you can’t go wrong with Azure SQL Database. It’s not exactly the same as SQL Server, but very similar. However it has significant enterprise-level benefits like scaling, availability, backups etc.

    Be careful with security though. Microsoft’s suggested access pattern has it’s critics. Just ensure you’re compliant within your industry. Azure SQL Managed Instance (MI) might be a better choice if you require a more conventional VNET/Subnet security model.

    JavaScript Framework

    Angular 7+

    For the client-side implementation of your web application, I confidently recommend Google’s Angular (also known as Angular.io or Angular 2+). Avoid AngularJS (also known as Angular 1); it’s a relatively easy framework to learn, but has some issues around performance and challenges with maintainability. With Angular’s tight integration with TypeScript it’s easier to maintain and safer to code with. It does take a little longer to set up, but it’s worth it.

    React

    Facebook’s React is also very popular and if you’re comfortable with it, use it. I’ve used both and I prefer Angular because of it’s tight integration with TypeScript as well as its clean patterns. React also has a TypeScript implementation, but it’s as well-supported as Babel, it’s own type engine. And I don’t see Babel as being as having the industry adoption that TypeScript has.

    But they’re both excellent, well-supported frameworks. Vue.js is also getting a lot of attention nowadays, but it’s not one I’ve used. There has been so much written on choosing one so I won’t go into that again. I prefer Angular, but they all work fine with ASP.NET Core. Pick the one you want as indicated in the screenshot below.

    Choose SPA Framework

    Blazor (Web Assembly)

    There is another experimental platform called Blazor that one should definitely be aware of for the future. It will build to a WebAssembly which is now supported by the mainstream browsers. This will mean you can code C# for the client-side! I think Blazor will be a major player in client-side development in the future. Very exciting indeed, but it’s too early at the time of this post.

    CSS Framework

    Bootstrap 4.1+

    Bootstrap 4.1 is a very powerful and extensible CSS framework developed originally by Twitter, specifically with Responsive web design (RWD) in mind. Version 4.1 has some great improvements over the very popular version 3 and version 4.

    Unfortunately version 4.1 still relies on jQuery and other 3rd party JavaScript libraries, but the intention is to rid the framework of these in version 5. So do look out for that.

    With ASP.NET Core the client-side libraries have to be installed and updated with NPM packages. That’s a big topic on it’s own, so I won’t cover that in this post.

    Real-time communication

    SignalR

    For real-time communication (chat, tickers etc.) use SignalR either in the application or better yet SignalR on Azure. It is a very specific use-case, but this is very cool technology that I’m very fond of.

    Editors and other Tools

    Code Editor

    For folks who have been on the Microsoft stack for a while, Visual Studio is the go-to IDE. It’s a very powerful, rich & full-featured IDE that comes in 3 editions; Community, Professional & Enterprise. Community is free and fine for most cases. Visual Studio is now available on Mac, but it’s not open-source. The Enterprise edition is very expensive.

    However unlike the old days, you don’t need Visual Studio to develop .NET applications any more. Because .NET Core was developed with a CLI, you can use any text-based editor to code for it. Notepad++, Sublime Text or, my favorite, Visual Studio Code all do the trick.

    VS Code is also open-source and can run on all the OSes. It’s extensibility platform is quickly making it a developer favorite across tech stacks. It really is a great product. I’ll do a follow-up post on it at some point.

    Data Access

    If you’re using Azure SQL Database (or any other SQL Server-based data store) most people use SQL Server Management Studio (SSMS). It’s a very powerful, but bulky application that does all one needs. It’s free, but not open-source and only runs on Windows.

    More recently Microsoft has released Azure Data Studio. I really like this tool. It’s a much lighter open-source multi-OS application that is also free. See if you can spot the trend here! 🙂

    If you’re targeting Cosmos DB, you can use the Cosmos DB emulator for local development.

    DevOps

    Over the years, we’ve all seen these buzzwords. Web 2.0, Big Data, Machine Learning and so forth. It feels like DevOps is the trending buzzword currently! For those of us who have been using this for years (who remembers CruiseControl.NET?) it is encouraging.

    I very strongly recommend DevOps and particularly the CI/CD part of it, but this is also a very big topic that I may post about in the future. For now though, look to Azure DevOps for all your needs.

    Overview

    Using these services, tools & frameworks you can develop web applications that can scale up and out to whatever you’re likely to need. With the knowledge that you’ll have the support of industry leaders like Microsoft, Google (or Facebook for React) and Twitter.

    Happy coding!!

  • Girls on the Run 2018. Well done Cara & LenĂ©!

    Cara & Lené completed the 2018 Girls-on-the-Run 5 km race on this pleasant Wintry day. It was a great job done by both participants. Cara had a lot of support from her school as well as her team mates.

  • Elke’s team wins the league

    It’s taken a few years, but today Elke and her team finally won an EBYA soccer league. Although she’s been playing for a few years now, this was Elke’s first year in the Girls 6th – 8th Grade division.

    Coach Ron and the assistant coaches were fantastic. Elke learned a lot and the team had a great spirit throughout the season. The girls trained & played hard, especially in the semi-final. The final was a little bit easier, but the girls did very well to stay focused.

    Great job y’all!!

  • My team has implemented the excellent IdentityServer3 for our Single Sign-On provider but we kept running into a very irritating and intermittent issue for some of our users:

    IDX10311: RequireNonce is 'true' (default) but validationContext.Nonce is null.

    The error occurred when our users were navigating to the https version of the site but they were being redirected by IdentityServer back to the http version of the site. They did this because some of them had the browser caching the https url and so they selected that instead of typing/selecting the http url.

    The fix was simply to have them initially browse to the same url and protocol (http/https) that IdentityServer redirects to after log in.

  • I needed a laptop and so after doing some online research decided on Microsoft’s Surface Book. Touted as a laptop first and a tablet second, it seemed perfectly aligned for my requirements. The model I picked had good specs (although a little light on the hard drive) and good reviews and I didn’t pick up on any of the Surface Pro 4’s well documented power issues. So it was with much expectation that I went ahead and bought one at a Microsoft Store.

    It’s no secret that I am and have been somewhat of a Microsoft fan boy for a number of years, but it took me 3 weeks to realize that the Surface Book as a final product is not yet mature enough to replace a laptop of equal specs. It certainly has many very impressive features and some of the engineering is really impressive (power cord, detaching of the screen, the pen etc.). But it is not stable at all. It crashed often. When using Adobe Lightroom I was never able to work for more than an hour without a crash. I also had inconsistent battery issues, the screen would become unresponsive (similar to the Surface Pro’s issues maybe?) and the power button wouldn’t function requiring hard resets. I realize completely that some of these may be software related (the OS is predictably Windows 10), but I bought the whole system and as that it doesn’t imbue confidence.

    There were also other reasons that the concept didn’t work for me and I realize this is personal preference. One of these being the pen. It is super cool when one first plays round with it, but it soon becomes a gimmick and for me didn’t add the value that I had hoped. The keyboard layout also didn’t impress me. I use PageUp and PageDown a lot but these keys have inconveniently now moved to function keys at the top. Other people may feel differently about these preferences I acknowledge.

    I’m not one to easily return goods in this way, but I really regretted the purchase and so felt obliged tot return it. I did need a laptop though and, after more online research, swapped the Surface Book for the new Dell XPS 15. And I have to say that after a week’s use this was a very good swap. For slightly less ($2,099.00 for the Surface Book vs $1,999.00 for the XPS) I get significantly better specs (a 512GB SSD hard drive, 16GB RAM), an absolutely exquisite screen (the Surface Book’s was also very good) and it’s a very stable product. With all the same software, I have had zero issues. It obviously doesn’t have the tablet component, but for me this had less value on the Surface Book than I anticipated after the initial coolness factor wore off. So far, I’m very impressed with the Dell XPS 15.

    It’s a pity because I can completely see where Microsoft are going and I definitely support it, but it turns out that to build a quality system takes a few iterations. I have no doubt that my guys (Microsoft) will get there in the end, but for now it’s not it.

    Just a quick word about Microsoft Store. I used the King of Prussia store. I had a GREAT experience with them. The surface and their return policy is exceptional. I would without a doubt use them again and recommend them to anyone. They should continue to push forward on this concept.

  • I was deeply shocked and saddened by the events that occurred in Paris on Friday. Such calculated and extreme violence against an overwhelmingly tolerant and free society like France is very disturbing. It doesn’t ever compare to the horror for the victims, but seeing it on TV and social media brings it home in an unprecedented way. I hope France reacts decisively. On occasion and reluctantly the liberties of a free nation has to be defended.

    The thing that has me searching for answers is the following: what about the other regions with similar extreme violence, but without the TV cameras? Exactly one day before the Paris attacks 40 people were killed by suicide bombers in Lebanon, Beirut – also by ISIS. I didn’t even know about this until- and because of the Paris attack.

    In South Africa, my home country, there have been about 4,000 farm murders since the end of Apartheid. These attacks target almost exclusively white farmers. The reasons are complicated and not always clear. My personal view is that it is a combination of greed and political/racial motivation. People are murdered, raped and/or tortured after all that can be stolen has already been taken. As I’m sure it is in Paris, these events have a devastating effect on not just the victims, but so many people. I lost a great friend, a remarkable man and loving husband with 2 children and a third on the way, in a brutal unprovoked murder along similar lines 5 years ago on a day that I will never forget as long as I live.

    And yet there are no prime time tears for these victims.

    So while I empathize completely with the Parisians, I can’t help but be sad that there isn’t a bigger outcry over the terrors that continue to play out in South Africa. I understand why; most people have no concept of farm life in South Africa whilst Paris is… Paris. It’s not fair, but it is so.

  • Having visited Hibernia Park in the middle of Winter and the first week in Spring, this was easily the most beautiful I’ve experienced it.

  • 6 months in… USA journey

    So here we are. We have been proud USA residents for 6 months now!

    Needless to say, but with a wife and two kids, but not the dog :-(, it has been quite a change from our somewhat idyllic lifestyle in Boesmansriviermond on South Africa’s Eastern Cape. Although there are fundamental political, crime & race issues in South Africa, the main reason we migrated was to explore career & personal opportunities. The US-based company I worked for in South Africa, had earlier indicated that they wanted me to join their team in Malvern, Pennsylvania. I was very happy to oblige, because a) I had always wanted to explore everyday life (like we had in the UK) in the USA and b) it was a great opportunity to further my career hopefully as part of the fantastic company that brought me over. Really the US is where most of the Software Development action is and therefore this is the best place for me as a Software Architect to be.

    In terms of adapting to our new life, there have been ups and downs, but all things considered we’re doing well. I had been to the company before on business so I had experienced the horrendous Winter weather as well as the glorious Spring weather and thus had a clearer picture of the overall weather, but my wife and kids were very unimpressed when we landed at JFK International on 8 January – literally the coldest day of the Winter! I could see it in my wife’s eyes… she was thinking: “where have you brought us??!!” We had all the luggage we brought to the US with us on that flight and so we had to rent the biggest SUV the rental agency had. This was at 7pm during a Winter storm after a 48 hour journey. Everyone was tired and we had to drive on the “wrong” side of the road. To top it all off, we took a wrong turn in New York and got bustled slap bang into Manhattan with it’s associated traffic. That was a tough journey that I wouldn’t want to tackle again!

    We did eventually make it out of New York without a scratch on our Monster Truck or anything else. We arrived at my cousin’s house at around about 11pm and just like that we had effectively moved to a new continent!

    Journey to the US begins
    Journey to the US begins

    Our first night we were very tired, but they were lovely and to the kids their house was magnificent and I could slowly see some excitement building in the kids. Lené though was in her get things done mode. There was no time or inclination for the excitement I felt and began to see in the kids. Although I respect her for it, it is 100% the opposite of my outlook. That brief excitement along with the anxiousness is something I will treasure for the rest of my life.

    The next week or so we had to get all our ducks in a row, Move into our new, as yet unseen, house; register the kids into the school along with all the other associated tasks; buy a car; set up bank accounts as so on. One doesn’t realize how much work is involved. But this is where Lene’s attitude was priceless; she was a rock star! And once Elke was enrolled in school and Cara’s school was organized Lene began to feel more at ease.

    Now 6 months later the kids are on Summer vacation and absolutely loving it. We joined a very pleasant Swimming Club for the summer and the whole family spends a lot of time there. Both Elke and Cara have made friends aplenty. I would say that Elke’s friendships here are pretty much on par with what she had in South Africa. This is largely due to her joining a soccer team and lucking out with an amazing team with amazing kids and parents. Being a shy child, I would say that Cara has done better than we expected, but she hasn’t quite found the Murray Baxter type connection that she had at Boesmansriviermond. Hopefully that will come. But she isn’t unhappy at all. In fact she adores Elke’s friends and they are very good to her as well. In truth the kids are thriving; I couldn’t have hoped for better. For a parent that is a major component of one’s own happiness.

    Lene has also settled in, but in a sense this move was always going to be the most challenging for her. She had three or four dear friends in South Africa (you know who you are!) and they were very ingrained in pretty much all aspects of her life. Now it’s all new and she doesn’t have a job or school to focus on. As I expected though and thankfully, I do think she has made some great friends here already and I think she’ll be just fine. Although the “inner circle” will never be replaced. 🙂 I’m also very happy that she is playing lots of tennis again. We weren’t sure if that was going to be achievable in the USA and where we live.

    As far as I’m concerned I love it here. That doesn’t mean I love Boesmansriviermond any less or London for that matter. It doesn’t have to be a competition. I say this because with the political situation in SA there are sensitivities around people moving away from South Africa and I certainly don’t want to offend those. I am fortunate to have a great job and that’s half the reason why I love it here, but there are also other aspects that make this a very good fit for us. If one is able to earn over a certain threshold here, the quality of life is high. Even more so for kids. The education in the good schools is of a high standard and the sports facilities are great as well. Where we live, in Downingtown, it’s still quite rural and yet its very close to Exton (15 minutes), King of Prussia mall (35 minutes), Philadelphia (an hour) and even New York City (about 3 hours).

    A big aspect of the quality of life here in the North East is the weather. OK so the Winter is not easy for us newbies from the Deep Deep South, but Spring, Summer (so far) and Autumn or Fall is really brilliant. Warm (sometimes very hot), sunny and long lazy hours makes the Winter bearable. And the same as in Europe, the locals embrace Winter. We’re aiming to really try hard to appreciate Winter next time round.

    Heunis family at Marsh Creek with colorful canoes.
    Summer fun on the water at Marsh Creek.

    There is so much that is really very good about this country and Pennsylvania that a single blog entry is obviously insufficient to cover much. However it isn’t all moonshine & roses. There are also some things that I really dislike. Foremost is medical expenses. Medical services are very expensive. And it’s complicated.

    The other gripe I have is with the credit qualification process. I have always had a very good credit record. I remember in the UK I had absolutely no problem to get credit, but here in the US you have to build up to a decent credit score to qualify for any sort of credit. There is no other mainstream way to get credit and that has been a big hurdle for us on a few occasions. Fortunately Volkswagen is the one car manufacturer that does have an alternative mechanism based on the same indicators that one sees in the UK and South Africa. This is how we managed to get a car in the beginning. Since then and somewhat due to that, I now do have a somewhat respectable rating and we are able to function.

    Notwithstanding these hopefully minor pain points I am very positive about our move to the US and specifically this area and this employer. I think was a risk that has already paid off, but I’m hoping it doesn’t end here. My employer is going through a very good patch currently and I feel like I can play a very important part in getting us to be giant killers in our industry.

    These are exciting times!

  • Spring is in the air

    It certainly was not a cold winter by any means, but it is always exciting when Spring shows it’s colours. This week there was a shift in the air. Not convincingly or completely, but hints of the freshness and warmth. Also the plants in my garden have started flowering. Spring has arrived! There is just something so refreshing about this, right? If our lives go according to plan, we won’t experience a wonderful South African Spring for at least a couple of years so this has special meaning for me.

    We went for a typical Sunday morning stroll at the beach when we ran into some great friends. There wasn’t an intention to go swimming, but it was so gorgeous outside that the kids voluntarily started swimming.