jeudi 6 septembre 2012

PostgreSql - Backup et restaure d'une base de donnée

Voici quelques références relatifs au opérations de backup et restore d'une base de donnée PostgreSql.

Impossible de restaurer un backup créé avec with pgAdmin III

J'ai créé un fichier de backup en utilisant pgAdmin III, mais quand j'ai voulu le restaurer (restore), le bouton OK restait grisé.
pgAdmin III utilise l'outil PostgreSQL nommé pg_restore, ce dernier supporte seulement les formats compressés (COMRESS) et les archives (TAR). Le backup fait avec pg_dump (ou l'interface pgAdmin III doit donc utiliser ces options. Un fichier de backup compressé est alors accepté sans problème par pgAdmin (et le bouton est dégrisé).

Note: le format PLAIN ne peut pas être interprété par pgAdmin III et pg_restore (il peut être édité manuellement et exécuté avec l'outil SQL de pgAdmin III), c'est la raison pour laquelle il n'est pas accepté comme un fichier valide.

Je recommande l'utilisation du format COMPRESS pour les backups journaliers. Le format PLAIN est réservé à aux modifications manuelle avant exécution du SCRIPT. Le format PLAIN à d'ailleurs quelques restrictions (pas les blobs) qui rend se format moins utile pour les tâches de backup standard.

Création du backup
Notez l'encodage en UTF8 (plus répandu).

J'ai activé les OIDs pour avoir les clés numérotés
 Ce backup correspond à la commande sql suivante:

C:/Program Files/PostgreSQL/9.1/bin\pg_dump.exe --host localhost --port 5432 --username "postgres" --role "postgres" --no-password  --format tar --blobs --encoding UTF8 --oids --verbose --file "c:\temp\stockdev.backup" "stockdev"

Restaurer le backup
Le plus simplement du monde, je me suis rendu sur l'autre serveur. J'ai effacé et recréé une DB vide.
Ensuite, j'ai utilisé l'outil de restauration de pgAdminIII avec mon fichier de backup (sans changer aucune option).
Résultat: Nickel !

Ressources

lundi 3 septembre 2012

Pour nos enfants handicapés/différents, A la TEC et à nos ministres je crie mon INDIGNATION

Vous qui passez par là, prenez le temps de lire et de relayer cette information car l'histoire quelle contient est vraie... c'est la notre!

Je vous présente Benjamin
Mon fils Benjamin à 11 ans, issus d'un premier mariage, il est différent... assez pour se faire traiter de Mongole quand il va  au stages normaux durant les vacances.
Pas fortement atteint, les gens ne regardent pas ailleurs quand ils le croise! N'empêche dans sa tête, il est plus proches des huit ans, il additionne difficilement au delà de 10 et a accumulé un retard scolaire conséquent (il est en "2 et 1/2" année primaire pour vous aider à situer ce retard).
Nous avons une chance inouï, j'ai réussi à lui apprendre à lire mais cela ne suffit pas a combler son inconscience et, il faut l'avouer, il reste un peu dans sa bulle.
Malgré nos efforts de structuration, mon fils reste aussi différent d'un point de vue caractériel. Il oscille entre type 8 (retard d'apprentissage) et type 3 (caractériel)... mais c'est le type 8 qui le caractérise administrativement.
Finalement, un point important à ajouter dans ce billet, Benjamin reste atteint d'un trouble psychomoteur important pour vivre en société... il a du mal à se repérer dans le temps et dans l'espace.
Benjamin est donc en enseignement spécial dans une école de Court-Saint-Etienn.
Comme elle est située à 20 minutes de routes (au minimum), c'est la TEC qui prends gratuitement ce déplacement en charge.

