The Flip Side

I've been reading The Flip Side since October and find it's an incredibly effective and efficient way to encounter and digest thoughtful opinions daily from across the left-right divide in the US. I highly recommend it for bursting your political bubble: theflipside.io

March 22, 2019
YC W19 web developer contract

Web developers: The founder of a YC W19 company I know is looking to contract immediately for a project involving React, Node, and MongoDB with hosting on Digital Ocean. If you're interested or know someone who might be, please contact him directly at jusduan@gmail.com.

December 5, 2018
The Facebook police state
Facebook is a broker that can directly control only how users and companies exchange data using its tools. Expecting the company to know – or even try to know – and respond to what happens to that data once data has been exchanged with its tools and taken off-platform is an impossible expectation for it to fulfill. We’re setting ourselves up as a society for continual disappointment and disillusionment having expected too much from a single organization.

Should Facebook really be responsible for policing the misuse of user data by companies that acquire it through legitimate means then subsequently resell it to other entities, for whatever purpose?

Facebook is a broker that can directly control only how users and companies exchange data using its tools. Expecting the company to know – or even try to know – and respond to what happens to that data once data has been exchanged with its tools and taken off-platform is an impossible expectation for it to fulfill. We’re setting ourselves up as a society for continual disappointment and disillusionment having expected too much from a single organization.

Wouldn’t it be better to educate the general public about the risk of data reuse and resale should they opt to hand it over to whatever game or app developer through Facebook? Individuals could then decide if they want to assume that risk.

Facebook already gives individuals clear and granular controls on what to share. And journalism is currently raising awareness of what could possibly go wrong should people give away their data thoughtlessly. The mature response to these learnings isn’t to blame Facebook and delete your account; it’s to realize that Facebook has given you great power over your personal data and while many may have shared it unwisely, that doesn’t mean you have to as well.

Facebook and other monolithic networks aren’t social problems because they can’t control what goes on in or around them but rather because we expect and demand that they do.

We risk characterizing them as omnipotent parental figures that we should benevolently guide the multiplicity and complexity of our interactions while somehow resolving disputes with a fair hand.

But these aren’t governmental bodies and we’d be unwise to push them into that role by demanding they police data and behavior on their own or as agents of actual governments. They are international, capital-seeking enterprises, not representative bodies established, managed and adapted by referenda and all the protections of republican democracy. It’s hard enough to run a government responsive to the social needs of a specific population in an ever-globalized world. It’s madness to expect a company with nine board members and a user base of billions that spans the entire Earth to draw lines of social acceptability and benevolence let alone try to enforce them.

If we want paternalistically to prevent companies from exchanging personal data by applying categorical regulation, we already have real governments, locally, nationally and internationally available to do that. They can pass laws and enforce them, no matter how Facebook decides to expand or restrict its APIs and no matter how informed or ignorant its users are.

Want to prevent companies from reselling data without originator consent? Make it punishingly expensive to do so by weiding courts and class action lawsuits while taking care not to circumscribe the very concept of consent by infantilizing individuals and therefore assume consent itself is not pragmatically possible.

Did a company resell your data after promising it wouldn’t? Sue them. Did they never make that promise? Sorry, you’re out of luck. Just as you wouldn’t tell a secret to someone you don’t trust, you shouldn’t give any app access to your sensitive data if you don’t get legally enforceable guarantees to privacy.

The biggest shame that could come from our crisis of faith in Facebook and other platform providers would be to pressure the company into a defensive posture about the free flow of data and communication in general, effectively becoming totalitarian about its policies for fear of market and government retribution that stems from our impatient imposition of moral and legal responsibility.

Users will suffer from being treated as increasingly untrusted to share their data freely and whatever the form, whether demographic information, photos, status updates or medical history. Platforms will limit functionality to produce and exchange that data both on-platform and off, and the utility of their software will drop just as we expect it to rise in correspondence with our inflated sense of the pace of technology.

