ToursAnnonces.fr

Tours annonces est un ensemble de services conçus pour vous faciliter la vie au quotidien : petites annonces, emploi, annuaires, services et bien + ...

Inscrivez-vous Vous êtes nouveau ?
Vous avez un compte ?
Aide

Le carnet de bord du webmaster

Passez votre chemin c'est mes notes ici...

07 | 31 | 01 | 19 | 20 | 04 | 32 | 10 | 11 | 21 | 34 | 16 | 36 | 17 | 30 | 18 | 28 | 14 | 29 | 08 | 06 | 03 | 27 | 25 | 22 | 05 | 09 | 02 | 13 | 15 | 12 | 23 | 26 | 24 | 33
**** 26-05-2010
07h11 start
Putain de torticolis, heureusement mon activité ne demande pas des mouvements de tête extraordniaires.


oups!
mais c'est quoi ce délire!
Le cache ah oui, la couvertur cache est complètement différente maintenant, putian, ya urgence là ;..

pourquoi bateau-occasion fonctionne pas ?

Note pour plus tard , Ne jamais lancer 
pico /var/log/apache2/access.log | grep 404


bizarre, velo.toursannonces.fr toujours pas là …

Le compteur est buggué,


J'aimerais bien capter …

Là le site m'affiche 424 pages juste pour 2 heures, et il a bien ordonné les annonces régulièrement.
Ce sont pour la plupart des anciennes annonce renouvelées
Normalement cette situation arriverait si 424 pages d'annonces seraient périmées entre hier et aujourd'hui.

Je ne suis pas très au courant de mes stats, mais il me seble que cela n'a jamais été le cas.
424 * 20 = 8480 annonces en un jour, mieux que le bon coin ! Hum, nonon, clairement il ya  eu un problème…
Vérifions par rapport à l'ancienne base de données…
Misère je déteste ce travail de débugguage, ça va me prendre toute la journée.

09h09 /
Bon ça yest j'ai trouvé :

en fait quand je suis passé à la v5 j'avais republié toutes les annonces d'un coup,
pour laisser "une dernière chance" aux annonceurs, le système passant en mode roulement des annonces opérationnel.

Toutes ces annonces avaient la même date :
2010-03-30 09:14:40

Et là vu qu'elles arrivent à leur limite, et que j'ai activé par défaut le mode de republication automatique pour tout le monde,
et que dans mon script j'ai fait justement une petite bidouille pour ajouter un temps aléatoire aux annonces qui sont republiées
et que le site affiche les annonces par ordre décroissant de date par défaut, du coup toutes les annonces sont réparties équitablement sur la durée.

Donc cela va durer un certain temps, le temps que toutes les annonces postées ce jour là soit réparties sur quelques heures.
Puis cela devrait se calmer, on devrait retrouver un rythme nettement plus calme.

J'aurais voulu répartir les annonces avec un script manuellement, j'aurais pas fait mieux.
Bref, 

Pour la couverture cache, pour l'instant, je vais la refaire, mais j'ai eu une idée,
réalisable avec 2 serveurs.

Toutes les heures, au lieu que ce soit le même serveur qui recrée lui même tous les caches, ce qui est en fait très couteux en 
termes de perfs (si un utilisateur vient au moment de la recréation des caches, il va subir un gros ralentissement),
le serveur envoie le fichier de la base de données vers un deuxième serveur qui recrée alors lui même la base.
Puis ce deuxième serveur, à l'abri de toute visite, s'autovisite pour regénérer les couvertures caches nécessaires, enfin,
il n'ya plus qu'à faire retransiter les fichiers caches générés vers le site visible.

Le gros avantage est que l'utilisateur ne subit aucune perte de performance.
Le deuxième gros avantage est que du coup on peut se lâcher dans la couverture cache et générer plus de pages.

Voilà voilà pour la ptite idée…

Sinon, ca n'empêche pas que la phase de référencement à ralenti de façon visible toutes les pages,
et il y a toujours un moment où l'utilisateur tombe sur une page sans cache.

Il peut être intéressant donc d'optimiser la rapidité des pages sans caches avec d'autres caches comme apc ou autre, j'y connais rien en cache, mais à mettre dans les futures évolutions;