Notre cadre de vie
Une semaine sur deux, Benjamin vis avec sa soeur et ses deux demi-frères/soeur en garde alternée.
Pour assumer toutes ces bouches, ma femme et moi travaillons à temps plein. Mon horaire se termine à 18h00 dans mon cas et celui de ma femme à 17h00. Et forcement, nous n'avons pas la chance de travailler tous les deux à "deux pas" de la maison.
Le prix des assurances et de l'essence ne nous permet plus d'avoir deux véhicules. Nous nous débrouillons donc avec une seule voiture.
Qu'elle foire d'empoigne pour satisfaire à nos déplacements, nos employeurs et les exigences de la vie de famille (nous vivons à 6 sous le toit). Quel Rodéo épuisant et pourtant nous nous efforçons de faire au mieux.

La prise en charge du TEC
Le transport de Benjamin, souffrant de son handicap, est prit en charge par la TEC. Mais depuis la première année, nous devons faire face a une forme de mauvais vouloir de la part de cette administration qui essaye sans cesse de comprimer leurs budgets.
Paraît-il que c'est a cause de nos ministres... bien commode de se laver les mains de la sorte.

Donc, chaque année, la rentrée de Septembre est un moment de tension où il faut s'assurer que Benjamin soit bien déposé au pas de la porte (il souffre de problèmes d'orientation et temporel) et nous avons toujours fait au mieux pour qu'il y ait quelqu'un pour l’accueillir.
A ce sujet, je remercie mon beau fils de 14 ans qui coopère beaucoup pour nous aider... à son age, beaucoup d'autres Ado font/impose autre chose quand à l'occupation de leur horaire. Merci Didi!

Mais arranger ce dépôt ne se passe pas sans mal. Nous contactons la TEC (je meurs d'envie de mettre des nom!!!) mais aussi l'école réintroduire un dossier pour que le cas de Benjamin soit correctement prit en compte.
L'année dernière c'est à la gare que l'on voulait déposer mon fils!!!! Un enfant retardé (même légèrement)... inconscient.... et ayant des troubles de l'orientation.
Situation inacceptable à laquelle nous avons échappé de peu... Benjamin ayant encore été déposé chez nous. Et à nous de nous organiser pour le recevoir à des horaires où nous ne savons pas être disponible car "il nous faut bosser pour gagner notre croûte".

Prise en otage pernicieuse
Durant les deux mois de vacances, nous avons reçu un courrier nous indiquant que l'enlèvement se ferait à un autre arrêt de bus.
Pour nous, pas de problème... le plus important étant le retour chez nous... celui que nous avons déjà tant de mal à organiser correctement (pour maintenir un bon cadre de vie... dans les meilleures conditions).
Rien à propos du dépôt donc pas de quoi d’inquiété même si l'on reste échaudé du coup du "dépôt à la gare" de l'année dernière.

Par contre, ce matin, à l’enlèvement, nous avons appris que le dépôt à la maison c'est fini.
Ce sera vers 16h30 à la gare!!!! ça y est, la TEC remet encore cela!!!.
Et lorsque nous contactons la TEC, nous apprenons que le dossier mentionne déjà un dépôt à la gare toute l'année précédente... et donc, difficile pour nous de faire valoir notre bonne foi puisque les éléments en possession de la TEC sont en contradiction avec la réalité. Pratique non?!?!
Paraît-il d'ailleurs que les Type 8 sont maintenant délesté sur des lignes de BUS normal (La TEC affirmant officieusement que c'est l'oeuvre de notre ministre de tutelle... pas de chance pour nous... nous n'avons plus le temps de regarder la télévision depuis longtemps.).
J'ai un peu de mal à accepter cette argumentation en contradiction avec la nécessité social du service!

Pas la gare s'il vous plait!
En ce matin, nous nous battons pour que le lieu de dépôt ne soit pas une gare mais à l'arrêt de bus d'enlèvement, il se trouve à un kilomètre de chez nous.
Ce dernier kilomètre, mon fils devra apprendre à le faire seul, dans la bonne direction et en faisant attention à ne pas se faire renverser... et à ne pas être distrait en traversant.
Le retard apprentissage s'accompagne souvent de trouble de l'attention. Si la Rilatine l'aide, il est des heures où elles ne fait plus effet... comme la fin d'après-midi!!!

