using Pipe.new instead of IO#open