This will result in a two-pronged, contorted revolt against both the company’s tyranny and its impotence, leading eventually to mass emigration despite network lock-in effects. If this results in the use of decentralized platforms, people will have no choice but to seek social remedy from actual governments – that’d be the best-case scenario of creation arising from destruction.

If the migration leads to subsequent adoption of other centralized platforms, we risk entering into a cycle of losing progressively more liberty over our digital lives in the name of social safety and due to our lack of faith in higher authorities. The very platforms that are so uniquely situated to give us that positive liberty will be quixotically tasked with limiting it and that faith will only further degrade.

March 20, 2018
Finding flow beyond distraction
Flow has become increasingly important to me as I've internalized the belief that the most durable peace and satisfaction derives from an active concentration in the present moment, whatever it may contain. The emphasis on this experiential value is in contrast with my past preoccupation with the pursuit of future achievements, which after thirty-odd years, have proven to be emotionally all too fleeting.

One my highest priorities over the past several years has been to establish a more frequent state of flow in my life.

Flow has become increasingly important to me as I've internalized the belief that the most durable peace and satisfaction derives from an active concentration in the present moment, whatever it may contain. The emphasis on this experiential value is in contrast with my past preoccupation with the pursuit of future achievements, which after thirty-odd years, have proven to be emotionally all too fleeting.

While in principle this switch sounds easy enough, its practice requires a constant tending to several conditions, not the least of which is a thorough reduction of distraction. And given that distraction is near constant factor for many of us, the question is whether to reduce it and how.

There are two main ways I've found that I get distracted – by external interruptions and by internal ones.

External interruptions are the most obvious in that they're usually seen or heard. However, internal ones are just as pernicious, even if they're often discarded as thoughts that can't or shouldn't be helped.

The ultimate objective to minimizing both types of distractions is finding myself in a state of mind where I can focus on only one thing at a time and with pleasure instead of struggle. That thing could be a conversation with a good friend, the process of designing a new application, or the writing of a blog post. It could even be just walking down the street of a busy city and enjoying one observation at a time, not passively but through an active engagement with my thoughts, senses and feelings.

The ways I seek to decrease external distractions mainly involve practices to break smartphone addiction and maintain a clean work environment:

  • I turn off all phone notifications, entirely. In 2018, almost all of us have adopted a crazy habit of allowing any action with any level of importance related to our digital lives interrupt us with a sudden vibration or ding.

    This is simply madness in the name of connectivity. I have an iPhone but have disabled all notifications so that at no point in time will my phone make a sound or vibration and interrupt me. If I want to check what I've missed, I can always open it up and pull down the notification center, which serves more rather like an imposing mailbox.
  • I stop using my phone completely upon arriving home at night and until finishing my morning routine the next day. Home is a place to recuperate, and if I check my messages or the news there (especially if I'm tired from the day or groggy from a night's sleep), I'm basically inviting the external world to interfere with that recuperation.

    When I arrive at home, I plug the phone into the charger in my laundry room and resist the urge to take it out until I'm heading out the door again after breakfast the following day. If I'm heading to exercise first-thing, I resist checking it even until after I'm done and truly in a good position to react to anything I might see pop up in my digital life.
  • I set up my workstation as neutrally as possible. I love being around people while I work as a certain level of ambient noise actually helps me concentrate and feel emotionally connected. But it's just as important that I can focus for long stretches of time without distraction, either from my coworking peers, my friends digitally, or the entropy that results from moving between tasks.

    Physically that means situating myself somewhere where people won't interrupt my work sessions often.

    Digitally that means closing all windows and tabs that could possibly provide an avenue to interruption, such as email or Facebook. It also means maintaining inbox zero across all messaging and email interfaces (Gmail, WhatsApp, Facebook, etc), cleaning all files off my desktop and even setting the desktop color and system interface to a neutral dark grey.

    A simple app called Divvy helps me maintain perfectly divided windows, reducing cognitive friction even further by keeping everything in sight with the right proportions.