Tiens le antislash ne passe pas dans la barre d'adrsse...


11h10 : en fait mon fakeUrl n'est passle même sur la page d'accueil et dans les listes, ma couverture cache est donc inefficace...

11h42 : bon, cela semble réparé.
Ptite douche avant de passer aux commerces,
petite idée toujours la même : pour la couverture cache utiliser les stats à bon escient…


13h33 : Bon j'avais un ptit souci avec la création du cache de manière automatisée, cela ne fonctionnait plus
car j'avais détourner l'identifiant de page pour le référencement,
du coup je l'ai détourner une deuxième fois pour le cache et c'est bon…

Pause ….
J'ai mal.

14h26 : j'ai encore mal, mais j'ai épuisé mon quota de pause pour la journée, flûte.



Bon, l'esprit vide, passons aux commerces (pas trop tôt).
La liste

14h49 :
        // format de fakeUrl pour un lien vers une liste:
        // commerce-{categorie+}{specialite-}{commune-}numero_departement-nom_departement
        
        
        
17h11 : si je tape :
le carroy bar tours

dans google, je n'apparais pas du tout dans les pages.

Humpf,..
Le but c'est que dans une semaine je sois en première page pour cela, je vais me le noter sur mon agenda…, à 12h

Pour ça déterminer un bon titre dans l'url :
Nom catégorie ville - numeroDepartement nomDepartement - onglet

Voilà, une rocket qui devrait me propulser un petit peu.
        


19h04 : en regardant le site, vraiment pas mal cette idée d'ajouter un temps aléatoire pour les annonces qui sont republiées.
Bon, mais là je l'avais appliqué uniquement pour le matin, mais du coup pour le soir également
ça serait pas plus mal, sinon c'est pas naturel,
pas du tout une priorité mais comme yen a pour 2 secondes…


19h07 : top
j'ai ajouté pour les annonces qui ne sont pas publiées entre 0 et 5 heures du mat,
un nombre de secondes aléatoire entre 0 et 3600.

        if (true === $cronCall) {
            $now = time();
            $format = '%H';
            $zehour = strftime($format, $now);
            if (in_array((int)$zehour,array(0,1,2,3,4,5))) {
                $sixHours = 3600 * 6;
                $saltTime = rand(0, 3600);
                $now = time() + $sixHours + $saltTime;
            }
            else
            {
                $saltTime = rand(0, 3600);
                $now = time() + $saltTime;
            }

            $today = strftime(SQL_DATEFORMAT, $now);
            if (false === $today) {
                $today = MOD_DATABASE_SQL_DEFAULT_DATETIME;
            }
        }


Si tout s'et passé comme prévu, si mon robot republie des annonces à partir de 19h20,
celles si seront dispatchées entre 19h20 et 20h20, plutôt kool.



19h27 : ajout des liens à fort taux de mots clés sur flèches suivantes et précédentes depuis l'espace perso
du commerçant,
au fait il faut que je le fasses pour les annonces également, j'ai oublié;



Ah ben non en fait yavé pas de flèches, faudra les rajouter plus tard éventuellement, mais pas là.

Bon pour l'instant j'ai fait le gros du commerce, mais il me reste plein de détails genre les autres pages : événements promos, cadeaux
que je ferais peut être plus tard.

Sans compter la partie web.

Mais aussi je n'ai pas encore géré les sou domaines pour les commerces.

D'ailleurs j'ai des problèmes avec la gestion des sous-domaines,
je ne sais pas pourquoi mais ça ne marche pas à tous les coups.
Vivement que je maitrise bind vite fait,
en attendant, je vais voir ce qu'il y a…

Bon, vraiment les sous-domaines posent un problème avec 93annonces.

19h47 : ca y est, j'ai capté, ma faute, comme d'hab.

Bon ben ya plus qu'à organiser le déploiement sur toutes les villes.

Un grand mot pour dire simplement de préparer un script qui affiche la liste des domaines
à créer sur chacune des villes, une sorte de guide ISO.


