Note de lecture : Object-Oriented Reengineering Patterns, par Serge Demeyer, Stéphane Ducasse & Oscar Nierstrasz

Note : 4; Un sujet important, mais auquel le format « pattern language » ne rend pas justice.

Le reengineering d’application est un sujet souvent passé sous silence, les auteurs préférant parler des applications débutées depuis une page blanche, ce qui ne constitue pas finalement la plus grande part des projets. Dans cet ouvrage, les auteurs nous proposent une démarche en 9 étapes, qui va de la rencontre avec le legacy au système restructuré.

Le découpage du texte se calque sur les étapes de réengineering proposées, donc 10 chapitres en comptant l’introduction, pour un total d’environ 250 pages sans les annexes (par ailleurs assez courtes). L’ensemble est principalement structuré en deux parties, avec un premier chapitre servant d’ouverture à l’ensemble. Les auteurs viennent du monde des patterns, c’est d’ailleurs dans une de ces conférences que je les ai rencontrés. La quinzaine de pages de ce premier chapitre nous explique la « forme pattern » empruntée (en l’occurrence la forme Alexandrienne) et la démarche de reengineering que j’ai évoquée plus haut.

La première partie s’intitule « reverse engineering » et compte 4 chapitres sur une centaine de pages. Le second chapitre « setting directions » nous propose des patterns pour orienter notre travail, tel que le « most valuable first » ou le « if it ain’t broke, don’t fix it ». Rien de bien palpitant pour l’instant, c’est l’échauffement. Suit « first contact » où, comme le titre l’indique, on va récolter nos premières informations. C’est plus concret, avec « interview during demo » ou l’intéressant « read all the code in one hour ». En fait, tous les patterns de ce chapitre recèlent quelque chose d’intéressant !

Lire la suite

Publicité

Note de lecture : Fearless Change, par Mary Lynn Manns & Linda Rising

Note : 5 ; Où l’on apprend quand même quelques trucs intéressants chemin faisant d’une lecture quand même un peu poussive…

Impulser, réussir et maintenir des changements de pratique ou de culture dans une entreprise est une mission difficile. En fait, cela rate dans la très grande majorité des cas. Les auteurs de langage de patterns (car c’est de cela que l’on parle) ont mené un long et minutieux travail de collecte d’informations, d’interviews et de revue pour produire ce livre. En fait, j’en fus même un peu le témoin car une partie du travail de revue se fit lors de la conférence PLOP 1999 à laquelle je participais (mais pas dans le même groupe de travail).

Pour moi, la mauvaise nouvelle est que ce livre partage les mêmes problèmes que presque tous les livres basés sur des langages de patterns : ils font des livres peu plaisant à lire. En effet, en lecture linéaire, c’est un peu comme lire le catalogue de la redoute. Ca se fait mais il faut être pas mal motivé. Pour en terminer sur la forme, on notera que les patterns présentés utilisent la forme Alexandrienne, donc la forme dite « classique ». C’est un peu comme, en poésie, composer son œuvre en Alexandrins (mon humour est décidément trop fort pour moi !). La taille de chaque pattern varie entre 2 et 8 pages, approximativement.

Après la forme, le fond. Les 250 pages de l’ouvrage sont découpées en 3 parties très inégales. La première partie est assez classique. Elle compte 85 pages et est constitué de 12 chapitres qui sont donc tous très courts.

Après une courte introduction au changement et aux patterns, les chapitres 3 à 12 introduisent les patterns par nature d’usage, c’est à dire en les regroupant par demi-douzaine environ en utilisant la technique du story-telling. Cela rend ces courts chapitres plaisants à lire, mais ils me donnent aussi l’impression fugace de ne pas rentrer au cœur de l’action.

La seconde partie « expériences » est très courte avec ses 14 pages qui présente succinctement quelques cas d’usages (4 en tout) des patterns qui seront ensuite présentés en indiquant la stratégie de mise en œuvre de ces différents patterns. C’est très abstrait, d’autant qu’à ce stade on n’a pas encore passé en revue les patterns en question.

