All posts in 2024
  • The Moving Calculus

    Some time ago I read a tweet by a queer Singaporean asking why any queer Singaporean would move to San Francisco, citing the following shortcomings (not verbatim):

    • San Francisco used to be a place where queer Singaporeans would move to, for safety reasons, but perhaps those safety reasons aren't that dire anymore
    • San Francisco / the US is the heart of the hegemonic world order / imperialist system
    • We probably like the white gaze
    • San Francisco provides the opportunity to be a Joy Luck Club Asian queer

    There was a time in my life where those thoughts resonated with me.

    This topic has been on my mind since I moved here and, surprisingly, did not hate it as much as I imagined I would (I did not like San Francisco at all when I came as a tourist).

    Unlike many other immigrants I've met here, who have left deteriorating and debilitating circumstances, my 'why I moved and how has it been' calculus is different. I did not move for material comfort. I am, daily, reminded of how I left home, away from material comfort, and my support systems, to be here. (Not to mention the tremendous amounts of social privilege I've left behind.)

    Some time in 2012, I was pretty satisfied with my life as a queer Singaporean living in Singapore. I was in a high growth industry (tech), I got to date (a lot), I had many opportunities to create and carve out a life for myself as an upper middle class Chinese Singaporean gay woman who'd probably end up in a relationship with someone like me. In fact, when I went home recently we hung out with my ex (as queer women do), I took a photo of their home office in their absurdly beautiful Bukit Timah home and I captioned it in my phone as: "the life I would have had if I stayed home".

    Every conversation when I was home revolved around, "when are you coming home?" because it seems unexpected, even among some types of minorities in Singapore, to entertain the idea of leaving the supposedly best place in the world (that we still all complain about anyway).

    I found that my connection with Singapore was weakening. Other than family, I don't have anything to do there, or many people to spend time with. I have loads of acquaintances, of course, but many of my friends are.. elsewhere. (Not all of them to the hegemonic core, many of them to many parts of the world, including China, Vietnam, Indonesia.)

    Still, every conversation (especially with my family) was around: so are you done yet with San Francisco? Isn't it absolutely terrible, that country? When are you coming back to this superior place? was the underlying question. If you're an always online Singapore leftist, your concerns with my city of choice probably has more to do with the above list of questions. If you're not a leftist, your concerns with my city of choice probably has to do with things like safety, medical bankruptcy, housing, why someone would realistically choose a higher cost of living and physical discomfort (as mentioned, Singapore is far more comfortable, materially, in nearly very way), and give up substantial amounts of socio-economic privilege.

    Why people choose to leave home is deeply personal. Every situation is different. I moved here exactly three years ago with my wife and my dog when we suddenly had to make a huge life decision on the spot, when her work visa ran out and we decided to get married. We were lucky to have the option to come here, and to be able to thrive.

    I learned quite quickly that I would have survived in Singapore (it's getting harder for queer people there), but I no longer felt like I could thrive. In spite of my immense privilege.

    I felt like like the short-lived optimism I had for Singapore expanding queer rights was over. Even if 377A is repealed, I don't feel optimistic. I don't feel like I want to wait for incremental improvements. That's not to say that I don't want to do the work. I did, for a time. And if my circumstances were different, if I had decided to spend my life with another Singaporean person, if I was okay with surviving and not thriving, if I was able to shut up and be okay with the already tiny space around me in Singapore, eroding further and further; perhaps that would have been different.

    I don't pretend this city, or this country, is perfect. Far from it. Unlike the home I grew up in though, it lets me say so: even if I am not a citizen. No country is perfect, so for now, we'll enjoy the wide open space of California, where, frankly, life is pretty good (if you can hack it). I feel immensely lucky to be able to grow as a person out here, far from home, while also having the ability to move back to my country, which has given me so much, yet currently exasperates me, whenever I need. I'm certainly cognizant of how this is a huge thing to have. So many of the other people who have moved to where I now am, no longer have a country at all. After three years in San Francisco, I feel like I've finally passed the moment of transience and 'uprootedness' that I've felt for so many years, and that maybe 'home' is always 'small cities surrounded by the sea, that punch above their weight'.

    But there isn't a single day where I don't grieve what I left behind.

  • The Antidote to my SADness

    Are you SAD because you're not used to the winter?

    I used to love winter. Traveling to places in the winter, playing in the winter, winter sports, going out in the winter. Living in the northern hemisphere for the long term, however, has made me enjoy it less. I don't even live in somewhere with a significant winter scene. Northern California has relatively mild winters.

    Maybe that's the problem. A clear demarcation between the seasons would be nice. Instead, this region's summer in September followed very quickly by fall and winter makes me quite miserable.

    Have you tried X, Y and Z?

    Light therapy. Vitamins. Anti-depressants. Exercise. Routine. Waking up earlier. I am doing them all!

    Are they working?

    Not particularly.

    What's the antidote then?

    Run, quite fast, whenever you can, with a lot of Prince's music.

    Will it work for me?

    Probably not.

  • All of my wildest dreams

    Person scrambling down a rock

    I spent the past weekend hiking. Some of it was on a dried out waterfall, such as this one.

    For a long time now I have wanted to lead a wilder life than the one I had. Earlier in my youth, wild meant something else altogether. Today, it means: backpacking, camping, going on long walks in the wilderness, birdwatching, and hiking.

    Now that I live in California I have access to tremendously beautiful landscapes, often hemmed in by the Pacific Ocean. Local parks, state parks, national parks and more: there are lots of avenues for weekend exploration. While I didn't always feel fit enough, or brave enough, to join many of these activities, I've finally gotten around to making the most of this access. On foot or by bike, there are lots of outdoorsy options and this past weekend I did my first ever backpacking trip for 2 nights at Wildcat camp in Point Reyes.

    I joined a local adventure club that organizes trips and activities and was quickly put into a carpool with one of the organizers. While I didn't know anyone from the trip, we did a Zoom call to say hello and discuss logistics.

    The plan was for us to meet at Bear Valley Vistor Center in Point Reyes on Friday afternoon at noon. The drive from San Francisco's Marina district took just over 90 minutes, with a last minute Sports Basement Presidio scramble for camping lights and other forgotten items.

    We met the other folks at the visitor center, 12 of us in all, where we enjoyed our last moments of Internet and restroom access.

    The hike up the Bear Valley trail was not especially brutal, but for most of us this was our first time carrying full backpacks and walking up any amount of elevation. Carrying tents, sleeping bags and stoves, we slowly meandered up the hills of Point Reyes and nearly 3 hours later, made it to camp.

    Wildcat camp was reasonably furnished with two clean toilets and a tap.

    As quite a few people on the trip remarked, it's amazing how little you really need until you have to carry it on your back.

    We hiked, swam, walked on sand, cooked basic meals on camping stoves, and thankfully nobody got hurt or into any type of accident other than a handful of blisters.

    I was lucky to have sought advice from experienced camper friends who told me: do whatever, have fun, but you must have good shoes, good socks, good tents, and a very long spoon.

    That advice brought me far. I then supplemented that with more essentials for myself: I brought Indomie, packets of mala fish tofu snacks, Japanese sea urchin cookies (a fave), along with the dire 'dehydrated backpacker meals', and had more of a blast than I thought I would.

    I've now been initiated into a group of outdoorsy folks who have the organizational and logistical expertise to make these weekend trips happen, so I'm excited to finally have consistent outdoors plans in my life. Next up: bikepacking at China Camp.

    Maybe one day I'll write a quick guide to how to do all of this stuff in the Bay Area without a car. It's time for me to learn how to drive (!!) so I can access more cool spots, but for now, I think I saw a lot of my region without ever knowing how.

  • Jharkhand Task List

    Photo of a task list written by a girl in Jharkhand

    Some of you may know that I have spent the last 9 years or so working to support children's education in Jharkhand, India. In better times I visit them 2-3x a year. I want to share something that stuck with me the last time I went: one of the girls we work with showed us their daily schedule.

    Tribal Jharkhand girl's daily schedule (24 January 2019):

    At home

    • Keep house clean, 30 min
    • Help mother in her work, 30 min
    • Wash my own school dress, 15 min
    • Help my sister in her studies, 1 hour
    • I have to found (sic) my socks, 20 hours
    • Wash utensils used by me, 5 min
    • Put my bags, school dresses in appropriate places, 10 min
    • Use Whatsapp to write all the notes I have missed as I am not in class today, 2 hours
    • I have to call my grandmother as she is sick, 20 minutes

    Elsewhere

    • School time, 5 hours
    • Tuition time, 1 hour
    • Study for approximately 3 hours a day

    I am nowhere as organized, or as funny, as this girl.

    Going to Jharkhand twice a year has always been the highlight of my year. I'm glad to report that the girls are well, as are their families, which is an amazing outcome in spite of the current COVID-19 situation there. I've seen them grow up over the years: they are absolutely committed to wanting a better life for themselves and their families, and hopefully through the work that I facilitate there I can help to open some doors. If you pay tax in India, you are welcome to make a contribution to the team (other options coming, in the.. future. Overseas contributions are very difficult). The local team is amazing and I am so glad to be able to support this work.

  • Backing up iCloud Photos in the command line

    I have been on a roll of late with my data liberation project.

    The last piece in my photo liberation project was to figure out a way to take out all of the data from iCloud. Having been in the Apple walled garden for more than a decade and a half now, I have.. a lot of stuff in there.

    Apple's official documentation simply says "log in to icloud.com, select the photos you want and download as a zip". What if you've got tens of thousands, or hundreds of photos like me?

    Enter iCloud Photos Downloader, a Python utility that sucks out all of your iCloud photos into wherever you're running it.

    In my case, I've already got a Linux server going for my photos so that's where I wanted it. The eventual goal is to put all of the photos into PhotoPrism there, as I like its tagging and deduping functionality. The goal is for all of my photos to eventually live on photos.mydomain.com, which is where all photos are going to.. eventually. Right now, I've only got my Google Photos in there. Time to get my iCloud photos in there as well.

    Install iCloud Photos Downloader in your server or other computer

    In my case, I just did a git clone of [this repo] into my Linux server. Once downloaded, i cd-ed into it and ran the following command:

    $ pip install icloudpd
    $ pip install -r requirements.txt
    

    As with any other pip package, there can be errors because of your Python environment. I ran into a problem with having too many Pythons, and I could not run the ./icloudpd.py script, which threw a Python module error.

    To fix this, I opened icloudpd.py in a text editor and I edited the first line from: #!/usr/bin/env python to #!/usr/bin/env python3. This tool needs Python 3.6+ to run.

    Starting the download process

    On my Linux server, I created a directory for my photos called icloudphotos.

    I then ran the command:

    icloudpd --directory ~/icloudphotos \
    --username myemail@domain.com \
    --password password
    

    The tool will prompt you to login and authenticate to iCloud.

    Note: if you have 2FA enabled, you will most likely have to re-authenticate every 90 days or so.

    I got tens of thousands of photos as expected. The tool shows you a nice little progress bar with basic information. It ran for several hours (around 5 or 6?) but it really depends on your connection speeds. You can turn off video downloads by using the --skip-videos option. You can also have it email you when it's done by using the various smtp options, but I did not want to bother with that.

    Running icloudpd as a cron script

    The next step in my workflow will be to run this as a cron script. It looks straightforward enough.

    Final thoughts

    I also have Syncthing set up and I am evaluating which workflow I prefer. I might want to continue keeping a copy of all photos on both iCloud and on PhotoPrism for redundancy.

    In any case, I'm glad to have found a non-GUI way to access my iCloud photos. This will make any projects in this category much easier from now on.

  • Schrödinger's Lesbian

    In 2018 I decided to leave my home country of Singapore even though I once thought I would lead my queer adult life here because it was not a bad one. I decided to leave because I had met the woman I would marry, and there was simply no path for us to lead the sort of life we wanted in both of our home countries.

    Being queer in Singapore is strange because on some level, it's one of the better places to be queer in Asia. And on many other fronts, while it isn't quite the worst, it's also.. not at all fun.

    Some time between 2012 (when I returned to Singapore) and 2018 (when I left again) civil society, and the state of queerness in the country, had a certain amount of momentum that made me feel cautiously optimistic. I am now of the opinion that that moment has passed.

    The 'fun' bits about being queer here are:

    • If you have a certain amount of money and class privilege, your life will be virtually indistinguishable from any other queer life you might lead in a major Western city
    • If you have a partner who is either a professional in the right industries, or also a Singaporean or someone who has the right to reside here regardless of your marital status or sexual orientation, you will have a pretty decent life
    • If you are important enough and your partner has the 'right background', there are 'case-by-case' ways to continue to lead a life in Singapore in important jobs and special privileges
    • Homophobia exists at all levels of society but is virtually invisible in the upper echelons of English-speaking, cosmopolitan, world-traveling, Bali-on-the-weekends Singaporean and Singapore expat circles
    • Dating opportunities, in terms of quantity and quality, is just as good as most major Western cities
    • If your partner is also Singaporean, and you're both above 35, you can technically purchase a subsidized public housing flat together under the Singles Scheme
    • The lifestyle is nothing to complain about (but only of course if all of the above apply to you)

    The not-so-fun bits:

    • All of those things have to apply for it to be fun
    • You will have zero legal rights forever
    • The state of LGBTQ rights has not only stagnated, it is probably going backwards (significantly)
    • Every interaction you have with the state as a queer person is an edge case

    One in four heterosexual marriages are between a Singaporean and a non-citizen. We are a city-state, an entrepôt city, a trading post, midway between the world and back. It makes sense that would be the case. There aren't any official numbers, since there's no offical recognition of queer relationships, but an anecdotal guess would rate the share of transnational queer relationships in the LGBTQ world to be even higher than the heterosexual one. We're a global-facing city, after all, and upper-middle class queer Singapore's access to a cosmopolitan dating pool would not be surprising.

    This is where the problem begins.

    Even though the extent of this country's discussion on queer rights at the moment starts with 'should we repeal a Victorian law against sodomy?' and ends with 'what are the gays going to want next? Marriage?', I have been married for 3 years now. I have been leading a regular life in a society where it is so utterly 'normal' that being a cis lesbian is perceived to be regular and boring and not at all revolutionary in any way. I go anywhere, and old Asian ladies talk excitedly about how cute my wife and I are, and express outrage at why we can't lead a regular life in Singapore, where we want to be.

    How does one come back to... this?

    I miss, so much, the heat, the humidity, the potential Bali weekend trips, the well-paid tech jobs in senior roles with far, far lower taxes, the quality of housing, the presence of a washer in every apartment, the public transit, the.. the everything. Nobody should ever have to leave home just to be able to be who you are. And yet, for queer people, leaving is not only about visas. It's about a place to catch your breath because you're just been sprinting and jumping over hurdles your entire life, only to find out that everyone else got to the finish line without a potato sack tied to their foot.

    Being queer in Singapore is about having a potato sack tied to your foot. Some people, people like me, who have the above-mentioned privilege, think for some time that you can get away with whatever life throws at you because you're used to winning the race anyway. But at some point you wonder why you had to win anything at all.

    Today, I was reminded of this fact. We were at a government office trying to get something done, something extremely innocuous that is granted to any heterosexual Singaporean married to a foreigner. While I appreciate that we eventually got things done, every moment is one of debilitating terror. Knowing that what's ahead of you is entirely 'case-by-case', that it depends on the beliefs and the feelings of the people you transact with, wondering if.. perhaps I had shown up as the director of a Singapore company (which I am) and not as the spouse of a foreigner (which I also am), I would have gotten this task done much faster without any questions.

    On top of questions, there's also the indignity of having your marital status yelled out loud in several languages, as if they'd never heard of such a thing.

    I feel like Schrödinger's Lesbian: I am at once a lesbian and not. I am married, there is no question about it, but that marriage does not exist, at the same time. If I were to be hit by a car tomorrow, and die, not only would my wife not be able to come to collect my body, she would also not receive a single cent from me. My sexual orientation matters, because the state does not want me to be visible or loud about it, but it matters as well, because the state also wants you to believe they are the best society in Asia for someone to be queer in, that there is utterly and totally no discrimination at all.

    A few years ago I was interviewed by a local newspaper about my 'unconventional marriage'. Not only was the focus of the story that I was so unconventional we had to leave the country, I spent the entire interview talking about insurance. Insurance excited me greatly. Not only because insurance is essential in healthcare-terrible America, but also because the very boring, blasé act of naming a person you're married to as your next-of-kin is so revolutionary where I'm from. Between the quiet moments of our boring life filled with too much fur in our noses, and the indignity of justifying who we are to bureaucrats who think we don't exist because it doesn't say so in the SOP, I'm quite glad to be going back to boring. And fur. Boring fur and furry bores. But there is not a single moment where I wish I did not have to leave my home for it.

  • A unifying theory of Singapore food that ends in a dream

    1. 'Singapore food' is a difficult term. It's hard to put national wrappers around a smorgasbord of different culinary influences. This is why we keep getting into fights about appropriating others' food. Singapore food is Cantonese, Hakka, Hokkien, Hokchiu, Teochew, Malay, Javanese, Sumatran, Tamil, Kerala, Mamak, Punjabi, Bengali, Kristang, Peranakan, Chetty, and many more.

    2. We simply consume some of them more than others, in public; and some are more widely available commercially. Others are largely consumed at home.

    3. The Singapore food popularized by the tourism board, that appears in movies like Crazy Rich Asians, is only one of many types of Singapore food.

    4. When Malaysians say 'it's better in Malaysia', they are usually right, except for when they are referring to dishes that exist in both northern and southern Malaysia. In that case, the Singapore version, usually held up to be the inferior one, is usually only a mirror of the southern Malaysian, usually Teochew, version of that dish. It is not better or worse, it is just different.

    5. As Singapore / Malaysia food gets more popular abroad, especially in the US, we're going to have to be prepared to see it transform in ways that we may not always appreciate. Like ube, kaya and pandan is going to go on a similar journey. I'm no longer personally invested in the idea of everyone eating exactly the same version of the food that I like; it's fine to let kaya and pandan become its own thing elsewhere.

    6. Gula Melaka (obviously not Singapore food, but used extensively in Singapore) is god tier and will become the next big thing in global pastries and dessert, especially in sweet/salty applications like salted caramel.

    7. One of the best aspects of food in Singapore is that many of the world's top food brands already, or will soon, have an outpost here. Some better than others.

    8. The breadth of vegan and meat alternatives in Singapore currently is breathtaking. It's certainly changed in this department since I left home. While I'm not vegan, and likely will never be, I appreciate the options that are available. While one might need to go to a midrange restaurant in San Francisco to have Impossible burgers, there are Impossible burgers in convenience stores here. There are vegan options in a lot of local food now, a lot more than I remember. Pretty much every major plant-based or meat alternative or lab grown company is here with a product out on the market. Way more than in the US. And all in one tiny city. I'm excited to try the vegan sashimi that I just saw, and the vat-grown chicken. This is definitely related to the next section on 'how come I can get all of my favorite food in one city now?'

    A list of foreign food chains I like in Singapore

    Burgers: Shake Shack, Five Guys, Carne

    South Indian: Murugan, Anjappar, Junior Kuppanna, Ponnusamy, Dindigul Thalappakati

    Malaysian Chinese: Go Noodle House, Super chilli pan mee, various Malaysian hawkers at Malaysia Boleh

    Taiwan: Sushiro, Mu:, many many boba / bubble tea chains (most of them in fact)

    China: too many to name, other than Hai Di Lao there are also Chinese chains for specific regional dishes, like more than two famous chains for say, suancai

    Way too many Japanese and Korean chains to list.

    Sure, chain food isn't all that exciting and many of them arrive here in a completely bastardized form especially when they are run by a local F&B group that is less good at running franchises. But the ones run by the owners, like most of the Indian and Malaysian chains, make me very glad to have something I love so much all in once place especially in times like these when I don't think I'll be able to travel to those places for longer than I'd like.

    So why are there so many chains setting up shop here? I suspect capital flight, and the precarious political situation in Hong Kong as a traditional financial hub. It's also incredibly easy to setup a business in Singapore. While there are some problems with that model, you can definitely draw a direct line from the ease of setting up shop to why we have all of these restaurants.

    I love that I can get biryani with seeraga samba rice (the clearly superior rice for biryani) in not just one style, but several: Kongunadu style at Junior Kuppanna, Thalappakati style at Dindugl Thalappakati. I love that I have many, many types of boba to choose from, from hand-brewed tea-forward teas like at Chicha San Sen to black sugar boba abominations with cheese like at Black Sugar or Xing Fu Wang. I love that the noodles I love so much when I lived in KL are mostly here.

    Not forgetting individual chefs or restaurant owners who don't have chains, who have simply moved here and are doing what they do best here. I've had very decent Ipoh horfun and Sarawak kolo mee. I'm really liking the boom in Henghua (xing hua) food, after Putien's success. You find these at tiny restaurants (like Yun Heng) and at food courts (like at Malaysia Boleh). We've also recently found a very-close-to-Village-Park style nasi lemak at Uptown Nasi Lemak, Telok Ayer (which is totally different from Singapore nasi lemak).

    High brow low brow

    I hate it when food writers spend too much time talking about how you can get gasp high end food at low end prices. That, I think, is unique to Singapore in some ways because we have a large number of trained chefs and cooks at the many, many hotels and restaurants; and many of them, like chefs and cooks anywhere, want to do their own thing. Our inventory of non-restaurant space, like at hawker stalls or food courts or commercial shop space below public housing, has made it possible. You have always had things like 'Austrian man sets up sausage stand in Chinatown' or 'Japanese couple selling Singaporean Teochew noodles in hawker centre' in the first wave of that. We've also always had stories of 'hotel chef sets up shop in hawker stall'. So I am not, as a food-obsessed Singaporean, surprised by this sort of thing.

    What this means in daily life, though, now that I live somewhere with with a well-known but very different food scene, is that you can get fancy dimsum in a place like Yishun. You get French-trained chefs cooking Hokkien mee.

    I love that. However, I love more when a new generation of Singaporeans take over, or start, hawker food businesses. It leads to innovations that take the best of our traditions and blends it with our exposure to new things, and makes it entirely new. As a Teochew person, I love braised duck more than.. nearly anything else in the world. A place like Jin Ji where a younger person has started to get involved can now do things like dry duck ramen and still be distinct from when a Japanese ramen master does it. I have never seen duck ramen anywhere else outside of Japan and Singapore and I feel like more people should know that you can have many types of duck ramen in Singapore, including one that is Teochew-inspired.

    On authenticity

    Does this mean that food in Singapore is not authentic? First, I'd like to banish the idea of authenticity. Nothing is authentic, even in the sourcelands. India, China, and other places we draw inspiration from, have all had food that has come from somewhere else, and no food exists in a vacuum.

    But even in the 'authenticity' department we are no slouch. You can get old school Teochew food, you can get traditional East Javanese food (Bebek Goreng Pak Ndut), you can get authentic Kongunadu food (Junior Kuppanna), you can get authentic Chennai style idlis (Murugan). You can get extremely high levels of 'authentic' high end Japanese food for nearly every region, and dish.

    When I think about what I miss most about eating in Singapore, especially when I'm cold and hungry at midnight in San Francisco, it looks a little like this:

    In my eating-in-Singapore dreams, it is always midnight. I am at Mustafa in June fighting over mangoes with aunties. The cashier asks me what's the big deal anyway about these mangoes. I say it's not just a mango, it's dasheri. After losing at mangoes (the aunties always jab me and they get the best ones), I walk to Desker Road for hot garlic cheese naan, dal fry, palak paneer and kadai chicken. Javid offers me a cigarette. I tell him I don't smoke anymore. He says good, have some elaichi chai. In the morning, my mother has made me a tub of Hokkien chicken wings that her mother used to make, for breakfast. There's at least 2 kilos. I love chicken wings. Love is an understatement. When I've had Filipino food, I can see the Hokkien influence in all of the dark soy sauce and garlic. My Hokkien half is satisfied. Later, for lunch, I want a light Teochew porridge with all of the trimmings: steamed pomfret or rabbit fish. Taucheo. Preserved mustard leaves with olives. I walk around in the heat and sweat it all off. For dinner, I can have great sushi or I can have biryani. With seeraga samba, the clearly superior biryani rice. Then I remember a cocktail costs $25 in this city and I wake up.

    So whenever someone not from a major food city moves to San Francisco and says to me, the food scene is so good! I hold my tongue and say... yes, it is, but. I could also be eating in Singapore. In my dreams.

  • How I run PhotoPrism with Docker Compose and reverse proxy

    If you, like me and many others, have started to feel uncomfortable about one company knowing everything about you, moving off the Google ecosystem is the natural first step. There are lots of alternatives for the main features: for search, there is DuckDuckGo, which is improving all the time and has now fully replaced Google search for me. There is Fastmail, Proton Mail and many other alternatives for email. For photos, Google Photos and iCloud Photos reign supreme.

    I have attempted over the last couple of years to move off Google Photos. Each time, I've been let down by problems in bandwidth and download speeds. If you have vast amounts of data, it can get very difficult to work with the raw data you obtain from Google Photos using a graphical user interface. Each time I've tried to do that I've ended up with corrupted files or incomplete data.

    For this reason, I eventually designed this plan.

    PhotoPrism in Docker Compose

    With a reverse proxy into a photos.mydomain.com address and https.

    To be honest, while I know my way around servers I don't have a lot of experience with containers, networking or security. I did not want to attempt this project until I succeeded in getting a beginner's version of all that up online.

    Choice of self-hosted photo software. I looked mostly at PhotoPrism and PhotoStructure. Both of these projects appeared closest to the sort of self-hosted Google Photos-esque application I was looking for. Many other photo projects are far closer to web 1.0 style web galleries. In my case, I had more than a quarter of a million photos and videos strewn across multiple clouds. I have ADHD, and it has been very difficult for me to organize things.. anything.

    Hardware. I decided that I wanted to lease a server in Europe, because there are very good deals to be had there. Hetzner, OVH and an assortment of related companies like SoYouStart, Kimsufi, I've used most of them at various times in the past. It's relatively affordable to get up and running on a server run by any of those companies using used or old parts. For the most part it works out cheaper than trying to own your own hardware right now (in the midst of a global chip and memory shortage). Many people certainly do this sort of work on a NAS or a Raspberry Pi, but I knew I wanted something with many more cores. I got a Xeon E3 server to start, but may upgrade later. $27 a month is not a bad deal at all for a dedicated server with those speces (16GB RAM, relatively decent uplink).

    Source of data, and download method. As mentioned previously, I have not had much luck with retrieving my data from Google in the past. This time, I decided to completely avoid downloading my data to local storage, knowing that even with decent desktops and laptops I would still struggle with handling all of this data. I decided to download the backup files directly into my server instead. I decided to do a Google Takeout of all of my Google Photos from my G-Suite domains (several!) and my personal account's Google Photos. You can do the same by going to the Takeout page. I decided to send Takeout data directly into OneDrive, where I have a temporary premium account solely for this purpose. I've noticed I can fetch data from OneDrive at very high speeds using rclone, at least 2-3x faster than from Dropbox or Google Drive.

    Rclone, a fantastic tool I can't live without. I have been a huge fan of Rclone for a while now. While it works amazingly well for Google Drive and Dropbox, there are known limitations with rclone for extracting and moving Google Photos that I did not want to deal with. Mainly, using rclone for this purpose strips EXIF data, a known limitation of Google Photos' API.

    When my Google Takeout is complete, I rclone to download from OneDrive into my server.

    rclone copy onedrive: servername:/home/username/destination -P

    For a 200GB backup of my Google Photos, Takeout gave me 4 files that were 50GB each. That took rclone around a few minutes to transfer at 80-100MB/s.

    I then unpacked all of the files into a single folder:

    cat *.tgz | tar zxvf - -i

    That gave me a single folder of all of my photos in a folder named Takeout.

    Installing PhotoPrism using Docker Compose. The official Docker Compose instructions are pretty easy to follow. For reference, here's my docker-compose.yml file.

    Accessing your photos using a reverse proxy For security, you don't want to access your self-hosted photos at SOME.IP.XX.XX:PORTNO or yourdomain.com:portno. You'll want to access it at a domain, preferably one you own. This was the hardest part for me: there are many ways to get a reverse proxy going, and I didn't know very much about all of that.

    I decided to use LSIO's swag container. In a nutshell, LSIO provides very well-maintained Docker images for many popular homelab projects. You can easily stand up a wiki, a PVR, or even niche things like a self-hosted Markdown editor. I've used many of their images in other projects and I love how easy it is, how helpful the community is. The swag container was the one I spent the most time on.

    It's helpful to read the docs and initial setup info. Once you figure out the ins and outs of how things are set up in this container, you can easily get https://yourdomain.com, https://anysubdomain.yourdomain.com or even https://yourdomain.com/subfolder up and running. Of all of the 'beginner' methods of learning to set up services with reverse proxies (and there are many: you can use Traefik, Caddy, docker gen, etc), this wound up being the one I felt I learned most quickly.

    In summary, you want to:

    1. Set up DNS
    2. Get an SSL certificate for all your domains and subdomains
    3. Edit the proxy configuration files

    Read the docs, or ask for help; it took me, someone with not a whole lot of infrastructure experience but who knows a bit of Linux, a couple of days to set it up correctly.

    The swag container has many built-in templates that makes this easy, once you learn its quirks.

    Screenshot of PhotoPrism showing lots of dogs in the pictures

    Photoprism has Tensorflow built in. Their pre-trained model doesn't get everything right (for example, it marked a plate of squid as 'baby'), but it is pretty good. My wife is placing a bet with me that I probably have more than 20 000 photos of Cookie. The moment of truth will probably be in a day or so, when all 200 000 ish photos I've got (over the last 20 years) are finally imported, indexed and tagged.

    I was able to set up PhotoPrism in Docker Compose in this manner, and access it at https://photos.mydomain.com. While I'm currently importing and indexing a quarter of a million photos, I've been happy with the speed, performance and features and have decided to sponsor the project. It's nice to see people working on useful software that works well and looks good.

    I'm pretty happy with the progress I've made on this. I might make a tutorial for the more complex parts of this project later.

  • 21 Days of Indoor Projects

    Talk about great timing. Three days into our 14 day quarantine in Singapore, that got extended to 21. I found plenty of things to do.

    Cooking in a small space

    • I have some experience cooking in tiny spaces with limited equipment and ingredients, from camping and travel adventures
    • Food is provided during this quarantine period, but we requested that the hotel change all of our catered meals to 'salads only' since we expected lots of food delivery from friends and family
    • We got takeout the rest of the time, and very occasionally 'cooked' with the rice cooker and 1.0L electric travel multi-pot

    Most often, we made soft-boiled eggs and I've developed a fairly robust recipe for it. I used to make it at home on the stove, but found that with some adjustments it worked out well in the electric multi-pot as well.

    How to make soft-boiled eggs in a hotel

    You'll need a kettle, and a vessel that holds heat well that has a cover. Or just a travel-sized multi-pot.

    1. Boil water in multi-pot
    2. Turn off the heat when it is boiling vigorously (bubbles are rolling on the surface)
    3. Add 4 large room temperature eggs into the multi-pot. Make sure the eggs are completely submerged in the hot water. Cover.
    4. Set a timer for 8 minutes, get ready to have more boiled water (from the kettle) by the end of 8 minutes
    5. At 8 minutes: add fresh boiling water to the multi-pot
    6. Set a timer for 4 minutes
    7. After 12-13 minutes in total, take out all the eggs and put them in a bowl. Cover with tap water
    8. Crack each one. If they are still too runny, put the rest back in the multi-pot for an additional minute or so

    You're basically trying to keep the water temperature at around 165F / 75C that whole time. This takes a bit of trial and error. It really depends on the size of the eggs. And your pot!

    Various computer projects

    High speed media server

    Even though I already have a home-based Usenet media server, I was unhappy with the i3 CPU and slow Internet speeds from its data center. I decided to switch my entire setup, prioritizing uplink speeds. I picked a data center that was promising 20Gbit/s speeds. I moved all of my services over to it within the afternoon and was happy with the performance. I'm a fan of the -arrs services for automation and organization.

    Chromecast in hotel networks

    Chromecast is a nifty little gadget but it has notable issues in networks you don't control. Like in hotel rooms. I was unable to set up the Chromecast on the hotel TV because it can't complete setup. There is a port forwarding issue.

    I managed to get around it by using my laptop as a wifi point, but that was somewhat unwieldly. In the process, I learned that tools like Connectify work for this precise purpose. Not having my Win10 laptop on this trip, I used Mac OS X's built-in Internet sharing feature. My hotel room has a weird setup where the TV needs to have the network cabled plugged in to even boot up, and turns off after some time if the network cable isn't there. So in my workaround, I was able to get Chromecast to work but the TV would keep shutting down.

    It looks like the company behind Connectify also has a suite of related services like Speedify that would have served me well back in my road-warrior days. Those days are long gone, but I am interested in any and all technology that is travel-adjacent.

    Next time I spend extended amounts of time in hotel rooms, I will probably bring my Roku stick instead. It appears Rokus don't have the same setup problems because they create their own temporary networks during the setup process.

    Eventually, we went back to basics: a laptop connected to the TV using a HDMI cable. It's not as convenient as other media consumption methods we're used to, but at least it works.

    And with the high speed media server setup, we were able to watch things at significantly higher quality and speeds.

    Data liberation

    Towards the end of my 21 day quarantine period, I started a data liberation project to completely wean myself off Google. I don't think I'll be done before I leave; it's a huge endeavor.

    I started by using rclone to mount all of the Google Drives that I have access to. Then I setup a separate server on Hetzner, which will be for my personal cloud only. I selected Hetzner because of the variety of hardware available, friendly price point, and the ability to quickly attach storage through storage box add-ons. Most /r/SelfHosted and /r/HomeLab projects describe DIY projects using hardware that you put together. Having just built a gaming PC at the start of the global chip shortage of 2021, I do not have the desire to acquire any more hardware at this point. Leasing servers is the way to go for me.

    My main priority is to move all my files from legacy clouds (mainly, the several G-Suite drives I still pay for because I have been procrastinating at moving my data).

    Using rclone, I've managed to send all of the data from different drives into my server, where I then dedupe files using rmlint.

    I now plan to setup seafile and use that as my personal cloud, accessing these files on files.mydomain.com using the built-in reverse proxy features from the swag Docker container.

    Photo liberation

    I also have multiple copies of photos from different Google Photos (different accounts), and iCloud (several accounts as well). I am doing the same thing as what I did for my data: pull out all the photos into one location (my server), dedupe, and then make them available through photos.mydomain.com using either PhotoPrism or PhotoStructure.

    On privacy

    While my data liberation projects are definitely privacy-driven, I have simply become increasingly unhappy with certain consumer products, even the ones I pay for. Drive is extremely slow once you've got terabytes of data. Transfer speeds are abysmal. As my thoughts on technology and privacy change, I have also begun to take the steps to remove Google from most aspects of my online life. Search, for me, was replaced long ago by DuckDuckGo. Email is now Fastmail, which I am very happy with. At this point, it is important to me to be in control of my data. I also like the idea of being able to directly support the developers who work on the tools listed above, through sponsorship or subscription. I've noticed that my views are not fringe, and many people are likewise interested in taking such steps. Sadly, it won't be an option for everyone because of the barriers involved. (For those, perhaps a solution like Helm might be the way to go)

    When I'm out and about in my daily life I only have an hour or two of free time a day, more on the weekends, to work on things like these. Today is day 18 of my isolated quarantine before I'm let out into the general public. I have completed most of the above projects (though photos work is still ongoing..). I will share more specifics about the server work when I can!

  • Intersectional Grieving

    I am processing a metric ton of grief this week. I am at once in pain at the violence that the Singaporean state (and many states) is inflicting upon trans people, with the support of transphobic people of all backgrounds, including gays and lesbians who really should know better than to weaponize their own identities towards our trans siblings. I am at a loss for words on how to process the fact that a man shot and killed eight people in Georgia this week, most of them Asian women. That not one, but several, Asian and Southeast Asian elders were randomly targeted and assaulted no more than 15 minutes from where I live.

    It's a lot.

    Because I am from everywhere and nowhere, sometimes at all at once, I feel the grief of all of these communities simultaneously as a queer Southeast Asian lesbian cis woman of Chinese ethnicity currently now living amongst the Chinese diaspora in America. All of the different shapes of grief simply collapse into one giant mess.

    There are many reasons why I don't feel like I get to participate in any of this. I am not the same kind of immigrant, therefore I don't feel like I get to speak for the Asian women of a different background whose lives in America are so different from mine. I am not Asian-American, and I therefore don't carry with me the same degrees of pain that many Asian-Americans have felt since birth or since they got here. I speak English and am not singled out very often for being 'different', where I live here, because "I sound American" (I have different English accents, you should listen to me speak at home or elsewhere in the world. My English accent is a chameleon with of a life of its own that I do not understand). I am Singaporean, and not generally perceived to be a threat by other governments; extremists of most persuasions do not have a specific beef with me.

    None of this week's grieving is specifically about me.

    I watched with horror as I see a list of victims presented with mangled names. Soon C. Park. Hyun J. Grant. Yong A. Yue. It was a mistake that was quickly corrected, but I could not help but feel the indignity of having their names mispronounced in death on a literal medical examiners' table, after a lifetime of mispronunciations. After already having made the concessions of taking on easier names, of putting your family name at the end of your name, even if it didn't make any sense.

    I am ashamed that I paid two hundred and fifty dollars to delete my Asian names from my legal papers, that I kept a hint of the name that my grandfather gave me as initials: L T, just so that I can have an easier time at the DMV. At the time, I did not feel like anybody else needed to know. It would be mangled, anyway.

    I am a queer woman who has moved to this country not for more money or more opportunities, I did not move here to escape war or political oppression (well, kind of, but I cannot possibly compare it to the people who have literally fled for their lives). In the grand scheme of things, the math of my intersectionality still works out for me: Queer English-speaking cis women with the right passports working in tech = there aren't many other places that we can call home.

    But it doesn't help that some weeks more than others, things don't make sense precisely because of all of the other things. What will my life be like as an Asian elder in this community? Will I have to learn kungfu so that I can beat up my assailant? What will our children's lives here be like, as the mixed children of Singaporean-Malaysian-Chinese-Indian-American lesbians? Will someone make the leap from overt benign racism, into simply overt racism, when I least expect it? Will the person who keeps calling me Chinatown as I walk past him one day, when he's having a bad day, do something a little more? Do I represent the kinds of opportunities he feels I've taken away from him?

    I recall a conversation I had in my teens with a teacher. I had written a letter, never sent, to the US ambassador of Singapore. Dear ambassador, it went, I think I am gay and I cannot think of any country I can be myself in other than yours.

    A teacher caught wind of it. A teacher who had lived in America, to be clear. For her faults (she was extremely nationalistic, to a fault, and also probably a racist), she explained that I would be giving up one part of myself for another. Sure, you can be gay there, but you're going to be a minority in other ways. At the time, I was outraged. What a thing to say! If anything, I should be ashamed of being a member of the oppressive ethnic majority here in my own country! (I am! Still!)

    But it means that I am never really in fear of anything overt or covert back home. That many people trust people who look and sound like me. It also means that I don't really have anything to prove. I don't have to be particularly successful. can be a doctor lawyer engineer if I wanted to. If I wanted to, I can be anything I want to be back home. Or nothing, if I chose. There is no expectation riding on me to represent my community. My community is my society.

    Here, even if I feel like many of the struggles of the Asian-American community are not my own, I am starting to be subsumed by it. The things that live in my head: am I Chinese? Am I Southeast Asian? Am I (some very specific group of some ethnicity)? Are really just my struggles. I am reminded me the Singaporean Chinese people like me, who, unlike me, were actually victims of racial assault elsewhere. I am reminded of Vincent Chin, who was killed by people who were angry at perceived Japanese domination in the auto industry in Detroit, despite not being Japanese at all. I am reminded of the Chinese-Filipino Asian elder who was beat up, obviously, because he looked Chinese, even if they might not see themselves that way. I am reminded of all of the micro-aggressions of the ni-haoing crowd directed at all people who look like they should know the term and who sometimes face violence when they do not respond, even if they are Thai, Hmong, Vietnamese, Korean.

    Ultimately, we all play our bits in white supremacist structures that overtly support these acts of violence by calling them 'just a bad day'; that covertly support more acts of violence by playing down our grief. If you are grieving this week, and I say this particularly to the people who don't feel Asian enough, who don't feel Asian-American enough, to Black-Asian people who have to hold the grief of all of their communities at once, your grief is valid. I won't pretend there's a single imagined community here that will support all of your grief, but your grief and despair is valid and you can feel whatever you want to feel about any and all of it.

    We shouldn't have to be attacked for how we look or who we are; and we shouldn't have to minimize our grieving because of how our cultures are perceived, grossly and inaccurately, by the same people who are the cause of our grief.

    Maybe one day I will have more eloquent thoughts on this topic, but for now, this is it.

  • Travelogues, Ten Years On

    It was the summer of 2004.

    I don’t remember things like seasons before 2018 (I did not live somewhere with real seasons until 3 years ago). Unless they had to do with travel. In 2004, I was a college freshman in a school in Singapore that was also the only one at the time which followed American semesters, terminology, and that conferred you with things like summa cum laude when you graduated. Accordingly, we were also the only school that used things like, “summer”, “spring”, “fall”, “winter”.

    Summer of every year in college was glorious. I knew it at the time, probably, but maybe didn’t know exactly: all four summers would be the best days of my life. Just endless amounts of time to not-study, for I was not a very good student (my undiagnosed autism and ADHD then made it very difficult for me to stay engaged)), and unlimited amounts of time to really just do whatever the hell I wanted.

    Like many students in Singapore, it had always been an ambition of mine to study abroad. I wanted to live and study somewhere with... seasons. In hindsight, I probably just wanted the space and bandwidth to figure out things like ‘am I gay’, ’can I do certain things recreationally’, ‘is there a path beyond let’s marry some man at 25 and have babies and live in a HDB flat’, and I probably wanted those things more than I wanted to study abroad.

    The realities of a middle class life in Singapore set in quite quickly. The deal I struck with my folks was: ”If I stay and study in Singapore (the economically sensible thing), I guess I can... travel... regionally... with the tens of thousands of dollars that you’d be saving?” (They said yes, but that I still had to pay for those things myself. Years of studying amongst real-life Crazy Rich Asians did not leave me with a reasonable understanding of money.)

    Much later, some family friends remarked at Chinese New Year: Mr and Mrs Tan, isn’t it marvelous that you allowed your daughter the space to go out and see the world? To which, they laughed: there is no allowing or disallowing with her. She’s so strong-willed, our options with her have always been: ok do what you think is best. Just remember to tell us about it. As soon as you can.

    (Thanks mum, dad! If you’re familiar at all with Singapore, you’ll know that that’s... exceedingly rare. I feel extraordinarily lucky.)

    And so I worked two to three jobs all through college in order to fund that life. It helped that I loved a good deal so I made it my goal to get the best prices on everything. If I had $100 in my bank account that was me going off to a nearby country for two weeks. It also helped that I was fine with—perhaps even saw it as a teaching moment, or a story to be written about ten years later—that I really wasn’t bothered by things like creature comforts. I was also not bothered by creatures. $2 rooms in Kolkata and $5 beds in Bangkok. Those felt more free than the small bedroom in a high-rise building I grew up in. Now that I’m a little older, I know those felt liberating because those were different from the comforts I grew up with, that I could always return to. They were novelties. They were stories to tell.

    I hope I have better stories to tell now.

    —-

    In the summer of 2004, I woke up every morning and I got into a little boat. I paddled aimlessly. I tried not to knock my head with the oar. My ex, bless her soul, did most of the paddling. We walked around from bed to beach to estuary lazily with all the time in the world. Of college kids who had April to August to do whatever they wanted. Most of our peers were doing internships, chasing good jobs: I wanted to row boats badly and wear not too much clothing for as long as I could.

    The plan was hazy. We would get up from bed a few days from now, whenever we felt like it, and head for Cambodia. We would take several modes of transportation from the beach towards the mainland, where we would board a minibus for a town named Trat. Then we would find a motorbike taxi, and we would tell them to head to the border. There, we would disembark from the motorbike taxi, and then we would find a car, any car, headed for Phnom Penh. That trip involved an overnight stay in a small Cambodian town. We weren’t fazed by it, but we weren’t prepared either. Especially not with the minimal clothing that was the ethos of my travel at the time.

    On arriving in this small Cambodian border town, we checked in to a room in a wooden structure that had seen better days. Our budget was $2, so we couldn’t complain. As with all such huts in Southeast Asia, the highlight of the room was the dirty and dusty mosquito net. It’ll only be one night, I told myself.

    As we walked around the small Cambodian town the main people we saw who were not working in the hotels, who were not pedaling autorickshaws, were older men from a certain continent with clear persuasions of the nature that would lead them into criminal trouble back home. Being as sheltered as we were, we felt relatively carefree and perhaps even safe. After all, we were... almost 20. We were expired goods for the men who came to this town.

    As a person on the spectrum, the true nature of the things that I saw and the sticky situations that I may have been in only revealed themselves later when I was already detached from that moment. Ah, so that’s... what it was. I mention this because I have been frequently guilty of saying that I never ran into any trouble traveling solo; perhaps I was truly lucky. Perhaps I, as an autistic person who has a complete inability to read new social situations, just didn’t see what was right there. This episode comes back to me sometimes as I think of the leering men who said things to me like, I can no longer be with western women, they don’t know how to treat men and they are not attractive. At that time, I simply did not have the context. I certainly found it weird and strange, but today I would have the tools and the experience to have found... disgust, perhaps.

    That night was over relatively quickly. The next morning, we climbed into an old Toyota Camry that was bound for Phnom-Penh.

    Five other people climbed in.

    [To be continued..]

You can also read by tags.