19h58 : aha :
en tapant tours annonces dans google,
je vois que ce dernier commence à remettre des liens supplémentaires,
il a compris mon désir de revenir sur la scène, bon petit;
Je commence déjà à prendre plus de place sur la première page.

Encouragé par cette petite tape sur l'épaule de la part du génat américain
, construisons la liste des sous-domaines
pour lesquels nous voulons être référencés.

pour les annonces, je reprends bêtement le menu du moteur de recherche
vehicule-occasion:3
voiture-occasion:
moto-occasion:
quad-occasion:
scooter-occasion
campingcar-occasion
velo-occasion
bateau-occasion
accessoire-vehicule-occasion
utilitaire-occasion
colocation
immobilier-location
immobilier-vente
immobilier-vacance
emploi-offre
emploi-demande
babysitter
cours-particulier
services-divers
covoiturage
electromenager
vetement
jardin
bebe
meubles
decoration-maison
piscine
animaux
camping
musique
sport
livres
objets-divers
beaute-sante
rencontre
association
evenement
informatique
console-jeu-video
image-son
telephonie


et pour les commerces…

Ben autant tous les créer comme ça ca sera fait




association
bibliotheque
mairie
musee-galerie
administration-publique
bar
boulangerie-patisserie
boucherie-charcuterie
confiserie-chocolaterie
epicerie
fromagerie
poissonnerie
supermarche
vins
tarterie
traiteur
decoration
equipement-amenagement
amenagement-exterieur
mobilier
petit-interieur
auto-ecoles
concessionnaire
controle-technique
garage
location-de-voiture
motos-cyclos
bijouterie
coiffeur
maquillage
parfumerie
piercing-tatouages
soins
cosmetique
animalerie
fleuriste
horticulteur
jardinerie
veterinaire
armurerie
bricolage
chasse-peche
cinema
couture
generaliste
hi-fi-audiovisuel
magasin-informatique
jeux
papeterie
peinture
tabac-presse
dessinateur
jeux-video
cadeau
discotheque
paintball
restaurants
restaurant-asiatique
restaurant-europeen
fast-food
fruits-de-mer
pizzeria
salon-de-the
kebab
creperie
mutuelle
optique
pharmacie
specialiste
assurance
banque
cordonnerie-serrurerie
emploi
hotel
internet
lieux-de-culte
petites-annonces
pompes-funebres
poste
pressing
reparateurs
a-la-personne
aux-entreprises
photographie
station-essence
voyage
photocopie
piercing-tatouage
electronique
plombier
maroquinerie
lingerie-feminine
chaussures
boutique-indienne


magasin-informatique
librairie
magasin-musique
etablissement-sport
equipement-piscine
immobilier-agence
magasin-telephonie
magasin-electromenager




La stratégie est d'en prendre un de temps en temps et d'essayer de l'améliorer

Hélas pour l'instant je vais devoir les rentrer à la main, et 3 fois.
plus 3 autres fois, soit 6 fois, c'est pour ça qu'il me faut entre autres que je devrais maitriser bind.

Je fais déjà un test, le résultat sera visible d'ici 4 heures …

En attendant, je peux continuer sur les autres onglets,
promos evenement cadeau tao,
je verrais bien un sousdomaine promo
et aussi un sous domaine par possesseur du compte vendeur.





Tout cela m'a donné matière à réflexion.
Dans le cadre de ma problématique, voici la solution trouvée, ou plutôt la solution
que je vais mettre en place:

lorsque un commerce est affiché,
les règles business font leur travail, et si elles confirment que le commerçant
est un commerçant privilégié, alors un sous-domaine perso sera affiché pour ce commerçant.

Pour une catégorie, toute annonce ou tout commerce est lié à l'arborescence du site.
Offrir la possibilité d'attribuer un domaine par (arborescence+departement)
est la solution que je propose.

Ainsi, dans le cadre d'une gestion multivilles par plusieurs personnes différentes :
les personnes restent libre dans le choix des domaines à utiliser sur leur site.

Ainsi je peux éventuellement accentuer la pertinence locale pour une catégorie donnée.
Par exemple pour la catégorie traiteur,
je peux faire traiteur-tours juste pour mon département.
Mes collaborateurs  ne sont pas affectés par mon choix et restent avec le domaine
traiteur par défaut, ou tout autre qu'ils auraient choisi;