I've found the key to minimizing internal distractions lies in creating well-organized places to tuck away concerns for the moment, as well as structuring time to ignore competing ones without constant ambivalence:

  • I use Asana religiously to track anything I feel I "ought" to do. Instead of carrying various points of obligation around in my head and struggling to remember them at the right time, I organize any personal or professional tasks in Asana and seek to assign most of them due dates, which correspond to when I'll actually address them. This lets me temporarily forget that they even exist, since in a way, they really don't exist until they're actionable.
  • I apply a modified Pomodoro technique with Focuslist. It's often hard to give a specific task my full attention because I'm actively doubting whether I should actually be focused on another priority.

    But I've learned that I can temporarily supress that doubt by setting up 55-minute work intervals wherein I decide upfront the single thing I want to accomplish and commit to focusing on just that until the timer goes off.

    During a subsequent 10-minute break, I not only give myself permission to indulge in any form of distraction but even force myself to do so, creating a sort of rest and reward cycle for myself.
  • I'm an organizational freak about my finances. Money can be one of the main drivers of stress and distraction, both explicitly through worrying about how to make ends meet and implicitly through the fretting of office politics that arises from feeling beholden to any given employment option.

    For me, having a comprehensive picture of – and plan for – my money reduces that stress even when savings are low. That means obsessing over the details of just how much money I have and how I expect it to change in the foreseeable future in the context of my upcoming needs.

    I use an app called Foreceipt to track every purchase I make manually and map them to expense categories that I want to budget, such as dining and discretionary purchases. At the end of the month, category totals enable me to review precisely just whether I've met or exceeded those budgets and adjust accordingly.

    On a monthly basis, I update a many-tabbed spreadsheet to record the current state of my assets and track recurring changes to them due to income, expenses and savings. Specifically, I allot a percentage of all income to several types of savings accounts (e.g. 10% for "travel savings") to automate my financial cushion.

    This gives me an immense amount of peace of mind about how to sustain myself financially and prevents financial worries from arising when I'm not explicitly sitting down to manage them.
  • Everything else gets purged onto paper. Sometimes none of the above helps me get worries out of my head since they're too abstract or confusing to address proactively, at least yet.

    In such cases, I simply take out a pen and piece of paper to jot down a rough outline of what keeps robbing my attention. The notes can take any form and they're not primarily about deciding what to actually do about the thoughts. This simple therapy hinges mainly on the act of getting it all out my head in the first place.

    But after I complete the brain dump, I go through my outline and decide which are thoughts that I want to address and which I simply want to let run their course without any action at all, which is a surprisingly effective way to minimize them when done decisively.

    I meditate on those I do want to address with action until coming up with at least one task that'd concretely help if not resolve the worry completely. That task then, of course, goes into Asana above.

    I find that this paper-based exercise almost always reduces and many times resolves the distraction caused by scattered thoughts by moving them either firmly into my locus of control or out entirely.

Applying all of the above won't, of course, necessarily result in a state of flow. I find it's also contigent on a base level of rest and physical health and often aided by a comfortable yet stimulating relationship with the task or experience at hand.

However, in a connected world where many considerations vie for my attention at any given moment, these practices have been invaluable in helping me find that flow and enjoy the autotelic experiences that result with greater regularity.

February 28, 2018
Alps Snowboarding Recommendations

Any recommendations on the best snowboarding destinations in the Alps with easy access from Barcelona and London? 🏂

February 9, 2018
The Outline

This is the most impressive media website I've seen in a while, from a creative design and construction quality point of view: https://theoutline.com

December 10, 2017
Catalan Tutor

Algú coneix a un tutor de català bo? Estic buscant un per a fer classes d'una hora i mitja a La Dreta per els matis de dimarts i dijous abans de la feina cada setmana. Tinc un nivell básic però vull parlar amb fluïdesa 🤓

