SDN event June 2017

The SDN – Software Development Network – is a special interest group for dutch developers. Four times a year they organise an event where people present and talk about their passion.

As a member of the SDN you are aware of the latest developments. You are part of a network of professional developers who assist each other in word and deed. This means there is a technical helpdesk at your fingertips so you can book considerable time savings in solving problems.
sdn.nl with Google translate

Here are the talks I attended.

Keynote: The Development Platform Landscape in 2017

Developers have been used to write some code and run some code. This was easy when the devices of developers were the same devices the customer would run the product on. Today the diversity of devices is huge. We don’t write code on the same machine as the product would run (eg tablet, mobile) This makes the write some code and run some code cycle take longer.

The diversity of platforms has been the standard. Microsoft’s monopoly was the abnormally. Today we again have multiple platforms. But devices have more compute power and can afford the write-once run everywhere principle (which is slower than native) without being surpassed bij Lotus 1-2-3.

With the discovery of greyball in Uber apps the developers have the responsibility: are we going to allow this to happen or do we choose the right thing to do?

Image courtesy of patryk gradys / unsplash.com
Image courtesy of patryk gradys / unsplash.com

Blockchain concepts and experiments

Rob Koelman of De Nederlandsche Bank has made the transition from Enterprise Architect to the Business. They needed to have someone with deep knowledge of blockchain (bitcoin) to help them advise other companies. This was two years ago.

On the bitcoin.org site you can download the root paper (bitcoin: a peer-to-peer electronic cash system) The main thing they tried to solve was the double spending problem: paper money (or coins) can only be spend once, but what about virtual money?

Bitcoin_logo.svg

Rob explains the concept of Distributed Ledger Technology and the implementation in the Bitcoin arena such a double spending, mining and forks. Then he talks about his experiment with the DnBcoin where he downloaded the code from BitCoin from github and changed it. He discovered a lot of asserts and checks in the code that made his experiment not as trivial.

At the end of the talk Roel Hans showed us the Microsoft (Azure) template for creating your own implementation based on Ethereum.

Convergence: How Mobile, Cloud and Open Source Come Together to Save the World

richardcampbell-htbox.jpg

Richard Campbell talks about his role in htbox.org where developers code for humanitarian organizations. Why? Because when money is off the table you want:

  1. Autonomy: choose where you participate in, do what you like
  2. Mastery: become skilled, learn new things
  3. Purpose: because it matters

Microsoft graph: a way to build secure and smart apps

Sjoukje Zaal showed the v1 and the beta of microsoft graph. Access all Microsoft products (Azure Ad, Intune, Office365) from graph.microsoft.com.

Conclusion

Nice to hear something about blockchain from someone with first hand experience. No sales pitches but ready to use tips-and-tricks. Again a very good meeting.

Some links:

Posted in Conference | Tagged , , , , , , , | Leave a comment

EF query optimisation

We have a view that is very slow when you don’t use a filter on the name field. Everywhere in our stored procedures and (sub)queries we have this applied.

In our web applicatie we use Entity Framework. The business layer required the name filter, but the result always times out. The query looks like below.

-- simplified for clarity
SELECT [Extent1].[Name] as [Name]
FROM view as [Extent1]
WHERE [Extent1].[Name] = @p__linq__0

This is case of bad parameter sniffing. More about this in the References at the end of this post.

Reading this answer on stackoverflow made me look into the custom query execution against the Database object of your Context. And that solved the puzzle with a custom method instead of the generated IDbSet properties.

public IQueryable<viewRecordType> GetViewRecordsWhereNameIs(
string name) {
   // Danger! Sql injection possible
   var query = string.Format(
      "SELECT * FROM view WHERE name = '{0}'",
      name);
   return Database.SqlQuery<viewRecordType>(query).AsQueryable();
}

Please note the warning. Sql injection is possible when you don’t use parameters!

References

Entity Framework Performance and What You Can Do About It
How to Confuse the SQL Server Query Optimizer

Posted in Development | Tagged , , , | Leave a comment

Speed up ASP.NET MVC debugging

Whenever I was debugging my ASP.NET MVC application the wait times for every page is about 8 seconds. This was not happening after deployment to a webserver (thank god!)

Today I discovered that disabling the browserlink will speed things up for me. I’ve read this Article about setting the vs:EnableBrowserlink to false in the web.config. The first request is still slow, but that is how ASP.NET MVC works. After that every page loads fast and without any delay.

What else did I do? EnableOptimizations in debug, since I don’t develop scripts, I only use them.

Posted in Development | Tagged , , , | Leave a comment

Linq to entities and CAST

We use an EDMX to access our database with Entity Framework. Before you comment: we have our reasons not to use code-first. Today we encountered a small problem with linq to entities and validating a varchar field that contains an integer value. Again: we have our reasons. Think about key-value pairs.

An excellent answer of Joel Mueller on stackoverflow.com helped us overcome this problem. In short we had to add a function to our edmx conceptual model. The link above has all te details.

<Function Name="ParseInt" ReturnType="Edm.Int32">
   <Parameter Name="stringvalue" Type="Edm.String"/>
   <DefiningExpression>
      CAST(stringvalue as Edm.Int32)
   </DefiningExpression>
</Function>

The validation works like a charm now. This is what EF generates (see the CAST?):

SELECT [GroupBy1].[A1] AS [C1]
FROM ( SELECT COUNT(1) AS [A1]
        FROM [dbo].[Table] AS [Extent1]
        WHERE ([Extent1].[Key] = @p__linq__0) 
        AND (( CAST( [Extent1].[Value] AS int) < @p__linq__1) 
          OR ( CAST( [Extent1].[Value] AS int) > @p__linq__2))
    )  AS [GroupBy1]
Posted in Development | Tagged , , , , | Leave a comment

Outlook 2016 for Mac spellcheck default language

The spellcheck in Outlook 2016 for Mac was driving me nuts for some time now. Most e-mails I write are in Dutch and the spellcheck defaults to English (UK). My daughter concluded “a lot of squiggly red lines” on my computer. This was the max. Outlook behave!

Here is how to change the default language:

  • Create a new message
  • Click Options > Language in the Ribbon
  • Select the preferred Language and click Default…
  • Click OK and close the new message

default_spellcheck_language_outlook2016_mac

Finally spellcheck in my own language. I’m a happy Office for Mac user again.

Posted in Tooling | Tagged , | Leave a comment

Flow parasites on ifttt

My blog posts are automatically published to yammer. When yammer was independent this worked like a charm. Then Microsoft bought yammer and the ifttt channel stopped working.

With the Office365 channel and the e-mail to yammer it worked again. Only for Microsoft to introduce an approve step. This means:

  1. wait for approval request in outlook,
  2. open login page to office 365,
  3. fill e-mail and wait for redirect to company login page,
  4. fill e-mail (again) and password,
  5. See the yammer post.

Now with Flow this would be automatic again. Let’s try this with this post.


as expected Flow can publish to yammer with more options and less hurdles … embrace and extend, not really.

Posted in Tooling | Leave a comment

Scrum Master Skills

We’re working on our project for some months now. Time to freshen up on scrum. For this we use the Scrum Master Skills course on pluralsight.

Once each sprint we sit down as a team for an hour. We play and pause the video and discuss how this applies to us. Some tips can be applied right away and others go on the backlog.

rawpixel-com-250087

Image courtesy of rawpixel / unsplash.com

Every project is different and every team is different. Even after 15 sprints we are finetuning. Using the experience of others helps us to be a better scrum team.

Posted in Development | Tagged , , | Leave a comment