La 3ème partie est de loin la plus volumineuse, elle est la substance du livre : 49 patterns couvrant près de 150 pages classés par ordre alphabétique. Bien sûr, impossible (et inutile) de les lister ici. Voici quelques uns de mes préférés :

  • Brown Bag : Pour créer un environnement propice et ouvert aux idées innovantes dans un climat détendu.
  • Do Food : Encore de la nourriture ! C’est un moyen propice pour transformer le climat d’une réunion et en faire un événement festif !
  • External Validation : Lorsqu’une idée est difficile à faire passer… et qu’elle est mieux écoutée si elle adoubée par quelqu’un d’autre.
  • Local sponsor : Aider l’introduction du changement avec le support d’un manager local.

Bien sûr, il y a d’autres patterns qui m’ont plu. D’autres m’ont paru naïf ou même simplement inutiles. Je pense par exemple à :

  • Just do it : Mettre en œuvre les changements pour pouvoir en parler. Hum !
  • Just say thanks : Ne pas oublier à remercier ceux qui vous ont aidé. Sans blagues ? Heureusement que j’ai un pattern pour ça…
  • The right time : Penser à choisir le moment propice pour mettre en place une action ou parler de quelque chose. Ouais…

Les langages de pattern font rarement des lectures palpitantes. Je l’ai dit au début. Et ce bien que je me considère depuis longtemps comme un aficionado des patterns. La forme Alexandrienne favorise les patterns très courts et limités précisément à une seule idée. Suivant ce cheminement il était inévitable de finir avec un nombre important de patterns, d’où la nécessiter de les « clusteriser » comme cela a été fait en première partie du livre, et c’est évidemment une bonne idée.

Hormis le côté un peu rébarbatif de la lecture façon patterns, la succession des patterns passés en revue me les a fait classer en 3 catégories :

  • Les patterns creux, voir vide de sens.
  • Ceux qui m’ont semblé « juste OK ».
  • Ceux qui ont soulevé un point intéressant, à garder en mémoire pour l’avenir.

La plus large population est la seconde. Sans rendre la lecture désagréable, ils ne donnent pas une substance particulière au livre, tandis que la première catégorie fait un peu « bouche trou ». C’est évidemment la troisième catégorie qui fait le véritable intérêt du texte, et cela concerne une douzaine de patterns, dirais-je. On m’avait dit le plus grand bien de livre, voir plus, et cet écho m’est venu de diverse directions. C’est peut-être pour cela que le texte m’a laissé un arrière goût de déception. Mais cela ne doit pas forcément être votre cas.

image

Référence complète : Fearless Change, Patterns for introducing new ideas – Mary Lynn Manns & Linda Rising – Addison Wesley 2005 – ISBN : 978-0-201-74157-5

Fearless Change: Patterns for Introducing New Ideas

https://www.goodreads.com/book/add_to_books_widget_frame/0201741571?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on

Note de lecture : Pattern Languages of Program Design vol. 3 – Robert Martin, Dirk Rhiele & Frank Buschmann edt.

Note : 8 ; Une compilation de patterns de très bonne qualité.

Ce troisième volume de la série PLOP-D a complètement redynamisé la série ! Alors que je reprochais aux volumes précédents la portion de matériel utile, il n’y a rien de tel ici : la substance utilisable directement dans nos projets y est importante. J’ai trouvé la sélection clairement orientée vers les patterns de conception, ce qui n’est pas pour me déplaire. Cependant, même les patterns organisationnels peuvent s’avérer utiles ou inspirants, tel que le “Patterns for pattern writters”. Malgré cette orientation, le volume est quand même découpé en plusieurs parties, en fait plus de parties même que les opus précédents, car on en compte 10 ici, mais elles sont aussi plus finement ciblées. Il était aussi question d’opérer un découpage valable pour un livre qui compte maintenant 575 pages.

La première partie traite des patterns à usage généraux. Cette première partie n’est certainement pas à ignorer. On y trouve le très utile « null object », l’excellent « extension object » qui est une des très rares contributions d’Erich Gamma. Le « manager » de Peter Sommerlad a plutôt une coloration historique, car c’est le pattern universellement utilisé aujourd’hui pour les DAO.

La seconde partie couvre des variations sur les patterns. Elle va d’avantage intéresser le praticien expérimenté. Les trois sont intéressants, les variations sur le state pattern peuvent être utilisées presque tel quel dans une formation.