J'ai donc besoin d'un champ domaine dans la table commerce
puis j'ai besoin d'une nouvelle table :
arborescence_domaine
qui contient un champ id, domaine et statut (actif inactif).
Cette table sera liée à une arborescence et à un département.


sch-arborescence-domain.png


Voilà.
Evidemment, si mon framework était correctement en place, j'aurais pu adminsitrer directement ces tables et passer à quelque chose de plus intéressant.
Mais ce n'est pas le cas, je vais donc devoir créer le formulaire,
et l'interface qui va bien, misère…

21h46

Ben merde apparemment il tient pas compte de mon ajout de secondes
sur le site…



Ah ben oui forcément j'ai pas uploadé le bon fichier, classique;..
21h51 Voilà

Bon travaillons sur l'admin tant qu'à faire, et séparons par département;

Et toujours cette question qui revient.
Dois-je prendre le temps de développer bien mon outil ou bien construire vite.
Je dirais que tout dépend de mes contraintes.
En fait, je me fixe mes contraintes tout seul comme un grand pour donner du rythme à mon travail, mais là je suis las de faire des choses bêtement, j'ai l'impression de travailler pour rien.

Je vais arrêter la todolist, je n'ai plus le temps pour ça maintenant.
Je continuerais le mois de juillet.
Je vais juste finir le référencement sur les promos,
et après je développe mon esclave.

monologue intérieur::::
Son nom est Stos si vous voulez savoir et il a déjà été en place et complètement opérationnel.
L'outil le plus puissant que j'ai jamais eu entre les mains, construit par mes soins et pour mes besoins;

Me permettait simplement de ne pas me soucier du code pendant la conception :
gestion de classes gérant des listes avec tri, gestion de formulaires,
aucune dépendance statique avec les tables, tout est fait dynamiquement,
bref,
je ne m'occuppe que de réfléchir à l'organisation des tables et quand je veux tester,
insérer des entrées ou autres, il m'a déjà généré les formulaires et géré les dépendances.
Si il y a des foreign keys, il les gère et m'affiche tous les champs de la foreing key sous forme
de liste déroulante, le code étant préformaté pour que je n'ai plus qu'à effacer ou commenter 
les lignes des champs que je ne souhaite pas faire apparaître.
Comme php my admin en fait.
Mais là ou il allait plus loin que phpmyadmin, c'est qu'il se servait des commentaires dans les champs 
de mes tables pour savoir comment créer le formulaire :
je mettais simplement "au" dans un champ par exemple photo.
Et le formulaire comprenait automatiquement mon système d'automatic upload, avec gestion du nombre de photos
maximum, poids etc…
je mettais date, et il me générait le jquery date picker…

Bein d'autres facilités.


Bref, le gain de temps était réellement énorme.

Par contre, comme c'était dynamique c'était pas optimal pour la prod, mais d'ailleurs mon ling_form utilise actuellement le procédé de recherche dynmaique des champs pour les inserts, directement hérité de Stos.
C'est pourquoi les formulaires sont assez lents.

Hélas comme dans tout projet que je délaisse pendant un certain temps, j'ai rarement le goût de le remprendre tel quel.

J'ai entendu parler que le framework kohana possédait un tel objet également.
Est-ce que ça vaut le coup de regarder ?

Si je recrée Stos, je l'orienterais plus production, il faudrait également que je recréé mon objet formulaire.

Beaucoup de choses sont en fait à retravailler.

Je ne sais pas par où commencer mais je sais que la moindre réflexion sérieuse peut prendre plusieurs jours.

Donc vaut mieux réfléchir à quoi réfléchir en premier;

Hélas mon cerveau n'est déjà plus aussi alerte que quelques heures plus tôt.
Ce soir, je vais finir le référencement pour les parties promos événements.

Mais en fait ma table j'en aurais eu besoin tout de suite pour continuer à développer le switch sur le site.
Je vais peut être si mes forces me le permettent développer le switch avant,
car ça demande plus de réflexion que le référencement des promos.

