The NeceMoon | Technology & Strategy. Le rêve à temps plus que partiel, le travail à temps carrément complet.

Deploying a Web App to IIS / Windows Server In 7 Clever Steps

by necemon 24. January 2016 10:15

 

Here is a simple deployment routine, for a reliable and smooth release :-)

 

1. Create/configure the website and its application pool

 

2. Copy the files over : setup an FTP(S) connection, as well as the client access (FileZilla, Visual Studio, etc.)

 

3. Assign writing permissions to the application identity on the relevant folders (for logging, files uploads, etc.)

 

4. Set time outs to appropriate values
Idle Timeout: you can change it from the default of 20 to however many minutes you want. You can also adjust the setting to 0 (zero) which effectively disables the timeout so that the application pool will never shut down due to being idle. This can be configured in the Advanced Settings of the application pool.
ConnectionTimeOut: specifies the time (in seconds) that IIS waits before it stops a connection that is considered inactive. This can be configured in of the Advanced Settings of the Administrative Tools (system.applicationHost/weblimits).

 

5. Configure Auto-Start
A common problem is the need to perform initialization tasks and "warm up" tasks for a web application. Larger and more complex web applications may need to perform lengthy startup processing, prime in-memory caches, generate content, etc... prior to serving the first HTTP request. One way to fix this is to twist a couple of properties in the application initialization module:
- Set the application pool StartMode property to AlwaysRunning
- Set PreloadEnabled to true, and specify the application pool and path

 

6. Configure SQL Server / Set up automatic data Backups
Create a maintenance backup plan with SQL Agent

 

7. HTTPS / SSL Certificate Installation
HTTPS provides security, identity, SEO, access to HTML5 powerful features and more.

Tags: , ,

English | Technical

Déployer une application web sur IIS / Windows Server en 7 étapes ingénieuses

by necemon 24. January 2016 10:03

 

Une routine simple, pour un deploiement robuste et efficace :-)

 

1. Créer/configurer le site web et son pool d'application

 

2. Copier les fichiers vers le serveur : installer une connexion FTP(S), ainsi que les accès clients correspondant (FileZillaVisual Studio, etc.)

 

3. Attribuer les permissions d'écriture à l'application sur les dossiers appropriés (pour le journal d'erreurs, la sauvegarde des fichiers d'utilisateurs, etc.)

 

4. Fixer les délais de temps mort
Delai d'inactivité: Tu peux changer la valeur par défaut de 20 au nombre de minutes que tu veux. Tu peux également régler le paramètre à 0 (zéro), ce qui désactive effectivement le délai tel que le pool d'applications ne va jamais s'arrêter à cause de son inactivité. Ceci peut être configuré dans les Paramètres Avancés du pool d'applications.
Delai d'expiration de session: spécifie le temps (en secondes) que IIS attend avant d'interrompre une connexion qui est considérée comme inactive. Ceci peut être configuré dans les Paramètres avancés des Outils d'administration (system.applicationHost / weblimits).

 

5. Configurer le paramètre Auto-Start
Un problème commun est la nécessité d'effectuer des tâches d'initialisation et l'"échauffement" des tâches pour une application Web. Les applications Web les plus larges et les plus complexes peuvent avoir besoin d'effectuer de longues procédures de démarrage, de mise en mémoire cache, de création de contenu, etc. avant de servir la première requête HTTP. Une façon de résoudre ce problème est d'ajuster quelques propriétés dans le module d'initialisation d'applications :
- Mets la propriété StartMode du pool d'applications à AlwaysRunning
- Mets la propriété PreloadEnabled à True et précise le pool d'application

 

6. Configurer SQL Server / les sauvegardes automatiques
Créer un procédure de planification de sauvegarde avec l'Assistant Plan de Maintenance

 

7. Installation de Certifcat HTTPS / SSL
HTTPS améliore la sécurité, l'identification, le SEO, l'accès à certaines fonctionalités avancées de HTML5 et bien d'autres choses.

 

Tags: , ,

Francais | Technical

Eponymous Laws For Tech Strategists