J’ai trouvé les deux patterns architecturaux qui forment la troisième partie du même nom assez peu convainquants. Tant pis.

La quatrième partie est consacrée aux patterns liés aux architectures distribuées. Les 5 patterns qui la constituent sont plutôt musclés. Ma préférence va au très élégant « asynchronous completion token ». L’ « acceptor connector » vaut certainement le détour, mais il est quelque peu complexe et la présentation à l’aide diagramme en notation Booch n’aide pas.

Ce sont deux patterns qui constituent la cinquième partie consacrée à la persistance. Le « serializer » a surtout un intérêt documentaire, tandis que « accessing relational database » bien que bien construit n’offre plus qu’un intérêt mitigé aujourd’hui.

On ne trouve qu’un seul pattern dans la sixième partie qui cible les interfaces utilisateur. Il s’agit plutôt d’un pattern language d’ailleurs, mais je lui ai trouvé peu d’intérêt.

La septième partie traite de patterns de programmation et il ne faut pas la rater, même si elle ne contient que deux de ces patterns (presque des idiomes). Le premier d’entre eux est le désormais célèbre « double-check locking », tandis que l’« external polymorphism » qui s’apparente beaucoup au décorateur n’est pas dénué d’intérêt.

Je n’ai jamais vraiment été soulevé d’enthousiasme par les « business patterns ». Peu d’entre-eux trouvent grâce à mes yeux. Cette huitième partie en contient 3 et j’avoue qu’ils ne m’ont pas marqué.

On n’échappe pas facilement aux « process patterns ». Nous en avons 4 dans cette neuvième partie. Le « pattern for evolving frameworks » est un pattern language qui met bien en exergue les aspects fondamentaux de la conception d’un framework. Le « pattern for designing in teams » contient les frémissements de l’avènement d’XP. Le « pattern for system testing » est le plus intéressant du lot, à mon avis. Là encore un pattern language qui mérite la lecture.

Si vous vous sentez l’âme d’un auteur, le « pattern language for patterns writing » sera votre amis. Il est le seul membre de cette dixième partie consacrée aux « patterns on patterns ». Ecrire un pattern, le soumettre (et être accepté) en conférence n’est pas si simple, j’en ai l’expérience. Rétrospectivement, je trouve qu’il s’agit-là d’un bon guide.

On ne peut espérer un score de 100% de matière utile à une compilation de patterns issus d’une conférence. Cela dit la sélection est vraiment très bonne, c’est un très bon livre, je ne l’ai pas lu en pensant « vivement que cela finisse » que cela a été parfois le cas avant. Je garde précieusement ce volume et le recommande.

PLOPD-vol3

Référence complète : Pattern Languages of Program Design, vol. 3 – Robert Martin, Dirk Rhiele, Frank Buschmann edt. – Addison Wesley / Software Patterns series 1998 – ISBN: 0-201-31011-2

Pattern Languages of Program Design 3

http://www.goodreads.com/book/add_to_books_widget_frame/0201310112?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on

Note de lecture : Pattern Languages of Program Design vol. 2, Vlissides, Coplien & Kerth edt

Note : 5 ; Quelques bon (et même très bons patterns), toutefois noyés dans nombre de patterns de moindre intérêt.

Ce volume regroupe une sélection des contributions à la seconde conférence PLOP. La formule reste la même que pour le premier volume, avec une sélection de patterns ou de patterns languages regroupés par thèmes. La communauté se développant, la qualité de la matière utile progresse d’autant.

Une nouveauté, la première partie parle désormais d’idiomes, c’est à dire de patterns de bas niveau spécifiques à des langages. Toutefois il n’y a là rien de bien remarquable : les idiomes de Tom Cargill auront du mal à soutenir la comparaison avec ceux de Jim Coplien dans son ouvrage éponyme.

La seconde partie, les « general purpose patterns » regroupent ce que l’ouvrage a de mieux à proposer, avec spécifiquement deux patterns remarquables : Le Shopper de Jim Doble, mais surtout le Command Processor de Peter Sommerlad. Ce dernier n’est pas seulement désormais un classique, il est aussi simple, puissant et élégant.