Oui, faisons le switch;..

Toujours ce problème de conscience  ça va grave faire ralentir l'application.

En fait, mon système est certainement bien pensé,
mais trop lourd en terme de performance (mon estimation perso),
surtout par rapport à la réalité du besoin.
Pour l'instant je vais gérer en dur dans le codel'appel aux noms de domaines.

Ca y est je viens d'avoir l'éclair
22h33

En fait mon problème c'est que certains domaines sont activés pour toursannonces.fr
mais pas pour 93annonces.fr
Pour l'instant 93annonces est très peu fréquenté, ce n'est donc pas dramatique, mais il vaut mieux prévoir.

Ajouter une table plus un appel à cette table à chaque commerce, chaque annonce etc…
j'estime que c'est trop lourd.

La soluion : 
faire un fichier de config par département.

Le code en dur est plus rapide que le moindre appel à la bdd.
Le code en dur est également plus rapide qu'un objet, mais un objet aurait déjà mieux convenu.

Le fait d'écrire à la main 99 lignes d'un tableau ne me dérange absolument si je sais que je gagne en performances, au contraire;

Ce que je vais faire : une fonction qui porte le même nom dans 3 ficheirs différents, un appel sera effectué en fonction du numero du département qui pour l'instant est également codé en dur.

Ainsi, j'aurais une plus grande liberté quand à la gestion des règles business.

22h48 :non.

En fait, je vais faire une seule fonction qui encapsulera tout le problème.

C'est tout ce qui m'importe en fait : savoir que ce problème de gestion du nom de domaine est
stocké à un seul endroit c'est mieux qu'à 3 endroits.
Concernant les performances, rien ne m'empêche de modifier ma fonction à volonté, du moment que je sais
ce qui rentre, et je sais ce qui sort, l'intérieur m'importe peu.

La fonction prend soit l'id, soit le nom d'une catégorie, et un id de département.
Il retourne le nom du domaine à utiliser.

C'est une fonction car la fonction c'est le plus rapide en termes de perfs.
Si la fonction veut appeler des objets après, c'est son problème.

De mon côté, je sais que j'ai le design optimum à la base;

Pour moi c'est donc la meilleure solution, enfin, c'est pas trop tôt.

Bon, mais là je suis vraiment très convaincu que cette solution est rééllement meilleure que les autres.


Allons-y alors….


Reste à trouver lenom de la fonction, un nom qu'elle va porter toute sa vie;

getDomainFromCatId($id_categorie, $id_departement)

En fait c'est le sous domaine qu'elle retourne.
Mais c'est plus compréhensible comme ça.


En fait, c'est exactement ce que j'avais créé par défaut, kool.
Sauf que j'avais pas mis le numéro du département.



Hey le test a fonctionné, je vais donc faire les noms de domaines.


billythegrill
lebloisphilippe
gouterchezsam
lapizza
lileauxpizzas
pizzaono
psychiatric



01:12
Bon, chui crevé, j'fais n'importe quoi, ça fait 3 fois que je fais la liste,;…

j'continuerais demain.
Malgré tout je vais mettre mon travail de ct'aprèm en ligne, c'est mieux que rien, au niveau des commerces.






à supprimer immobilier achat


PAtch::



SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE  TABLE IF NOT EXISTS `tan`.`arborescence_domaine` (
  `arborescence_id` INT(11) NOT NULL ,
  `DEP` VARCHAR(3) NOT NULL ,
  `domaine` VARCHAR(255) NOT NULL ,
  `statut` CHAR(1) NOT NULL ,
  INDEX `fk_arborescence_domaine_arborescence1` (`arborescence_id` ASC) ,
  PRIMARY KEY (`arborescence_id`, `DEP`) ,
  CONSTRAINT `fk_arborescence_domaine_arborescence1`
    FOREIGN KEY (`arborescence_id` )
    REFERENCES `tan`.`arborescence` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci;

ALTER TABLE `tan`.`commerce` ADD COLUMN `domaine` VARCHAR(255) NOT NULL  AFTER `thesaurus` ;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;




















AgenceWeb37, agence web de création de site vitrine en Indre et Loire (37)
0.01055908203125