Play with WebAssembly WASM

22 janvier 2018

WebAssembly is assmbly in webbrowser. You can run C, C++, other language faster than javascript.

Code Source: wasm.zip

1. Compile Code
Just go to https://wasdk.github.io/WasmFiddle/ type your code, click on build, and download WebAssemenbly binary.

int main() {
return 42;
}

2. Make HTML
Now you can make HTML page like that

fetch('program.wasm').then(response =>
response.arrayBuffer()
).then(bytes =>
WebAssembly.instantiate(bytes)
).then(results => {
console.log( results.instance.exports.main() );
});

3. Run
Open you HTML file in your browser and see result.

Jouer avec Sia

8 décembre 2017

Cet article n’est pas terminer faute de temps, mais je le publie pour tracer quelques étapes.

Sia est un système de stockage de donnée basé sur la technologie blockchain. Comme pour les bitcoins la technologie blockchain permet d’avoir un système décentralisé et auto-réguler car à la preuve de travail. Les créateurs Sia ont appliquer ce principe pour l’hébergement de fichiers, vos fichiers sont chiffrés puis hebergé sur des serveurs un peu partout dans le monde. Impossibité au propriétaire des serveurs de lire le contenu de vos données et réplication automatique.

Comment cela fonctionne ?
On prend une suite de données, on applique un algorithme qui permet de générer un nombre qui est une signature des données d’entrées, hash en anglais. La moindre modification dans les données change cette signature. Des ordinateurs se met d’accord pour les données d’entrée et vont calculé ce hash. Mais pour rajouté du « travail » on vas leur demander de rajouter des données pour que ce hash commence par exemple par trois zéros. Pas d’autre solution que de tester toutes les possibilités, on vas donc faire tourné en boucle jusqu’a trouvé la solution. Lors qu’un ordinateur trouve cette solution il la partage et par la même occasion il se voit récompensé. Cet recherche de solution se nomme le minage, et permet de validé un bloque de données. Une astuce supplémentaire est utilisé pour transformé ce principe en blockchain, le début d’un bloque possède le hash du block précédant, et donc chaque bloque valide le précédant et toute la chaine par la même.

Étape 1: Achat de Bitcoin
Bien que Sia utilise sa propre monnaie, on ne peut en récupérer directement des Siacoins. Donc il va falloir acheter des Bitcoins, et la tache n’est pas si facile. Donc après quelque hésitation je me suis enregistrer sur le site paymium.com, je n’ai aucune action chez eux, mais il semblerai qu’il soit sérieux et Français. Il faut donc créer un compte puis faire un versement depuis sont compte bancaire vers leur numéro de compte. Aller dans votre compte puis Alimenter votre compte Euros. Attention le virement interbancaire peut prendre plusieurs jours, normalement 24 heures.

Étape 2: Transfere vers Poloniex
Maintenant que vous avais quelques centimes de Bitcoin, vous pouvais acheter des Siacoins. Il va falloir s’incrire sur le site poloniex.com. Puis dans le Menu Balances > Deposits & Withdrawals, selectionner BTC (Bitcoin) et cliquer sur deposit.

Avec cette adresse ont peut faire le virement depuis paymium.com, donc retourner sur votre compte. Et dans le menu Retirer des Bitcoins entrer la quantité et l’adresse précédemment obtenu. Et la encore il va falloir attendre quelques heures pour que le virement soit effectué.

Étape 3: Vérification de la transaction (optionnel)
L’avantage des transferts Bitcoins c’est que l’on peut suivre en temps réel les versements effectuer, pour cela vous pouvez vous rendre sur le site blockchain.info pour entrer votre adresse Bitcoin et vérifier si le versement a était effectué.

Étape 4: Achats de Siacoin
Enfiler votre costume de trader vous aller acheter au meilleur taux des Siacoin. Aller sur le site Poloniex avec votre compte et dans Exchange selectionner siacoin, puis dans le carré Buy SC, entrer le montant de Siacoin que vous voulez/pouvez vos payer.

Étape 5: Installation de Sia Host
Alors tous est assez bien expliquer sur leur blog pour l’installation. Je vais donc rapidement vous montrer les etapes.

  • Télécharger la version qui vous correspond https://github.com/NebulousLabs/Sia/releases
  • Lancer siad -M gctwh, attention il vas creer des répertoire dans le répertoire de lancement
  • Dans un autre terminal lancer ./siac pour verifier qu’il communique bien avec le daemon
  • Puis siac wallet init, pour creer un portefeuille
  • Puis siac wallet unlock, copier tout les mots qui sont le mot de passe de votre portefeuille et les garder secret
  • siac wallet address, pour creer une addrese et la garder pour la prochaine etape

