AFUP Forum PHP 2018 Baromètre Planète PHP
planete-php.fr Articles Blogs Infos RSS Feed Atom Feed Twitter

Articles

Client Sentry pour .NET 2.0

Maxence Delannoy (Wiip) 31/08/18

Logo Sentry

Je suis un grand fan du service Sentry qui sert à envoyer des rapports d'erreur.

A chaque fois qu'une erreur inattendue survient dans une de mes applications, un certain nombre d'informations sont collectées (le type et le message de l'exception, la pile d'appel, la version du système d'exploitation, le nom de l'utilisateur...) puis envoyées aux serveurs de Sentry.

Chaque événement est regroupé avec d'autres événements similaires (même type d'exception, même message) pour former un "problème". Je peux ainsi localiser la source de l'erreur et la corriger sans avoir à attendre que l'utilisateur me communique les détails du problème.

Dernièrement, j'avais une petite mise à jour à effectuer sur une ancienne application qui avait été développée à l'époque avec le .NET framework 2.0. Je me suis dit que ce serait bien de mettre en place la collecte des erreurs avec Sentry de façon et je fait donc une recherche dans NuGet pour télécharger et installer SharpRaven, qui est le client C# pour Sentry, dans mon application. Le problème c'est qu'il n'est disponible qu'à partir de .NET 4.0. Mettre à jour l'application s'avérant compliqué, je m'apprêtais à laisser tomber. Mais en y réfléchissant, l'envoi des données devait certainement se faire avec une simple requête HTTP et donc ça ne devait pas être si compliqué que ça à faire. J'ai donc commencé à lire la documentation du SDK.

Quelques minutes plus tard je parvenais à créer mon premier événement. Il m'a fallu un peu plus de temps pour peaufiner quelques détails, mais au final j'étais en mesure d'intégrer le support de Sentry dans mon application .NET 2.0.

Voici le code, peut-être qu'il vous sera utile si vous ne pouvez pas, pour une raison ou une autre, utiliser SharpRaven :

class RavenClient
{
    class Packet
    {
        public string Message { get; set; }
 
        public string Platform { get; set; }
 
        public ExceptionInterface Exception { get;  } = new ExceptionInterface();
 
        public IDictionary<string, string> Modules { get; } = new SortedDictionary<string, string>();
 
        public string Release { get; set; }
 
        public User User { get; } = new User();
 
        public string ServerName { get; set; }
    }
 
    class User
    {
        public string Username { get; set; }
    }
 
    class SentryStackTrace
    {
        public List<Frame> Frames { get; } = new List<Frame>();
    }
 
    class ExceptionValue
    {
        public string Type { get; set; }
 
        public string Value { get; set; }
 
        public SentryStackTrace Stacktrace { get; } = new SentryStackTrace();
    }
 
    class ExceptionInterface
    {
        public List<ExceptionValue> Values { get; } = new List<ExceptionValue>();
    }
 
    class Frame
    {
        public string Filename { get; set; }
 
        public string Function { get; set; }
 
        public string Module { get; set; }
 
        public int Lineno { get; set; }
 
        public int Colno { get; set; }
 
        public string Package { get; set; }
 
        public string Source { get; set; }
 
        public string InstructionOffset { get; set; }
    }
 
    class Response
    {
        public string Id { get; set; }
    }
 
    #region Fields
 
    readonly string uri;
 
    readonly string publicKey;
 
    readonly string projectId;
 
    #endregion
 
    #region Constructors
 
