dimanche 7 septembre 2014

JSDB.io - La base de données des librairies et frameworks javascript

JSDB.io est une base de données regroupant de nombreuses librairies et frameworks javascript utilisés pour le développement d'application client basé sur ce langage.

Chacune des entrées de cette librairie indique les informations suivantes:

  • Un lien vers la page d'accueil du framework
  • Une brève description
  • Un lien vers le project github
  • Des liens vers des CDN
  • Des liens vers des tutoriaux
Pour soumettre une librairie, il est nécessaire d'avoir un projet github contenant les sources du projet, que ce projet possède au moins 80 étoiles et que la librairie soit utilisable coté client.

Voila donc un lien utile a utiliser dés que vous cherchez une librairie qui peut vous aider : 

lundi 11 août 2014

Appeler un service WCF SOAP depuis Powershell


Powershell met à disposition le cmdlet New-WebServiceProxy pour créer un proxy pour appeler vos services WCF. Pour créer le proxy, il suffit de lui donner le WSDL du service a appeler.

Une fois le proxy généré, il suffit d'appeler la méthode correspondant à l'opération. Par exemple :

$proxy = New-WebServiceProxy -uri $WSDLUrl;
$res = $proxy.HelloWorld();

Dans le but de faire du monitoring, j'ai écrit un petit script, disponible ci dessous, qui permet, sur base d'un wsdl et du nom de l'opération à appeler, de vérifier que l'opération sur un service s'exécute correctement:

[CmdletBinding(SupportsShouldProcess=$true)]
Param(
    [Parameter(Mandatory=$True)][string]$WSDLUrl,
    [Parameter(Mandatory=$True)][string]$MethodName
    )

Write-Verbose "WSDLUrl=$WSDLUrl"
Write-Verbose "MethodName=$MethodName"

try
{
    $proxy = New-WebServiceProxy -uri $WSDLUrl -ErrorAction Stop
    if(-not $proxy.$MethodName)
    {
        Write-Error "Method $MethodName is not declared on service defined at $WSDLUrl"
        exit 1;
    }
    $res = $proxy.$MethodName.Invoke();
}
catch
{
    Write-Error $_
    exit;
}

if($res)
{
    Write-Verbose $res;
}
else
{
    Write-Verbose "void";
}

Write-Host "service called"

Quelques sources intéressantes si vous souhaitez aller plus loin !

mardi 4 février 2014

Session state has created a session id, but cannot save it because the response was already flushed by the application.

Cette erreur peut se produire lorsque l'on essaie de récupérer le session id d'une session alors que la réponse au client a déja été envoyée. Le sessionID étant passé par cookies, si on n'en a pas envoyé au client, il n'est dés lors, plus possible de lui renvoyer cet ID.

Un petit workaround pour régler ce problème, consiste à toujours créer un sessionID pour chaque utilisateur. Pour implémenter ce comportement, on peut utiliser l'event Session_Start dans le Global.asax avec le code suivant:

void Session_Start(object sender, EventArgs e)
{
    string sessionId = Session.SessionID;
}

Comment déterminer à qui appartient un package oracle à l'exécution

La solution que l'on rencontre le plus souvent pour répondre à cette question, consiste à récupérer dans le context quel est le schéma actuel via la fonction sys_context:

sys_context('userenv', 'current_schema')

Cependant, cette méthode ne fonctionnera pas si l'on se trouve dans une procédure d'un package marquée comme devant s'exécuter en utilisant le schéma actuel (c'est à dire de l'appelant) et non le schéma dans lequel se trouve le package(utilisation de "authid current_user" plus d'info ici)

En effectuant, quelques recherches, j'ai trouvé une autre solution (voir ici) qui consiste à analyser la call stack. La première entrée de cette dernière contiendra le nom du schéma et le nom du package qui est appelé(owner.package), il suffira donc d'extraire la première partie (celle juste avant le point) pour connaitre le propriétaire du package.

Une implémentation est proposée sur le site ou j'ai trouvé la réponse à ma question : http://cbohl.blogspot.be/2011/01/determine-owner-of-package.html

lundi 7 octobre 2013

Formats de date en .Net - Cheat-Sheet

Vu que je me demande souvent si le format de date .Net des mois utilise un m minuscule ou majascule et quel caractère est utilisé pour les millisecondes je me suis fait une petite cheat-sheet (un copion quoi) accrochée à mon mur.

Voici les liens vers mon copion disponible en A4 sur 2 pages ou en A4 sur une seule page avec 2 colonnes :



mardi 1 octobre 2013

Ma fonction powershell retourne un tableau avec plusieurs éléments au lieu de l'objet demandé


Après un long débogage dans des scripts powershell je me sens obligé d'écrire un petit post sur ce blog. Cette session de débug aura au moins l'avantage de m'avoir appris ce qu'était le mot clé return en powershell et qu'il ne fallait pas se fier aux apparences !

Par exemple, la fonction :

function get-string
{
    'hello world' -match 'hello'
    return $Matches[0];
}
Que ce passera t-il si on appelle cette fonction dans le shell ? En tant que développeur C# je m'attendrai à avoir la valeur "hello" ou une chaîne de caractère.

Voici ce que me retourne la commande get-string:
True
hello
Deux valeurs ! Comment est-ce possible ? Je n'ai qu'un seul return dans ma fonction et la valeur $Matches[0] ne contient que la chaine "hello" si j'affiche cette valeur ou si j'ajoute un watcher sur cette variable. Que s'est-il donc passé ?

Si on prend le temps de lire la documentation about_return depuis le shell ou sur internet, on peut y lire que le mot clé return retourne également toutes sorties non interceptées. Le mot clé match retourne un booléen pour indiquer si un match a été réalisé ou non. Donc une donnée booléenne est envoyée et non récupérée dans la fonction. Cette donnée est donc ajoutée à la sortie de la fonction en plus de l'objet retourné via le mot clé return.

mardi 23 juillet 2013

ORA-12018 lors de la creation d'une vue materialisée avec un database link

Ce matin, j'ai voulu recréer sur une base de données Oracle, une vue matérialisée avec un Fast refresh utilisant un database link. La particularité de cette vue materialisée est qu'elle utilise un dblink portant le même nom que le schéma sur lequel se trouve la table que je souhaite avoir dans ma vue matérialisée.

Il semblerait que cette particularité génère une erreur sur certaines versions d'Oracle.

SQL> CREATE MATERIALIZED VIEW local.mytable BUILD IMMEDIATE REFRESH FAST As Select * From master.mytable@master; 

CREATE MATERIALIZED VIEW local.mytable BUILD IMMEDIATE REFRESH FAST As Select * From master.mytable@master 
ERROR at line 1: ORA-12018: following error encountered during code generation for "local"."mytable" 
ORA-00942: table or view does not exist 

Un workaround pour contourner cette erreur consiste à d'abord la vue materialisée en Complete Refresh puis de la modifier pour qu'elle utilise un Fast refresh. Donc ici pour ma table mytable:

CREATE MATERIALIZED VIEW MyMaterializedView BUILD IMMEDIATE REFRESH COMPLETE As Select * From master.mytable@master;
Alter MATERIALIZED VIEW MyMaterializedView REFRESH FAST;
 
Je n'ai pas trouvé d'explications claires sur le pourquoi de ce bug mais en tout cas le workaround semble bien fonctionner.