by necemon 8. January 2016 20:58

 

Parkinson's Law
Work expands so as to fill the time available for its completion
In other words, if you have a certain amount of time to complete something, that’s how long it will generally take. 

 

Murphy's Law
Anything that can go wrong, will go wrong (at the worst possible time)
Most ideas look great on paper. But by the time events go from A all the way through the alphabet to Z, you see who rules when it comes to getting something from the theoritical stage to the practical stage : it's Murphy's Law.
No battle plan survives first contact with the enemy. Hope for the best, be ready for the worst.

Murphy's Law for DevOps
If thing can go wrong, it means it already went wrong but you didn't get a notification from the monitoring tool yet.


Moore's Law
The power of computers per unit cost doubles every 24 months.
Because of the nature of this law, anything that an extremely clever programmer can do at one point can be replicated by a merely competent programmer some number of years later.

 

Hofstadter's Law
It always takes longer than you expect, even when you take into account Hofstadter's Law.

 

Brook’s Law
Adding manpower to a late tech project makes it later.
The bearing of a child takes nine months, no matter how many women are assigned.

 

Kranzberg's law
Technology is neither good nor bad, nor is it neutral.
It's powerful. And it's complicated.

 

Pareto's Law
For many events, about 80% of the effects come from 20% of the causes.

 

Tags: , ,

English | Winning

Lois Éponymes Pour Les Techno-Stratégistes

by necemon 8. January 2016 09:55

 

Loi de Parkinson
Tout travail tend à se dilater jusqu’à occuper entièrement le temps qui lui est affecté.
En d'autres termes, si on te donne une durée fixe pour accomplir quelque chose, c'est plus ou moins le temps que ça va te prendre en général.

 

Loi de Murphy
Tout ce qui peut mal se passer, va mal se passer (au pire moment possible)
La plupart des idées sont belles sur papier. Mais du moment où les évènements passent de A, à travers tout l'alphabet jusqu'à Z, tu peux voir qui décide quand il s'agit de passer du niveau théorique au niveau pratique : c'est la Loi de Murphy.
Aucune stratégie ne survit au premier contact avec l'ennemi. Espère le meilleur, mais soit prêt(e) à affronter le pire.

Loi de Murphy pour DevOps
Si quelque chose peut mal tourner, cela signifie que ça a déjà mal tourné, mais tu n'as pas encore reçu un message du logiciel de suivi.

 

Loi de Moore
La puissance des ordinateurs (d'entrée de gamme) double chaque 24 mois
En raison de la nature de cette loi, quoi qu'un programmeur super intelligent puisse faire à un moment donné, cela pourrait être reproduit par un programmeur ordinaire quelques années plus tard.

 

Loi de Hofstadter
Les choses prennent toujours plus de temps que prévu, même en tenant compte de la Loi de Hofstadter.

 

Loi de Brooks
Ajouter des personnes à un projet technologique en retard augmente le retard
Quelque soit leur bonne volonté, 9 femmes ne peuvent pas faire un enfant en un mois.

 

Loi de Kranzberg
La technologie n'est ni bonne, ni mauvaise, ni neutre.
Elle est puissante. Et elle est compliquée.

 

Loi de Pareto
Pour de nombreux évènements, environ 80% des effets sont le produit de 20% des causes

 

 

Tags: , ,

Francais | Winning

My 12 Favorite Entity Framework Tricks

by necemon 12. December 2015 22:45

The Entity Framework is an ORM system, a set of technologies that support the development of data-oriented software applications. It's part of the .NET Framework. I have been playing with it for a couple of years and here are my top tips :

 

1. Extending the TimeOut value
When loading large amounts of data, the operations happen to fail every time they hit the default time out, so it may be a good idea to extend it to a few hours.
Doing it when initializing the Context object ensures that it's all set before any database call.

 

2. Second Level Caching
That's a caching of query results. The results of SQL commands are stored in the cache, so that the same SQL commands retrieve their data from the Cache rather than executing the query again against the underlying provider. This can have a performance boost for your application and results in less activity against your database. To enable this feature, you can download and implement this open source project.

 

3. Dynamic Code First and database migration
EF allows you to program against a model without having to deal with a database directly. With the Code-First approach, you can focus on the domain design and start creating classes. Code-First APIs will create/update the database on the fly based on your entity classes and configuration.
By the way, while we are on the topic on configuration, you can do it all within your C# code. Here are a couple of handy properties:
AutomaticMigrationEnabled : Set it to true to enable the Code-First magic
AutomaticMigrationDataLossAllowed : a value indicating if data loss is acceptable during automatic migration. If set to false an exception will be thrown when data loss may occur as part of an automatic migration.

 

4. Previewing Code-First change details
There is an easy way to generate the SQL scripts that EF plans to execute, before/without actually commiting those changes. It goes like this:
var configuration = new MigrationConfiguration();
var migrator = new DbMigrator(configuration);
var scriptor = new MigratorScriptingDecorator(migrator);
string script = scriptor.ScriptUpdate(null, null);
It could be useful if you want to make some changes to that script, or if you are debugging an issue or if you are just curious about what's going on :-)

 

5. MARS
Multiple Active Result Sets (MARS) is a feature that allows the execution of multiple batches on a single connection. To say it in a simple way, you can make a connection to server and then submit multiple requests to server at the same time, and then read results from these requests in whatever way you want. Just include "MultipleActiveResultSets=True" in your web.config file.

 

6. Setting all the properties constraints in a single place
For example, instead of adding an attribute to each string property, you could set a default string maximum length as follow:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
       modelBuilder.Properties<String>().Configure(p => p.HasMaxLength(360));
}

 

