Efficient Implementations of Machine Vision Algorithms Using a Dynamically Typed Programming Language

Total Page:16

File Type:pdf, Size:1020Kb

Efficient Implementations of Machine Vision Algorithms Using a Dynamically Typed Programming Language Efficient Implementations of Machine Vision Algorithms using a Dynamically Typed Programming Language Jan Wedekind A thesis submitted in partial fulfilment of the requirements of Sheffield Hallam University for the degree of Doctor of Philosophy February 2012 Abstract Current machine vision systems (or at least their performance critical parts) are predo- minantly implemented using statically typed programming languages such as C, C++, or Java. Statically typed languages however are unsuitable for development and maintenance of large scale systems. When choosing a programming language, dynamically typed languages are usually not considered due to their lack of support for high-performance array operations. This thesis presents efficient implementations of machine vision algorithms with the (dynam- ically typed) Ruby programming language. The Ruby programming language was used, because it has the best support for meta-programming among the currently popular pro- gramming languages. Although the Ruby programming language was used, the approach presented in this thesis could be applied to any programming language which has equal or stronger support for meta-programming (e.g. Racket (former PLT Scheme)). A Ruby library for performingI /O and array operations was developed as part of this thesis. It is demonstrated how the library facilitates concise implementations of machine vision algorithms commonly used in industrial automation. That is, this thesis is about a different way of implementing machine vision systems. The work could be applied to prototype and in some cases implement machine vision systems in industrial automation and robotics. The development of real-time machine vision software is facilitated as follows 1. A just-in-time compiler is used to achieve real-time performance. It is demonstrated that the Ruby syntax is sufficient to integrate the just-in-time compiler transparently. 2. VariousI /O devices are integrated for seamless acquisition, display, and storage of video and audio data. In combination these two developments preserve the expressiveness of the Ruby program- ming language while providing good run-time performance of the resulting implementa- tion. To validate this approach, the performance of different operations is compared with the performance of equivalent C/C++ programs. i Publications Refereed Journal Articles • M. Boissenin, J. Wedekind, A. N. Selvan, B. P. Amavasai, F. Caparrelli, and J. R. Travis. Computer vision methods for optical microscopes. Image and Vision Computing, 25(7):1107–16, 07/01 2007 (Boissenin et al., 2007) • A. J. Lockwood, J. Wedekind, R. S. Gay, M. S. Bobji, B. P. Amavasai, M. Howarth, G. Mobus,¨ and B. J. Inkson. Advanced transmission electron microscope triboprobe with automated closed-loop nanopositioning. Measurement Science and Technol- ogy, 21(7):075901, 2010 (Lockwood et al., 2010) Refereed Conference Publications • Jan Wedekind, Manuel Boissenin, Balasundram P. Amavasai, Fabio Caparrelli, and Jon R. Travis. Object Recognition and Real-Time Tracking in Microscope Imaging. Proceedings of the 2006 Irish Machine Vision and Image Processing Conference (IMVIP 2006), pages 164–171, Dublin City University, 2006. (Wedekind et al., 2006) • J. Wedekind, B. P. Amavasai, and K. Dutton. Steerable filters generated with the hypercomplex dual-tree wavelet transform. In 2007 IEEE International Confer- ence on Signal Processing and Communications, pages 1291–4, Piscataway, NJ, USA, 24–27 Nov. 2007 2008. Mater. & Eng. Res. Inst., Sheffield Hallam Univ., Sheffield, UK, IEEE (Wedekind et al.,a) • J. Wedekind, B. P. Amavasai, K. Dutton, and M. Boissenin. A machine vision extension for the Ruby programming language. In 2008 International Conference on Information and Automation (ICIA), pages 991–6, Piscataway, NJ, USA, 20– 23 June 2008 2008. Microsyst. & Machine Vision Lab., Sheffield Hallam Univ., Sheffield, UK, IEEE (Wedekind et al.,b) Formal Presentations • Jan Wedekind. Real-time Computer Vision with Ruby. O’Reilly Open Source Con- vention (OSCON), Portland, Oregon, USA, July 23rd 2008 (Wedekind, 2008) ii • Jan Wedekind. Computer Vision Using Ruby and libJIT. (RubyConf), San Fran- cisco, California, USA, Nov. 19th 2009 (Wedekind, 2009) • Jan Wedekind, Jacques Penders, Hussein Abdul-Rahman, Martin Howarth, Ken Dutton, and Aiden Lockwood. Implementing Machine Vision Systems with a Dy- namically Typed Language. 25th European Conference on Object-Oriented Pro- gramming, Lancaster, United Kingdom, July 28th 2011 (Wedekind et al., 2011) Published Software Packages • malloc1 • multiarray2 • hornetseye-alsa3 • hornetseye-dc13944 • hornetseye-ffmpeg5 • hornetseye-fftw36 • hornetseye-frame7 • hornetseye-kinect8 • hornetseye-linalg9 • hornetseye-narray10 • hornetseye-opencv11 • hornetseye-openexr12 • hornetseye-qt413 • hornetseye-rmagick14 1http://github.com/wedesoft/malloc/ 2http://github.com/wedesoft/multiarray/ 3http://github.com/wedesoft/hornetseye-alsa/ 4http://github.com/wedesoft/hornetseye-dc1394/ 5http://github.com/wedesoft/hornetseye-ffmpeg/ 6http://github.com/wedesoft/hornetseye-fftw3/ 7http://github.com/wedesoft/hornetseye-frame/ 8http://github.com/wedesoft/hornetseye-kinect/ 9http://github.com/wedesoft/hornetseye-linalg/ 10http://github.com/wedesoft/hornetseye-narray/ 11http://github.com/wedesoft/hornetseye-opencv/ 12http://github.com/wedesoft/hornetseye-openexr/ 13http://github.com/wedesoft/hornetseye-qt4/ 14http://github.com/wedesoft/hornetseye-rmagick/ iii • hornetseye-v4l15 • hornetseye-v4l216 • hornetseye-xorg17 15http://github.com/wedesoft/hornetseye-v4l/ 16http://github.com/wedesoft/hornetseye-v4l2/ 17http://github.com/wedesoft/hornetseye-xorg/ iv Acknowledgements First I would like to thank Bala Amavasai for his supervision, support, and his unshakable optimism. He developed a large part of the Mimas C++ computer vision library and organised the Nanorobotics grant. Without him I would not have been able to do this work. I am also very indebted to Jon Travis who has been a valuable source of help and advice when coming to the UK and while working at university. I would also like to thank Ken Dutton, Jacques Penders, and Martin Howarth for continuing supervision of the PhD, for their advice and support and for giving me room to do research work. I would also like to thank Arul Nirai Selvan, Manuel Boissenin, Kim Chuan Lim, Kang Song Tan, Amir Othman, Stephen, Shuja Ahmed and others for being good col- leagues and for creating a friendly working environment. In particular I would like to express my gratitude to Georgios Chliveros for his advice and moral support. Thanks to Julien Faucher who introduced 3D camera calibration to the research group. A special thanks to Koichi Sasada for his research visit and for the many interesting and motivating discussions. Thanks to Aiden Lockwood, Jing Jing Wang, Ralph Gay, Xiaojing Xu, Zineb Saghi, Gunter¨ Mobus,¨ and Beverly Inkson for their valuable help in applying the work to trans- mission electron microscopy in context of the Nanorobotics project. Finally I would like to thank my parents who sacrificed a lot so that I can achieve the best in my life. Without their support I would not have made it this far. A seven year part-time PhD is a long time to work and make friends. My apologies but there is just not enough room to mention you all. The work presented in this thesis was partially funded by the EPSRC Nanorobotics18 project. I also received a student bursary of the Materials and Engineering Research Institute. 18http://gow.epsrc.ac.uk/ViewGrant.aspx?GrantRef=GR/S85696/01 v Declaration Sheffield Hallam University Materials and Engineering Research Institute Mobile Machines and Vision Laboratory The undersigned hereby certify that they have read and recommend to the Faculty of Arts, Computing, Engineering and Sciences for acceptance a thesis entitled “Efficient Implementations of Machine Vision Algo- rithms using a Dynamically Typed Programming Language” by Jan Wedekind in partial fulfilment of the requirements for the degree of Doc- tor of Philosophy. Date: February 2012 Director of Studies: Dr. Martin Howarth Research Supervisor: Dr. Jacques Penders Research Supervisor: Dr. Jon Travis Research Advisor: Dr. Ken Dutton Research Advisor: Dr. Balasundram Amavasai vi Disclaimer Sheffield Hallam University Author: Jan Wedekind Title: Efficient Implementations of Machine Vision Algorithms using a Dynamically Typed Programming Language Department: Materials and Engineering Research Institute Degree: PhD Year: 2012 Permission is herewith granted to Sheffield Hallam University to circulate and to have copied for non-commercial purposes, at its discretion, the above title upon the request of individuals or institutions. THE AUTHOR ATTESTS THAT PERMISSION HAS BEEN OBTAINED FOR THE USE OF ANY COPYRIGHTED MATERIAL APPEARING IN THIS THESIS (OTHER THAN BRIEF EXCERPTS REQUIRING ONLY PROPER ACKNOWLEDGEMENT IN SCHOLARLY WRITING) AND THAT ALL SUCH USE IS CLEARLY ACKNOWLEDGED. Signature of Author vii Contents Contents viii Symbols xiii Acronyms xv List of Figures xviii List of Tables xxii Listings xxiii 1 Introduction1 1.1 Interpreted Languages...........................1 1.2 Dynamically Typed Languages.......................3 1.3 Contributions of this Thesis.........................6 1.4 Thesis Outline................................7 2 State of the Art9 2.1 Object Localisation.............................9 2.2 Existing FOSS for Machine Vision..................... 10 2.2.1 Statically Typed Libraries..................... 12 2.2.2 Statically Typed Extensions...................
Recommended publications
  • Software Optimization Guide for Amd Family 15H Processors (.Pdf)
    Software Optimization Guide for AMD Family 15h Processors Publication No. Revision Date 47414 3.06 January 2012 Advanced Micro Devices © 2012 Advanced Micro Devices, Inc. All rights reserved. The contents of this document are provided in connection with Advanced Micro Devices, Inc. (“AMD”) products. AMD makes no representations or warranties with respect to the accuracy or completeness of the contents of this publication and reserves the right to make changes to specifications and product descriptions at any time without notice. The infor- mation contained herein may be of a preliminary or advance nature and is subject to change without notice. No license, whether express, implied, arising by estoppel or other- wise, to any intellectual property rights is granted by this publication. Except as set forth in AMD’s Standard Terms and Conditions of Sale, AMD assumes no liability whatsoever, and disclaims any express or implied warranty, relating to its products including, but not limited to, the implied warranty of merchantability, fitness for a particular purpose, or infringement of any intellectual property right. AMD’s products are not designed, intended, authorized or warranted for use as compo- nents in systems intended for surgical implant into the body, or in other applications intended to support or sustain life, or in any other application in which the failure of AMD’s product could create a situation where personal injury, death, or severe property or environmental damage may occur. AMD reserves the right to discontinue or make changes to its products at any time without notice. Trademarks AMD, the AMD Arrow logo, and combinations thereof, AMD Athlon, AMD Opteron, 3DNow!, AMD Virtualization and AMD-V are trademarks of Advanced Micro Devices, Inc.
    [Show full text]
  • Motmot Documentation Release 0
    motmot Documentation Release 0 Andrew Straw June 26, 2010 CONTENTS 1 Overview 3 1.1 The name motmot............................................3 1.2 Packages within motmot.........................................3 1.3 Mailing list................................................4 1.4 Related Software.............................................4 2 Download and installation instructions5 2.1 Quick install: FView application on Windows..............................5 3 Full install information 7 3.1 Supported operating systems.......................................7 3.2 Download.................................................7 3.3 Installation................................................7 3.4 Download direct from the source code repository............................8 4 Gallery of applications built on motmot packages9 4.1 Open source...............................................9 4.2 Closed source............................................... 12 5 Frequently Asked Questions 13 5.1 What cameras are supported?...................................... 13 5.2 What frame rates, image sizes, bit depths are possible?......................... 13 5.3 Which way is up? (Why are my images flipped or rotated?)...................... 13 6 Writing FView plugins 15 6.1 Overview................................................. 15 6.2 Register your FView plugin....................................... 15 6.3 Tutorials................................................. 15 7 Camera trigger device with precise timing and analog input 25 7.1 camtrig – Camera trigger
    [Show full text]
  • AMD Accelerated Parallel Processing Math Libraries Are Software Libraries
    OVERVIEW AMD Core Math Library (ACML) provides a no-cost set of math routines for high performance computing (HPC), scientific, engineering, and related compute-intensive applications, thoroughly optimized and threaded for use on OTHER AMD PERFORMANCE AMD processors. ACML is ideal for weather modeling, computational fluid dynamics, financial analysis, oil and gas LIBRARIES applications, and more. APPML: AMD Accelerated Parallel Processing Math Libraries are FEATURES software libraries containing FFT and BLAS functions written in > 100% compatible BLAS library including all standard Level 1, Level 2, and Level 3 subroutines OpenCL and designed to run on > Highly optimized kernels for GEMM routines and other Level 3 AMD GPUs. matrix-matrix operations BLAS > Highly optimized for Level 1 BLAS vector operations AMD LibM: a software library > Support for AMD-K8TM, AMD Family 10h, AMD Family 15h and various containing a collection of basic Intel processor families math functions optimized for x86- > OpenMP support for Level 3 BLAS routines 64 processor-based machines. > Derived from Mark 22 NAG Library for SMP and Multicore LAPACK > Multithreading optimizations in many routines AMD String Library: standard > Complex, Real-Complex, Complex-Real transforms GNU C Library (glibc) string > 1D, 2D, and 3D transforms FFT functions optimized for AMD > Expert interfaces provide more control over scaling, in-place/out-of- processors. place, array layout > Optimized versions of most critical libm functions Vector Math Library Framewave Project: a collection > Scalar, Vector, and array versions of popular low-level software > 5 base generators routines beginning with simple > NAG Basic, Wichmann-Hill, L’Ecuyer, Mersenne Twister, arithmetic and extending into Blum-Blum-Shub rich domains, such as image and > 26 distribution generators Random Number Generators signal processing.
    [Show full text]
  • Unifying Fixnum and Bignum Into Integer
    Unifying Fixnum and Bignum into Integer Tanaka Akira @tanaka_akr 2016-09-08 National Institute of Advanced Industrial Science and Technology (AIST) Announcement ● Ruby 2.4 unify Fixnum and Bignum into Integer [Feature #12005] by naruse ● For Ruby programmers – Fixnum class and Bignum class are removed – 1.class and (2**100).class returns Integer instead of Fixnum and Bignum – The constants, Fixnum and Bignum, references Integer class (NameError will not occur) ● For C programmers – No internal representation change – The global constants, rb_cFixnum and rb_cBignum, are removed (compilation error will occur) – Class based dispatch doesn't work anymore Use FIXNUM_P(obj) and RB_TYPE_P(obj, T_BIGNUM) – RUBY_INTEGER_UNIFICATION macro is defined (for extension library supporting old and new Ruby) Fixnum and Bignum Ruby 2.3 has three classes to represent integers ● Integer: abstract super class – Fixnum: class for small integers – Bignum: class for big integers ● Examples – 1.class => Fixnum – (2**100).class => Bignum Integer Unification Ruby 2.4 has one class to represent integers ● Integer: concrete class ● Examples – 1.class => Integer – (2**100).class => Integer Integer Implementations The range of Fixnum varies ● 32bit CRuby (ILP32): –230 to 230–1 ● 64bit CRuby (LLP64): –230 to 230–1 ● 64bit CRuby (LP64): –262 to 262–1 ● JRuby: –263 to 263–1 The range is not portable Integer Specification ● The specification – ISO/IEC 30170:2012 Information technology -- Programming languages -- Ruby – JIS X 3017:2011 プログラム言語Ruby ● It specifies: – There is Integer class which range is unbounded – Implementation may (or may not) define subclasses of Integer – I.e. Fixnum and Bignum class are not defined (but permitted) ● Ruby 2.3 and Ruby 2.4 conforms the specification ● Conforming program should not depend on Fixnum, Bignum and their range Fixnum and Bignum is Implementation Detail ● The range of Fixnum varies Ruby program should not depend on the range for portability ● The spec.
    [Show full text]
  • Downloaded and Freely Modified to Meet Our Additional Requirements Related to Result Logging
    INVESTIGATING TOOLS AND TECHNIQUES FOR IMPROVING SOFTWARE PERFORMANCE ON MULTIPROCESSOR COMPUTER SYSTEMS A thesis submitted in fulfilment of the requirements for the degree of MASTER OF SCIENCE of RHODES UNIVERSITY by WAIDE BARRINGTON TRISTRAM Grahamstown, South Africa March 2011 Abstract The availability of modern commodity multicore processors and multiprocessor computer sys- tems has resulted in the widespread adoption of parallel computers in a variety of environments, ranging from the home to workstation and server environments in particular. Unfortunately, par- allel programming is harder and requires more expertise than the traditional sequential program- ming model. The variety of tools and parallel programming models available to the programmer further complicates the issue. The primary goal of this research was to identify and describe a selection of parallel programming tools and techniques to aid novice parallel programmers in the process of developing efficient parallel C/C++ programs for the Linux platform. This was achieved by highlighting and describing the key concepts and hardware factors that affect parallel programming, providing a brief survey of commonly available software development tools and parallel programming models and libraries, and presenting structured approaches to software performance tuning and parallel programming. Finally, the performance of several parallel programming models and libraries was investigated, along with the programming effort required to implement solutions using the respective models. A quantitative research methodology was applied to the investigation of the performance and programming effort associated with the selected parallel programming models and libraries, which included automatic parallelisation by the compiler, Boost Threads, Cilk Plus, OpenMP, POSIX threads (Pthreads), and Threading Building Blocks (TBB).
    [Show full text]
  • VSM Cover Snipe
    0808vsm_RdrsChoice_C2_final 8/14/08 11:55 AM Page 1 SPECIAL SECTION: 2008 BUYERS GUIDE 2008 Buyers Guide Readers Choice Awards 4 Product Listings 6 Third-Party Tools Put the “Rapid” in RAD 2 Project3 7/10/08 1:32 PM Page 1 Project3 7/10/08 1:33 PM Page 2 0808vsm_BGEdNote_2.final 7/24/08 2:05 PM Page 2 Editor’s Note THIRD-PARTY TOOLS BY PATRICK MEADER PUT THE “RAPID” IN RAD editor in chief Welcome to the Visual Studio Magazine 2008 Buyers Guide supplement! Every year, the editors of Visual Studio Magazine survey include anything that covers DVD- or online-based training. the third-party market of tools and services for Visual Studio We think K-Source is intriguing for several reasons, not least and compile a list of relevant products in areas that are of the because it brings the notion of suites of controls that have most interest to Visual Studio developers. This year we com- proven so popular in the VS market to the area of training. K- piled a list of more than 400 products and services across 22 cat- Source gives you the ability to package together a wide range egories (these begin on p.6).Note that you won’t see any prod- of online training subjects for your entire development team ucts from Microsoft listed in the categories; this is a survey of (see VSM’s review of K-Source on p.12 of the August issue). third-party solution providers, which by definition excludes The listings in the print version of this supplement provide Microsoft’s offerings.When compiling the list,we allow a prod- the product name,company,and a Web site for each of the prod- uct to be listed in only one category.In cases where a product fits ucts within a given category.You can find a more detailed version more than one category (and this is frequently the case), we of these listings at VisualStudioMagazine.com (Locator+ attempt to choose the closest category fit for that product.
    [Show full text]
  • Jruby: Ruby for the Java Platform
    JRuby: Ruby for the Java Platform Charles Oliver Nutter Thomas Enebo 1 Introductions: Who are we? • Charles Oliver Nutter - [email protected] • Thomas Enebo - [email protected] • Engineers at Sun, JRuby core developers • 10+ years Java experience each > Also C/C++, Win32, C#, .NET, JavaME/CLDC, Perl, LiteStep, JINI, JavaEE • Working to make Ruby a first-class JVM language • Working to make JVM a better home for dynlangs 2 Agenda • Introduction to JRuby • IRB Demo • JRuby on Rails • Simple JRuby on Rails Demo • Conclusion and Q/A 3 What Is JRuby • Started in 2002 • Ruby for the Java Platform • Open source, GPL/LGPL/CPL • Ruby 1.8.5 compatible • Easy integration with Java > Ruby can call Java, Java can call Ruby • JRuby Extras project > ActiveRecord-JDBC, GoldSpike, Mongrel... 4 JRuby 1.0 Released! • Ready for production use • Very good compatibility with Ruby 1.8.5 • ThoughtWorks offers commercial support for JRuby • Try it today! 5 Why Ruby Users Would Want JRuby • Performance improving day by day • Better scalability with native threading • Compilation to Java bytecode • Integration with Java libraries • Easier path to enterprise Ruby 6 JRuby is fast (Java 6 Server VM) ~/work/jruby $ jruby SERVER bench_fib_recursive.rb 2.071000 0.000000 2.071000 ( 2.070000) 1.234000 0.000000 1.234000 ( 1.234000) 1.372000 0.000000 1.372000 ( 1.373000) 1.372000 0.000000 1.372000 ( 1.372000) ~/work/jruby $ ruby -v ruby 1.8.5 (2006-12-25 patchlevel 12) [i686-darwin8.8.1] ~/work/jruby $ ruby bench_fib_recursive.rb 1.670000 0.010000 1.680000 ( 1.680365) 1.660000 0.010000 1.670000 ( 1.675206) ..
    [Show full text]
  • Nova.Simd - a Framework for Architecture-Independent SIMD Development
    nova.simd - A framework for architecture-independent SIMD development Tim BLECHMANN [email protected] Abstract extended to integer data and double-precision floating point types with SSE2, and literally Most CPUs provide instruction set extensions each new CPU generation added some more in- to make use of the Single Instruction Multi- structions for specific use cases1. Some ven- ple Data (SIMD) programming paradigm, ex- dors provide specific libraries, but unfortunately amples are the SSE and AVX instruction set most of them have specific restrictions, only ab- families for IA32 and X86 64, Altivec on PPC stract once specific instruction set or work only or NEON on ARM. While compilers can do lim- on a specific platform. ited auto-vectorization, developers usually have Nova.simd was designed to provide a generic to target each instruction set manually in order and easy to use framework to easily write SIMD to get the full performance out of their code. code, which is independent from the instruction Nova.simd provides a generic framework to set. It provides ready-to-use vector functions, write cross-platform code, that makes use of but also an generic framework to write generic data level parallelism by utilizing instruction vector code. It is a header-only C++ library sets. that makes heavy use of templates and tem- plate metaprogramming techniques and cur- 1 Introduction & Motivation rently supports the SSE and AVX families on Most processors provide instructions to make IA32 and X86 64, Altivec on PPC and NEON use of data-level parallelism via the Single In- on ARM.
    [Show full text]
  • Def Rubyconf Table of Contents
    Program Guide def rubyconf Table of Contents General Info 04 Meet the Team 06 Keynote Speakers 08 Daily Schedule 10 Conference Map 16 02 03 General Information WiFi Access Network: ruby Password: rubyconf Registration Speaker Lounge Monday 7:30AM-6:00PM Monday 9:00AM-5:00PM Tuesday 8:30AM-7:00PM Tuesday 10:00AM-5:00PM Wednesday 8:30AM-5:30PM Wednesday 10:00AM-3:00PM T-Shirt Pickup Lost and Found Located at Registration. Located at Registration. Monday 12:10PM-1:20PM Contact Us Tuesday 12:00PM-5:30PM [email protected] @rubyconf Wednesday 12:00PM-5:30PM 04 05 Meet the Team Barrett Clark Marty Haught Program Chair Program Chair Developer, speaker, author, and organizer. In addition to Engineering director at Fastly. Marty is heavily involved in the organizing RubyConf, he also co-organizes RailsCamp South. software community, most notably as an organizer of Barrett works at The Container Store on their e-commerce site RailsConf and RubyConf. Beyond his love for the outdoors, and related applications. Outside of work he enjoys food and music, Marty is busy raising his two children with his volunteering at his children's activities, as well as cooking and lovely wife and enjoying life. craft cocktails. Abigail Phoenix Heather Johnson Executive Administrator Event Producer Abigail (Abby) Phoenix is the Executive Administrator of Ruby Heather is the Event Producer at Ruby Central. After years of Central, which means she gets to reply to all of your lovely planning and producing trade shows, she decided to shift her emails and write the checks, which are her two favorite things focus to planning conferences and events.
    [Show full text]
  • Pragpub #023, May 2011
    The Pragmatic Bookshelf PragPubThe First Iteration IN THIS ISSUE * A CoffeeScript Intervention * Trench Warfare * Catch the Pig! * Agile Reflections * When Did That Happen? The Bright Light of Metaphor Wherein we view software development as trench warfare, but remember that a model is not Issue #23 reality. May 2011 PragPub • May 2011 Contents FEATURES A CoffeeScript Intervention .............................................................................. 14 by Trevor Burnham Trevor takes us on a tour of some of the ways this hot new language improves on JavaScript. Trench Warfare ..................................................................................................... 18 by Jared Richardson Today’s software shops are often run like WWI military operations. It’s time to get out of the trenches. Catch the Pig! ......................................................................................................... 21 by Brian Tarbox When everything is crashing down around you, sometimes the best thing you can do is to let it crash. Agile Reflections .................................................................................................... 23 by Jeff Langr, Tim Ottinger Jeff and Tim take a break from their recent articles on agile practices to reflect on their personal experiences with agile practices, and specifically extreme programming (XP). When Did That Happen? ................................................................................... 28 by Dan Wohlbruck How a hand-written document composed on a train
    [Show full text]
  • Source Code for Biology and Medicine Biomed Central
    Source Code for Biology and Medicine BioMed Central Research Open Access Motmot, an open-source toolkit for realtime video acquisition and analysis Andrew D Straw* and Michael H Dickinson Address: Bioengineering, California Institute of Technology, Mailcode 138-78, Pasadena, CA 91125, USA Email: Andrew D Straw* - [email protected]; Michael H Dickinson - [email protected] * Corresponding author Published: 22 July 2009 Received: 2 April 2009 Accepted: 22 July 2009 Source Code for Biology and Medicine 2009, 4:5 doi:10.1186/1751-0473-4-5 This article is available from: http://www.scfbm.org/content/4/1/5 © 2009 Straw and Dickinson; licensee BioMed Central Ltd. This is an Open Access article distributed under the terms of the Creative Commons Attribution License (http://creativecommons.org/licenses/by/2.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. Abstract Background: Video cameras sense passively from a distance, offer a rich information stream, and provide intuitively meaningful raw data. Camera-based imaging has thus proven critical for many advances in neuroscience and biology, with applications ranging from cellular imaging of fluorescent dyes to tracking of whole-animal behavior at ecologically relevant spatial scales. Results: Here we present 'Motmot': an open-source software suite for acquiring, displaying, saving, and analyzing digital video in real-time. At the highest level, Motmot is written in the Python computer language. The large amounts of data produced by digital cameras are handled by low- level, optimized functions, usually written in C. This high-level/low-level partitioning and use of select external libraries allow Motmot, with only modest complexity, to perform well as a core technology for many high-performance imaging tasks.
    [Show full text]
  • The Druby Book(2012).Pdf
    What Readers Are Saying About The dRuby Book The dRuby Book is a fantastic introduction to distributed programming in Ruby for all levels of users. The book covers all aspects of dRuby, including the principles of distributed programming and libraries and techniques to make your work easier. I recommend this book for anyone who is interested in distributed program- ming in Ruby and wants to learn the basics all the way to advanced process coordination strategies. ➤ Eric Hodel Ruby committer, RDoc and RubyGems maintainer dRuby is the key component that liberates Ruby objects from processes and machine platforms. Masatoshi himself explains its design, features, case studies, and even more in this book. ➤ Yuki “Yugui” Sonoda Ruby 1.9 release manager dRuby naturally extends the simplicity and power Ruby provides. Throughout this book, Rubyists should be able to enjoy a conversation with dRuby that makes you feel as if your own thoughts are traveling across processes and networks. ➤ Kakutani Shintaro RubyKaigi organizer, Ruby no Kai Any programmer wanting to understand concurrency and distributed systems using Ruby should read this book. The explanations and example code make these topics approachable and interesting. ➤ Aaron Patterson Ruby and Ruby on Rails core committer A fascinating and informative look at what is classically a total pain in the neck: distributed object management and process coordination on a single machine or across a network. ➤ Jesse Rosalia Senior software engineer The dRuby Book Distributed and Parallel Computing with Ruby Masatoshi Seki translated by Makoto Inoue The Pragmatic Bookshelf Dallas, Texas • Raleigh, North Carolina Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks.
    [Show full text]