Étape 6: Versement de vos Siacoin

ouverture des ports
iptables -A INPUT -p tcp --dport 9981 -j ACCEPT
iptables -A INPUT -p tcp --dport 9982 -j ACCEPT

Verification http://www.yougetsignal.com/tools/open-ports/

Vérifier que le serveur est syncronisé

rsync@synapse:~/sia/Sia-v1.1.2-linux-amd64$ ~/go/bin/siac consensus
Synced: No
Height: 96806
Progress (estimated): 99%
rsync@synapse:~/sia/Sia-v1.1.2-linux-amd64$ ~/go/bin/siac consensus
Synced: Yes
Block: 00000000000002dac0fb3adab6dab1e01d153d9146e9fc520d446aff419dddb7
Height: 98542
Target: [0 0 0 0 0 0 3 101 34 116 191 27 69 16 200 189 140 3 48 223 152 198 246 71 221 13 175 49 243 23 188 3]
rsync@synapse:~/sia/Sia-v1.1.2-linux-amd64$ ~/go/bin/siac wallet balance
Wallet status:
Encrypted, Unlocked
Confirmed Balance: 70 SC
Unconfirmed Delta: +0 H
Exact: 70000000000000000000000000 H
Siafunds: 0 SF
Siafund Claims: 0 H

Metre le serveur a disposition

rsync@synapse:~/sia/Sia-v1.1.2-linux-amd64$ ~/go/bin/siac host announce
Host announcement submitted to network.

The host has also been configured to accept contracts.
To revert this, run:
siac host config acceptingcontracts false

Vérifier que le serveur est disponible

http://siapulse.com/page/network

D-Link DSL-320B pour remplacer une freebox dégroupé

17 juin 2016

Comme ma freebox est tomber en panne je viens d’acheter un modem pour la remplacer, attention en fessant cela vous perdez la TV et le téléphone.
Brancher le câble RJ11 de la prise téléphonique au modem, et un RJ45 (câble Ethernet) entre le pc et le modem. Le modem possède un serveur DHCP qui vas directement vous attribuer une IP (192.168.1.2 normalement) et le modem a pour IP 192.168.1.1. Il suffit donc a l’aide du navigateur d’aller sur la page http://192.168.1.1 pour accéder à l’interface. Attention le modem est fournit sans véritable documentation papier, sur le CD un pdf, et tout l’interface est en anglais sans possibilité de modifier la langue!