7. Inheritance strategy
EF has many ways of dealing with inheritance
-Table per hierarchy : a single table with all based and derived class properties (A discriminator property being used to differenciate between them)
-Table per type : base properties on the base table, and for each derived class, derived properties on a separate table
-Table per concrete type : each derived class  gets its own table with all (based or derived) properties.
Pretty extensive, the only case I am not sure about : is there a way to make EF not deal with inheritance at all ? I mean, assuming A derives from B, is there a way to make EF treats A and B as completely different classes and ignore the fact that that one inherits from the other ?
Not a very common scenario, but just for the sake of avoiding duplication, I could want to use inheritance in the C# code so that I don't copy the properties twice in different classes but I wouldn't want to involve any reaction from EF. TPC comes close to that, but the classes still share the same primary key.

 

8. EntityFunctions Methods
When using LINQ to Entity Framework, your predicates inside the Where clause get translated to SQL, which doesn't have a translation for some complex constructions like DateTime.AddDays(). That's where EntityFunctions methods come in the picture.

 

9. LINQKit
LINQKit is a free set of extensions for LINQ to SQL and Entity Framework power users. I mostly use it to dynamically build predicates and insert expression variables in subqueries, but it also allow to :
- Plug expressions into EntitySets and EntityCollections
- Combine expressions (have one expression call another)
- Leverage AsExpandable to add your own extensions.

 

10. Lazy Loading
One of the most interesting Entity Framework features is the Lazy Load function, which is the process whereby an entity or collection of entities is automatically loaded from the database the first time that a property referring to the entity/entities is accessed.
To put it simply, lazy loading means delaying the loading of related data, until you specifically request for it.
This could be enabled by setting the Configuration.LazyLoadingEnabled property to true.

 

11. AsNoTracking
Entity Framework exposes a number of performance tuning options to help you optimise the performance of your applications. One of these tuning options is .AsNoTracking(). This optimisation allows you to tell Entity Framework not to track the results of a query. This means that Entity Framework performs no additional processing or storage of the entities which are returned by the query.
There are significant performance gains to be had by using AsNoTracking().

 

12. Staying away from performance traps and other EF gotchas
The object context manager can lead to situations where EF behaves in surprising ways. It's good to be aware of the patterns that you can follow to avoid these pitfalls.


Tags: , , ,

English | Technical

Mes 12 Astuces Préférées Avec Entity Framework

by necemon 12. December 2015 20:52

 

