Today I Learned

TIL, 2018-08-01

The Death of Advertising


  • History of advertising: need to hit a lot of people/mass market thingie.
  • Because of Internet: buyers and sellers have unprecedented access to one another.
  • Internet rewards niche businesses that have high differentiation and can charge a premium, and it rewards massive scale businesses that can operate internationally.
  • Google/Facebook can target specific individuals whose data determines that they are prime candidates for said niche product or service.
  • McDonalds: Smart enough to realize that the only way to succeed was to invest deeply in mass-market targeting and pursue long-term and large-scale consumer retention.
  • Shotgun approach works for McDonalds, because the bran has been subliminally imprinted in my brain so often that it has become the default option for food when I don’t know where to go.
  • McDonalds ads: try to appeal to the median consumers. Same with successful politicians: appeal to the median.
  • When data gets perfected, each consumer in the world can be paired up with goods that meet his or her biological rather than consumptive tendencies. No branding because if perfect information, no need for branded trust.
  • At some point, large-scale campaigns predicated on installing subconscious intuition in customers will die. Google and Facebook can deterministically present us with the best options for everything, because they know us best.

Laziness Does Not Exist


  • It’s helpful to respond to a person’s ineffective behavior with curiosity rather than judgment.
  • On why homeless people buy alcohol and cigarettes: it makes sense because everything is painfully uncomfortable, why not smoke or something.
  • “All homeless people should put down the bottle and get to work. Never mind that most of them have mental health symptoms and physical ailments, and are fighting constantly to be recognized as human. Never mind that they are unable to get a good night’s rest or a nourishing meal for weeks or months on end. Never mind that even in my comfortable, easy life, I can’t go a few days without craving a drink or making an irresponsible purchase. They have to do better.”
  • When paralyzed with fear of failure, and you don’t even know how to begin something, it’s hard to get shit done.
  • People usually just want advice for how to divide a big task into smaller tasks and a timeline for completion.
  • If a person’s behavior doesn’t make sense to you, it’s because you’re missing a part of their context.
  • It’s morally repugnant to me that any educator would be so hostile to the people they are supposed to serve.
  • Comments:
    • Software developers: lazy when it comes to doing repeatable work.

5 API Testing “Must Haves” for API Security, Reliability, Performance


Is there a risk when you use API integration?


  • Automated validation: need test cases that can be repeated in a systematic manner.
    • Define automated test scenarios
    • Automating rich multilayer validation across multiple endpoints
    • Parameterizing test messages, validations, and configurations from data sources
    • Defining sophisticated test flow logic
    • Visualizing how messages and evens flow through distributed architectures as tests execute
  • Change management for test assets/environments
  • Simulate timing/latency/delay to emulate peak, expected, and slow performance
  • Extensive security testing with service virtualization
    • Executing complex auth, encryption, and access control test scenarios.
    • Running penetration attack scenarios vs your existing functional test scenarios
    • Think of the penetration attack scenarios including parameter fuzzing, injections, large payloads
  • Concern: API abuse, data breach.
  • Structure: API consumers usually have a standard parsing code, as the code is easier to manage. Standard success state that can improve the implementation logic.
  • Error message: Check if they are nested in some complex object.
  • Versioning
  • Documentation: A web page can do
  • Sample code: Data types, formats, length of a value could easily be communicated with the help of documentation
  • Sandbox environment

Working with unreliable web APIs


  • Retry loop
  • Thorough logging: request URL, request headers, request data parameters (hash sensitive things like tokens), HTTP auth parameters (hash this too). Log everything, it’s an audit trail.
  • Automating emails to tech support teams with detailed error diagnostics (as described above can be helpful). Use casual language in the emails to make sure they look like they aren’t automated.
  • Error reporting tools: Sentry.
  • Tracking response latency and warning yourself internally.

Common Problems with Xero


  • Account getting disconnected: this can happen when a second connection to X from the same account has taken place.
  • If under a separate account, you try to connect to the same organization, it will replace the previous connection. To resolve, only connect your X account to your Z account.
  • Both Invoices and Bills are trigged by the New Invoice trigger#: X treats invoices and bills as the same via the API, but you can easily filter these out by using the Type field.

Rails: Don’t “pluck” Unnecessarily


  • pluck is an eager method that hits the database when it’s called. So when you do a : User.where(id: Contact.pluck(:user_id)), you hit the database twice.
  • User.where(id:


  • Array Wrap → is better than Array() forming the thing, because it attempts to create the array but doesn’t if the parameter is already and array.

This project is maintained by daryllxd