(Lambda) Functions

Total Page:16

File Type:pdf, Size:1020Kb

(Lambda) Functions Real World Haskell main.title Page iii Monday, May 19, 2008 11:21 AM ?? EDITION Real World TomcatHaskell™ The Definitive Guide Bryan O'Sullivan, JasonJohn Goerzen,Brittain and and Ian Don F. DarwinStewart Beijing • Cambridge • Farnham • Köln • Sebastopol • Taipei • Tokyo Real World Haskell by Bryan O'Sullivan, John Goerzen, and Don Stewart Copyright © 2007, 2008 Bryan O'SullivanJohn GoerzenDon Stewart. All rights reserved. Editor: Mike Loukides Printing History: ISBN: 978---059-65149-83 1220034018 Table of Contents Why functional programming? Why Haskell? .................................... xiii 1. Getting Started ......................................................... 1 Your Haskell environment 1 Getting started with ghci, the interpreter 2 Basic interaction: using ghci as a calculator 3 Command line editing in ghci 9 Lists 9 Strings and characters 11 First steps with types 12 A simple program 15 Exercises 16 2. Types and Functions .................................................... 17 Why care about types? 17 Haskell's type system 17 What to expect from the type system 20 Some common basic types 21 Function application 22 Useful composite data types: lists and tuples 23 Functions over lists and tuples 26 Function types and purity 27 Haskell source files, and writing simple functions 27 Understanding evaluation by example 32 Polymorphism in Haskell 36 The type of a function of more than one argument 38 Exercises 39 Why the fuss over purity? 39 Conclusion 40 3. Defining Types, Streamlining Functions .................................... 41 Defining a new data type 41 v Type synonyms 43 Algebraic data types 44 Pattern matching 50 Record syntax 55 Parameterised types 57 Recursive types 58 Reporting errors 60 Introducing local variables 62 The offside rule and white space in an expression 64 The case expression 67 Common beginner mistakes with patterns 67 Conditional evaluation with guards 68 Exercises 69 4. Functional programming ................................................ 73 Thinking in Haskell 73 A simple command line framework 73 Warming up: portably splitting lines of text 74 Infix functions 78 Working with lists 79 How to think about loops 86 Anonymous (lambda) functions 101 Partial function application and currying 103 As-patterns 106 Code reuse through composition 107 Tips for writing readable code 110 Space leaks and strict evaluation 110 5. Writing a library: working with JSON data ................................. 115 A whirlwind tour of JSON 115 Representing JSON data in Haskell 115 The anatomy of a Haskell module 117 Compiling Haskell source 118 Generating a Haskell program, and importing modules 118 Printing JSON data 119 Type inference is a double-edged sword 120 A more general look at rendering 122 Developing Haskell code without going nuts 123 Pretty printing a string 124 Arrays and objects, and the module header 126 Writing a module header 127 Fleshing out the pretty printing library 128 Creating a package 135 vi | Table of Contents Practical pointers and further reading 138 6. Using Typeclasses ..................................................... 139 The need for typeclasses 139 What are typeclasses? 140 Declaring typeclass instances 143 Important Built-In Typeclasses 143 Automatic Derivation 153 Typeclasses at work: making JSON easier to use 154 Living in an open world 156 How to give a type a new identity 160 JSON typeclasses without overlapping instances 163 The dreaded monomorphism restriction 166 Conclusion 168 7. I/O .................................................................. 169 Classic I/O in Haskell 169 Working With Files and Handles 173 Extended Example: Functional I/O and Temporary Files 179 Lazy I/O 182 The IO Monad 187 Is Haskell Really Imperative? 192 Side Effects with Lazy I/O 192 Buffering 193 Reading Command-Line Arguments 194 Environment Variables 195 8. Efficient file processing, regular expressions, and file name matching .......... 197 Efficient file processing 197 File name matching 201 Regular expressions in Haskell 202 More about regular expressions 204 Translating a glob pattern into a regular expression 206 An important aside: writing lazy functions 209 Making use of our pattern matcher 210 Handling errors through API design 214 Putting our code to work 215 Exercises 216 9. I/O case study: a library for searching the filesystem ......................... 217 The find command 217 Starting simple: recursively listing a directory 217 A naive finding function 219 Table of Contents | vii Predicates: from poverty to riches, while remaining pure 221 Sizing a file safely 223 A domain specific language for predicates 226 Controlling traversal 230 Density, readability, and the learning process 232 Another way of looking at traversal 233 Useful coding guidelines 236 Exercises 238 10. Code case study: parsing a binary data format .............................. 239 Greyscale files 239 Parsing a raw PGM file 240 Getting rid of boilerplate code 242 Implicit state 243 Introducing functors 248 Writing a functor instance for Parse 254 Using functors for parsing 255 Rewriting our PGM parser 256 Future directions 257 Exercises 258 11. Testing and quality assurance ........................................... 259 QuickCheck: type-based testing 259 Testing case study: specifying a pretty printer 263 Measuring test coverage with HPC 269 12. Barcode recognition ................................................... 273 A little bit about barcodes 273 Introducing arrays 274 Encoding an EAN-13 barcode 279 Constraints on our decoder 279 Divide and conquer 280 Turning a colour image into something tractable 281 What have we done to our image? 284 Finding matching digits 286 Life without arrays or hash tables 292 Turning digit soup into an answer 296 Working with row data 299 Pulling it all together 300 A few comments on development style 301 13. Data Structures ....................................................... 303 Association Lists 303 viii | Table of Contents Maps 305 Functions Are Data, Too 307 Extended Example: /etc/passwd 308 Extended example: Numeric Types 311 Taking advantage of functions as data 320 General purpose sequences 326 14. Monads .............................................................. 329 Introduction 329 Revisiting earlier code examples 329 Looking for shared patterns 331 The Monad typeclass 333 And now, a jargon moment 334 Using a new monad: show your work! 335 Mixing pure and monadic code 338 Putting a few misconceptions to rest 340 Building the Logger monad 340 The Maybe monad 341 The list monad 344 Desugaring of do blocks 348 The state monad 350 Monads and functors 357 The monad laws, and good coding style 359 15. Programming with monads ............................................. 363 Golfing practice: association lists 363 Generalised lifting 364 Looking for alternatives 365 Adventures in hiding the plumbing 369 Separating interface from implementation 373 The reader monad 376 A return to automated deriving 378 Hiding the IO monad 379 16. Using Parsec .......................................................... 387 First Steps with Parsec: Simple CSV Parsing 387 The sepBy and endBy Combinators 390 Choices and Errors 391 Extended Example: Full CSV Parser 395 Parsec and MonadPlus 397 Parsing an URL-encoded query string 397 Supplanting regular expressions for casual parsing 399 Parsing without variables 399 Table of Contents | ix Applicative functors for parsing 399 Applicative parsing by example 400 Parsing JSON data 402 Parsing a HTTP request 405 17. Interfacing with C: the FFI .............................................. 409 Foreign language bindings: the basics 410 Regular expressions for Haskell: a binding for PCRE 413 Passing string data between Haskell and C 418 Matching on strings 426 18. Monad transformers ................................................... 433 Motivation: boilerplate avoidance 433 A simple monad transformer example 434 Common patterns in monads and monad transformers 435 Stacking multiple monad transformers 437 Moving down the stack 440 Understanding monad transformers by building one 442 Transformer stacking order is important 445 Putting monads and monad transformers into perspective 446 19. Error handling ........................................................ 451 Error Handling with Data Types 451 Exceptions 458 Exercises 466 Error handling in monads 466 20. Systems Programming in Haskell ........................................ 471 Running External Programs 471 Directory and File Information 472 Program Termination 473 Dates and Times 474 Extended Example: Piping 480 21. Using Databases ....................................................... 495 Overview of HDBC 495 Installing HDBC and Drivers 496 Connecting to Databases 496 Transactions 497 Simple Queries 498 SqlValues 499 Query Parameters 499 Prepared Statements 500 x | Table of Contents Reading Results 501 Database Metadata 504 Error Handling 505 22. Extended Example: Web Client Programming .............................. 507 Basic Types 508 The Database 508 The Parser 512 Downloading 515 Main Program 517 23. GUI Programming with gtk2hs ........................................... 519 Installing gtk2hs 519 Overview of the GTK+ Stack 519 User Interface Design with Glade 520 Event-Driven Programming 522 Initializing the GUI 522 The Add Podcast Window 526 Long-Running Tasks 527 Using Cabal 530 Exercises 531 24. Concurrent and multicore programming .................................. 533 Defining concurrency and parallelism 533 Concurrent programming with threads 534 Simple communication
Recommended publications
  • Design Statement Interior Design
    Design Statement Interior Design Sam recrystallizes his salvo singeing heartily, but sharp-tongued Gomer never effaced so betweentimes. Innumerous Chariot frill or blast-off some taenia anarchically, however julienne Traver trichinised logarithmically or settled. Igor still savors compactedly while acerous Walter craning that sheik. Its fluid and sophisticated look at the best consultant will provide the interior is so one is brought to interior design innovation, but together the stress on. Norman is adept at composing convincing personal essays in medicine, written in nursing. As air Of Houston's Top Interior Design Firms We anticipate Full Service making-key Interior Design. Its best statement interior design statements was employed for your document to? You statements designed spaces inspire. Thus, his overall dark neutral color palette will be livened up big bright with rich accents, such sound deep reds and burnt oranges. Why Is A Needs Statement Important? Statement Ceilings are Romantic and Dramatic interior design. This rule goes with accessories, too. The proposed solution and scope and goals of the solution are made clear through this statement. Interior Design Artist Statement Ms Lawson's Foundations 1. What you statements interior is basically puts your statement! Without it, you would face major obstacles and may never see the light of day. Management tool to designing which continue to know what is designed with statements showcase your post the designers. The Houzz Community recommends this professional. Download it to create stunning partitions in small room like i could this user needs and organizational skills you can be something that. Why ello Lob Jakora! We have many different types of subcontractors that we work with on a regular basis and can highly recommend.
    [Show full text]
  • An Interdisciplinary Approach
    Education of Interaction Design – an Interdisciplinary Approach Anirudha Joshi Industrial Design Centre, Indian Institute of Technology, Mumbai, India Anirudha Joshi is a faculty member at the Industrial Design Centre, IIT Mumbai. He teaches and does research in the field of Human-Computer Interaction (HCI) design. His area of research interest is interaction design for needs of developing countries like India. He also works in the area overlapping between software engineering and HCI. He has authored papers related to HCI and given talks in Indian and international conferences and journals. Anirudha conducts workshops on HCI for IT professionals and is also a consultant to several IT companies on HCI projects. Recently, he was the co-chair of the program committee of the first India HCI conference held in December, 2004 in Bangalore. Before joining IIT Mumbai, Anirudha worked in the field of interaction design for software, multimedia and the Internet. Anirudha has a BTech in Electrical Engineering from IIT Mumbai, and a Masters in Design in Visual Communication also from IIT Mumbai. Email: [email protected] The field of interaction design is multidisciplinary in nature. A professional interaction designer needs to take the central responsibility towards all creative aspects of an interactive product. This alone can ensure that well- designed interactive products will emerge with conceptual integrity that proceeds from the thinking of one mind. Education of interaction design therefore needs to be multidisciplinary. The Industrial Design Centre (IDC) in IIT Bombay has had an interdisciplinary approach towards design education for several years. The results of this approach have been very effective for the field of interaction design.
    [Show full text]
  • Hardware Architectures for Software Security
    Hardware Architectures for Software Security Joshua N. Edmison Dissertation submitted to the Faculty of the Virginia Polytechnic Institute and State University in partial fulfillment of the requirements for the degree of Doctor of Philosophy in Computer Engineering Dr. Mark T. Jones, Chair Dr. Lynn Abbott Dr. Peter M. Athanas Dr. Ezra Brown Dr. Thomas L. Martin Dr. Cameron D. Patterson June 29, 2006 Bradley Department of Electrical and Computer Engineering Blacksburg, Virginia Keywords: Security, architecture, FPGA, configurable, graph theory, information flow Copyright 2005 c , Joshua N. Edmison Hardware Architectures for Software Security Joshua N. Edmison (ABSTRACT) The need for hardware-based software protection stems primarily from the increasing value of software coupled with the inability to trust software that utilizes or manages shared resources. By correctly utilizing security functions in hardware, trust can be removed from software. Existing hardware-based software protection solutions generally suffer from utiliza- tion of trusted software, lack of implementation, and/or extreme measures such as processor redesign. In contrast, the research outlined in this document proposes that substantial, hardware-based software protection can be achieved, without trusting software or redesign- ing the processor, by augmenting existing processors with security management hardware placed outside of the processor boundary. Benefits of this approach include the ability to add security features to nearly any processor, update security features without redesigning the processor, and provide maximum transparency to the software development and distribution processes. The major contributions of this research include the the augmentation method- ology, design principles, and a graph-based method for analyzing hardware-based security systems.
    [Show full text]
  • MINUTES Board of Architecture and Interior Design the Breakers One South Court Road Palm Beach, Florida 33480 561.655.6611 July
    MINUTES Board of Architecture and Interior Design The Breakers One South Court Road Palm Beach, Florida 33480 561.655.6611 July 28, 2008 9:00 a.m. General Business Meeting Call to Order Mr. Kuritzky, Chair called the meeting to order at 9:05 a.m. Board Members Present: John Ehrig E. Wendell Hall Rossana Dolan Lourdes Solera Eric Kuritzky, Chair Mary Jane Grigsby Roymi Membiela Wanda Gozdz Joyce Shore Board Member Absent: Garrick Gustafson, unexcused Others Present: Mary Ellen Clark, Board Counsel David Minacci, Prosecuting Attorney Juanita Chastain, Executive Director Terri Estes, Government Analyst Trent Manausa Emory Johnson Dwight Chastain Bob Lamar David DeHaas Mickey Marrero Ingrid Burgos Willie Peterson Steven Mickley Board of Architecture and Interior Design July 28-29, 2008 General Business Page 1 of 27 Court Reporter: Alexandra Ramirez, Official Reporting Services, LLC, 524 S. Andrews Avenue, Suite 302N, Ft. Lauderdale, FL 33301 Disciplinary Cases Mr. Minacci requested that the board approve the following cases on a consent agenda. Settlement Stipulation Licensed DBPR vs. Oscar Benetiz Case Numbers 2006-066090 and 2007-013072 PCP: Rodriguez, Wirtz and Gustafson DBPR vs. Hugo De Ley and J Design Group, Inc. Case Numbers 2007-062663 and 2007-049107 PCP: Rodriguez, Wirtz, and Gustafson DBPR vs. William Edwin Wallace Case Number 2007-065241 PCP: Rodriguez, Wirtz, and Gustafson Unlicensed DBPR vs. Teena M. Benton and Benton Drafting and Design Case Number 2007-008550 PCP: Rodriguez, Wirtz, and Gustafson Motion: Ms. Membiela moved that the board approve the settlement stipulations as presented. Second: Mr. Hall seconded the motion and it passed unanimously.
    [Show full text]
  • Mapping the Range of User Roles in Open Development Games Projects
    Not just users: Mapping the range of user roles in open development games projects Luke Thominet Florida International University Miami, FL, USA [email protected] ABSTRACT love what you’re doing, and they’re not playing a lot, Open video game development systems provide a useful model but they might be writing fanfction, they might be for designing an engaging user experience (UX) research project. drawing, they might be doing other things, and they’re While UX research has typically framed people simultaneously as not actually just a hardcore player. [19] research subjects and users of a technology, some work has also At the 2015 Game Developers Conference, a panel of experienced problematized each of these categorizations. For instance, UX prac- developers discussed their experiences with open development titioners have questioned the framing of people as generic users, projects. In the quote above, Jamie Cheng described how partici- and participatory design has repositioned participants as co-owners pants in these projects were doing a lot more than just playing the of the results of research. This article ofers a complimentary per- game. This paper expands on this observation to review the broad spective by applying the concept of user roles to the activity of range of roles that user-participants adopt in open development participation in open development. Open development, which is the systems. prolonged process where incomplete games are publicly released Broadly speaking, open development is publicly distributing an and iterated on based on player feedback, is fundamentally a UX incomplete game, sharing information about the game develop- research process.
    [Show full text]
  • SAS/C Library Reference, Third Edition, Release 6.00 Volume 2
    SAS/C Library Reference, Third Edition, Release 6.00 Volume 2 SAS Institute Inc. SAS Campus Drive Cary, NC 27513 The correct bibliographic citation for this manual is as follows: SAS Institute Inc., SAS/C Library Reference, Third Edition, Volume 2, Release 6.00, Cary, NC: SAS Institute Inc., 1995. 623 pp. SAS/C Library Reference, Third Edition, Volume 2, Release 6.00 Copyright 1995 by SAS Institute Inc., Cary, NC, USA. ISBN 1-55544-667-1 All rights reserved. Printed in the United States of America. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, or otherwise, without the prior written permission of the publisher, SAS Institute Inc. Restricted Rights Legend. Use, duplication, or disclosure by the U.S. Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013. SAS Institute Inc., SAS Campus Drive, Cary, North Carolina 27513. 1st printing, October 1995 The SAS System is an integrated system of software providing complete control over data access, management, analysis, and presentation. Base SAS software is the foundation of the SAS System. Products within the SAS System include SAS/ACCESS, SAS/AF, SAS/ASSIST, SAS/CALC, SAS/CONNECT, SAS/CPE, SAS/DMI, SAS/EIS, SAS/ENGLISH, SAS/ETS, SAS/FSP, SAS/GRAPH, SAS/IMAGE, SAS/IML, SAS/IMS-DL/I, SAS/INSIGHT, SAS/LAB, SAS/NVISION, SAS/OR, SAS/PH-Clinical, SAS/QC, SAS/REPLAY-CICS, SAS/SESSION, SAS/SHARE, SAS/SPECTRAVIEW, SAS/STAT, SAS/TOOLKIT, SAS/TRADER, SAS/TUTOR, SAS/DB2, SAS/GEO, SAS/GIS, SAS/PH-Kinetics, SAS/SHARE*NET, and SAS/SQL-DS software.
    [Show full text]
  • Environmental Building Newstm the Leading Source for Environmentally Responsible Design & Construction
    Environmental Building NewsTM The Leading Source for Environmentally Responsible Design & Construction A Publication of BuildingGreen, Inc. www.BuildingGreen.com Volume 25, Number 5 · May 2016 How To Run a Great Workshop: 37 Tips and Ideas Whether you call it a charrette, a workshop, or simply a meeting, We’ll start off talking about what kind these suggestions from experts will make your next event more fun of mindset to bring into a workshop, and productive. then move to: • how to plan one By Tristan Roberts • what kinds of exercises to do A design team can enable real progress squeeze the life out of a room with an • some ideas for follow-up by setting aside a day or longer for agenda that feels like a forced march. a focused workshop. Or it could just You can read it from start to finish, waste a lot of high-priced time. This article is about design workshops: or skip around and pick out what’s who, what, where, when, and why. useful. You can break down barriers and My hope is that in reading it, you’ll build a functioning team if you bring pick up at least three ideas that you Whatever ideas or thoughts it sparks, together people in different roles who can’t wait to apply in your next work- or whatever feedback you have, please don’t usually get to talk with one shop—whether it’s a short internal consider sharing. There’s a flipchart another. Or you might just reinforce meeting, a half-day design exercise, or and marker (actually just a link to the existing stereotypes.
    [Show full text]
  • Design and Boundaries: Exploring the Boundary Relations Within the Context of Interactive Family-Oriented Museum Space
    1 Design and Boundaries: Exploring the Boundary Relations within the Context of Interactive Family-Oriented Museum Space John Frane, Predock_Frane Architects Hadrian Predock, Predock_Frane Architects The problem of designing family-oriented museum space is ripe with opportunities stemming from the complex matrix of relationships between the collections, curators, educational objectives, and spatial parameters. These same relationships are rife with complexities and potentially competing agendas. Our brief will focus on the edges that exist where these ideologies meet, both in terms of the dynamic design process and as it relates to the resultant architectural space of the Getty Family Room. We are fascinated with how these slippages and inherently unpredictable forces have the ability to reshape interactive environments in a positive, and sometimes negative way. The new Getty Family Room project is simple in concept – a space that introduces families to art concepts and activities. As a built work it is also quite easy to engage and occupy. However, this simplified experiential understanding veils the complex and dynamic relationships that underpin the project. The accumulated evolutionary design process of testing, learning, discarding, and saving is hidden from sight, but this invisibility is in a way a project also – one that deserves to be “exhibited,” revealed, and critiqued. In the case of the Getty Family Room, this involved an expanded field of client, consultants, specialists, and a series of nuanced negotiations across the various disciplinary boundaries. In addition, boundaries between institution and project, new and existing, and young and old become important areas to re-visit. These boundaries deserve a special focus – because the way that these edges are defined, approached, engaged, or ignored can mean radically different results for each project.
    [Show full text]
  • Kguard: Lightweight Kernel Protection Against Return-To-User Attacks
    kGuard: Lightweight Kernel Protection against Return-to-user Attacks VasileiosP.Kemerlis GeorgiosPortokalidis AngelosD.Keromytis Network Security Lab Department of Computer Science Columbia University, New York, NY, USA {vpk, porto, angelos}@cs.columbia.edu Abstract Such return-to-user (ret2usr) attacks have affected all major OSs, including Windows [60], Linux [16, 18], Return-to-user (ret2usr) attacks exploit the operating sys- and FreeBSD [19, 59, 61], while they are not limited to tem kernel, enabling local users to hijack privileged ex- x86 systems [23], but have also targeted the ARM [30], ecution paths and execute arbitrary code with elevated DEC [31], and PowerPC [25] architectures. privileges. Current defenses have proven to be inade- There are numerous reasons to why attacks against the quate, as they have been repeatedly circumvented, in- kernel are becoming more common. First and foremost, cur considerable overhead, or rely on extended hypervi- processes running with administrative privileges have be- sors and special hardware features. We present kGuard, come harder to exploit due to the various defense mech- a compiler plugin that augments the kernel with com- anisms adopted by modern OSs [52, 34]. Second, NULL pact inline guards, which prevent ret2usr with low per- pointer dereference errors had not received significant at- formance and space overhead. kGuard can be used with tention, until recently, exactly because they were thought any operating system that features a weak separation be- impractical and too difficult to exploit. In fact, 2009 has tween kernel and user space, requires no modifications been proclaimed, by some security researchers, as “the to the OS, and is applicable to both 32- and 64-bit ar- year of the kernel NULL pointer dereference flaw”[15].
    [Show full text]
  • Lecture 27: the Design of Design, Part
    The Design of Design, Part Two CSCI 5828: Foundations of Software Engineering Lecture 27 — 12/02/2014 © Kenneth M. Anderson, 2014 1 Goals • Cover material from two chapters of Parts II and III of Fred Brooks’s The Design of Design • Collaboration in Design • Rationalism versus Empiricism in Design • The other chapters touch on topics such as • Identifying the budgeted resources of a project • Why constraints are friends in design • Think Ruby on Rails => out of the box provides 80% of what you need for creating database-backed websites • The use of exemplars in design © Kenneth M. Anderson, 2014 2 Collaboration in Design • In Part 2 of the book, Brooks examines issues related to collaboration in the design process • He starts by pointing out that truly great designs are often attributed to one person or two people working together • He then contrasts this with the way in which collaboration is highlighted and encouraged in society • On one hand we are told • we need to work together to achieve great things • On the other we have the derogatory phrase • “design by committee” • The danger with collaboration is the potential loss of conceptual integrity • The challenge then is how to maintain integrity while doing team design © Kenneth M. Anderson, 2014 3 Why Has Design Shifted From Solo to Teams? • Brooks examines two forces driving the shift to collaboration in design • Technological Sophistication • The increasing sophistication of every aspect of engineering is a primary driver • Brooks cites examples of applied mathematicians performing computational fluid dynamics on a supercomputer to get the right mix of aqueous and oily components of shampoo correct • Cites how it used to be possible to keep track of progress in computer science by monitoring two conferences and two journals • Time to Market • Teams are needed to get a new design to market; a market leader can often maintain 40% of market share over the long run of a product category; with global communications, ideas spread quickly © Kenneth M.
    [Show full text]
  • Undergraduate Viewbook
    4 5 Calla Grace Fogarty Printmaking Ashley Smith Photography Becca Cahan Illustration Cady Fontana Fibers 7 Emily White Sculpture I am in love with my dogs. When you photograph someone, you are making a map of them in a way. Switch back to life and you see them in a new way. The map helps you know them, and you get more and more attached. William Wegman Alumnus Aristide Little-Lex Architectural Design 9 There is an edge to every creative domain where new things are unfolding. It’s sloppy, dynamic—and this is important—wide open for reworking and reinvention. That’s always where the action is. And it’s where you’ll find the best, smartest people at play. Brian Collins Dana DiPlacido Jewelry and Metalsmithing Alumnus Quinn Gorbutt Photography Mishal Kizilbash Fashion Rachel Harmon Fashion 10 11 William Vanaria Jewelry Metalsmithing Shane Maxwell Fashion Design Kira Maintanis Art Education Katharena Rentumis Glass Laura Podlovits Jaklitsch Jewelry and Metalsmithing Daniel J. Foster Photography Paige Peterson Studio for Interrelated Media 12 13 Erin Shaw Fibers The years I spent at Mass Art immersed in learning gave me the necessary tools I needed to become a confident designer and take risks to find my voice. Kelly Wearstler AlumnA Breanne Gustafson Painting 14 15 Ian Deleon Studio for Interrelated Media Andrew Meyer Ceramics Erik Michel Lund Graphic Design Cherry Au Illustration Molly Stone Illustration 16 17 We promise not to throw too many Instead, we’re going to tell you facts at you like square footage Not the of studio space.
    [Show full text]
  • Designing Brand Identity
    Designing Brand Identity Cover design: Jon Bjornson This book is printed on acid-free paper. Copyright © 2013 by Alina Wheeler. Published by John Wiley & Sons, Inc., Hoboken, New Jersey. Published simultaneously in Canada. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning, or otherwise, except as permitted under Section 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, Inc., 222 Rosewood Drive, Danvers, MA 01923, 978-750-8400, fax 978-646-8600, or on the web at www.copyright.com. Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, 201-748-6011, fax 201-748-6008, or online at http://www.wiley.com/go/permissions. Limit of Liability/Disclaimer of Warranty: While the publisher and author have used their best efforts in preparing this book, they make no representations or warranties with the respect to the accuracy or completeness of the contents of this book and specifically disclaim any implied warranties of merchantability or fitness for a particular purpose. No warranty may be created or extended by sales representatives or written sales materials. The advice and strategies contained herein may not be suitable for your situation. You should consult with a professional where appropriate. Neither the publisher nor the author shall be liable for damages arising herefrom.
    [Show full text]