Entity Framework est un mappeur objet/relationnel qui permet aux développeurs .NET d'utiliser des données relationnelles à l'aide d'objets spécifiques au domaine. Il rend inutile la plupart du code d'accès aux données que les développeurs doivent généralement écrire. Je joue avec ça depuis deux ou trois ans, et voici mes techniques préférées:

 

1. Prolongement de la valeur TimeOut
Lors du chargement de grandes quantités de données, il peut arriver que certaines opérations échouent chaque fois qu'elles atteignent le temps mort par défaut, du coup ça pourrait être une bonne idée d'étendre cette durée à quelques heures. C'est bien de le faire pendant l'initialisation de l'objet Contexte, donc avant tout appel de base de données.

 

2. Cache de deuxième niveau
C'est la mise en cache des résultats de la requête. Les résultats de commandes SQL sont stockés dans le cache, de sorte que les commandes répétées récupérent leurs données à partir du cache au lieu d'exécuter la requête à nouveau contre la base de données. Ceci peut présenter un gain de performances pour l'application et moins d'activités au niveau de la base de données. Pour activer cette fonctionnalité, tu peux télécharger et utiliser ce projet open source.

 

3. Code First dynamique et migration de bases de donnees
EF permet de programmer contre un modèle sans avoir à toucher la base de données. Avec la technique Code-First, tu peux te concentrer sur la conception des modèles et commencer à créer des classes. Les APIs de Code-First vont créer et/ou mettre à jour la base de données à la volée en fonction de tes classes d'entités et de ta configuration.
D'ailleurs, pendant qu'on parle de configuration, tu peux faire tout ça depuis ton code C#. Voici quelques propriétés pratiques:
AutomaticMigrationEnabled : pour activer la magie de Code-First
AutomaticMigrationDataLossAllowed : Une valeur indiquant si la perte de données est acceptable lors de la migration automatique. Si la valeur est "false", une exception sera levée quand la migration automatique est susceptible de créer une perte de données.

 

4. Aperçu et anticipation des changements de Code-First
Ceci est un moyen facile de générer les scripts SQL que EF compte exécuter, sans confirmer ou avant de confirmer ses changements. Voici comment ça marche:
var configuration = new MigrationConfiguration();
var migrator = new DbMigrator(configuration);
var scriptor = new MigratorScriptingDecorator(migrator);
string script = scriptor.ScriptUpdate(null, null);
Ça peut être utile si tu veux faire des changements au script qui va être exécuter, ou si tu es en train de déboguer un problème ou simplement si tu es curieux de savoir ce qui se passe :-)

 

5. MARS
Multiple Active Result Sets (MARS) est une fonctionnalité qui permet l'exécution de plusieurs paquets sur une seule connexion. Pour le dire d'une manière simple, tu peux établir une connexion au serveur, puis soumettre plusieurs commandes au serveur en même temps, puis lire les résultats de ces demandes de la manière que tu veux. Il suffit d'inclure "MultipleActiveResultSets = true" dans ta ConnectionString.

 

6. Réglage de toutes les propriétés en un seul endroit
Par exemple, au lieu d'ajouter un attribut à chaque propriété String, tu peux définir une longueur maximale par défaut comme suit:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
       modelBuilder.Properties<String>().Configure(p => p.HasMaxLength(360));
}

 

7. Stratégie d'héritage
EF a plusieurs façons de gérer l'héritage
-Table par Hiérarchie : une seule table avec toutes les propriétés des classes de base et des classes dérivées (Une propriété discriminatrice étant utilisée pour les différencier)
-Table par Type : les propriétés de base dans la table de base, et pour chaque classe dérivée, les propriétés dérivées dans une table séparée
-Table Par type concret : chaque classe dérivée obtient sa propre table avec toutes les propriétés (base ou dérivées).
C'est assez complet, le seul cas où je ne suis pas sûr: y a-t-il un moyen de faire en sorte que EF évite complètement l'héritage ? Je veux dire, en supposant que A dérive de B, est-il possible de faire en sorte que EF traite A et B comme des classes complètement différentes et ignorer le fait que que l'une hérite de l'autre?
Pas un scénario très commun, mais juste pour éviter la duplication, ce serait alors possible d'utiliser l'héritage dans le code C# sans copier les propriétés deux fois dans des classes différentes, sans réaction de la part EF. TPC se rapproche de cela, mais les classes partagent toujours la même clé primaire.

 

