Jay Fields' Thoughts
experiences in software development
Testing / QARuby / RailsLisp / Clojure / SchemeEngineering management / careersEngineering blogs
- Posts
- 570 from 6 Mar 2005 to 17 May 2017
- Posting
- quiet since 2017
- Kind
- personal blog
- Feed
- http://feeds.feedburner.com/jayfields/mjKQ
2017 1
2016 2
2015 7
2014 8
2013 17
- Coding: Increase Your Reading and Writing Speed
- Clojure: Combining Calls To Doseq And Let
- Emacs Lisp: Font Lock for Clojure's Partial
- Clojure: Testing The Creation Of A Partial Function
- Recovering Lost Post Data
- Emacs Lisp: Toggle Between a Clojure String and Keyword
- Year Five
- Clojure: Expectations, Customize your Test Running Context
- Being a Lead Consultant
- Emacs Lisp: Find Java Sources
- Clojure: Expectations Ignore A Variable Number Of Args In An Interaction Test
- Clojure: Expectations Interaction Tests For Java Objects
- Synchronizing Snapshots and Incrementals With Single Threading
- Clojure: Expectations Verify Interaction Args
- Clojure: Expectations Interactions - Interactions Are Code, Interactions Are Data
- Clojure: Expectations Warn On State Change During Test Runs
- Clojure: Expectations Before Run Hook
2012 45
- Clojure: Converting scenarios With Interleaved expect Calls To Bare expectations
- Elisp: Duplicate Line
- Elisp: Automated Switching Between Clojure Test and Source Files
- Elisp: Grep in Clojure Project
- Clojure: Deprecating expectations.scenarios
- Clojure: Using given & expect To Replace scenarios
- Clojure: Use expect-let To Share A Value Between expected And actual
- Clojure: Freezing Time Added To expectations
- Clojure: Interaction Based Testing Added To expectations
- Clojure: redef-state Added To expectations
- Java: Add A Println To A 3rd-Party Class Using IntelliJ's Debugger
- clojure: lein tar
- Clojure: Avoiding Anonymous Functions
- Clojure: Refactoring From Thread Last (->>) To Thread First (->)
- Replacing Common Code With clojure.set Function Calls
- emacs lisp: removing a lamba hook
- 8 Linux Commands Every Developer Should Know
- Sharing Blog Example Code
- Reading Clojure Stacktraces
- Clojure: Production Web REPL
- Signs That Your Project Team Might Be Too Large
- organizing a speakerconf
- trust at speakerconf
- So, You Dropped Out of College
- scheduling, travelling to, and dining at speakerconf
- Clojure: name function
- speaking at speakerconf
- a typical day at speakerconf
- Clojure: expectations & with-redefs
- The Single Best Thing For My Career
- Is Productivity Killing Your Creativity?
- Clojure: Freezing Time in expectations
- Clojure: expectations, colorized
- Killing IntelliJ Launched Processes
- sidenum function
- jQuery find function
- How I Open Source
- Agile Development with Clojure
- Follow-up Thoughts on Aligning Business & Programmer Goals
- Clojure: Conditionally Importing
- Eval a Clojure Snippet in Java
- When to Break Apart your Application
- Aligning Business & Programmer Goals
- How To Get Invited To speakerconf
- Lessons Learned while Introducing a New Programming Language
2011 36
- Convert java.util.Properties to a Clojure Map
- Clojure & Java Interop
- Clojure: expectations - scenarios
- Clojure: expectations unit testing wrap-up
- Clojure: expectations - removing duplication with given
- Clojure: expectations and Double/NaN
- Clojure: expectations with values in vectors, sets, and maps
- Clojure: Non-equality expectations
- Clojure: expectations Introduction
- Recent Thoughts On Hiring and Being Hired
- Life After Pair Programming
- Clojure: Check For nil In a List
- Clojure: partition-by, split-with, group-by, and juxt
- Clojure: Apply a Function To Each Value of a Map
- Clojure: memfn
- The High-Level Test Whisperer
- Individuals Over People
- Undervalued Start and Restart Related Questions
- Clojure: Get All Nested Map Values (N levels deep)
- Clojure: Converting a Java Object to a Clojure Map
- Clojure: State Management
- Readable Clojure Without a Java Equivalent?
- Types of Technical Debt
- Random Thoughts on Good Programmers and Good Code
- Clojure: Eval-ing a String in Clojure
- Clojure: if-let and when-let
- Clojure: Truthy and Falsey
- The Impact of Accidental Complexity on Estimates
- The President and the CEO of an Application
- Clojure: Web Socket Introduction
- Clojure: &env and &form
- Compatible Opinions on Software
- Clojure: Using Java Inner Classes
- Clojure: fnil
- Clojure: partial and comp
- Clojure: select-keys, select-values, and apply-values
2010 16
- Clojure: get, get-in, contains?, and some
- Taking a Second Look at Collective Code Ownership
- Experience Report: Feature Toggle over Feature Branch
- Clojure: Flatten Keys
- Clojure: Another Testing Framework - Expectations
- Clojure: Mocking
- Clojure: Using Sets and Maps as Functions
- clojure.test Introduction
- Clojure: Destructuring
- Clojure: Composing Functions
- High Level Testing with a High Level Language
- Sacrificing some IDE capabilities
- Clojure: Converting a Custom Collection to a Sequence
- Pairing isn't the Solution
- Shorter Syntax for Creating Stubs with Mockito
- The Maintainability of Unit Tests
2009 22
- Presenting Lessons I've Learned
- Polyglot World
- Refactoring: Ruby Edition available.
- Pressure, Expressed in Initial Development Time
- Staying Current: A Software Developer's Responsibility
- Macros Facilitate Expressive Code
- More Trust, Less Cardwall
- Programmer Confidence and Arrogance
- Java: Method Chain with Snippet
- Freezing Joda Time
- Developer Testing: Welcome to the Beta Test
- Mockito non-hamcrest any matcher
- Calling Clojure from Java
- Kill Your Darlings
- Retrospective Trust Level
- Continual Retrospective
- Thoughts on Developer Testing
- Questions To Ask an Interviewer
- The Fowler Effect
- Creating Objects in Java Unit Tests
- The Cost of Net Negative Producing Programmers
- Things to dislike about Java
2008 91
- Targeted Languages
- Ubiquitous Assertion Syntax
- Specialize in Something Relevant
- Language Specialization
- Testing Dynamic Web Applications
- When To Retire Your Brand
- Is Distributed Development Viable
- Refactoring: Ruby Edition available on Safari
- Domain Specific Languages don't follow the Principle of Least Surprise
- Ruby: Recording Method Calls and Playback With Inject
- Passionate, Not Dogmatic
- Great Developers Are Hard To Find, Regardless of Language
- Lean Software Development
- Be Your Start-Up
- Elitist or Optimist
- The Elephant in the Server Room
- Civics not Cadillacs
- Refactoring: Ruby Edition available on Amazon
- Developers needed; Hackers need not apply
- StackOverflow.com Podcast: Subscribe for Education, Stay for Entertainment
- Ruby: Dwemthy's Array using Modules
- Ruby: Underuse of Modules
- Move Mail.app RSS Feeds to NetNewsWire
- ActionScript: Literal XML
- Ruby: Redefine Method Behavior Conditionally
- Ruby: Move a Method from a Class to a Module Definition
- Speaking: QCon San Francisco 2008
- Speaking: RailsConf Europe 2008
- Speaking: Rails Summit Brazil 2008
- ActionScript: Calling a function by name
- The Immaturity of In Browser Testing
- Windows, C#'s Achilles' heel
- Agile: User Story Estimation Techniques
- The Simplest Thing That Could Possibly Work
- Flex: Expert Developers Needed
- Flex: Anonymous Classes as Test Stubs
- Flex: The State of Testing
- Immaturity of Developer Testing
- Developer Testing and the Importance of Context
- Flex: Objects in Views
- ActionScript: The difference between Object and * (an asterisk)
- An Argument for RIA
- Testing: The Value of Test Names
- Speaking: Manchester GeekNight
- ActionScript and Essence vs Ceremony
- Testing: Duplicate Code in Your Tests
- Using Stubs to Capture Test Essence
- Software Development Lessons Learned From Poker
- Understanding Why
- Story 9: Display Customer Support Number
- Splitting your Rails Test Suite
- Extend modules instead of defining methods on a metaclass
- Alternatives for redefining methods
- Domain Specific Language Simplexity
- The Language Question
- Example Dilemma
- Ruby: inject
- Testing Anti-Pattern: Metaprogrammed Tests
- Ruby: Replace Temp with Chain
- Ruby: Isolate Dynamic Receptor
- Move eval from Run-time to Parse-time
- Ruby: expectations gem version 0.2.3
- Ruby: Replace method_missing with dynamic method definitions
- Ruby: Dynamically Define Method
- Pair Programming all the time
- Ruby: Inline Rescue
- Ruby: Creating Anonymous Classes
- Rake: Task Overwriting
- Shared Ruby Code
- Implementing an internal DSL in Ruby
- Pair Programming thoughts
- Tests reflect code quality
- Testing: Expect literals
- Designing a Domain Specific Language
- ThoughtWorks DSL Podcast (part 2)
- Subversion: Rolling back revisions
- Static typing considered harmful
- Behavior Based Testing
- State Based Testing
- Ruby: Did TDD make Ruby a viable option?
- Testing: Mocha's stub_everything method
- Testing: High Implementation Specification Smell
- Testing: One expectation per test
- Challenge Leaders
- Write Only Ruby
- You don't need to be better to do Ruby
- Ruby/Rails Conferences
- Werewolf is the best conference session
- Ruby: Staying Current
- Ruby: Hash#to_mod
- Rails: Changing application.rb to application_controller.rb
2007 135
- Refactoring Motivations
- Speaking: QCon London
- Ruby: arbs 0.1.0 released
- Ruby: expectations gem
- Avoiding costly typos
- Using patch as a subversion stash
- Rails: Route Globbing
- Is being a niche language developer good for your career?
- Advanced Rails Recipes
- When not to pair
- Utilizing Ruby and Linux
- ThoughtWorks DSL Podcast
- Ruby: Time::is
- Rails: Enumerable#sum
- Rails: Enumerable#group_by
- Ruby: Testing Private Methods
- Rails: Enumerable#index_by
- Rails: Integer#even?
- Rails: String#each_char
- Rails: Hash#diff
- Despised Software Luminaries
- Rails: String#constantize
- Rails: String#classify
- Rails: String#singularize
- Validatable 1.6.6 released
- Rails: String#pluralize
- Rails: String#camelize
- Rails: Hash#assert_valid_keys
- Rails: Array#to_sentence
- 2 weeks of ActiveSupport
- Erlang Interest
- Rails: Unit Test without Rails
- DSL interview
- Ruby: Defining Class Methods
- Rails: Rise, Fall, and Potential Rebirth of the Presenter Pattern
- Extending Rails
- Ruby: PORO
- Ruby: Convention is Important
- Rails: Maintainable Code
- Is it better than TextMate? (Ruby IDE redux)
- Speaking: QCon San Francisco
- Are Screencasts the Future?
- Learning Rails is Easy, Mastering Rails is Hard
- Ruby: Trivial Debugger Implementation
- Semi-bluffing your interview
- Testing: Frameworks are evolving
- Rails: Where do you require?
- RailsConf Europe 07: Presenter Links
- Uninterested Pair
- Distracted Pair
- Ruby: Array#collect_with_remaining
- Ruby: Array#chunk
- Rails: Testing Controllers
- Security Myth: Generic Login Error
- Ruby: Creating Custom Assertions
- Rails: How we test
- Ruby: Adding a "not" method for readability
- Ruby: Calling methods of a specific ancestor
- Importance of Time
- Mac OS-X: Disk Inventory X
- Ruby: State pattern using Modules and Facets
- Ruby: Facets
- Ruby: initialize_with
- Blogs I Read
- RubyGems: Dust
- Eagerly Initialized Attribute
- Ruby: Lazily Initialized Attributes
- Ruby: operator precedence of && and = (which also applies to || or)
- Spellchecking Pair
- Agile: Estimating
- Ruby: Multiple ifs (unless)
- Stories are Placeholders not Buckets
- Ruby: Metaprogrammatically defining methods
- My Job Went to India
- Team Size
- iPhone: Layout View Email and AirPort Music
- iPhone: Messaging
- iPhone: Gmail for your domain
- My iPhone
- The next big language
- Reading technical books
- RailsConf Europe 2007: Presenter Pattern
- Testing: Inline Setup
- Testing: One assertion per test
- Testing: Replace Mock with Stub
- Testing: When are Unit tests enough?
- Testing: Unit Test or Functional Test
- Testing: Replace Collaborator with Stub
- Testing: Refactoring Examples
- TextMate: Required Reading
- Ruby: method_missing alternatives
- RailsConf07: Testing Presentation
- Law of Demeter: Canary in a coal mine
- Ruby: Unit testing delegations
- RailsConf 2007 Presentation
- Ruby: Validatable Tests
- Ruby: Validatable 1.2.2 released
- DSL: Expressive Software
- Ruby: Class Methods
- Ruby: Assigning instance variables in a constructor
- Ruby: Mocks and Stubs using Mocha
- Blogging: Blog as a skills assessment
- Ruby: Default method arguments to instance variables
- Rails: Use Ruby Schema syntax without using Migrations
- Rails: Generating an Oracle DDL without Oracle installed
- Ruby: [Anti-pattern] Extract Module to shorten Class Definition
- Rails: ActiveRecord Unit Testing part II
- Ruby: === operator
- Should Rails include Mocha?
- Rails: ActiveRecord Serialize method
- Ruby: sqldsl 1.4.0 released
- Rails: Presenter Pattern
- Ruby: LocalJumpError workaround
- Ruby: Why sqldsl?
- Ruby: instance_eval and class_eval method definitions
- Conferences: Presenting at GoRuCo
- Blog: New Url
- Rails: Clean up Controller Tests
- Ruby: sqldsl new version
- Rails: Presenters - An additional layer alternative.
- Rails: Unit Testing Update
- Rails: Acceptance Testing
- TDD: Removing test noise
- Ruby Evaluation options article on InfoQ
- Ruby: Validatable
- Ruby: Forwardable addition
- Ruby: Invoking a method with a ampersand-parameter
- Class Reopening Hints
- Class Definitions
- Adding Validations to any Class
- Appending to ERB output from a block declaration
- Another Rails Presenter Example
- Ruby: Refactoring - a First Example
- Ruby: Refactoring, Ruby Edition
- Rails: Enterprise Ready
2006 130
- Rails: Unit Testing ActiveRecord Validations
- Rails: ActiveRecord Unit Testing
- Rails: Migrations with a large team part I
- Ruby: Alias method alternative
- Ruby: Multiline strings - here doc or quotes
- Ruby: Constant values
- Rake: db:migration:conflict
- Ruby: rake commit
- BNL: New location
- Rails: Plugins, Why?
- Ruby: instance and class methods from a module
- Ruby: Use class methods to reduce duplication
- Rails: Running migrations in another environment
- Rake: --dry-run, --trace, and -T
- BNL: Extracting Sales Person
- xUnit: Absence of Mocks and Stubs
- Ruby: Protected class methods
- RubyGems: Absolute Paths
- Ruby: Testing Rake Tasks
- BNL: Common Pieces
- BNL: Limitations
- Rails: Get the schema_info version number from Rake
- Rails: Textmate Footnotes
- Rails: Generate SQL from Migrations
- BNL: Moving to the web and multiple contexts - Update
- Story Card Format
- Rails: Autoloading Gems in Vendor
- BNL: DRY code, DAMP BNL - Update
- Rails: Loading mock data
- BNL: The Solution - Update
- Ruby Regular Expression Replace
- Rake: Tasks with parameters
- BNL: The Problem - Update
- BNL: Introduction - Update
- Ruby Project Tree
- RubyGems: shared Ruby code
- Rails Model View Controller + Presenter?
- Remove Subversion from a tree
- Test::Unit test creation
- Ruby Stub Variations: Stubba
- Ruby Form Template Method Using Extend
- A Ruby DSL for generating SQL
- Ruby Stub Variations: Struct
- Ruby Stub Variations: TestStub
- Ruby Stub Variations: OpenStruct
- Ruby Stub Variations
- Ruby instance_exec aka instance_eval with parameters
- Ruby Asserting Equality with True
- Alternative Story Card Format
- Ruby/Rails Unit Testing in less than 1 second
- Ruby Unit Test Parameters
- Use Ruby Class Methods to Remove Duplication
- Sync your Samsung phone with your Mac Address Book using Bluetooth
- Removing kind_of? and is_a? from your code
- Alternative to Dependency Injection
- BNL 05 - Multiple Contexts
- BNL 04 - DAMP BNLs
- BNL 03 - The Solution
- BNL 02 - The Problem
- BNL 01 - Introduction
- Business Natural Language material
- Redefine DateTime.now for consistent test results
- Configuration File Demise
- Quality Assurance
- Ruby Array and Hash frozen behavior
- Ruby eval with a binding
- Pre-Commit Rake Task
- Ruby Block Scope
- Ruby Continuous Integration
- Business Natural Language
- Ruby on Rails Unit Tests
- Ruby convert Time to Date
- Use erb to insert dynamic text
- OpenStruct freeze behavior
- Ruby TestStub
- Ruby IDE
- More Test Driven Development observations
- Some Test Driven Development observations
- Ruby Kernel system, exec and %x
- Ruby on Rails and Database Standards
- Use class methods for stubs
- Ruby Stunt Double
- Practical Ruby
- Pair Programming Anti-Patterns
- Ruby extend and include
- Law of Demeter and Forwardable
- Syntax Checking an internal DSL
- Hiding the Parenthesize Warning in Ruby
- Apple in Detail
- Developing Ruby in TextMate
- DRY code, DAMP DSLs
- Executing an internal DSL in multiple contexts
- IntelliJ Ruby Syntax Highlighting Plugin
- Setting up a printer
- Why do *YOU* like Ruby?
- Hacking IntelliJ for syntax highlighting
- Ruby Initialization Chain Module
- Execute Ruby Tests in IntelliJ
- Rails schema cloning
- Migration Class and File naming
- Become a Ruby developer in 30 days or less
- Ruby Attribute Initializer
- Ruby Delegation Module
- GUI Patterns
- Execute all Test::Unit tests in a directory
- Add dependency support to custom rake tasks
- Rake Tutorial
- Initialization Chain
- Creating an interface for testing
- .norm find collection usage
- .norm object graph future
- .norm find usage
- .norm version 0.2
- .norm delete usage
- Where Fluent Interface part II
- Using Fluent Interface
- .norm update usage
- .norm insert usage
- .norm version 0.1 released
- Use stubs and mocks to convey intent
- Use delegates to replace repeated guard clauses
- I prefer Rake to NAnt (#4)
- Rake NUnit Task
- I prefer Rake to NAnt (#3)
- Moving from NAnt to Rake
- Fragile Development
- I prefer Rake to NAnt (#2)
- I prefer Rake to NAnt (#1)
- NAnt exec: add quotes to commandline
- Trust Visibility
2005 60
- Returning an Id from SQL Server
- Flexibility Cost
- NAnt exec: arg || commandline
- Functional Testing using a DSL and NUnit
- Simian IgnoreBlocks
- Improving Brittle Functional Tests
- Unit Test Guidelines
- What's in your build?
- Adding NanoContainer
- Adding PicoContainer
- MVP and Dialog
- Smart Client Development Part IV
- Smart Client Development Part III
- Smart Client Development Part II
- Smart Client Development Part I
- C# Public Readonly Fields
- Logging == Crutch
- Attribute usage
- Rake Hurdles
- Rails in School
- Commit from a build file
- Rake execution
- Rake Experiences Continue
- Controlling Subversion with Ruby and irb
- Ruby C# Project File parser (CSProjFile)
- Add Events to NMock
- Adding an Embedded Resource to a csc command line compiled assembly
- Using Rake for building and testing .net applications
- Testing View Observer Using Stubs
- Testing Events in C#
- View Observer
- SetUp and Teardown are still not good
- Declaration of event accessors.
- Notification without Flood
- Focus on readability and avoid being SetUp
- Firing Silver Bullets
- Agile Web Development with Rails
- Controlling Subversion with Ruby and the command line
- What are you testing?
- UI Driven Service Layer Development
- Coding standard election
- Do you #region?
- NCover Code Coverage Tool
- www.TextDrive.com
- Technology vertical
- When 1 + 1 != 2
- Technology evolution hides incompetence
- Software development companies will prevail
- Tasc Unit Testing Pattern
- Error Eventing Pattern
- Null Coalescing Operator in C# 2.0
- Using MSBuild (from Visual Studio 2005 April CTP) with a solution file (.sln)
- My introduction to Ruby
- File System Web Site reference issues in Visual Studio 2005 February CTP
- Clean unit tests with anonymous methods
- Accessing Private Members in C#
- Development in Visual Studio 2005 February CTP
- Dependency Injection, Pico Container, and Good Citizens
- Pragmatic Version Control using Subversion
- Patterns of Enterprise Application Architecture