Malheureusement pour nous, mon beau fils n'a pas toujours terminé à 16h00 pour aller le chercher à l'arrêt de bus...et nous... et bien nous travaillons pour payer nos impôts, notre maison, notre croûte, etc!
 
Proposition à nos ministres concernés - Emploi, Enseignement et transport - : la solution la plus simple serait peut être encore que je sois chômeur complet indemnisé, en tant que chef de ménage... ce serait peut être plus simple pour tout le monde "non"? Au moins j'aurais le temps d'être là à l'heure imposée, à l'endroit imposé pour prendre mon enfant en charge... au lieu de me crever comme un imbécile 8 heures par jours pour soutenir le système social et me retrouver année après année des situations aussi absurdes que celle-ci! 

La colère et l'indignation
Je suis fâche (les mots qui me passent pas la tête sont... inappropriés). Que me reste t'il d'autre que cela!
Même les animaux sont traités avec plus d'égard. 
Sommes nous donc devenu une sous classe de la société... du genre Cafard que l'on peut écrasé sans autre chose qu'un petit "haut le coeur"?

Ces Messieurs et Mesdames de la TEC, ces Messieurs et Mesdames de la politique, je suis écœuré... et c'est peu dire.

Notre cas, et bien, ce n'est pas grand chose dans notre société de plus de 10 millions d'habitants.
Et nos enfants différents sont une charge pour la société... pour nos politiciens... et pour la TEC.

Et les cas difficiles, tout le monde le sait, c'est mieux de s'en débarrasser vite fait...
La TEC s'y emploi d'ailleurs très bien... année après année... à user administrativement ces parents déjà fatigués par une vie déjà "plus compliquée".
Etes-vous seulement humains?

La vie est déjà bien difficile comme ça. Avec un enfant en handicap (même léger comme mon fils) c'est encore plus difficile. Pas question de simplement rentrer le soir, souper et passer une vie de famille en toute simplicité.
Pourquoi faut-il donc que cela soit rendu encore plus compliqué? Pourquoi charger les affaiblis? Pourquoi cette administration "destructrice" (elle nous nous enfonce dans nos difficultés au lieu de nous aider et nous guider) ?