La troisième partie « special purpose patterns » tait celle consacrée aux domaines métiers dans le volume précédent. On y trouve surtout des pattern languages qui sont intéressants sans être transcendants.

Peu de patterns dans la quatrième partie dédiée aux patterns architecturaux. Juste trois, seul « reflection » de Frank Buschmann retiendra mon attention.

Je ne suis toujours pas fan des patterns organisationnels qui nous sont proposés en cinquième et sixième parties. L’organisational Patterns for Team prélude certaines pratiques agiles. Episodes de Ward Cunningham est souvent référencé d’une part à cause du nom de l’auteur et d’autre part car certains patterns seront repris par Kent Beck dans l’extreme programming.

Le « concurrent programming / distributed systems » de la partie 7 est une excellente fournée. Je citerais juste le « half sync / Half-async » de Douglas C. Schmidt et Charles Cranor.

En comparaison, la partie 8 sur les « reactive systems » m’a parue un peu pauvre.

Si l’ouvrage est loin d’être indispensable, il pourra intéresser à ceux qui portent un intérêt actif aux patterns. Et un nombre non négligeable des patterns présentés sont loin d’être dénués d’intérêt.

PLOPD-vol2

Référence complète : Pattern Languages of Program Design, vol. 2 –  John Vlissides, James Coplien & Norman L. Kerth edt – Addison Wesley 1996 – ISBN : 0-201-89527-7

Pattern Languages of Program Design 2


http://www.goodreads.com/book/add_to_books_widget_frame/0201895277?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on

Note de lecture : Pattern Language of Program Design, James Coplien & Douglas Schmidt edt

Note : 4 ; Pour les “accros” des patterns, exclusivement.

Le mouvement des “Design Patterns” a donné naissance aux conférences PLOP d’abord (aux Etats-Unis, à l’université d’Urbana Champain, Illinois), puis EuroPLOP (Kloster Irsee, Allemagne). Ce volume regroupe une sélection des papiers soumis par les participants à la première conférence PLOP. C’était alors le début de cette conférence, en conséquence la sélection n’est pas sévère, les patterns soumis peu ou pas “compétitifs”, souvent très généraux, plus centrés sur les concepts (ce que l’on qualifie parfois d’approche Alexandrienne) que sur le design. Enfin, une place importante est prise par les patterns “organisationnels”.

Sans rentrer dans les détails, voici une idée générale de la structure de cette compilation :

La première partie « frameworks et composants » regroupe des patterns et patterns languages de niveau très conceptuels pour architecturer des applications.

La seconde partie « systems and distributed processing » regroupe des patterns à caractères architecturaux. C’est l’une des plus intéressante du livre.

Dans la troisième partie « business objects » on retrouvera des patterns et pattern language liés à des domaines métier.

La quatrième partie « process and organization » regroupe exclusivement des patterns languages. C’est celle qui m’a le moins accroché.

La cinquième partie « design patterns and catalogs » est dédiée aux papiers ayant trait à l’étude des patterns : catégorisation, mise en évidence, documentation. C’est intéressant dans le principe, mais hélas ennuyeux dans les faits.

La sixième partie « architecture and communication » promettait d’être intéressante, mais le traitement des patterns qui y figurent est trop littéraire à mon goût pour présenter un réel intérêt. Le « POSA book » adressera cela beaucoup mieux !

La septième partie « object usage and style » ne donne pas tellement lieu à commentaire, si ce n’est que les patterns qui y figurent ne resteront pas dans les annales.

La dernière partie « events and events handlers » a je pense été créée car plusieurs patterns apparaissaient dans cette catégorie.

Certains patterns se détachent du lot, par exemple :

  • Half-object + protocol de Gerard Meszaros
  • Master-Slave pattern de Frank Buschmann
  • Reactor de Doug Schmidt
  • Le CHECKS pattern language de Ward Cunningham qui est l’un des rares pattern language de cette édition à mériter le détour.
  • Dans les patterns organisationnels, une petite curiosité : le « Lifecycle and Refactoring Patterns that Support » qui est en fait une prémice du futur « Refactoring » paru en 1999.