Aller dans l’onglet Setup
Selectionner Static IP Address
IP Address: rentrer l’addresse que free vous a fournis (visible sur votre compte https://adsl.free.fr Ma Freebox > Afficher mon adresse IP et les caractéristiques de ma ligne)
Subnet Mask : 255.255.255.0
Connection Type : 1483 Routed IP VC-Mux
NAT : Enable
IGMP : IGMPv3
Default Route : Enable
Default Gateway : Votre adresse IP en modifiant le mettant 255 à la place du dernier nombre
VPI : 8
VCI : 36

Une autre manipulation est a faire dans l’onglet Advenced > DNS Setup
Selectionner Use the following DNS server addresses, et rentrer les DNS de free ou autre:
212.27.40.240 (free)
8.8.8.8 (google)

Attention le logo « internet » ne veut pas dire que votre connexion est correct, pour avoir plus d’information il faut aller dans l’onglet Maintenance > Diagnostics.



Add VBScript into C++ Application

16 juin 2015

How to add Scripting possibility, under windows with VBScript.

[sourcecode language="cpp"]
#include <windows.h>
#include <OleAuto.h>
#include <stdio.h>
#include <comutil.h>
#pragma comment (lib, "OleAut32.lib")
#pragma comment (lib, "comsuppw.lib")

#import "msscript.ocx"

MSScriptControl::IScriptProcedurePtr GetScriptFunction(MSScriptControl::IScriptControlPtr pScript, LPCTSTR szName)
{
MSScriptControl::IScriptProcedureCollectionPtr pIProcedures = pScript->GetProcedures();
long count = pIProcedures->GetCount();
for(long index=1; index <= count; index++)
{
MSScriptControl::IScriptProcedurePtr pIProcPtr = pIProcedures->GetItem( _variant_t(index) );
_bstr_t name = pIProcPtr->GetName();
if ( lstrcmp( name, szName ) == 0 )
return pIProcPtr ;
pIProcPtr = NULL;
}
return NULL ;
}

void create_script()
{
CoInitialize(NULL);
MSScriptControl::IScriptControlPtr m_pScript ;
HRESULT hr = m_pScript.CreateInstance(__uuidof(MSScriptControl::ScriptControl));

m_pScript->PutAllowUI( VARIANT_TRUE );
m_pScript->PutLanguage( _bstr_t(L"VBScript") );

_variant_t obj(1.2345);

wchar_t code[] = L"Function Toto()\nToto = 1.2345\nEnd Function" ;
hr = m_pScript->AddCode( _bstr_t(code) );

MSScriptControl::IScriptProcedurePtr pFunc = GetScriptFunction(m_pScript,L"Toto");

SAFEARRAY *parameters = ::SafeArrayCreateVector( VT_VARIANT, 0, 0 );

_variant_t ret = m_pScript->Run( _bstr_t("Toto"), &parameters );

_bstr_t bv(ret);
wprintf(L"%s\n", bv.GetBSTR());
}

int main(int argc, char** argv)
{
create_script();
}
[/sourcecode]

OpenCV Python Write AVI under windows

9 juin 2015

Create AVI file with opencv under windows:

[sourcecode language="py"]
import cv2
import numpy as np

cap = cv2.VideoCapture(0)
fourcc = cv2.cv.CV_FOURCC(‘D’,'I’,'B’,’ ‘)
size = (320,240)
out = cv2.VideoWriter(‘output.avi’,fourcc, 1.0, size)

for i in range(100):
im = np.zeros( (size[1],size[0]), dtype=np.uint8 )
cv2.rectangle( im, (size[0]/2-50,size[1]/2-10), (size[0]/2+50,size[1]/2+10), 255, -1 )
out.write( im )
print i, im.shape

cap.release()
out.release()
[/sourcecode]

De l’utilisation de vstest.console.exe avec des tests ordonnés

28 janvier 2015

D’apres Microst MSTest est devenu obsolete, son remplassant vstest.console.exe, mais comme la doc de Microsost se limite a quelque ligne voici comment lancé des orderedtest en ligne de commande
Pour creer un fichier orderedtest dans visual studio, click droit sur Projet puis Add > Ordered Test

vstest.console.exe UnitTestProject\OrderedTest1.orderedtest /logger:trx /Settings:local.testsettings

Déplacer les fichiers qui correspondes à une regex UUID

8 janvier 2015

Petit script pour lister tous les fichiers qui correspondes a une regex ici les fichiers sont des UUIDs:
[sourcecode language="bash"]#!/bin/sh

for i in $(ls src| egrep ‘[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}’ -o)
do
echo "mv src/$i dst/$i"
mv src/$i dst/$i
done
[/sourcecode]

Nginx dokuwiki configuration

23 décembre 2014

Voici un extrait de configuration de nginx pour dokuwiki, tournant sur ma raspberry. Attention ne pas activer l’édition pour les anonymes car des bots remplace vos contenu, et si rien est fait tout est supprimer après 7 jours.
server {
listen *:80;
server_name wiki alias wiki.example.org;
root /var/www/dokuwiki/;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~ /(data|conf|bin|inc) {
deny all;
}
}

Compilation de FFMPEG sous Windows 32bit LGPL

13 août 2014

Ce n’est pas le plus facile a faire : compiler FFMPEG sous windows malgres les documentation trouver en ligne:

https://www.ffmpeg.org/platform.html#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows
http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=5&t=1309

Voila la commande utilise pour la configuration:
# ./configure –toolchain=msvc –enable-shared –yasmexe=vsyasm.exe –cpu=i686 –prefix=ffmpeg/

FFMPEG 2.1.4 WIN32 LGPL

Simulate PPTP connexion in Python

26 juin 2014

I want to check PPTP connexion into a script, so I write this small code to simulate first packet PPTP connection:

[sourcecode]
import socket
import array
import struct

HOST = "pptp.example.com"
PORT = 1723

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))

hex_string = "009c00011a2b3c4d0001000001000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d6963726f736f667400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
hex_data = hex_string.decode("hex")
msg = bytearray(hex_data)

s.send(msg)

data = s.recv(8)
( len, type, magic ) = struct.unpack(‘>HHI’, data )
data = s.recv( len – 8 )
s.close()

print ( "len=%d,type=%d,magic=0x%0x" ) % ( len, type, magic )
print data.encode(‘hex_codec’)
[/sourcecode]

Source : http://tools.ietf.org/html/rfc2637
http://www.wireshark.org/