Un captcha, ça ne s’improvise pas !

Ou une raison supplémentaire de questionner la légitimité de la consultation pour le nom de la région Alsace Champagne-Ardenne Lorraine.

J’ai pris la décision de ne publier cette analyse qu’une fois la consultation terminée, afin que celle-ci ne puisse être utilisée pour en fausser les résultats (qui ont déjà suffisamment de raisons de ne pas être représentatifs de grand chose).

Commençant par aborder les premières incohérences de cette consultation. Pas de restriction géographique, pas de limitation IP. Comme l’ont relevé bien des internautes, une même IP peut donc voter plusieurs fois, tant que celle-ci est capable de fournir plusieurs adresses mails différentes (il semble tout de même y avoir une limitation sur les adresses mails. Ouf !). Le manque de limitation sur l’IP peut se comprendre, il faut que tous les personnes d’un foyer soit en mesure de participer. Pas de limitation géographique ou de « coupon » de vote pour les citoyens concernés, les internautes du monde entier pouvaient donc venir donner leur avis. Intrigué par ces manquements, j’ai donc décidé d’aller jeter un œil au site (Outre le fait d’être un peu concerné puisque résidant à Strasbourg).

Consultation Nom Région ACAL

Voici donc à quoi ressemblait le site. La présentation est aérée, ça semble plutôt fonctionnel. Pourtant, mon regard est attiré par le bas de page, son message « (afin de lutter contre les robots et de prouver que vous êtes une personne) » et son captcha. A première vue, le captcha semble relativement simple, pas de texte compliqué et quasi illisible, juste un calcul à effectuer. Par ailleurs, cette petite phrase invite au défi. J’aime m’interroger sur la possibilité technique d’écrire des programmes idiots arrivant à résoudre ces types de captcha. Captchas sensés démontrer l’humanité de la personne derrière son écran. Je me plonge donc dans le code HTML de la page.

Continuer la lecture de « Un captcha, ça ne s’improvise pas ! »

Échec de sauvegarde Gitlab et objets LFS

Lors d’une récente sauvegarde du contenu de mon Gitlab en vue d’une mise à jour, j’ai vu apparaître une erreur déjà rencontrée lors d’une précédente sauvegarde.

rake aborted!
Errno::ENOENT: No such file or directory @ realpath_rec - /home/git/gitlab/shared/lfs-objects

N’ayant pas à ma connaissance d’objets LFS à sauvegarder, j’ai donc ajouter un paramètre pour éviter la tentative de sauvegarde de ces objets avec SKIP=lfs. On obtient donc la commande suivante :

sudo -u git -H bundle exec rake gitlab:backup:create SKIP=lfs RAILS_ENV=production

Maj : Ce problème est résolu à partir de Gitlab 8.3.

[SQL] DROP CREATE « pattern » (MSSQL)

Simple reminder for a working drop-create pattern in SQL (Successfully used with MSSQL).

Log modification in table _chgLog first.

INSERT INTO _chgLog ([Date], [Version], [txt], [Type])
    VALUES (GETDATE(), '0.0.1', 'Update example', 0)
GO

If object exists, we drop it before doing anything (But do not drop table unless you don’t care about data).

IF OBJECTPROPERTY(object_id('example'), N'IsProcedure') = 1
    DROP PROCEDURE [dbo].[example]
GO

Other interesting parameters for function objectproperty are the following (more to be found here) :

  • IsInlineFunction
  • IsProcedure
  • IsScalarFunction
  • IsTable
  • IsTableFunction
  • IsTrigger
  • IsView

Then, we create the object.

-- =============================================
-- Author: vvision
-- Create date: 22/03/2016
-- Description: <Description>
-- =============================================

CREATE PROCEDURE [dbo].[example]
  @id INT,
AS
  SELECT *
  FROM [dbo].[example]
  WHERE id = @id
GO

Finally, we give permissions to users if needed.

GRANT EXECUTE ON [dbo].[example] TO [user] AS [dbo]
GO

 

On another subject, to alter a table, we can use:

IF COL_LENGTH('table','newField') IS NULL
BEGIN
  ALTER TABLE [dbo].[table] ADD newField VARCHAR(128) NULL
END

Citations [3] – Arthur C. Clarke

Dès la fin de l’année 2133, des observateurs lucides acquirent la conviction que le « Boom raméen » conduirait à un désastre. Ils firent de sombres prédictions sur l’effondrement imminent du système économique, au milieu des cris d’enthousiasme des multitudes euphoriques qui découvraient l’abondance. Nul ne tint compte de leurs suggestions d’équilibrer les budgets et de limiter les crédits à tous les niveaux. On ne songeait au contraire qu’à élargir les possibilités d’achat d’une population qui ne savait plus attendre, et encore moins se priver.

Rama II, Arthur C. Clarke

JDD 2 : Des nouvelles de la forêt

ClashOfBuchesLe semestre étant pour moi terminé il est temps de faire un point sur l’avenir du projet !

J’ai pu travailler avec un camarade de promo sur le projet ce qui nous a permis d’avancer plus rapidement que si j’avais été seul mais aussi de partager nos connaissances acquises sur le court laps de temps qui était dédié à ce projet.

Depuis le dernier article, le projet a bien évolué et c’est ce que j’aimerais vous présenter aujourd’hui.

Clash of bûches notre projet, est un jeu basé sur le principe simple de la gestion forestière. Mais cette gestion ne se cantonnera pas aux seules terres virtuelles créées ou générées pour l’occasion. Dans notre jeu il sera question de faire croitre son empire du bois dans le monde entier en explorant plusieurs paysages connus comme inconnus.

mondeVous débuterez avec en poche quelques billets et une petite exploitation forestière que vous devrez gérer pour le mieux.

La semaine passée j’ai pu ajouter au jeu un système de pousse de la forêt. Et j’en ai fait un petit GIF pour illustrer mes propos :

ClashOfBûches3Comme vous pouvez le voir un camion et une route ont été ajoutés. Le camion permet de vendre le bois à un prix fixe à tout moment de la partie, quant à la route elle ne sert pour l’instant qu’à faire jolie. Je réfléchie au moyen de la rendre praticable par le camion ou tout autres véhicules.

La victoire de ce dimanche pour laquelle je n’ai pas d’illustration est la possibilité de sauvegarder l’état de la carte une fois générée et de la régénérer plus tard exactement dans le même état (taille, placement, type d’arbre, sol).

Malheureusement je n’ai pas encore réalisé le système de sauvegarde propre aux éléments de l’inventaire, et à l’argent gagné, et c’est pourquoi je vais retourner à mon programme.

Dans le prochaine article j’essayerais de vous parler de notre choix dans l’utilisation d’Unity ou de parler plus technique (programmation, intégrations des objets 3D, etc).