Certes la substance utile est plus importante que celle que j’ai cité. Mais beaucoup des patterns et surtout des patterns languages sont plus des essais à l’intérêt académique que de la matière exploitable. Pour qui veut se plonger dans l’étude des Patterns, ce volume a un intérêt ne serait-ce qu’historique. C’est mon cas. Mais pour beaucoup, ce volume sera à la fois trop aride et pas assez pourvu de matière exploitable en regard de ses 550 pages.

En vérifiant sur Amazon, j’ai la surprise de constater que ce livre est toujours disponible 17 après sa parution ! Je ne le recommande toutefois qu’exclusivement aux aficionados des patterns ! 

PLOPD

Référence complète : Pattern Language of Program Design – James Coplien & Douglas Schmidt edt – Addison Wesley / Software Patterns series 1995 – ISBN: 0-201-60734-4

Pattern Languages of Program Design


http://www.goodreads.com/book/add_to_books_widget_frame/0201607344?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on

Note de lecture : Agile Adoption Patterns, a roadmap to organisational success, par Amr Elssamadisy

Note : 4 ; Le pattern ne fait pas le moine !

Etant à la fois amateur de patterns et de méthodes agiles, je me faisais un plaisir d’aborder cet ouvrage. De plus, Amir est un excellent ex-collègue que j’ai eu le plaisir de rencontrer. J’ai pu apprécier sa maîtrise du sujet et aussi sa grande humilité. Ce livra n’en reste pas moins une déception.

Les deux premières parties sont dédiées à une présentation générale (mais plutôt agréable) des valeurs et du sens de l’agilité, tandis que la seconde partie est consacrée aux « stratégies d’adoption ». Les deux axes en sont la valeur métier et les « mauvaises odeurs » conduisant à une direction / stratégie d’adoption. Cette partie se conclue par des propositions de roadmaps s’appuyant sur les patterns présentés au long des parties suivantes.

La troisième partie est forte de 38 chapitres couvrant 37 patterns (et un chapitre introductif) construits selon la forme dite « alexandrienne ». Ces patterns couvrent de très nombreux aspects des pratiques agiles, sinon toutes. Depuis la capture des besoins jusqu’aux pratiques de développements en passant par les pratiques supports telles que l’intégration continue, le rythme du projet, etc… Chacun de ces patterns traite de manière réduite (donc concentrée) chaque pratique en mettant l’accent sur les points forts et faibles de celles-ci. J’avoue avoir trouvé difficile de faire le lien entre les patterns, et ce malgré les roadmaps. La partie « sketch » sensée donner un contexte au pattern est hélas à mon goût trop stéréotypé : on croit entrer dans un monde où tout est parfait. Telle n’est pas mon expérience.

Les deux chapitres finaux consacrés aux retours d’expérience valent le détour : il s’agit tout simplement des rapports d’audit et de rétrospective de l’auteur sans aucun habillage ni concession. Outre qu’il met en évidence le travail de consulting de l’auteur il met aussi en lumière la réalité du terrain de l’adoption de l’agilité.

Ma déception face à cet ouvrage est probablement due au fait que ce texte ne s’adresse pas à moi ! J’ai ainsi eu du mal à y fixer mon intérêt. Un nouveau venu dans cet univers aura probablement un autre regard !

agile-adoption-patterns

Référence complète : Agile Adoption Patterns, a roadmap to organisational success – Amr Elssamadisy – Addison Wesley 2008 – ISBN : 0-321-51452-1 ; EAN : 978 032 151452 3

Agile Adoption Patterns: A Roadmap to Organizational Success


http://www.goodreads.com/book/add_to_books_widget_frame/0321514521?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on

A Pattern Language for User Information Feedback

Prenons notre machine à remonter le temps, voici un papier que j’avais soumis à la conférence Pattern Language Of Program 1999, à Urbana Champaign. Curieusement le sujet prédominant de cette conférence était une méthode sur le point d’être publiée : Extreme Programming.

Il n’est pas sûr que je publierais la chose ainsi aujourd’hui. Mais je n’ai rien retouché à ma prose, vous laissant ainsi la possibilité de la critiquer à loisir. Lâchez-vous !

http://static.issuu.com/webembed/viewers/style1/v2/IssuuReader.swf?mode=mini&viewMode=singlePage&embedBackground=%237fc225&backgroundColor=%23222222&documentId=120501193210-e42bf2955d5c47e48707ef6e294a0f21