Et tout ces autres parents
J'ai une pensée pour ces parents, qui comme nous, ont un enfant différent, que l'on menace de déposer dans la nature avec pour seul message "Débrouiller vous parents!".
Le kilomètre que mon fils devra apprendre à parcourir à pied (si on nous le dépose à l'arrêt demandé!), en toute sécurité, sera un vrai challenge pour lui. Pour nous ce sera une inquiétude mordante chaque jours entre 16h30 et 18h00 (le temps que nous rentrions constater sa "survie" après notre travail).

Et dire que notre cas est encore "soft". Je suis certain que de nombreux autres parents sont aussi démunis que nous ce 3 septembre 2012... certains d'entre eux avec des cas et des situations encore plus dramatiques.

Qu'elle est belle ma société...
Qu'ils sont bons à la TEC...
Qu'ils sont bien nos ministres...
    Vous l'aurez compris, c'est l'humour mordant.
    Je suis fatigué de me battre...

jeudi 30 août 2012

Clipper: Creer un GUID

J'avais besoin de créer un GUID à partir de Clipper.
J'ai mis un certain temps à trouver l'exemple \contrib\hbwin\tests\testrpc.prg

#include "simpleio.ch"

PROCEDURE Main()
/*
 * Harbour Project source code:
 *
 * Copyright 2010 Viktor Szakats (harbour.01 syenar.hu)
 * www - http://harbour-project.org
 *
 */

    ? win_UuidCreateString()

    RETURN

dimanche 26 août 2012

Comptabilité sous Linux

Introduction
MC Hobby grandit... et le besoin en comptabilité aussi!
Maintenir la comptabilité sur Calc d'Open Office commence à devenir un vrai challenge.
En effet, la quantité d'information devient vraiment très importante et OpenOffice Calc présente ses limites non pas sur la quantité d'information mais sur l'interface graphique permettant d'y accéder... la vue sous forme de tableau à aussi ses contrainte... et donc ses limites.
Nous partons donc à la recherche d'une vrai solution comptable fonctionnant sous Ubuntu... pour rappel, MC Hobby est encore entièrement "Open-Source".  

La solution pour MC Hobby
Besoins de MC Hobby
Le logiciel sélectionné doit répondre à nos besoins... mais les besoins de MC Hobby ne sont bien entendu pas ceux d'une PME de taille moyenne. C'est une précision importante que vous devez connaître si vous désirez vous inspirez de notre expérience.

Le logiciel doit répondre à nos besoins comptables et gestion de stock et eventuellement facturation (notre facturation client est prise en charge par notre WebShop www.mchobby.be).
MC Hobby est une petite société de deux personnes avec activité à temps partiel.

Logiciel sélectionné par MC Hobby 
Pour le moment, nous évaluons les différentes options (moi et mon épouse qui est "comptable").
Dès que celle-ci sera fixée, nous compléterons cette section avec notre choix.

Etat du marché des soft de comptabilité
Une petite recherche sur le NET m'indique qu'une option sous Ubuntu n'est pas si désespérée que cela.

Groupe de travail Comptabilité de l'APRIL
Pour commencer, j'aimerai mentionner le groupe de travail de l'April relatif à la gestion de la comptabilité en Open-Source.

http://wiki.april.org/w/Comptabilite

Il présente déjà un certain nombre d'options dont phpCompta (http://www.phpcompta.eu/) disponible en live démo. (user=demo , password=demo)

CommentCaMarche.Net
Ce fil de discussion relatif aux logiciel comptable sous Linux est également une source d'information intéressante.

Le commentaire  ci-dessous me laisse a penser que Laurux est un outil a tester. Il est d'ailleurs repris dans la liste des softs de l'APRIL (mentionné ci-dessus)

"Sans hésiter après avoir TOUT passé en revu:: http://www.laurux.fr/"


LinuxFR.org
L'article "Commercial Comptabilité sous linux... état des lieux" reprend également quelques références.
C'est en fait ma toute première source d'information.

Parmi les différents liens, j'ai trouvé Eurogiciel (Free Gica), en jetant un coup d'oeil sur le site, je suis tombé sur une news relative à InterVat et une mise-à-jour du logiciel pour supporter les modifications de format. Information très intéressante pour un Belge, cela signifiant sur le fond que le logiciel Gica pourrait fort bien convenir pour notre comptabilité 

jeudi 23 août 2012

QR-Code - IPad Mobile tag - Unitag.fr et QL-570

Introduction
Cet article va se concentrer sur la production de QR-Code (QRCode) sur une imprimante Brother QL-570.
Cela est possible à l'aide du soft & SDK P-Touch mais demande un minimum de formalisme.

Logiciel P-Touch pour QL-570
Le programme gratuit P-Touch editor de Brother permet de faire le design d'étiquette incluant un code barre.
Par la suite, il sera possible d'utiliser le SDK pour modifier le contenu du QR-Code (voir autre article).
Parmi les code barre supporté, j'ai déjà aborder le EAN128 (voir autre article) mais il est aussi possible de concevoir des QR-Code.

Lire le QR-Code
Sur IPad, il existe l'application "MobileTag" qui permet de lire des QR Code.
Il est également possible de générer des QR-Code depuis Internet depuis le site www.unitag.fr (référence exceptionnelle) très bien pour faire des premier tests de MobileTag.
Je constate assez vite qu'il est possible de produire des tags de type URL et adresse e-mail.
Testé avec la combinaison unitag.fr + MobileTag, un Tag URL fonctionne immédiatement.
Par contre, mon premier QR-Code avec adresse e-mail produit depuis P-Touch ne fonctionne pas comme attendu (snif).

Encoder un QR-Code
Après quelques recherches, j'ai trouvé cette excellente référence sur Google Code.
Comment encoder du contenu (e-mail, url, etc)

P-Touch QR-Code
Pour encoder un QR de type URL:
Simplement taper l'URL en la faisant précéder du protocole "http://". J'ai utiliser le code de contrôle LF en fin d'URL (il suffit de taper la touche [enter] en fin d'URL).
Ce qui produit:

Pour encoder un e-mail:
Se fait à l'aide de la structure:
MAILTO:email@ledomaine.be?subject=test&body=letexte

Malheureusement, je ne suis pas arrivé à obtenir un résultat intéressant même en produisant le tag depuis unitag.fr.

Ressources

mercredi 22 août 2012

Clipper: Comment imprimer un Code barre avec une imprimante HP

Introduction
Nous disposons d'un vieux soft Clipper que j'ai migré en multi-poste sur une DB PostGreSql.
A peine croyable, grâce à Mediator et aux projets Open-Sources Harbour et PostGreSql, ce logiciel connait une seconde vie.

Nous imprimons nos notes d'envoi sur une imprimante HP (LasetJet P2055), ce qui permet de faire quelques formatages en utilisant le language PCL toujours supporté en 2012 :-)

L'étape suivante consiste à imprimer un Code barre sur la note d'envoi pour automatiser le processus de préparation et suivit de Colis.
Figurez-vous que grâce à PCL, cela est possible, sous Clipper SANS UTILISER DE CARTE MEMOIRE IMPRIMANTE stockant les fonts.

J'ai trouver un très vieux code sur OASIS permettant de générer du BarCode39 en PCL.
Cela est bien suffisant pour de nombreux cas d'utilisation et lisible par de nombreux scanner!

Après quelques modifications du programme et l'écriture de compile.bat (pour compiler sous Harbour + Visual Studio 2008), j'ai réussi à générer le PCL correspondant au BarCode dans un fichier grâce à l'instruction SET ALTERNATE... voir le contenu du fichier BarCodeHPFile.txt

Quelques-manipulation à l'aide de PSPAD (qui supporte le mode binaire) m'aura permi d'intégrer le code barre à l'endroit approprié d'une note d'envoi... Hé HOP... imprimé :-)
Avec l'aimable autorisation de
la société Guy Gerard SPRL

Code Source
J'ai reconstitué une archive avec le code source modifié.
C'est un peu brouillon car toujours à l'état de prototype mais cela compile et fonctionne parfaitement.
Le code génère une fichier BarCodeHPFile.txt contenant le PCL code pour le code barre (intégré dans l'image ci-dessus) :-)

Le code source: BarCode39HpPcl.zip

Compile.bat permet de compiler le programme avec Harbour-Project (version 30) et utilise Visual Studio Express 2008.
Il faut absolument démarrer la compilation "compile.bat" depuis un "prompt visual studio 2008" (Start Menu | Programmes | Visual Studio 2008 Express edition | utilities ... ou quelque-chose de très similaire)

PSPad (encore Open-Source) est un outil pratique vous permettant de visualiser facilement le contenu du fichier généré... il support un affichage de fichier Binaire ainsi que les opérations de copier/couper/coller bien nécessaire  pour faire ce type de prototypage :-)

Crédits
  • Merci à Bill Wood  Milwaukee pour le code en VB, 1985
  • Merci à George T. Neill pour la source Clipper (portage)... probablement en 1989
Comme quoi, même du code écrit en 1985 peut toujours être exploité 2012

jeudi 9 août 2012

Clipper: fonctions de traitement des dates