    public RavenClient(string dsn)
    {
        if (dsn == null) throw new ArgumentNullException(nameof(dsn));
 
        var dsnAsUri = new Uri(dsn);
        uri = dsnAsUri.

Voir la suite

Sentry client for .NET 2.0

Maxence Delannoy (Wiip) 31/08/18

Logo Sentry

I'm a big fan of the Sentry service which is used to send error reports.

Each time an unexpected error occurs in one of my applications, a certain amount of information is collected (exception type and message, call stack, operating system version, user name...) then sent to Sentry's servers.

Each event is grouped with other similar events (same exception type, same message) to form a "problem". I can then locate the source of the error and correct it without having to wait for the user to give me the details of the problem.

Lately, I had a small update to do on an old application that had been developed at the time with the .NET 2.0 framework. I thought it would be nice to set up error collection with Sentry. So I search NuGet to download and install SharpRaven, which is the C# client for Sentry, into my application. The problem is that it is only available from .NET 4.0. Updating the application proved complicated, so I was about to drop it. But when you think about it, sending the data certainly had to be done with a simple HTTP request and so it couldn't have been that complicated to do. So I started reading the SDK documentation.

A few minutes later I managed to create my first event. It took me a little longer to fine-tune a few details, but in the end I was able to integrate Sentry support into my NET 2.0 application.

Here is the code, maybe it will be useful if you can't, for one reason or another, use SharpRaven :

class RavenClient
{
    class Packet
    {
        public string Message { get; set; }
 
        public string Platform { get; set; }
 
        public ExceptionInterface Exception { get;  } = new ExceptionInterface();
 
        public IDictionary<string, string> Modules { get; } = new SortedDictionary<string, string>();
 
        public string Release { get; set; }
 
        public User User { get; } = new User();
 
        public string ServerName { get; set; }
    }
 
    class User
    {
        public string Username { get; set; }
    }
 
    class SentryStackTrace
    {
        public List<Frame> Frames { get; } = new List<Frame>();
    }
 
    class ExceptionValue
    {
        public string Type { get; set; }
 
        public string Value { get; set; }
 
        public SentryStackTrace Stacktrace { get; } = new SentryStackTrace();
    }
 
    class ExceptionInterface
    {
        public List<ExceptionValue> Values { get; } = new List<ExceptionValue>();
    }
 
    class Frame
    {
        public string Filename { get; set; }
 
        public string Function { get; set; }
 
        public string Module { get; set; }
 
        public int Lineno { get; set; }
 
        public int Colno { get; set; }
 
        public string Package { get; set; }
 
        public string Source { get; set; }
 
        public string InstructionOffset { get; set; }
    }
 
    class Response
    {
        public string Id { get; set; }
    }
 
    #region Fields
 
    readonly string uri;
 
    readonly string publicKey;
 
    readonly string projectId;
 
    #endregion
 
    #region Constructors
 
    public RavenClient(string dsn)
    {
        if (dsn == null) throw new ArgumentNullException(nameof(dsn));
 
        var dsnAsUri = new Uri(dsn);
        uri = dsnAsUri.

Voir la suite

Ma station de travail PHP

Remi Collet 29/08/18

Je vois régulièrement passer des questions sur l'utilisation d'anciennes versions de PHP sur Fedora (qui fournit la 7.0) ou de versions plus récentes sur RHEL / CentOS (qui fournit la 5.4).

Un développeur utilisant PHP a souvent besoin de tester son travail avec plusieurs versions. Donc voici un petit descriptif de la station de travail que j'utilise quotidiennement

Système d'exploitation : Fedora 25 Workstation x86_64 (mais les exemples fonctionnent aussi sur RHEL ou CentOS 7)

Dépôts tiers : rpmfusion (pour écouter de la musique en travaillant) et évidement remi

# wget http://rpms.remirepo.net/fedora/remi-release-25.rpm
# dnf install remi-release-25.rpm
# dnf config-manager --set-enabled remi

Pour RHEL ou CentOS, lisez les instructions de l'assistant de configuration.

 

Installation des versions de PHP

J'utilise les Software Collections qui permettent d'installer plusieurs versions en parallèle sans toucher au système de base, les versions de PHP 5.4, 5.5, 5.6, 7.0, 7.1 et 7.2 sont disponibles dans mon dépôt, donc:

# yum install php56 php56-php-fpm php56-php-mbstring php56-php-mysqlnd ...
# yum install php70 php70-php-fpm php70-php-mbstring php70-php-mysqlnd ...
# yum install php71 php71-php-fpm php71-php-mbstring php71-php-mysqlnd ...
# yum install php72 php72-php-fpm php72-php-mbstring php72-php-mysqlnd ...
# yum install php73 php73-php-fpm php73-php-mbstring php73-php-mysqlnd ...


Les utilisateurs de RHEL peuvent aussi utiliser les SCL officielles disponible dans le canal RHSCL (php54, php55, rh-php56, rh-php70 et rh-php71).

Les utilisateurs de CentOS peuvent aussi utiliser les SCL, maintenues par le SIG, disponibles dans le dépôt centos-sclo-sclo.

 

Configuration de l'environnement Web

PHP FastCGI Process Manager

Je n'utilise pas mod_php qui n'autorise qu'une seule version du module, mais FPM.

Je ne suis pas en production mais sur une station de développement, donc afin de limiter la charge, je modifie la configuration de chaque FPM pour utiliser le mode "ondemand". J'utilise aussi un port réseau différent pour chaque version

Example, pour PHP 7.0, dans le fichier /etc/opt/remi/php70/php-fpm.d/www.conf

listen = 127.0.0.1:9070
pm = ondemand

Je configure le port pour SELinux

# semanage port -a -t http_port_t -p tcp 9070

Et ensuite j'active le service

# systemctl start php70-php-fpm
# systemctl enable php70-php-fpm

Et j'applique pour chaque version.

Voir la suite

PHP en route vers la sortie de la version 7.3.0

Remi Collet 22/08/18

La version 7.3.0beta2 vient juste d'être publiée. C'est maintenant la phase de stabilisation qui commence pour les développeurs, et de test pour les utilisateurs.

Les RPM sont disponibles dans le dépôt remi-php73 pour Fedora  27 et et Enterprise Linux  6 (RHEL, CentOS) ainsi qu'en Software Collection dans le dépôt remi-safe (ou remi pour Fedora).

 

emblem-important-4-24.pngLe dépôt contient actuellement des versions en cours de développement qui ne sont pas destinées à être utilisées en production.

Lire aussi : PHP 7.3 en Software Collection

emblem-notice-24.pngInstallation : voir la Configuration du dépôt et choisir le mode d'installation.

Remplacement du PHP par défaut du système par la version 7.3 (le plus simple) :

yum-config-manager --enable remi-php73
yum update php\*

Installation en parallèle, en Software Collection de PHP 7.3 (x86_64 uniquement, recommandée pour les tests) :

yum install php73

emblem-important-2-24.pngÀ noter :

  • la version EL7 est construite avec RHEL-7.5
  • la version EL6 est construite avec RHEL-6.10
  • beaucoup d'extensions sont aussi disponibles, voir la page PECL extension RPM status.
  • suivre les commentaires pour les mise à jour jusqu'à la version finale.

emblem-notice-24.pngInformations, lire :

Paquets de base (php)

Voir la suite

Quelques notes en vrac à propos du livre Hedge - A Greater Safety Net for the Entrepreneurial Age

Perrick Penet (onpk.net) 02/08/18

M. Nicolas Colin,

Après avoir lu vos différents articles sur Medium puis découvert votre newsletter plus récemment, jai eu loccasion de lire tout récemment votre livre Hedge - A Greater Safety Net for the Entrepreneurial Age. Et comme visiblement vous êtes en quête de retours, voici quelques remarques à chaud.

Tout dabord, je me suis régalé ! Votre plume est précise, les références historiques foisonnantes, appuyant toujours votre propos, et les thèses que vous avancez tracent un chemin peu battu et tellement souhaitable pour cet âge des entrepreneurs que vous appelez de vos vux (et que javais nommé âge des entreprenants il y a quelques temps). Le travail de curation des liens et des ouvrages est très précieux : entre les articles que jai eu du plaisir à relire (à commencer par How Burrowing Owls Lead To Vomiting Anarchists), ceux que jai découvert et les livres qui sont désormais sur ma table de chevet, il y a de la matière !

Ensuite - et en vrac - quelques remarques notées au fil de ma lecture : bien sûr il ne sagit que dune paire de centimes à apporter au moulin, pas grand chose de plus.

Page 38. Je suis assez étonné de voir que vous mettiez la puissance anglaise de l'ère victorienne sur le compte de sa finance, et considériez celle de la Chine comme technique. Non seulement parce que l'Angleterre de l'époque, c'est aussi Crystal Palace, Brunel, Babbage & Co (des ingénieurs, des train, des machines à vapeur et les soldats de l'Amirauté). Mais aussi parce que la Chine est désormais bien positionnée sur la finance du futur : de l'Asian Infrastructure Investment Bank au China New Era Technology Fund, les pièces du puzzle sont déjà là.

Toujours page 38. Le passage chinois par l'Afrique est une stratégie éprouvée : les efforts de Toyota en la matière sont là pour en témoigner. Renault les trouve en train de vendre des 4x4 bon marché au sud de la Méditerranée dans les années 1970, la Prius arrive une vingtaine dannée plus tard en Californie. Un entretien de Freddy Ballé - pionnier du Lean en France - le montre en filigrane (il y a aussi une

Voir la suite

Le planning jour par jour est publié, faites votre programme idéal

AFUP 23/07/18

Ainsi, le jeudi à 17h10 en plénière en salle Katherine Johnson, Anne-Laure De Boissieu et Eric Daspet vous parleront de l'apprentissage et de l'importance d'être accompagné dans cette démarche : une conférence entièrement basée sur leur expérience partagée.
Le vendredi, pour clore le Forum PHP 2018, Laurent Victorino vous présentera "Développeurs de jeux vidéo : les rois de la combine" dans la même salle, où on y parlera de "jeux, de développement de jeux, ou de comment un jeu vidéo n’est qu’un amas de bric et de brocs mis bout à bout dans le seul but de duper, tromper, et leurrer le cerveau des joueurs et faire en sorte qu’ils en redemandent", dixit son auteur !

Rendez-vous sur le site du Forum PHP 2018 pour découvrir le planning des 25 et 26 octobre prochains, et bien sûr pour réserver votre place sans tarder. 

Pourquoi venir au Forum PHP 2018 ?

AFUP 16/07/18

Le Forum PHP 2018 est le rendez-vous annuel parisien pour toute la communauté PHP, où plus de 650 développeuses et développeurs se réunissent pour discuter, échanger, apprendre, découvrir et dialoguer. 

Venez écouter des talks inspirants, découvrez ce qui se fait -et comment- dans les plus grandes entreprises, rencontrez les acteurs qui font vivre notre écosystème et repartez boostés au bureau, la tête remplie de bonnes idées et de nouvelles approches. 

Découvrez tous les avantages à nous rejoindre, et prenez vite votre billet.

Vous avez envie de venir mais votre direction hésite encore à prendre votre place ? 
Qu'il s'agisse pourtant de voir ses équipes se perfectionner, cultiver sa marque employeur qui attirera les meilleurs profils lors de ses futurs recrutements, ou de proposer les projets les plus innovants à ses clients, elle a de multiples avantages à prendre des tickets pour ses salariés ! Nous vous proposons un flyer de documentation qui vous permettra de présenter le Forum PHP 2018 à vos supérieurs, et les convaincre.

Alors, rendez-vous à Paris les 25 et 26 octobre prochains avec toute la communauté PHP ? La billetterie n'attend plus que vous. 

En route pour Lille, Lyon et Rennes pour l'AFUP Day 2019

AFUP 10/07/18

Les antennes de Lille, Lyon, Rennes, mais aussi de Toulouse et Aix-Marseille ont soumis leur candidature pour participer à la première édition de l'événement. Après consultation des dossiers et étude des candidatures par le bureau de l'AFUP et le pôle antennes, ce sont donc les antennes de Lille, Lyon et Rennes - accompagnée de l'antenne nantaise - qui accueilleront cette première édition.

À terme, nous espérons que toutes les antennes AFUP participeront !

API Platform 2.3: Major Perf Improvement, API evolution/deprecation, Better Dev Tools and Much More!

Kévin Dunglas (Lapin Blanc) 06/07/18

Today, the API Platform framework has reached 3k stars on GitHub, and it makes us very proud! To celebrate, I’ve just tagged the 2.3 version, that comes with a lot of amazing new features. Let’s discover them!

For newcomers, API Platform is a modern open source framework for API-driven projects. It allows, in just a few minutes, to expose hypermedia and GraphQL APIs. It also provides client-side tools leveraging the capabilities of auto-discoverable APIs: the admin interface and the React and Vue.js Progressive Web App generator. Finally, API Platform has been designed from the ground up as a Cloud Native solution that can run locally with the built-in Docker setup and be deployed instantly on a Kubernetes cluster (Heroku is also supported).

40% faster than the previous version!

We’re committed to continuously improving the performance of API Platform. In version 2.1, we’ve added an amazing invalidation-based cache mechanism. When enabled, HTTP responses are generated only one time then stored and served by a reverse caching proxy. When a resource is modified, all responses including or referencing it are automatically removed from the cache.

In version 2.3, Ben Davies has done an excellent job at profiling and patching the core component. Moreover, we’ve worked closely with the Symfony team to dramatically improve the performance of the Symfony Serializer component (one of the most important pieces of software used by API Platform).

Voir la suite

Retrouvez moi au forum PHP 2018 organisé par l’AFUP !

Stéphane Hulard (CH Studio) 04/07/18

Retrouvez-moi au Forum PHP les 25 et 26 octobre 2018 et venez découvrir ma conférence: Symfony/Messenger un composant à votre service !

L’article Retrouvez moi au forum PHP 2018 organisé par l’AFUP ! est apparu en premier sur CH Studio.

Blogs

Infos

Ajouter une source ?

Envoyez un email avec l'URL du site et du flux à planetephpfr AT afup POINT org

Gestion

AFUP