WM_GraphLib, moteur de rendu graphique

Catégorie : Librairie Macos X (API), code source sur GitLab,
Licence : GNU (GNU GPL),
Version : 1.0,
Résumé : Rendu Graphique de données.

WM_GraphLib est un code extrait d’un de mes projets, et utilisé par d’autres sous forme de moteur de rendu graphique, me permettant d’afficher des données sous forme de graphiques (courbes mathématiques).

Read More

Tutoriel, Gestion Mémoire en ARC (Automatic Reference Counting) : exemple dans le cas de la résolution d’un bug particulièrement coriace.

Niveau technique : très avancé

Les concepts détaillés dans l’article sont donnés pour macOS, et s’appliquent tels quels à iOS, éventuellement à Java (ramasse miette).

Read More

textCodeToHtml, conversion de style pour publication de code exécutable

Catégorie : application OS X
Licence : Open Source
Version : 1.3, 07 Juin 2017

Résumé : Utilitaire de gestion de l’affichage de code source dans des pages html ou sur WordPress.

Read More

À Propos des « Protocoles » iOS

Lors d’un entretien récent il m’a été posé la question suivante :
« qu’est-ce qu’un Protocole ? »

La question m’a un peu désemparé puisqu’il s’agit d’un des tout premiers concepts que l’on apprend en Cocoa (vous sauriez expliquer par exemple ce qu’est un PPCM ? (1))

Je donne donc une réponse improvisée, en l’occurrence approximative, et on me répond que
« c’est un contrat, c’est à dire un ensemble de fonctions que vous vous engagez à implémenter »

C’est une bonne définition, néanmoins la réalité est un peu plus subtile.

Read More

Développement de Projets Logiciels

Wan More :

Donnez une autre dimension à vos projets

Vous avez une application complète à réaliser, un projet particulier ?
– rédaction d’un cahier des charges,
– montage de projet,
– étude et conception, implémentation,
– déploiement,
– support assuré après la livraison,

Votre besoin sont difficiles à décrire ?

– modélisation UML,

Votre application doit s’exécuter sur diverses plateformes ?
– réalisation en « code multiplateforme », et/ou compatibilité 32/64 bits,

Votre application doit évoluer dans le futur ?

– usage pertinent de « Design Patterns » ,
– code propre, que l’on peut facilement relire, facilement maintenable, avec commentaires en Anglais,
– commentaires « inline »,

Vous devez réaliser cette application, ou une API, pour un client ?

– génération de fichiers documentaires par insertion de commentaires  « inline » et génération automatique, la documentation et ainsi synchrone du code,

Vous avez des problèmes avec une application existante ?

– diagnostic (audit) et intervention rapide sur du code (frameworks compris) sans en avoir de connaissance au préalable,
– confidentialité assurée,

Read More

WM_GSRecognizerLib

Catégorie : Librairie/framework pour le développement avancé d’applications iPhone/iPad.
Licence : nous consulter.
Version : 2.0, 17/12/2014.
Résumé : « WM_GSRecognizerLib » est une librairie permettant la reconnaissance de tracés, utilisable pour la reconnaissance d’écriture par exemple.

Read More

Exemple de comportement différent de code iOS selon qu’il s’exécute sur émulateur ou device

- Exemple de comportement différent de code iOS selon qu’il s’exécute sur l’émulateur ou un device (la machine, i.e. iPhone/iPad) :

Soit le code iOS suivant (qui permet de consulter un tableau comme s’il était bouclé sur lui même) :
NSUInteger p0_prevIndex;
 p0_prevIndex = p0Index – diffAtP0;
if(p0Index < diffAtP0)
  p0_prevIndex += iPoints.count;

(le test équivaut à (p0_prevIndex < 0), qui évidemment ne pourrait arriver que s’il était de type NSInteger)

Le code fonctionne parfaitement sous émulateur mais conduit à un crash à la ligne suivante (non représentée), à la lecture du tableau (lecture à l’index p0_prevIndex alors que celui-ci vaut iPoints.count)

La lecture des valeurs à la 3° ligne donne

 (lldb) pri p0Index
 (NSUInteger) $3 = 0
 (lldb) pri diffAtP0
 (CGFloat) $2 = 2
 (lldb) pri p0_prevIndex
 (NSUInteger) $5 = 0

->p0_prevIndex devrait valoir (NSUInteger)(-2) (soit 4294967294, peu importe), et donc (iPoints.count-2) juste après.

Affichage d’autres valeurs :

 (lldb) pri p0Index – diffAtP0
 (float) $4 = -2

-> OK

 (lldb) pri p0_prevIndex = p0Index – diffAtP0
 (NSUInteger) $6 = 0

-> pourquoi ? On devrait obtenir la valeur correspondant à -2…

 (lldb) pri p0_prevIndex = -2
 (NSUInteger) $7 = 4294967294

-> OK, l’affectation directe fonctionne.

Le pb vient d’un typecast, car diffAtP0 est de type CGFloat (en fait le type des iPoints).
Le déclarer en NSUInteger apporte la solution.

La vraie remarque est que le crash ne survient sur aucun des émulateurs car le typecast effectué est alors correct.

Read More

Exemple de code se comportant différemment sur Mac OS et Windows

- exemples de code se comportant différemment sur GCC et Visual :

1) while(*unsignedCharPtr) *unsignedCharPtr = maj[*unsignedCharPtr++];

Read More

PHP 5 sur Free

Sur les pages perso de Free, la version de php est 4.4.3 par défaut…

Read More