Rien de tel qu'une bonne référence.... voici une liste des fonctions permettant de traiter les dates en Clipper (et Harbour).

TRUE || FALSE       BETWEEN(<TargetData>, <FirstData>, <SecondData>)
cDayName            CDOW(<dExp>)
cMonth              CMONTH(<dDate>)
dDate               CTOD(<cDate>)
dSystem             DATE()
nDay                DAY(<dDate>)
nDay                DOW(<dDate>)
cDate               DTOC(<dDate>)
cDate               DTOS(<dDate>)
lEmpty              EMPTY(<exp>)
dDate               FT_ACCTADJ( [ <dGivenDate> ], [ <lIsEnd> ] )
aDateInfo           FT_ACCTMONTH( [ <dGivenDate> ], [ <nMonthNum> ] )
aDateinfo           FT_ACCTQTR( [ <dGivenDate> ], [ <nQtrNum> ] )
aDateInfo           FT_ACCTWEEK( [ <dGivenDate> ], [ <nWeekNum> ] )
aDateInfo           FT_ACCTYEAR( [ <dGivenDate> ] )
nTrueDays           FT_ADDWKDY( <dStart>, <nWorkDays> )
aRetVal             FT_CALENDAR ( [ <nRow> ], [ <nCol> ], [ <cColor> ], [ <lShadow> ] , [ <lShowHelp> ] )
cMILTIME            FT_CIV2MIL( <cCIVTIME> )
aDateInfo           FT_DATECNFG( [ <cFYStart> ], [ <nDow> ] )
aDateInfo           FT_DAYOFYR( [ <dGivenDate> ], [ <nDayNum> ], [ <lIsAcct> ] )
nDays               FT_DAYTOBOW( [ <dGivenDate> ] )
<nResult>           FT_DOY( <dDate> )
dEdate              FT_EASTER( <xYear> )
nMINUTES            FT_ELAPMIN( <cTIME1>, <cTIME2> )
aTimedata           FT_ELAPSED([ <dStart> ], [ <dEnd> ], ; <cTimeStart>, <cTimeEnd>)
cDiff               FT_ELTIME( <cTime1>, <cTime2> )
dFirstDay           FT_FDAY( [ <dDateToChk> ] )
dLastDay            FT_LDAY( [ <dDateToChk> ] )
dDate               FT_MADD( [ <dGivenDate> ], [ <nAddMonths> ], [ <lMakeEOM> ] )
dMILTIME            FT_MIL2CIV( <cCIVTIME> )
nMINUTE             FT_MIL2MIN( <cMILTIME> )
aDHM_               FT_MIN2DHM( <nMinutes> )
cMILTIME            FT_MIN2MIL( <nMINUTE> )
aDateInfo           FT_MONTH( [ <dGivenDate> ], [nMonthNum] )
aDateInfo           FT_QTR( [ <dGivenDate> ], [ <nQtrNum> ] )
cMILTIME            FT_SYS2MIL()
aDateinfo           FT_WEEK( [ <dGivenDate> ], [ <nWeekNum> ] )
nDays               FT_WORKDAYS( [ <dStart> ], [ <dStop> ] )
<nResult>           FT_WOY( <dDate> )
aDateInfo           FT_YEAR( [ <dGivenDate> ] )
dLarger             MAX(<nExp1>, <nExp2>) --> nLarger MAX(<dExp1>, <dExp2>)
dSmaller            MIN(<nExp1>, <nExp2>) --> nSmaller MIN(<dExp1>, <dExp2>)
nMonth              MONTH(<dDate>)
NIL                 QOUT([<exp list>]) --> NIL QQOUT([<exp list>])
nSeconds            SECONDS()
NIL                 SLEEP(<nSec>)
cTimeString         TIME()
cFormatString       TRANSFORM(<exp>, <cSayPicture>)
cType               TYPE(<cExp>)
cType               VALTYPE(<exp>)
nYear               YEAR(<dDate>)