Voici également le lien vers ce papier dans Issuu

Note de lecture : Software Configuration Management Patterns: Effective Teamwork, Practical Integration par Stephen Berczuk & Brad Appleton

Note: 8 ; Un “langage de patterns” bien construit, mais aussi une excellente référence sur la gestion de configuration.

On trouve deux types d’ouvrages sur la gestion de configuration : ceux développant des processus de gestion de configuration, souvent compliqués et éloignés des préoccupation quotidiennes des développeurs, et ceux traitant des outils, les détaillant en profondeur mais sans réellement expliquer comment les utiliser intelligemment. Cet ouvrage se démarque résolument de ces deux tendances en exposant les principes de la gestion de version et de configuration sous forme de « process patterns » qui sont autant de cas d’utilisation. Des cas d’utilisation résolument tournés vers le développeur, afin de l’aider dans ses tâches quotidiennes.

Une courte première partie introductive recadre la place de l’outil de gestion de versions et de configuration dans l’environnement de développement. Il présente également la structure des patterns et l’image globale de ce langage de patterns. On y distingue deux sous-ensembles : les patterns orientés « codeline » c’est-à-dire purement gestion de version, et les patterns liés à la gestion de l’espace de travail.

La seconde partie, forte de 120 pages, forme 16 chapitre, chacun présentant un pattern (donc, une moyenne de 7 pages par patterns). Je ne saurais tous les présenter, mais en voici quelques uns :

Active development line : Comment gérer une branche de développement suffisamment utilisable et stable à tout moment, afin de satisfaire les besoins de développement

Private build : Pensez de façon globale, et construisez localement. Ou comment, avant de soumettre des changements, construire et tester de manière identique au build d’intégration, mais sur l’espace privé de développement

Intégration build : Pour s’assurer que toutes les changements injectés dans le repository central sont construits et testés par un processus centralisé.

Task level commit : Pousser dans le gestionnaire de versions à chaque changement de faible granularité mais indissociable (résolution d’un problème, mise en conformité avec une évolution d’interface, etc.).

Comme c’est le cas avec les bons patterns, un bon nombre nous donne un goût de déjà-vu. D’autres moins. L’approche « patterns » est réellement utilisée à bon escient : le problème est évoqué, souvent étayé par une expérience vécue, pour déboucher ensuite sur le développement de la solution, soutenus par des références extérieures. On appréciera aussi, mine de rien, de voir relevé en vis-à-vis des patterns, les points non résolus ! Que vous soyez expérimentés ou débutant, vous devriez vous régaler à la lecture de ces patterns : on bénéficie réellement de l’expérience et de la qualité de synthèse et d’expression des auteurs. Connaître les commandes de votre outil de gestion de version n’est pas tout (bien que cela soit nécessaire), il faut savoir utiliser et organiser son travail au quotidien afin de travailler de façon efficace, coopérative et rigoureuse afin d’éviter les problèmes inhérents au travail en équipe. Ce langage de pattern est sans nul doute la réponse pragmatique, efficace et opérationnelle. Le tout en moins de 200 pages. Last but non least, les appendices si succincts soient-ils fournissent d’excellents liens Web et une ébauche d’évaluation des outils existants. Vous aurez compris : j’ai aimé.

Les DVCS ont certainement ajouté leur lot de patterns également, même si ceux évoqués ci-dessus restent d’actualité. J’adorerais voir une seconde édition de l’ouvrage intégrant cela. Une autre avancé possible est la prise en compte de la déliverie en continue (le devops) dans le cycle logiciel abordé.

Les auteurs travaillent à une seconde version de l’ouvrage, toutefois celle-ci est encore à l’état de projet. Il n’est d’ailleurs pas dit qu’elle sorte un jour.

soft-conf-mgt-patterns

Référence complète : Software Configuration Management Patterns: Effective Teamwork, Practical Integration – Stephen P. Berczuk & Brad Appleton – Addison Wesley / SP series 2002 – ISBN : 0-201-74117-2

Software Configuration Management Patterns: Effective Teamwork, Practical Integration

http://www.goodreads.com/book/add_to_books_widget_frame/0201741172?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on