8. Les Méthodes EntityFunctions
Lorsqu'on utilise LINQ to Entity Framework, tes prédicats dans la proposition Where sont traduits en SQL, mais SQL n'a pas d'équivalent pour certaines constructions complexes telles que DateTime.AddDays(). C'est là que les méthodes EntityFunctions entrent en jeu.

 

9. LINQKit
LINQKit est un ensemble gratuit d'extensions pour LINQ to SQL et Entity Framework. Je l'utilise surtout pour construire dynamiquement des prédicats et insérer des variables d'expression dans les sous-requêtes, mais il permet aussi de:
- Combiner des expressions (permettre à une expression d'en appeler une autre)
- Insérer des expressions dans les EntitySets et EntityCollections
- Créer tes propres extensions

 

10. Lazy Loading
L'une des fonctionalités les plus intéressantes de Entity Framework, c'est la fonction Lazy Loading. C'est le processus par lequel une entité ou une collection d'entités sont automatiquement chargés à partir de la base de données la première fois qu'une propriété faisant référence à l'entité ou aux entités est accessible.
Pour le dire plus simplement, Lazy Loading signifie: retarder le chargement des données, jusqu'à ce que tu les appelles explicitement.
Ceci pourrait être activé en activant la propriété Configuration.LazyLoadingEnabled.

 

11. AsNoTracking
Entity Framework expose un certain nombre d'options d'optimisation des performances pour t'aider à peaufiner tes applications. L'une de ces options de réglage est .AsNoTracking(). Cette optimisation te permet de dire à Entity Framework de pas traquer les résultats d'une requête. Cela signifie que Entity Framework n'effectue aucun traitement supplémentaire ou stockage des entités qui sont retournés par la requête.
Il ya des gains de performance considérables découlant de l'utilisation de AsNoTracking().

 

12. Rester loin de pièges de performance et autres complications de EF

Le gestionnaire de contexte d'objects peut parfois mener à des situations où EF se comporte de manière étrange. C'est bien d'être informé des méthodes que tu peux suivre pour éviter ces pièges.


 

Tags: , , ,

Francais | Technical

The Golf Ball Effect

by necemon 7. November 2015 10:08

What is the Golf Ball Effect ?

When hitting the ball, a difference of a few angles will result in a big difference in the position where the ball will land.

As in a triange ABC, if a point X is on [AB] and a point Y is on [AC], the further x and y are from A, the bigger is the distance [XY]

Therefore, a minor shift of 2 degrees could drive the ball yet another 10 meters away from the target.

That's just a metaphore for the small changes, small factors and small decisions in life that can make a big difference on the long term.

Tags: ,

English | Extra

L'Effet "Balle de Golf"

by necemon 7. November 2015 09:45

Qu'est ce que l'effet "Balle de Golf" ?

Quand tu tapes dans une balle de golf, une petite différence dans l'angle de frappe peut changer beaucoup dans la trajectoire et dans la position finale de cette balle.

Soit un triangle ABC, si un point X est sur [AB] et un point Y est sur [AC], plus X et Y sont loin de A, plus la distance [XY] est grande.

Du coup, il suffit d'une décalage de 2 degrés et la balle pourrait se retrouver à plus de 10 mètres de la cible.

C'est juste une métaphore qui illustre que, dans la vie, certaines petites choses (changements, facteurs, décisions, etc.) peuvent parfois faire de grandes différences sur le long terme.

Tags: ,

Extra | Francais

A Quick Guide For New Bloggers

by necemon 5. November 2015 23:44

A new online "friend" was recently asking me : "What should be done to get a more lively blog or social media page ? I mean, more visits, more likes; how to have some attractive blog and online profiles."

That question comes back from times to times. I don't particularly see myself as an expert in blogging or in social media marketing, but if I were to briefly sum up my humble opinion on the matter, that would be in 3 words : education, production and promotion.

 

1. Education
I couldn't detail everything you actually needs to know within 5 minutes, because there are lots and lots of elements that come into play. You must therefore continually be learning, checking out the best blogs that discuss blogging, social media, copy writing, online marketing. Subscribe to them, read them as much as you can. Also reach out to those who are doing well in thoses areas, ask questions. They may not be able to teach you everything in a minute, so you could keep in touch and keep learning, observe their methods, take their feedback on what you're doing.

 

2. Production
Write often, regularly write, write on topics that interest your readers and yourself. Writing regularly is a matter of discipline, writing interesting content is more about experience (it may take several tries). There again, you can do some research on what people like to read and get inspired by experts. But be careful not to copy them verbatim, you are trying to come up with something new, rather than publishing again what already exists.

 

3. Promotion 
Keep your social media pages updated, complete and professional, preferably with a graphic identity.
Find some people who are interested in what you have to say or write. Every time you write a new article, let them know through e-mail or their favorite online platform, take their feedback into account, to improve. Also, keep networking with other bloggers and writers in your niche. Establishing some good relationships could help when it comes to sharing content and other exchanges of services.

Tags: , ,

English | Winning

Quelques tactiques de base pour (re)lancer son blog

by necemon 5. November 2015 20:42

Il n'y a pas très longtemps, une internaute (et nouvelle "amie") me posait la question suivante : "Que faut-il pour avoir une page ou un blog 'vivants' sur les réseaux sociaux ? C'est à dire plus de visiteurs, des likes, etc.; comment faire pour que mon blog et mes pages qui seront en lien soient attractifs."

C'est une question qui revient de temps en temps. Je ne me considère nullement comme un expert en blogging ou en social media marketing, mais si je dois résumer instantanément/brièvement mon humble avis sur la question, ce serait en 3 mots : formation, production et promotion :

 

1. Formation
Toutes les choses que tu devrais savoir, je ne pourrais pas te les communiquer en 5 minutes, parce qu'il y a beaucoup, beaucoup d'éléments qui entrent en jeu. Il faut donc se former continuellement, cherche quels sont les meilleurs blogs qui parlent de blogging, social media, copy writing, online marketing. Abonne toi, lis les, autant que tu peux. Aussi parle a ceux qui s'en sortent, pose des questions. Ils ne pourront pas tout t'apprendre en un instant, donc il faudrait rester en contact, observer leurs méthodes, prendre leurs commentaires sur ce que tu fais.

 

2. Production
Ecrire souvent, écrire régulierement, écrire sur des thèmes qui vous intéressent, toi et tes lecteurs. Ecrire régulièrement, cest une question de discipline. Écrire du contenu intéressant relève plutot de l'expérience (parfois il faut plusieurs essais), là encore tu peux faire des recherches sur ce que l'audience aime lire et t'inspirer des experts. Mais attention à ne pas les copier textuellement, tu cherches à apporter quelque chose de nouveau, pas à reblogger ce qui existe déjà.

 

3. Promotion
C'est mieux si tes pages en ligne restent à jour, complètes et professionelles, de préférence avec une identité graphique.
Repère les personnes qui sont intéressées par ce que tu as à dire ou écrire, chaque fois que tu écris un nouvel article, envoies le leur via email ou leur plateforme préférée, tiens compte de leur feedback pour la suite. Aussi, il pourrait être utile de réseauter avec d'autres blogueurs et auteurs de ta niche. Parfois, de bonnes relations peuvent être précieuses quand il s'agit de faire circuler du contenu ou pour d'autres échanges de services.

 

Tags: , ,

Francais | Winning

About

Necemon

I am Necemon Yai. I am a .NET developer and a digital artist. Let's keep in touch via Twitter, LinkedIn or Facebook.

Je suis Necemon Yai. Je suis un développeur .NET et un artiste numérique. Restons en contact via Twitter, LinkedIn ou Facebook.