December 10, 2017
Syncing Foursquare / Swarm checkins to my website
Neotoma now backs up all of my Foursquare / Swarm check-ins to my Dropbox account whereupon they’re republished instantly to my website on a new check-ins page.

Neotoma (on GitHub) now backs up all of my Foursquare / Swarm check-ins to my Dropbox account whereupon they’re republished instantly to my website on a new check-ins page.

This setup relies on the same publishing technique as my other website content as well as recent changes to the Neotoma sync software.

That software now transforms Foursquare check-ins copied initially in a proprietary JSON format from its API (e.g. one from this past weekend) into a cleaner JSON API format before saving them to Dropbox so my website software can easily understand and serve them as content:

{
 data: {
   id: "foursquare-5a0719c1d4cc9849790606eb",
   type: "check-ins",
   attributes: {
     place-state: "Catalonia",
     place-postal: "43840",
     place-name: "Corcega",
     place-longitude: 1.1382177519242145,
     place-latitude: 41.076488193500616,
     place-country-code: "ES",
     place-country: "Spain",
     place-city: "Salou",
     place-category: "Spanish Restaurant",
     place-address: "C. Major, 31",
     photo-url: "https://igx.4sqi.net/img/general/original/11437_gvUS2Nmh9bAaE7O2PP98sz5TZTzTbzr-wQlEShLGkmU.jpg",
     likes-count: 1,
     foursquare-venue-id: "4d0bce3d46bab60c9cc82990",
     description: "Primera calçotada de l’any!",
     created-at: "2017-11-11T15:39:45.000Z"
   }
 }
}

The exact format I use here is definitely going to evolve as I build out functionality around this data on my website. For example, I plan to break out the places embedded in check-ins into their own files so I can rank the places I visit by frequency. But for now this format provides a quick and simple way to get the check-ins displayed reverse chronologically.

Also, Neotoma currently conducts a full historic backup of my check-ins when I connect my Dropbox and Foursquare accounts to it, but it doesn't keep watching for new check-ins.

I'll be improving the system shortly to sync all new / future check-ins automatically so they appear on my website as well, both on the above check-ins page and on the homepage where I show my latest check-in up top.

November 13, 2017
Dropbox API v2 fix for Neotoma sync server
As part of my working sprint at IndieWebCamp Berlin today, I managed to fix a show-stopping bug that’s been in production for sync-server on Neotoma and run a backup job for my latest Foursquare / Swarm check-ins.

As part of my working sprint at IndieWebCamp Berlin today, I managed to fix a show-stopping bug that’s been in production for sync-server on Neotoma.io apparently since September 28, 2017 when Dropbox fully retired its API v1 in favor of API v2.

I wasn’t aware of this bug until this week since error handling in production hasn’t been set to notify me (via email or otherwise), but setting up that notification is now a prioritized task to avoid silent problems like this one in the future.

After digging through the code, it turned out that the Passport implementation for Dropbox specifically was not passing an apiVersion parameter upon initialization of its strategy, and as such, it was defaulting to Dropbox’s API v1 without my realization.

I’ve added apiVersion as a parameter here and also as an attribute on the storage model, specifically setting it to “2” for Dropbox’s storage document.

Note: This attribute apparently needs to be a string, not an integer, the latter of which failed to work for me when attempted.

req.strategy = new passportStrategy.Strategy({
 apiVersion: document.apiVersion,
 clientID: document.clientId,
 clientSecret: document.clientSecret,
 consumerKey: document.clientId,
 consumerSecret: document.clientSecret,
 callbackURL: `${req.protocol}://${req.get('host')}${path.resolve('/', Model.modelType(), document.slug, 'auth-callback')}`,
 passReqToCallback: true,
 profileFields: ['id', 'displayName', 'emails']
}...

As a result, Dropbox authentication now works again and I’ve been able to run a backup job for my Foursquare / Swarm check-ins, syncing the most recent ones to my Dropbox since last running backup earlier in the summer.

November 5, 2017