Automatic Structure Discovery for Large Source Code

Total Page:16

File Type:pdf, Size:1020Kb

Automatic Structure Discovery for Large Source Code Automatic Structure Discovery for Large Source Code By Sarge Rogatch Universiteit van Amsterdam, Master Thesis Artificial Intelligence, 2010 Automatic Structure Discovery for Large Source Code Page 1 of 130 Master Thesis, AI Sarge Rogatch, University of Amsterdam July 2010 Acknowledgements I would like to acknowledge the researchers and developers who are not even aware of this project, but their findings have played very significant role: Soot developers: Raja Vall´ee-Rai, Phong Co, Etienne Gagnon, Laurie Hendren, Patrick Lam, and others. TreeViz developer: Werner Randelshofer H3 Layout author and H3Viewer developer: Tamara Munzner Researchers of static call graph construction: Ondˇrej Lhot´ak, Vijay Sundaresan, David Bacon, Peter Sweeney Researchers of Reverse Architecting: Heidar Pirzadeh, Abdelwahab Hamou-Lhadj, Timothy Lethbridge, Luay Alawneh Researchers of Min Cut related problems: Dan Gusfield, Andrew Goldberg, Maxim Babenko, Boris Cherkassky, Kostas Tsioutsiouliklis, Gary Flake, Robert Tarjan Automatic Structure Discovery for Large Source Code Page 2 of 130 Master Thesis, AI Sarge Rogatch, University of Amsterdam July 2010 Contents 1 Abstract ................................................................................................................................ 6 2 Introduction .......................................................................................................................... 7 2.1 Project Summary .......................................................................................................... 8 2.2 Global Context ........................................................................................................... 10 2.3 Relevance for Artificial Intelligence .......................................................................... 10 2.4 Problem Analysis ....................................................................................................... 11 2.5 Hypotheses ................................................................................................................. 11 2.6 Business Applications ................................................................................................ 12 2.7 Thesis Outline ............................................................................................................ 15 3 Literature and Tools Survey ............................................................................................... 16 3.1 Source code analysis .................................................................................................. 16 3.1.1 Soot ........................................................................................................................ 17 3.1.2 Rascal ..................................................................................................................... 18 3.2 Clustering ................................................................................................................... 18 3.2.1 Particularly Considered Methods ........................................................................... 20 3.2.1.1 Affinity Propagation ...................................................................................... 20 3.2.1.2 Clique Percolation Method ............................................................................ 22 3.2.1.3 Based on Graph Cut ....................................................................................... 22 3.2.2 Other Clustering Methods ...................................................................................... 24 3.2.2.1 Network Structure Indices based ................................................................... 25 3.2.2.2 Hierarchical clustering methods .................................................................... 27 4 Background ........................................................................................................................ 29 4.1 Max Flow & Min Cut algorithm ................................................................................ 29 4.1.1 Goldberg’s implementation ................................................................................... 29 4.2 Min Cut Tree algorithm ............................................................................................. 30 4.2.1 Gusfield algorithm ................................................................................................. 30 4.2.2 Community heuristic .............................................................................................. 31 4.3 Flake-Tarjan clustering .............................................................................................. 31 4.3.1 Alpha-clustering ..................................................................................................... 31 4.3.2 Hierarchical version ............................................................................................... 32 4.4 Call Graph extraction ................................................................................................. 33 4.5 The Problem of Utility Artifacts ................................................................................ 34 4.6 Various Algorithms .................................................................................................... 36 5 Theory ................................................................................................................................ 37 5.1 Normalization ............................................................................................................ 37 5.1.1 Directed Graph to Undirected ................................................................................ 38 5.1.2 Leverage ................................................................................................................. 39 5.1.3 An argument against fan-out analysis .................................................................... 40 5.1.4 Lifting the Granularity ........................................................................................... 40 5.1.5 An Alternative ........................................................................................................ 43 5.2 Merging Heterogeneous Dependencies ..................................................................... 44 5.3 Alpha-search .............................................................................................................. 45 5.3.1 Search Tree ............................................................................................................ 45 5.3.2 Prioritization .......................................................................................................... 46 5.4 Hierarchizing the Partitions ....................................................................................... 47 5.5 Distributed Computation ............................................................................................ 48 5.6 Perfect Dependency Structures .................................................................................. 49 5.6.1 Maximum Spanning Tree ...................................................................................... 50 Automatic Structure Discovery for Large Source Code Page 3 of 130 Master Thesis, AI Sarge Rogatch, University of Amsterdam July 2010 5.6.2 Root Selection Heuristic ........................................................................................ 51 6 Implementation and Specification ..................................................................................... 53 6.1 Key Choices ............................................................................................................... 54 6.1.1 Reducing Real- to Integer- Weighted Flow Graph ................................................ 54 6.1.2 Results Presentation ............................................................................................... 54 6.2 File formats ................................................................................................................ 54 6.3 Visualization .............................................................................................................. 55 6.4 Processing Pipeline .................................................................................................... 55 7 Evaluation .......................................................................................................................... 58 7.1 Experiments ............................................................................................................... 58 7.1.1 Analyzed Software and Dimensions ...................................................................... 58 7.2 Interpretation of the Results ....................................................................................... 59 7.2.1 Architectural Insights ............................................................................................. 60 7.2.2 Class purpose from library neighbors .................................................................... 61 7.2.2.1 Obvious from class name ............................................................................... 62 7.2.2.2 Hardly obvious from class name .................................................................... 64 7.2.2.3 Not obvious from class name ......................................................................... 65 7.2.2.4 Class name seems to contradict the purpose .................................................. 66 7.2.3 Classes that act together ........................................................................................
Recommended publications
  • How to Morph Graphs on the Torus
    How to Morph Graphs on the Torus Erin Wolf Chambers† Jeff Erickson‡ Patrick Lin‡ Salman Parsa† Abstract first algorithm to morph graphs on any higher-genus surface. In fact, it is the first algorithm to compute We present the first algorithm to morph graphs on the torus. any form of isotopy between surface graphs; existing Given two isotopic essentially 3-connected embeddings of the algorithms to test whether two graphs on the same surface same graph on the Euclidean flat torus, where the edges in both are isotopic are non-constructive 29 . Our algorithm drawings are geodesics, our algorithm computes a continuous [ ] outputs a morph consisting of O n steps; within each step, deformation from one drawing to the other, such that all edges ( ) all vertices move along parallel geodesics at (different) are geodesics at all times. Previously even the existence of constant speeds, and all edges remain geodesics (“straight such a morph was not known. Our algorithm runs in O n1+!=2 ( ) line segments”). Our algorithm runs in O n1+!=2 time; the time, where ! is the matrix multiplication exponent, and the ( ) running time is dominated by repeatedly solving a linear computed morph consists of O n parallel linear morphing steps. ( ) system encoding a natural generalization of Tutte’s spring Existing techniques for morphing planar straight-line graphs do embedding theorem. not immediately generalize to graphs on the torus; in particular, Cairns’ original 1944 proof and its more recent improvements rely on the fact that every planar graph contains a vertex of degree 1.1 Prior Results (and Why They Don’t Generalize).
    [Show full text]
  • 1 Introduction and Terminology
    A Survey of Solved Problems and Applications on Bandwidth, Edgesum and Pro le of Graphs Yung-Ling Lai National Chiayi Teacher College Chiayi, Taiwan, R.O.C. Kenneth Williams Western Michigan University Abstract This pap er provides a survey of results on the exact bandwidth, edge- sum, and pro le of graphs. A bibliographyof work in these areas is pro- vided. The emphasis is on comp osite graphs. This may be regarded as an up date of the original survey of solved bandwidth problems by Chinn, Chvatalova, Dewdney, and Gibbs[10] in 1982. Also several of the applica- tion areas involving these graph parameters are describ ed. 1 Intro duction and terminology For a graph G, V (G) denotes the set of vertices of G and E (G) denotes the set of edges of G. Let G = (V; E ) be a graph on n vertices. A 1-1 mapping f : V ! f1; 2;:::;ng is called a proper numbering of G. The bandwidth B (G) of aproper f numbering f of G is the number B (G)= maxfjf (u) f (v )j : uv 2 E g; f and the bandwidth B(G) of G is the number B (G)= minfB (G): f is a prop er numb ering of Gg: f A prop er numb ering f is called a bandwidth numbering of G if B (G)=B (G). f For example, Figure 1 shows bandwidth numb erings for the graphs P ;C ;K 4 5 1;4 and K . In general, B (P ) = 1, B (C ) = 2, B (K ) = dn=2e and B (K ) = 2;3 n n 1;n m;n m + dn=2e1form n.
    [Show full text]
  • Release Notes for Fedora 15
    Fedora 15 Release Notes Release Notes for Fedora 15 Edited by The Fedora Docs Team Copyright © 2011 Red Hat, Inc. and others. The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. The original authors of this document, and Red Hat, designate the Fedora Project as the "Attribution Party" for purposes of CC-BY-SA. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version. Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law. Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries. For guidelines on the permitted uses of the Fedora trademarks, refer to https:// fedoraproject.org/wiki/Legal:Trademark_guidelines. Linux® is the registered trademark of Linus Torvalds in the United States and other countries. Java® is a registered trademark of Oracle and/or its affiliates. XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries. MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries. All other trademarks are the property of their respective owners.
    [Show full text]
  • Parallelization of Reordering Algorithms for Bandwidth and Wavefront Reduction
    Parallelization of Reordering Algorithms for Bandwidth and Wavefront Reduction Konstantinos I. Karantasis∗, Andrew Lenharthy, Donald Nguyenz, Mar´ıa J. Garzaran´ ∗, Keshav Pingaliy,z ∗Department of Computer Science, yInstitute for Computational Engineering and Sciences and University of Illinois at Urbana-Champaign zDepartment of Computer Science, fkik, [email protected] University of Texas at Austin [email protected], fddn, [email protected] Abstract—Many sparse matrix computations can be speeded More recently, reordering has become popular even in the up if the matrix is first reordered. Reordering was originally context of iterative sparse solvers where problems like mini- developed for direct methods but it has recently become popular mizing fill do not arise. The key computation in an iterative for improving the cache locality of parallel iterative solvers since reordering the matrix to reduce bandwidth and wavefront sparse solver is sparse matrix-vector multiplication (SpMV) can improve the locality of reference of sparse matrix-vector (say y = Ax). If the matrix is stored in compressed row- multiplication (SpMV), the key kernel in iterative solvers. storage (CRS) and the SpMV computation is performed by In this paper, we present the first parallel implementations of rows, the accesses to y and A enjoy excellent locality, but the two widely used reordering algorithms: Reverse Cuthill-McKee accesses to x may not. One way to improve the locality of (RCM) and Sloan. On 16 cores of the Stampede supercomputer, accesses to the elements of x is to reorder the sparse matrix our parallel RCM is 5.56 times faster on the average than a state-of-the-art sequential implementation of RCM in the HSL A using a bandwidth-reducing ordering (RCM is popular).
    [Show full text]
  • Planar Diameter Via Metric Compression
    Planar Diameter via Metric Compression Jason Li Merav Parter CMU Weizmann Institute [email protected] [email protected] Abstract We develop a new approach for distributed distance computation in planar graphs that is based on a variant of the metric compression problem recently introduced by Abboud et al. [SODA’18]. In our variant of the Planar Graph Metric Compression Problem, one is given an n-vertex planar graph G = (V, E), a set of S ⊆ V source terminals lying on a single face, and a subset of target terminals T ⊆ V. The goal is to compactly encode the S × T distances. One of our key technical contributions is in providing a compression scheme that encodes all S × T distances using Oe(jSj · poly(D) + jTj) bits1, for unweighted graphs with diameter D. This significantly improves the state of the art of Oe(jSj · 2D + jTj · D) bits. We also con- sider an approximate version of the problem for weighted graphs, where the goal is to encode (1 + e) approximation of the S × T distances, for a given input parameter e 2 (0, 1]. Here, our compression scheme uses Oe(poly(jSj/e) + jTj) bits. In addition, we describe how these compression schemes can be computed in near-linear time. At the heart of this compact com- pression scheme lies a VC-dimension type argument on planar graphs, using the well-known Sauer’s lemma. This efficient compression scheme leads to several improvements and simplifications in the setting of diameter computation, most notably in the distributed setting: • There is an Oe(D5)-round randomized distributed algorithm for computing the diameter in planar graphs, w.h.p.
    [Show full text]
  • Freecol Documentation, User Guide for Version V0.11.6
    FreeCol Documentation User Guide for Version v0.11.6 The FreeCol Team December 30, 2019 2 Contents 1 Introduction7 1.1 About FreeCol..........................7 1.2 The Original Colonization....................7 1.3 About this manual........................9 1.3.1 Differences between the rule sets.............9 1.4 Liberty and Immigration..................... 11 2 Installation 13 2.1 System Requirements....................... 13 2.1.1 FreeCol on Windows................... 14 2.2 Compiling FreeCol........................ 14 3 Interface 15 3.1 Starting the game......................... 15 3.1.1 Command line options.................. 15 3.1.2 Game setup........................ 19 3.1.3 Map Generator Options................. 21 3.1.4 Game Options....................... 22 3.2 Client Options........................... 25 3.2.1 Display Options...................... 25 3.2.2 Translations........................ 26 3.2.3 Message Options..................... 27 3.2.4 Audio Options...................... 28 3.2.5 Savegame Options.................... 29 3.2.6 Warehouse Options.................... 29 3.2.7 Keyboard Accelerators.................. 29 3.2.8 Other Options....................... 29 3.3 The main screen.......................... 30 3 4 CONTENTS 3.3.1 The Menubar....................... 31 3.3.2 The Info Panel...................... 36 3.3.3 The Minimap....................... 36 3.3.4 The Unit Buttons..................... 36 3.3.5 The Compass Rose.................... 37 3.3.6 The Main Map...................... 37 3.4 The Europe Panel......................... 42 3.5 The Colony panel......................... 43 3.5.1 The Warehouse Dialog.................. 46 3.5.2 The Build Queue Panel.................. 46 3.6 Customization........................... 47 4 The New World 49 4.1 Terrain Types........................... 49 4.2 Goods............................... 50 4.2.1 Trade Routes....................... 52 4.3 Special Resources........................
    [Show full text]
  • Modularity Index Metrics for Java-Based Open Source Software Projects
    (IJACSA) International Journal of Advanced Computer Science and Applications, Vol. 2, No. 11, 2011 Modularity Index Metrics for Java-Based Open Source Software Projects Andi Wahju Rahardjo Emanuel Retantyo Wardoyo, Jazi Eko Istiyanto, Informatics Bachelor Program, Khabib Mustofa Faculty of Information Technology, Dept. of Computer Science and Electronics, Maranatha Christian University, Universitas Gadjah Mada, Bandung, Indonesia Yogyakarta, Indonesia Abstract — Open Source Software (OSS) Projects are gaining contributing to such unfruitful result such as no formal means popularity these days, and they become alternatives in building i.e. no project planning [4], poor coding styles of project software system. Despite many failures in these projects, there initiators [13] and poor architectural design [12]. We believe are some success stories with one of the identified success factors that some new approaches with respect to modularity to is modularity. This paper presents the first quantitative software counter such problems in OSS Projects are needed. Until now, metrics to measure modularity level of Java-based OSS Projects modularity has been identified as a key success factor of OSS called Modularity Index. This software metrics is formulated by projects, but how to apply modularity, especially from early analyzing modularity traits such as size, complexity, cohesion, phase of the project is not yet understood. and coupling of 59 Java-based OSS Projects from sourceforge.net using SONAR tool. These OSS Projects are selected since they This paper presents the formulation of Modularity Index have been downloaded more than 100K times and believed to which is the first quantitative software metrics to measure the have the required modularity trait to be successful.
    [Show full text]
  • Application of Graph Theory to the Nonlinear Analysis of Large Space Structures Magdy Ibrahim Hindawy Iowa State University
    Iowa State University Capstones, Theses and Retrospective Theses and Dissertations Dissertations 1986 Application of graph theory to the nonlinear analysis of large space structures Magdy Ibrahim Hindawy Iowa State University Follow this and additional works at: https://lib.dr.iastate.edu/rtd Part of the Aerospace Engineering Commons Recommended Citation Hindawy, Magdy Ibrahim, "Application of graph theory to the nonlinear analysis of large space structures " (1986). Retrospective Theses and Dissertations. 8007. https://lib.dr.iastate.edu/rtd/8007 This Dissertation is brought to you for free and open access by the Iowa State University Capstones, Theses and Dissertations at Iowa State University Digital Repository. It has been accepted for inclusion in Retrospective Theses and Dissertations by an authorized administrator of Iowa State University Digital Repository. For more information, please contact [email protected]. INFORMATION TO USERS This reproduction was made from a copy of a memuscript sent to us for publication and microfilming. While the most advanced technology has been used to pho­ tograph and reproduce this manuscript, the quality of the reproduction Is heavily dependent upon the quality of the material submitted. Pages In any manuscript may have Indistinct print. In all cases the best available copy has been filmed. The following explanation of techniques Is provided to help clarify notations which may appear on this reproduction. 1. Manuscripts may not always be complete. When it Is not possible to obtain missing pages, a note appears to indicate this. 2. When copyrighted materials are removed from the manuscript, a note ap­ pears to indicate this. 3. Oversize materials (maps, drawings, and charts) are photographed by sec­ tioning the original, beginning at the upper left hand comer and continu­ ing from left to right in equal sections with small overlaps.
    [Show full text]
  • Quantum Algorithms Via Linear Algebra: a Primer / Richard J
    QUANTUM ALGORITHMS VIA LINEAR ALGEBRA A Primer Richard J. Lipton Kenneth W. Regan The MIT Press Cambridge, Massachusetts London, England c 2014 Massachusetts Institute of Technology All rights reserved. No part of this book may be reproduced in any form or by any electronic or mechanical means (including photocopying, recording, or information storage and retrieval) without permission in writing from the publisher. MIT Press books may be purchased at special quantity discounts for business or sales promotional use. For information, please email special [email protected]. This book was set in Times Roman and Mathtime Pro 2 by the authors, and was printed and bound in the United States of America. Library of Congress Cataloging-in-Publication Data Lipton, Richard J., 1946– Quantum algorithms via linear algebra: a primer / Richard J. Lipton and Kenneth W. Regan. p. cm. Includes bibliographical references and index. ISBN 978-0-262-02839-4 (hardcover : alk. paper) 1. Quantum computers. 2. Computer algorithms. 3. Algebra, Linear. I. Regan, Kenneth W., 1959– II. Title QA76.889.L57 2014 005.1–dc23 2014016946 10987654321 We dedicate this book to all those who helped create and nourish the beautiful area of quantum algorithms, and to our families who helped create and nourish us. RJL and KWR Contents Preface xi Acknowledgements xiii 1 Introduction 1 1.1 The Model 2 1.2 The Space and the States 3 1.3 The Operations 5 1.4 Where Is the Input? 6 1.5 What Exactly Is the Output? 7 1.6 Summary and Notes 8 2 Numbers and Strings 9 2.1 Asymptotic Notation
    [Show full text]
  • The Bandwidths of a Matrix. a Survey of Algorithms
    DOI: 10.2478/awutm-2014-0019 Analele Universit˘at¸ii de Vest, Timi¸soara Seria Matematic˘a{ Informatic˘a LII, 2, (2014), 183{ 223 The Bandwidths of a Matrix. A Survey of Algorithms Liviu Octavian Mafteiu-Scai Abstract. The bandwidth, average bandwidth, envelope, profile and antibandwidth of the matrices have been the subjects of study for at least 45 years. These problems have generated considerable interest over the years because of them practical relevance in ar- eas like: solving the system of equations, finite element methods, circuit design, hypertext layout, chemical kinetics, numerical geo- physics etc. In this paper a brief description of these problems are made in terms of their definitions, followed by a comparative study of them, using both approaches: matrix geometry and graph theory. Time evolution of the corresponding algorithms as well as a short description of them are made. The work also contains concrete real applications for which a large part of presented al- gorithms were developed. AMS Subject Classification (2000). 65F50, 65F10, 68T, 08, 68R10, 65F15 Keywords. bandwidth, envelope, profile, average bandwidth, an- tibandwidth, system of equations, parallel, preconditioning, par- titioning, load-balancing 1 Introduction The bandwidth, average bandwidth, envelope, profile and antibandwidth op- timization of matrices have been the subjects of study for at least 45 years. 184 L.O. Mafteiu-Scai An. U.V.T. These problems have generated considerable interest over the years because of them practical relevance for a significant range of global optimization ap- plications. A first approach to bandwidth problem was made by Harper in 1964 [58]. The same author introduces the concept of the lower boundary of the band- width in paper [59].
    [Show full text]
  • MIT 6.851 Advanced Data Structures Prof
    MIT 6.851 Advanced Data Structures Prof. Erik Demaine Spring '12 Scribe Notes Collection TA: Tom Morgan, Justin Zhang Editing: Justin Zhang Contents 1 1. Temporal data structure 1 4 Scribers: Oscar Moll (2012), Aston Motes (2007), Kevin Wang (2007) 1.1 Overview . 4 1.2 Model and definitions . 4 1.3 Partial persistence . 6 1.4 Full persistence . 9 1.5 Confluent Persistence . 12 1.6 Functional persistence . 13 2 2. Temporal data structure 2 14 Scribers: Erek Speed (2012), Victor Jakubiuk (2012), Aston Motes (2007), Kevin Wang (2007) 2.1 Overview . 14 2.2 Retroactivity . 14 3 3. Geometric data structure 1 24 Scribers: Brian Hamrick (2012), Ben Lerner (2012), Keshav Puranmalka (2012) 3.1 Overview . 24 3.2 Planar Point Location . 24 3.3 Orthogonal range searching . 27 3.4 Fractional Cascading . 33 4 4. Geometric data structure 2 35 2 Scribers: Brandon Tran (2012), Nathan Pinsker (2012), Ishaan Chugh (2012), David Stein (2010), Jacob Steinhardt (2010) 4.1 Overview- Geometry II . 35 4.2 3D Orthogonal Range Search in O(lg n) Query Time . 35 4.3 Kinetic Data Structures . 38 5 5. Dynamic optimality 1 42 Scribers: Brian Basham (2012), Travis Hance (2012), Jayson Lynch (2012) 5.1 Overview . 42 5.2 Binary Search Trees . 42 5.3 Splay Trees . 45 5.4 Geometric View . 46 6 6. Dynamic optimality 2 50 Scribers: Aakanksha Sarda (2012), David Field (2012), Leonardo Urbina (2012), Prasant Gopal (2010), Hui Tang (2007), Mike Ebersol (2005) 6.1 Overview . 50 6.2 Independent Rectangle Bounds . 50 6.3 Lower Bounds .
    [Show full text]
  • Gaming on Ubuntu
    Gaming On Ubuntu by iheartubuntu It's 2012 already. Lets play some games. Gaming in Ubuntu has come a long way. You no longer have to spend hours on the internet searching for games that work on Ubuntu. Nor do you need to learn distro packaging or learn how to compile programs from the terminal. It is now easy to find and install games. Great games. Lets take a look... Where to find new & breaking information about games There are several websites that offer great news & info about Ubuntu games. These websites usually will provide links to download the games and instructions on how to install. OMG! Ubuntu! http://omgubuntu.co.uk/ I Heart Ubuntu http://www.iheartubuntu.com/ Linux Games http://www.linuxgames.com/ Full Circle Magazine http://fullcirclemagazine.org/ OMG! Ubuntu! has breaking news about recently released Ubuntu games and is a great source of info. I Heart Ubuntu loves to cover legacy games like chess and backgammon. Linux Games always has up to date game info, and Full Circle Magazine has great in depth reviews of games. Where to Find Ubuntu Games There are now several places to find games that will work on Ubuntu. The Ubuntu Software Center is packed full of games to keep you busy. It's that little orange shopping bag icon on your Unity dash. The Desura.com game distribution website has high quality games available for Ubuntu. Many of the hottest games are now appearing there first. http://www.desura.com/platforms/set/linux64 Humble Bundle continues to release fresh new game content and gives you the choice of how much to spend and where to allocate your payment (to developers, to charity, etc) http://www.humblebundle.com/ Playdeb.net caters to the Ubuntu gamer and attempts to make it easy to find, browse and install Ubuntu games.
    [Show full text]