Keeping your deps tidy

  • IPOs, 101
  • A magic trick
  • R&R
  • P.T. Barnum on salary vs. equity
  • My favorite benefits that more companies should offer
  • BizSpark
  • What’s next?
  • The next great frontier in ML: dogs in hats
  • Keeping your deps tidy
  • GitHub notification… notifier
  • Life hacks
  • How to Skylark – the class
  • Stamping your builds
  • Using secrets with Google AppEngine
  • Low-fat Skylark rules – saving memory with depsets
  • 9 years of blogging have totally been worth it
  • Aspects: the fan-fic of build rules
  • That’s senior programmer to you, buddy
  • The Haunted Homesteader
  • Recruiting review
  • Using AutoValue with Bazel
  • You do you
  • Snail Spam
  • Four alternative debugging techniques
  • Compilation à la mode
  • The Mixed-Up Directories of Mrs. Bazel E. Frankweiler
  • Custom, locally-sourced output filenames
  • Using environment variables in Skylark repository rules
  • Resting BUILD face
  • Communicating between Bazel rules: how to use Skylark providers
  • Collecting transitive runfiles with skylark
  • Startup idea #6ec4e42a-28cc-4425-9ebc-61ac8e224580: Adventurer’s gear for geeky hikers
  • Using a generated header file as a dependecy
  • Operation: Crappy Sewing Machine commences
  • New dog blog
  • configure: error: lib_i_don’t_care_about.so not found.
  • JoCo Cruise 2016: a misanthrope’s perspective
  • Star Trek invades our timeline
  • Flag-Friday: debugging tests with –java_debug
  • Saving the (prod) environment
  • Combining projects without converting to a monorepo
  • Non-technical advice for startups and open source projects
  • One weird trick for fast CI
  • Creating a javadoc rule for Bazel
  • Build, y u go slow?
  • Debugging flaky tests with Bazel
  • The Return of the Scala Rule Tutorial: The Execution
  • Tutorial: how to write Scala rules for Bazel
  • Trimming the (build) tree with Bazel
  • Positive reinforcement learning through barbacoa
  • New radio in town
  • Pain-free OAuth with AppEngine
  • API changes with extra cheese, hold the fear
  • Have you ever looked at your build? I mean, really looked at your build?
  • Hello, Bazel
  • Making wedding rings
  • Laptops are getting smaller all the time
  • Teaching CS
  • Sharing Programming
  • I will gladly write a test Tuesday for a program today
  • Innards of Tar
  • TEALS – Teaching CS on your way to work, part 2
  • Mestre Boneco’s Training Sequences
  • TEALS – Teaching CS on your way to work
  • Hello, Digital Ocean!
  • Makin’ Mazes
  • Update Your Feeds
  • Fixing CSS antialiasing on Chrome
  • Glupdate
  • Game Jam Resource List
  • Hello, Glass
  • Davy Jones’ Freezer
  • Getting Better All the Time via Code Review
  • Scratches & Bruises
  • User Support
  • The High Ground in Low Country
  • The Little Volcano that Could
  • MongoSF
  • The Joy of Programming
  • Speed Mentoring
  • Encouraging Female Programmers, Even the Redheads
  • How to Succeed in CS Without Really Trying
  • Velocity 2013
  • Using Visual “APIs”
  • The Professor, the Interviewer, and the Coworker
  • Smart Pointers and Heirloom Underpants
  • The Rise of Big Data
  • Upcoming Hackathons
  • Edutainment
  • Ludum Dare
  • Hello, Lumpy World!
  • The Basics of Signal Handling
  • Labeling Git Branches
  • Music Gremlins is Approved!
  • It’s turtles all the way down
  • Adding an Assertion Macro in Objective-C
  • MongoDB: The Definitive Guide 2nd Edition is Out!
  • First Two Weeks at Google
  • Stock Option Basics
  • Recruiting in all the wrong places
  • Programming a State Machine
  • Mad Art Skillz
  • Finished The Definitive Guide
  • Databases & Dragons
  • The Google Interviews
  • Guide to Tech Interviews
  • Goodbye 10gen, Hello Google
  • Intro to Fail Points
  • MongoDB Puzzlers #1
  • Humans are difficult
  • Introducing Noodlin – A Brainstorming App
  • MongoDB changing default: now write errors are reported
  • TDG Update
  • Got any advice?
  • How MongoDB’s Journaling Works
  • Go Get a Hot Water Bottle
  • ––thursday #7: git-new-workdir
  • How to Make Your First MongoDB Commit
  • A Neat C Preprocessor Trick
  • Call for Schemas
  • Git for Interns and New Employees
  • Controlling Collection Distribution
  • Summer Reading Blogroll
  • Replica Set Internals Part V: Initial Sync
  • Good Night, Westley: Time-To-Live Collections
  • The Snail Crawls On…
  • ––thursday #6: using git over ssh
  • Replica Set Internals Bootcamp Part III: Reconfiguring
  • 10 Kindle Apps for the Non-Existent Developer API
  • ––thursday #5: diagnosing high readahead
  • Replica Set Internals Bootcamp Part IV: Syncing
  • Night of the Living Dead Ops
  • ––thursday #4: blockdev
  • ––thursday #3: a handy git prompt
  • Debugging Sexism
  • ––thursday #2: diff ‘n patch
  • ––thursday #1: screen
  • Replica Set Internals Bootcamp: Part II – Creating a Set
  • git-oh-$#!†
  • The Comments Conundrum
  • Hacking Chess: Data Munging
  • Hacking Chess with the MongoDB Pipeline
  • And now, for something completely different
  • Replica Set Internals Bootcamp: Part I – Elections
  • Popping Timestamps into ObjectIds
  • SQL to MongoDB: An Updated Mapping
  • On working at 10gen
  • Getting Started with MMS
  • More PHP Internals: References
  • Playing with Virtual Memory
  • PHP Extensions Made Eldrich: Classes
  • PHP Extensions Made Eldrich: PHP Variables
  • PHP Extensions Made Eldrich: Hello, World!
  • PHP Extensions Made Eldrich: Installing PHP
  • PS1++
  • Mongo in Flatland
  • NoSQL vs. the world
  • A finite simple group of order two
  • Simulating Network Paritions with mongobridge
  • Trying Out Replica Set Priorities
  • The Scripting Language of Databases
  • Lorenz University: I can has degree?
  • Implementing Replica Set Priorities
  • “Scaling MongoDB” Update
  • Resizing Your Oplog
  • Enchiladas of Doom
  • My Life is Awesome
  • A Short eBook on Scaling MongoDB
  • Why Command Helpers Suck
  • How to Use Replica Set Rollbacks
  • How to Choose a Shard Key: The Card Game
  • Wireless dongle review
  • Setting Up Your Interview Toolbox
  • How I Became a Programmer
  • Firesheep: Internet Snooping made Easy
  • Bending the Oplog to Your Will
  • How not to get a job with a startup
  • Getting to Know Your Oplog
  • Replication Internals
  • Scaling, scaling everywhere
  • Writing MongoDB: The Definitive Guide
  • Choose your own adventure: MongoDB crash recovery edition
  • Oh, the Mistakes I’ve Seen
  • A Quick Intro to mongosniff
  • Return of the Mongo Mailbag
  • History of MongoDB
  • If it quacks like a RDBMS…
  • Buying an Mahattan Co-op
  • Sharding and Replica Sets Illustrated
  • Part 3: Replica Sets in the Wild
  • Replica Sets Part 2: What are Replica Sets?
  • Replica Sets Part 1: Master-Slave is so 2009
  • MongoDB backups & corn on the cob in 10 minutes
  • Managing your Mongo horde with genghis-khan
  • I Never Thought I’d Be On a Book
  • Large Hadron Collider Using MongoDB
  • With a name like Mongo, it has to be good
  • There must be 50 ways to start your Mongo
  • Once and Future Presentations
  • Sharding with the Fishes
  • Happy Belated Ada Lovelace Day!
  • MapReduce – The Fanfiction
  • Bug Reporting: A How-To
  • Sleepy.Mongoose: A MongoDB HTTP Interface
  • MongoDB Survey Results
  • “Introduction to MongoDB” Video
  • St. Clementine’s Day
  • Mongo Mailbag #2: Updating GridFS Files
  • FOSDEM: Some Pictures
  • FOSDEM
  • Mongo Mailbag: Master/Slave Configuration
  • Washington DC
  • MongoDB PHP Driver 1.0.3 Release
  • Upcoming Talks
  • Mongo Just Pawn in Game of Life
  • Public Speaking: The Prequel
  • NoSQL Trolls
  • Public Speaking
  • Installing Linux on a MacBook Air
  • Five Worst Places for Mosquito Bites
  • Foz do Iguacu
  • Replacing $ in the MongoDB PHP Driver
  • Testing MongoDB Replica Pairs with Perl
  • Final Days in CA
  • Reading in San Francisco
  • Adventures in Ramen
  • I’m going to Brazil!
  • OSCON
  • Soccer: No Slimy GirlS Allowed!
  • How do you make the web reliable?
  • CouchDB vs. MongoDB Benchmark
  • Because we are the Mutha Flippin Win
  • Revisionist history
  • PHP Extension Wiki
  • From Russia with Bugs
  • Get on the bus, Gus
  • Got Mongo Working on Hostmonster!
  • VM of Death and Doom from Hell
  • Another comic
  • Zen and the Art of Sewing Machine Matinence
  • Slug Sex
  • #1 Google Result!
  • Soup and Circus
  • And an irrational number of closets
  • RSS Idea
  • New comic up!
  • phpdoc hell
  • Pain in my CVS
  • Nifty Flash Thing
  • Downloading the Archives
  • Archive for the 'Bazel' Category

    Keeping your deps tidy

    Wednesday, June 28th, 2017

    My coworker Carmi just published a blog post on the Bazel blog about how Java tracks dependencies. Bazel has some nice facilities built in to let you know when you need to add dependencies: ERROR: /home/kchodorow/test/a/BUILD:24:1: Building libA.jar (1 source file) failed: Worker process sent response with exit code: 1. A.java:6: error: [strict] Using type […]

    How to Skylark – the class

    Wednesday, March 29th, 2017

    I’ve heard a lot of users say they want a more comprehensive introduction to writing build extensions for Bazel (aka, Skylark). One of my friends has been working on Google Classroom and they just launched, so I created a build extensions crash course. I haven’t written much content yet (and I don’t understand exactly how […]

    Low-fat Skylark rules – saving memory with depsets

    Tuesday, January 31st, 2017

    In my previous post on aspects, I used a Bazel aspect to generate a simple Makefile for a project. In particular, I passed a list of .o files up the tree like so: dotos = [ctx.label.name + ".o"] for dep in ctx.rule.attr.deps: # Create a new array by concatenating this .o with all previous .o’s. […]

    Aspects: the fan-fic of build rules

    Tuesday, January 10th, 2017

    Aspects are a feature of Bazel that are basically like fan-fic, if build rules were stories: aspects let you add features that require intimate knowledge of the build graph, but that that the rule maintainer would never want to add. For example, let’s say we want to be able to generate Makefiles from a Bazel […]

    Using AutoValue with Bazel

    Saturday, November 12th, 2016

    AutoValue is a really handy library to eliminate boilerplate in your Java code. Basically, if you have a “plain old Java object” with some fields, there are all sorts of things you need to do to make it work “good,” e.g., implement equals and hashCode to use it in collections, make all of its fields […]

    The Mixed-Up Directories of Mrs. Bazel E. Frankweiler

    Friday, July 8th, 2016

    Bazel has several directory trees that it uses during a build. Sources The most obvious directory is the source tree where your code lives and where you run your builds. This is, by default, what Bazel uses for source files. However, you can combine several source trees by using the –package_path option. This basically overlays […]

    Custom, locally-sourced output filenames

    Tuesday, June 21st, 2016

    Skylark lets you use templates in your output file name, e.g., this would create a file called target.timestamp: touch = rule( outputs = {"date_and_time": "%{name}.timestamp"}, implementation = _impl, ) So if you had touch(name = “foo”) in a BUILD file and built :foo, you’d get foo.timestamp. I’d always used %{name}, but I found out the […]

    Using environment variables in Skylark repository rules

    Friday, June 17th, 2016

    If you’ve every used the AppEngine rules, you know the pain that is wait for all 200 stupid megabytes of API to be downloaded. The pain is doubled because I already have a copy of these rules on my workstation. To use the local rules, all I have to do is override the @com_google_appengine_java repository […]

    Resting BUILD face

    Friday, June 10th, 2016

    I am super excited that pmbethe09 and lautentlb just put in a bunch of extra work to open source Buildifier. Buildifier is a great tool we use in Google to format BUILD files. It automatically organizes attributes, corrects indentation, and generally makes them more readable and excellent. To try it out, clone the repo and […]

    Communicating between Bazel rules: how to use Skylark providers

    Tuesday, May 31st, 2016

    Rules in Bazel often need information from their dependencies. My previous post touched on a special case of this: figuring out what a dependency’s runfiles are. However, Skylark is actually capable of passing arbitrary information between rules using a system known as providers. Suppose we have a rule, analyze_flavors, that figures out what all of […]

    kristina chodorow's blog