Jump to content

Spidetra

Hubmaster
  • Content Count

    326
  • Joined

  • Last visited

Posts posted by Spidetra


  1. :lol:

    Rubrique : Perle du Net.

    On est en 2001, ou 2002, la bulle abracadanbresque d'Internet vient de faire pschiiiiiiiiiiiit.

    Repas bourgeois dans le sud de la France, la maîtresse de maison, mère de mon associé :

    "ça existe encore Internet ?". Le pire c'est qu'elle était sérieuse dans sa question.

    La pôvre, elle était terrorisée à l'idée que son fils puisse travailler sur Internet. :)

    Pour le fun, lors de l'écriture des premiers programmes en Fortran, on créait les fiches qu'on donnait aux perforatrices... et oui, c'est tout ce qu'on avait !

    Les bandes perforées sont apparues ensuite, c'était déjà mieux :)

    Oups ! On se moquait de nos profs qui avaient connu la carte perforée :blush:

    Et, aujourd'hui les petits jeunes se moquent de ces vieux qui ont connu l'informatique avant Internet. :lol:


  2. [Mode Spidetra]Réponse d'une adulte de 40 et plus :blush: : qui a connu l'âge des dinosaures "Machine à écrire mécanique...avant de voir naître les premiers PC et bien entendu Internet"... Tu sais on vivait bien sans l'informatique ni internet. :P On a même réussi à marcher sur la lune sans ça ![/Mode Spidetra]

    Il me reste encore {quelques} belles années avant de passer la barre fatidique... plus bc mais quand même :lol:

    Pas la machine à écrire, mais le Bull Micral R2E ( c'était quoi déjà l'OS ? quelqu'un se souvient ? ), et qui a débuté avec le LSE,avant le Pascal ( pas encore Turbo à l'époque => 10 mn pour linker et compiler 100 lignes de code ).

    C'était le CP/M

    CP/M

    En 1973, Gary A. Kildall développa pour l'Intel 8008 le langage de programmation PL/M, dérivé de PL/I, sur demande d'Intel. Au cours de la même année, il développa le système d'exploitation CP/M (Control Program for Microprocessors) en PL/M. C'était le premier système d'exploitation pour un ordinateur basé sur un processeur Intel.


  3. Heureusement qu'Internet est là, sans cette invention, je me serai vite lassé de l'informatique. Qu'est-ce que l'informatique sans Internet ? La question qui tue...

    Question d'un jeune (post-)adolescent.... 15 ans, 20 ans, pas plus? :)

    Internet n'est qu'un médium et rien d'autre.

    Une de mes premières entreprise a été crée en une nuit.

    Idée "géniale" sous la douche le matin... suivi d'une nuit de dév.

    A 5 ou 6 H du mat', tu as un sentiment de liberté et d'euphorie incomparable.

    Quelques années plus tard, plus de ride, moins de cheveux... tu relativise un peu plus

    Moins d'insomnie, plus de contrainte, moins de liberté... mais bc plus d'euphorie ( et d'angoisse ).

    Ce n'est pas le métier de Webmaster qui te fait vivre la nuit... c'est ta jeunesse :lol: :lol: :P


  4. SELECT user, count(*) AS NbArticle
    FROM articles GROUP BY user
    ORDER BY count(*) desc

    J'espère que tu as quand même conscience que les structures de tes tables ne sont pas idéales pour obtenir de bonnes performance.


  5. Y a t il une relation avec la bourde d'AOL et les 20 millions de requêtes mises à disposition par le FAI ?

    Tout le monde crie à la bourde... mais il faut quand même relativiser.

    Ces données ont éte mises à disposition de labo de recherche, c'est écrit dans le readme qui accompagne les données.

    Ces données ont été générées pour analyser les comportements utilisateurs.

    Ensuite, vrai bourde ou fuite intelligement organisée, la barrière est fine :lol:

    Le jeu de données est certainement le même.

    D'ailleurs la

    500k User Session Collection

    ----------------------------------------------

    This collection is distributed for NON-COMMERCIAL RESEARCH USE ONLY.

    Any application of this collection for commercial purposes is STRICTLY PROHIBITED.

    Brief description:

    This collection consists of ~20M web queries collected from ~650k users over three months.

    The data is sorted by anonymous user ID and sequentially arranged.

    The goal of this collection is to provide real query log data that is based on real users. It could be used for personalization, query reformulation or other types of search research.

    ........

    Please reference the following publication when using this collection:

    G. Pass, A. Chowdhury, C. Torgeson, "A Picture of Search" The First

    International Conference on Scalable Information Systems, Hong Kong, June,

    2006.

    Copyright (2006) AOL

    J'ai pas suivi tout le buzz sur le web, donc bourde ou pas, aucune idée.

    Aucune, il s'agit d'un papier de recherche scientifique comme en publient tous les chercheurs. D'autres publications de l'auteur ici : http://ir.iit.edu/~abdur/pub.html

    Il y a une relation quand même. C'est la publi de référence dans le readme du jeu de données AOL qui a été rendu public.


  6. Voici une étude publié par AOL, sur le comportement des internautes face au moteur de recherche.

    http://www.ir.iit.edu/~abdur/publications/pos-infoscale.pdf

    Les diagrammes 2.x ( page 2 ) décrivent la compléxité de "l'espace de recherche" des internautes.

    Le diagramme 2.9 montre la répartition du nombre de mots clés / requêtes ( 3.5 mot en moyenne).

    Vu la répartition, les requêtes de 3-4 mots sont majoritaires

    - 45 % des requêtes se font sur 3 ou 4 mots

    - 20 % sur 2 mots

    Les diagrammes 3.x ( page 3 ) décrivent le processus de reformulation d'une recherche lors d'une session utilisateur

    Les diagrammes 4.x ( page 4 ) décrivent les comportements des internautes.

    Ils distinguent trois types d'internautes :

    - heavy ( le petit pourcentage des internautes qui effectuent le plus de requêtes, le sacro-saint 20/80 )

    - medium

    - light

    Ces internautes se distinguent par la quantité des recherches effectuées, mais aussi par la qualité.

    Les trois catégories d'utilisateurs interagissent différement avec différentes régions d'une page de résultat.

    J'avoue avoir un peu de mal à interpréter la signification des diagrammes : 4.3, 4.4, 4.5

    Dans ce paragraphe, les auteurs s'interrogent sur la difference ( discontinuity ) entre la perception des utilisateurs et les mesures traditionnelles de pertinences.

    Et je me suis arrêté là....

    Un des objectifs des auteurs est d'utiliser les données utilisateurs pour améliorer la pertinence des résultats dans les moteurs de recherche.


  7. 1. La concurrence

    2. La concurrence

    3. La concurrence

    Tu as vu les mastodontes qui sont sur le net maintenant ( Auchan => GrosBill, Carrefour => booshop, Dixon =>pixmania, M6 => MisterGoodeal, et tout ceux que j'oublie )

    Tu as intérêt à avoir les reins solides, ou un créneau hyper-ciblé.

    Six ans trop tard :)

    ....... Fonce si tu arrive à te démarquer... n'attaque pas les gros de face, tu ne résistera pas.


  8. L'analyste peut aussi faire preuve de bon sens, en général l'analyse connais le but final d'un projet, et donc peut sur base de ca décider de normaliser ou dénorméliser certaines choses.

    En effet nous n'avons pas la même conception. :)

    Analyse et Conception sont deux phases différentes d'un processus.

    Un des rôle de l'analyste est de modéliser le modèle métier du client.

    Ce modèle doit s'abstraire le plus possible des contraintes logicielles et matérielles.

    Il doit aussi décrire les exigences non fonctionnelles.

    Le rôle du concepteur, en se basant sur le travail de l'analyste, est, au contraire, de coller aux contraintes logicielles et matérielles qu'on lui impose.

    Il va rajouter des couches techniques, appliquer ici ou là un pattern GRASP pour se simplifier la vie, casser une association faîtes par l'analyste ( sans pour autant modifier les cardinalités ), rajoutre des façades, etc., etc...

    Et de temps en temps la frontière entre Analyse et Conception est très, très légère.... surtout si l'Analyste et le Concepteur est une seule personne :)

    Finalement nos deux points de vues ne sont pas aussi éloignés que ça l'unde l'autre. Je suis même sûr qu'on arriverait à travailler ensemble, avec de grosses enguelades de temps en temps :)


  9. Lorsque j'ai présenté mon travail de fin, d'étude, j'avais tout normalisé.

    clients, fournisseurs

    adresses, (se rapportant a client ou fournisseur)

    rues, villes pays (se rapportant a adresse).

    La première remarque d'un des membre du juri est le pourquoi la séparation en plusieurs tables (rue ville pays etc..).

    Ma réponse : pour normaliser au max

    Les membres de ton jury avaient raison. Normaliser, cela ne veut pas dire éclater en plein de petites tables.

    Une adresse c'est une entité autonome.


  10. Ce genre de prévisions, on peut facilement les faire au début (en phase d'analyse) et donc à ce moment là décider de dénormaliser un peu.

    Sil doit y avoir une dénormalisation, c'est au concepteur, et certainement pas à l'analyste, de faire ces choix.

    On pas la même conception de la production logicielle.


  11. Ah bon? et comme ça c'est le merdier pour modifier tout ce qui concerne cette modification, un peu partout dans le code, Les dénormalisations se décident au début aussi, et non à la fin (de la programmation).

    En toute logique une fois le MCD établi, on peut facilement imaginer combien de jointures certaines requêtes demanderaient, et avec un peu d'expérience, se dire qu'a partir d'un certains nombre de jointures et en fonction du nombre d'enregistrements prévus dans chaque table, si cela fera ramer ou non le serveur.

    Quand tu as une requête SQL sur 5 ou 6 tables,

    Exemple de tables liées susceptibles d'être appelées parallèlement avec des jointures :

    "personne"

    "metier"

    "rue"

    "ville"

    "pays"

    "code_postal"

    Si tu as une telle table ta base de donnée a été mal conçue. ( Cette table n'est pas normalisée )

    Je suppose que tes champs métiers, etc... ne sont pas des clés étrangères mais des champs dénormalisées.

    Oui, la dénormalisation se fait, en derniers recours, si on a pas d'autres possibilités pour améliorer les performances.

    Mais bon, avant de dénormaliser, cela sous-entend que la base a été normalisée ( 1NF, 2NF, 3NF ). J'avoue ne jamais être aller au-delà :whistling:

    Et ensuite tout dépend quel est ton processus de développement logiciel.

    Si tu as un bon gros vieux processus en V, effectivement tu vas t'arracher les cheveux chaque fois qu'il faudrat toucher à la structure de la DB. c'est comme ça que je suis devenu chauve :)

    Si tu as un processus de développement incrémental et itératif ( RUP, XP ), tu ne dois pas avoir peur de casser plusieurs fois to DB.

    Encore uns fois, j'ai rarement eu besoin de faire appel à la dénormalisation pour améliorer les performances d'une DB. Cela doit rester ponctuel et exceptionnel.

    La dernière fois c'était lié à une problématique très particulière ( Ajax ), et j'ai du passer par des opérateurs sur les bits.


  12. Si je comprend l'idée de Bourinho c'est d'introduire un second facteur d'atténuation.

    L'atténuation n'est pas seulement dépendante du nombre de votes.

    Les possibilités sont infinies.

    1. Tu peux imaginer de faire intervenir un facteur temps.

    Imagine un site qui a reçu n votes de 10/10.

    Il a reçu ces n votes aujourd'hui ( il parle d'un thème d'actualité ) et que la moyenne s'approche de 10.

    Dans un an, ce site est totalement obsolète, mais il est toujours très bien classé.

    En un an il n'a reçu aucun vote supplémentaire.

    Est-il vraiment normal de garder un bon classement à ce site ?

    Tu peux imaginer un système qui va enlever 5% ( ou un autre facteur ) à un vote par tranche de 24 heures. Au bout de 20 jours le poids de ce vote est passé à zéro.

    Un site sera obligé de recevoir des votes régulièrement pour rester classé et pour continuer à limiter les effets du facteur d'atténuation.

    2. Au contraire tu peux imaginer un système qui serait basé sur le nombre de visites.

    Dans ce cas, au contraire, les visites iraient en sens inverse du facteur d'atténuation.

    J'aime moins ce type de système. Il a tendance à renforcer leclassement des sites qui sont déjà bien ranker.


  13. Petite piste rapide, sans vraiment faire une analyse approfondie ( système à améliorer ).

    Plus tu as de votes pour un site donné, et plus la moyenne est fiable, en tout cas plus la moyenne est représentative de ce que pense ta communauté.

    1. Tu va choisir un facteur de lissage arbitraire : 10, 100, 1000, 10000 a toi de voir.

    Un facteur dégressif qui va réduire ta moyenne.

    Plus ton facteur sera grand, plus ton système sera contraignant => plus il faudrat de vote pour arriver à classer un site.

    2. Tu va diviser ce facteur par le nombre de votes obtenus, afin de pondérer ce facteur par le nombre de votants

    4 Tu vas soustraire le résultat obtenus, à la moyenne du site.

    Ce qui donne en terme math :

    ( somme des notes obtenus / nombres de votes ) - ( facteur arbitraire / nombres de votes )

    que l'on peut simplifier :

    ( somme des notes obtenus - facteur arbitraire ) / ( nombre de votes )

    Imaginons que tu prenne 10 comme facteur arbitraire :

    1 site avec un seul vote de 10 obtient une moyenne de 0 : ( 10 - 10 ) / 1

    1 site avec 2 votes de 9 obtient une moyenne de 4 : ( 9 + 9 - 10 ) / 2

    1 site avec 3 votes de 8 obtient une moyenne de 4,66 : ( 8 + 8 + 8 - 10 ) / 3

    etc.....

    Plus ton facteur arbitraire sera grand, plus il faudrat des votes pour atténuer l'impact du facteur dégréssif.

    Si ton facteur est > 10, tu auras des moyennes négatives. C'est pas très grave et ça se gère très bien.

    A toi de faire des test pour choisir un facteur qui te convient : 10, 20, 50, 100, 1000......

    A l'affichage, il me semble mieux d'afficher les moyennes réelles et le nombres de votes ( pas les moyennes lissées ).

    Par contre à l'affichage ça va faire bizarre, et il faudrat que tu l'explique à tes visiteurs.

    Le site avec une moyenne réelle de 8 sera classée devant le site avec une moyenne réelle de 10

    Tu ne peux rien faire contre le fait qu'un concurrent viennent attribuer une mauvaise note.

    Une mauvaise note aura 2 effets :

    - baisser la moyenne réelle

    - mais aussi atténuer l'effet du facteur dégréssif.

    Ce facteur atténue les effets d'un vote dans un sens comme dans l'autre.

    Si un matheux passe par là, il te trouveras une meilleure fonction à base de Log, de ln ou autre fonction magique dont ils ont le secret :)


  14. Petite illustration de la différence entre count(*) et count(expr).

    SELECT superficie, count(superficie), count(*)
    FROM villa v
    group by superficie;

    superficie	count(superficie)	count(*)
    null 0 1
    10 7 7
    20 3 3
    30 5 5
    40 6 6

    La différence porte sur les NULL.

    Ensuite pour les perfs TheRec a raison, ça dépend des implémentations dans les différents SGBD.

    J'suis un peu trop catégorique sur ce point :whistling:


  15. La réponse est relativement simple :

    - dans un premier temps tu essaye de normaliser au maximum ta base

    - les dénormalisation éventuelles n'arrivent qu'à la fin, si tu as des pb de performances.

    Il te faut une table des cnx/dcnx.

    J'irai même plus loin, ville n'est pas un attribut de la table membre.

    Il te faut une clé étrangère IDVille qui référence une table des villes.

    Ne pas oublier que les SGBD sont R : Relationnel !

    Ne pas hésiter à faire des jointures entres les tables.


  16. Bonjour,

    Bourinho, un count(*) est peu optimisé, à mon avis, on m'a en tout cas toujours déconseillé les étoiles dans les requètes SQL...

    Enfin moi pour cette requète, j'aurais juste mis :

    SELECT count(nom) AS nb, nom FROM matable GROUP BY nom

    Qui t'as déconseillé ça ?

    C'est exactement le contraire un count(*) est très optimisé, surtout si ton select n'a pas de clause WHERE.

    Le pb n'est pas tellement un pb de performance, c'est un pb de sémantique.

    count(*) et count(nom) ne compte pas la même chose !

    count(*) => retourne une cardinalité

    count(nom ) => compte une expression en ignorant les NULL

    Dans ce cas, je ne pense pas qu'il y ait bc de différence entre les 2 syntaxes.


  17. Quel est l'intérêt d'un FOUND_ROWS() ( fonction propriétaire ) par rapport à count(*) ( standard SQL ) ?

    Quelqu'un a fait des tests de performance comparée entre ces 2 fonctions ?

×
×
  • Create New...