The train station was full of people: “delays while investigating activated breaks”, the update said. As usual, I thought hell with that, and headed to work from home in the morning. 

All day I was debugging my code on the physical Android device since I couldn’t make Google Pay button show in the simulator. Strange OS: so, I was debugging my app, clicking my buttons, trying to show that damn “Google Pay” button, then boom – a popup across the screen – subscribe to Gemini, free for 3 months, click now to subscribe. Coming from iOS, I was quite surprised to see the ad right in my app.

 I’m not following Matthew Walker’s advice from his book: not getting up at the same time every day, even on the weekends. I want my extra hour or two on weekends. On Saturday I got up at 9, and on Sunday at 10. If not going to Boston on Wednesday I would’ve worked from home, so I wouldn’t have to get up early on Monday for the 9:30 standup, but the plan was to work from Cambridge on Thursday and Friday, so I got up by 7:40 and headed to the office – not an easy Monday!

Abhi was in the office already: we chatted about my picnic in Central Park and his Ikea wardrobe assembling over the weekend. During the standup I demoed my recent work, email receipts UI, which is almost done except for the Android. The change may sound weird at first: for the first five tickets we don’t ask the email (to avoid “cognitive overload” for new users) – we just send SMS; on the fifth ticket, we ask for an email for receipts and stop sending SMS. It sounded strange to me the first time I heard of this flow, but now I like it: we don’t bother new users with everything on the first step, and then we do gather emails for more accustomed users. Sunny said it wouldn’t save us money if we asked for the 5th ticket cause most people buy just one ticket. We argued for a bit, and then I promised to gather some stats on this question.

Meanwhile, our SMS spammers are back, despite disabling the developer configuration (“localhost”). XK is at the top now; turned out it’s the code for Kosovo. And Sri Lanka, again; Sunny said we can’t ban Sri Lanka cause of the cricket World Cup taking place in NYC. India, Pakistan, and Sri Lanka – that is where cricket is super popular. I ran my script and showed we sold 0 tickets to Sri Lanka phone numbers. But Sunny said no, still no, it’s cricket world cup. We’ll ban them in two weeks.

Then I was just getting started with Android. Fighting IntelliJ, then turned out I needed Android Studio – I thought those were the same things.

Kenny started. They put his desk somewhere far away on the other side of the building; but on the first floor. We chatted with Abhi and him for a while. He saw my book "Designing Data Intensive Applications"; he's reading it too. He seemed cool: communicative and geeky too in the right balance. I'm increasingly liking my team.

In the evening we were buying tickets to Boston for Wednesday.

 I was reading Caro’s “The Power Broker” pretty much all Sunday morning. Moses’ time at Yale, then Oxford, then grad work at Columbia School of Political Science, then he went to a newly founded research institute for government employees in NY. 

In NYC he was a smart young man from a wealthy family, but at Yale – he was shocked – he was a jew in everyone's eye. So at Yale, he became an advocate of merit-based selection in clubs, sports, etc (rather than class or family-based as at that time). Then, Oxford – that was the time of colonial Britain – and Oxford was the center of British conservatism; the argument was something like this: other nations are young and not grown up yet, so colonial Britain had to lead them on the path to civilization. So Moses picked up those views and brought them to the context of the American government. Only well-educated people should be governing, he argued, not even all Ivy League – only Princeton, Harvard, and Yale graduates should be selected for important government positions. Being discriminated against as a jew made him a meritocratic idealist, but, somehow, that didn't contradict his elitism in education. People who started working, built themselves, and finished evening classes were fundamentally broken, he argued in his Oxford theses.

By the 1910s the city didn’t even have a budget; employees received raises without accounting for how much money the city had. Slowly, the newly developed accounting techniques were picked up by the government from businesses. It was an era of idealism, a belief in efficiency and the use of science to improve everything; Ford’s ideas of automating conveyors led the way for demand for government efficiency. So, Moses came up with this idea of everyone's efficiency as a single number, and then paying according to that. That was a huge failure, of course.

Can't wait to read the next thousand pages about how Moses was screwing up New York.

 Woke up at 7:10, then around 8 (on Tuesday).

Then worked all week

  • Tuesday: Making a new screen in React Native, the receipt options selection
  • Wednesday: AWS SAM broke again, and I spent a day recovering, ended up making a new lambda in AWS
  • Thursday: Working on the new screen
  • Friday: Finished the new screen

Thinking if I should plan some time on Sunday and make another screen, so I can focus on new things on Monday. Why? It should be easier and now I can finish it in a few hours. And it'd feel good to finally finish something coherent and moving on Monday. I can commit on Monday morning so nobody thinks I’m trying to get ahead of anyone working on the weekend.


Woke up around 4 and couldn’t sleep. Too hot? Perhaps. Stared at my phone for a while, then opened Apple News – what is it there for me? That one recommended to me Gary Shteyngart’s essay in the Atlantic about going alone on a Caribbean cruise for seven days and talking to Ayn Rand fans from New Jersey. Turns out it’s a whole category of essays started by David Foster Wallace – a writer goes on the cruise and then complains about it.

Despite my attempts at bridge building, the very sight of me (small, ethnic, without a cap bearing the name of a football team) elicits no reaction from other passengers. Most often, they will small-talk over me as if I don’t exist. This brings to mind the travails of David Foster Wallace, who felt so ostracized by his fellow passengers that he retreated to his cabin for much of his voyage. And Wallace was raised primarily in the Midwest and was a much larger, more American-looking meatball than I am. If he couldn’t talk to these people, how will I? What if I leave this ship without making any friends at all, despite my T-shirt? I am a social creature, and the prospect of seven days alone and apart is saddening. Wallace’s stateroom, at least, had a view of the ocean, a kind of cheap eternity.

I have never been on a cruise, but I feel like if I had to go on one, I would be just fine in my cabin reading books all day and quoting them all over my hypothetical cruise essay.

I went for a run around 7. I thought it would be less hot in the morning, but no, mornings are quite hot too. Sweating like shit.

I cooked a good breakfast (buckwheat fried with mushroom, onion, and egg), then worked from home all morning, moving to a cafe in the afternoon. Figuring out React to Native and back interaction. That turned out tricky. Native is Swift, on iOS, but there is also the Android native. Apple Pay and Android Pay are all processed in native code. That was unexpected work for what I thought would be a simple validation action when clicking on the "Pay" button. So I worked till 7 trying to finish at least the iOS part.


 Woke up too late; about 8:20 or so. I couldn’t decide if I should bike to work or not. Something was telling me not to. I was pushing back: do it and you’ll be much happier person today. You’ll get too sweaty, it’s a hot day, and it’s quite late already – the other me was thinking. I almost dressed in cycling clothes when I decided no, not today, I wanted to read that Mark Erikson’s Redux slides in quiet. The train was crowded again, but I found the last seat in the first car.

Redux is a quite interesting framework for storage. Combined with React – such a nice decomposition of problems. There is an immutable storage, a state, then pure functions called reducers take state and action and produce another successor state. That state is global, and UI components are state machines reflecting that state. Finally, hooks allow interested components watch state changes and render and re-render. Interestingly, they are pushing against templates, those from MVC pattern, saying that “templates separate technologies, not concerns”. So they are not shy of mixing JS with HTML tags as far as those are both used for rendering Views.

Getting up from the subway on the escalator I realized it was heavily raining outside. Pouring, with thunder. I didn’t have an umbrella, but even with an umbrella it’d be hard to stay dry in this rain. Good I didn’t bike – my guts were right this time. I read the emails; “Severe Thunderstorm” was delivered around 9:20; whoops, the weatherman got caught by surprise, again. What’s the weatherman gonna do now? The weatherman is already too noisy mispredicting the rain; should they start mispredicting more heavily? It’s better mispredict the rain than mispredict the sun after all.

The office seemed empty. The chat was quiet too. So, I just focused on my work. Wiring Redux, and making the UI display my states. Four states I counted. Not too bad, but those states are a bit tricky.

In the afternoon I ran into that lady, Olga, whom I saw spoke Russian to someone another day. We spoke; turned out she went to the same school in Moscow as me. Twenty-seven years she worked in this place, and next week she retires. Olga didn't look that old at all: she was thin and wearing stylish dresses and makeup. She introduced me to the other four guys: they all worked together for over twenty years, old-timers. They worked in Brooklyn before moving to the current downtown office. They dislike how everything changes these days. "We were just young," – Olga says. Ed recommended a bunch of food places around, though they are not as good as in Brooklyn; but the thing that he liked Old Xi'an while I thought Famous Xi'an was way better.

I worked till 7 trying to finish that Redux to UI states mapping.


Woke up at 7:10 with the alarm. Then at 7:20. Then 7:30. Finally, got up; half a cup of coffee, and goat yogurt with blueberries (it's no different than milk yogurt). I went to the train by 8:20. It looked hot outside – 69ºF in the morning – I didn't need a second layer anymore, just a t-shirt. The train was crowded; I went to the first car where I was able to find the last seat. The middle cars were jammed with people. I never understood why people jam in the middle when they can walk just a minute for less crowded cars. Then, on the train, I got cold in my T-shirt: the A/C was too strong. I almost had a sore throat by the time I arrived. 

After the standup, we met with Will and Ryan and talked about some changes in the receipts UI. Will talked about "cognitive load" in the UI, when a new user buys a ticket we don't want to overload them with options. On the fifth purchase, we will ask them to provide an email if they want a receipt. It felt foreign to me at first, but then I started liking this system. 

So then I worked on the UI client changes, learning React and Native, and started looking into Redux – the local storage. 

In the afternoon I had a 1:1 with Will: he gave me some feedback that made me – I will call it – "depressed". No, not really depressed. I will say it made me feel like a swirling veggie salad, what else to call it, unable to write about it and overthinking. Nothing bad, just hard to process. So I will not write about it cause I will run in a loop if I try; I will just say it caused a complex emotion to me. I'll just say that at the core of it was the feedback that I created too much chat traffic asking questions that I'm able to figure out on my own, and that reverberated with my view of collaborative space. So I will try to work more independently. Part of it is that I try to work remotely as if we sat next to each other, but it is different: in the chat, I can't see how busy are other people. I de-taste these remote work modes, but it seems there is no way around it; the world has changed and I will adjust to it.


 Woke up around 7:40, then struggled to get up till 8:20. No office today: so much time even if I get up late. Coffee, muffin, then sipping iced tea.

Recovered my setup in the morning. I configure something neatly in the office, then I have to redo it at home. Makes me keep good notes. Good notes are hard to keep, it turns out.

M replied in the morning about AWS SES validation. Says we should not send emails from the root domain, only from a subdomain. And some reasons for that. Not sure about it, but it's noreply@ email anyway, so who cares. I should be fine.

Then I went for a run during lunch. It looked sunny and pleasant outside. 70ºF – how hot is it? Seems borderline hot for running. No, too hot. I cut it at 30 minutes, not finishing 5K. Too hot. 

Listened to the New Yorker podcast; they invited Robert Kennedy, Jr. He can barely speak; his voice is rough and breaking up. He is running for president this year as an independent. They ask why won't he condemn Trump if he disagrees with him; he says cause at the mental support meetings for heroin addicts they tell them not to hate people. He was addicted to heroin for 14 years and still goes to support groups many times per week. And then another Russian podcast about how Putin's propaganda exploits Western democracies' processes to discredit the ideas of democracy in Russia. Presidents elected by minority vote, etc. Putin is supported by the majority and leads the majority, and thus is the best democracy, – in this view. It's the understanding of a majoritarian democracy. Latin America has many of them, that converged to dictatorships by the way of populist rise. Western democracies are liberal democracies – the majority cannot go against individual liberties.

Then I met with Ryan in the afternoon. He was very helpful in my UI adventures. This thing called Redux, a local store from React Native: I had to make a few objects, then define mappings, then loaders and "reducers". Then Ryan said I can figure out the rest. Okay, I surely can. Then Ryan came up with the idea of another screen inside the profile screen. Alright, I'll practice my UI skills.

And then I troubleshoot the margin, and padding, and animation, and I seem to be getting better at it.

I decided to check out Apple News trial. It's not too bad actually. They recommend me stuff about the office. 5-to-9 replaces 9-to-5, they say in WSJ. People get up early at 5 to get to the office early and be ahead of everyone in the day. The boss notes when someone is in the office before anyone else, they say. Ah, what BS jobs people work, whose purpose is to get ahead of anyone in the boss' eye. But it actually did inspire me to come to the office early, maybe by 6 or 7 sometime. Bike at sunrise, then plan out my day and do most of the work before lunch. I will try.

Woke up around 8, hardly. Running to the train by 8:20, without coffee. The train was quite empty, running on time. Reading the Subway photo essay book. It starts with a lot of “els” – elevated tracks, predecessors of the underground. Before coming to the office I grabbed EBC (egg, bacon, and cheese) on a roll, and then got to the office by 9:20.

Many cops were standing in the lobby; metal detectors were installed at the gates. Lots of news in the morning. Firstly, an article was published about us on the website called streetsblog.org. People were discussing it in Slack. A funny piece of local journalism; almost a corruption investigation. In the scoop journalism style, the piece claimed we're ditching our OMNY contractor – OMNY has been behind the new turnstiles on the New York subway, that allow paying for the ticket with an Apple watch, phone, or by other modern payment device. Those were deployed in 2019 by the contractor Cubic, who are behind the development of ClipperCard in the Bay Area, and a similar transportation payment system in Boston. Since 2019 they have been unable to deliver even basic changes for years, not to mention some major requirements. The article claims they were acquired by private equity firms, were unable to keep their developers, basically running in maintenance mode and now charging us increasingly large fees, just because they can, while nobody is able to make changes to that system anymore. Typical story. Good article; I liked it; and even subscribed to the author on Twitter, though I don't use Twitter anymore.

Second, the cops in the lobby were there to check people entering the building for public hearings live-streamed on YouTube. They announced what the article claimed hours before, that were ditching the OMNY contractor. Then various people complained: a man calling out for some stations not announcing arrivals for blind people; an autistic man explaining that the system is too complicated for people with disabilities. The representative of the organization called "Passengers United" sounded more cheerful and to the point. Then other reports from management: almost 3/4 of passengers use tap-and-pay at the central stations, but on the outskirts, the majority still pay with MetroCard. MetroCard is 30 years old, from the 90s, when it replaced tokens. Now, with the breakup with OMNY, MetroCard stays with us for longer. I listened to these reports for a while in the background.

I just thought how "professionally" this all announcement is done: news of this terrible corruption were leaked in the morning, then announcement of ditching this rogue contractor. Everyone is happy. A touch of a professional politician here.

From the other news, they say copper is at record highs with a copper penny now worth 3 cents.

What did I do for work? Finally, animated the button. What else did I even do? Seems like so many pieces moving, but nothing finishes. Looked into the VPN setup, but didn't finish it. Nagging about DNS records update. The day went fast. I went back home by 6.

 Woke up around 7. The train was not busy: I read Maslowska on the train. It's getting quite funny. Alisa is the good girl who won't let them smoke and drink. What does she want though? The other girls just want drugs from Andjei, but what does Alisa want?

Она тогда говорит: Алиса, и подает мне руку с золотым колечком, которое я сразу замечаю. Она учится в экономическом институте, говорит Каспер и кладет ей руку на задницу с таким видом, что я даже удивляюсь, как это он не спустил от удовольствия. Она мягко, но решительно снимает его руку и говорит: но параллельно я заканчиваю курсы секретаря со знанием немецкого. После таких курсов меня возьмут на работу везде, в любую контору, в любой секретариат, везде. ...

Выглядит она примерно так: первым делом глухая водолазка с намертво закрытым горлом. Волосы серые, мышиные, заколотые на макушке заколкой с надписью «Закопане 1999». На шее золотая цепочка с крестиком поверх водолазки, на что я еще перед этим обратил внимание. Дальше она выглядит так: штаны от брючного или летнего костюма, книзу суженные, плюс ортопедические сандалеты. Девица из разряда: домашняя курица. Уберет, обед приготовит, вернет в лоно католицизма.

At work, I was trying to make the client UI. Simple things: a button, an input box, some sliding-down animation. I'm debating on asking Ryan to help me with the UI, but then, say, it'd be good to understand the client a little bit with this fairly simple UI work. So, I almost finished the client by noon, except for the animation. The animation didn't work: I started monkey-coding various attempts before I decided to stop and do something else.

There was an end-of-spring demo meeting after lunch. One demo, second demo, then calling for more demos – everyone silent. I thought I'd show my buttons and text boxes. The other ten people didn't show anything. Seems like people don't really like this demo meeting and rebel against it. I'm still clueless; and I don't want to care about office politics.

In the afternoon I went for coffee, and then sat outside the building in the garden; it was cloudy but warm. The cafe was crap, called Grumpy Cafe; but their $5 coffee is a way-way better than the coffee from the deli for $2.50. Dang! I figured out the emailing lambda. Turned out AWS SAM worked fine, just shows the OOM message on every request. But things are done; updated. Hell with this OOM message – it's just for testing.

Randomly, I learned about Ezra Meeker who traveled the Oregon Trail on an ox-drawn wagon while young, and then wrote extensively about that trip all his life. Makes me feel better about my China diary that I couldn't finish for almost a year already. 

In the evening we grabbed a pizza and watched the movie recommended by Gandhi called "Shortcomings", a light comedy that turned out deeper than it seemed at first, about the Asian-American identity crisis and inter-racial relationships. The scriptwriter is the protagonist, basically, as I understood – he's the 4th generation Japanese-American; his parents grew up in Japanese detention camps during WW2. I think the story makes more sense placed in the 2000s. America changed since then. Maybe I'm wrong about it. It's also interesting how gay identity is normalized in the movie mirroring the straight identity, but the race race is a source of problems. Except for the parents.

Slept late by 1am.


 Woke up just before 7. Shakshuka for breakfast. My kind of shaksuka: with shiitake mushrooms, and without cayenne pepper.

I thought I’d run some paperwork in the morning before I go to the office. Called Fidelity first, cause the error came from their side. Talked to a girl from support for 30 minutes: she tried to help, but couldn’t. She said let’s try this and let’s try that, and sorry about that, and she went to talk to someone, but not much in the end. Maybe she’s from the South – nice and cheerful. Then I called TIAA. When the guy on the other end said “retirement”, I could sense he was about to retire. He was slow. What was going on with my account he had no idea. Then finally called our HR – they just honestly said they have no idea what to do with my issues and asked me to email them. So I described all that I did, highlighted my problem in separate bullet points, and attached some screenshots. Who’s gonna look into all of that I can’t imagine. Feels like it needs an entire investigation team. So let it start with this email, and let it bounce between different teams for a while. So hard, what if I was a bit of a funky dumb guy? It’d be immensely difficult to sign up for those benefits for a dumb guy.

It was about 10:30 by then, so I thought I’d just stay work from home. B was running meetings all day, so I listened to music again. Discovered this strange track by Shed, what the hell:

Я люблю большие суммы, я иду забрать их

Похуй какой кипишь, я вступлюсь за своих братьев

Я люблю любую суку, что лежит со мной в кровати

Я забуду эту суку если мусор ее батя

Это больше похоже на язык улицы чем тот перевод Масловской, который я читаю. Где «мама дорогая» и чего-то там «в одном флаконе». А тут прям Анжей из Польско-русской войны.

 

Meanwhile, turns out Shed playing in Brooklyn all night this Friday. Thinking of spontaneously going. Why not, I just discovered him this week.

My unfinished code for emails was left on the laptop in the office, so I couldn’t continue working on it from home. I should figure out some kind of cloud sync. Or just make the habit of checking in the code by the end of the day. Anyway, I decided to look into the client instead. React Native coding with CoPilot – how hot is that? I tell it to draw me this, and send that request, and kind of makes it with bugs, and then I fix it. Even proposes to structure it in an okay way. Then I watched some videos from Udemy on React Native and figured there were three main pieces: iOS code, Android code, and JS logic between them. And then got stuck in making a text input not look ugly. I would rather ask Ryan about it tomorrow.

I went for a walk in the evening. So easy to just get stuck with a computer and not leave the house, and then get a headache from not moving at all. It was still rainy outside, but warm. Some people dressed in jackets, and some walked in bras. And cloudy, grey, and gloomy. Glad we get these days sometimes, but not too many of them.


 Woke up at 7 without alarm. It was raining outside. I picked up an umbrella and headed to the train. The train was not too crowded, maybe more hybrid folks stayed home cause of the rain today? I read somewhere later that before COVID 5M people were riding the subway daily. A couple of years ago it was under 3M. This year about 4M – still well under before the pandemic. I read Maslowska’s “War” on the train. Magda, Angela, and now Natasha got in his place; Natasha is a crook, it seems.

In the office by 9. No meetings were scheduled, and not many people around. Except Paula – she’s back, running meetings all day; so I listened to a lot of music. Turned out Wax is Shed. Wax is his creative pseudonym, among others. But Shed is Rene Pawlowitz from Berlin. Shed’s music was inspiring; so much so that I played with Logic Pro a little bit after work.

For work I read a bunch of pages about AWS SES, that is email sending service. Learned about DKIM – that is domain signature for emails. So why does the spam still exist; why do I still receive emails from Amazon about clicking to refund my mistaken expensive purchase? I guess those do not fake the domain anymore – they just look like an authentic email from the company. Domain in email is now somewhat reliable, if it supports DKIM.

Finally, installed CoPilot. I’m late to this game. A bit disappointed at first – it doesn’t exactly read my mind and knows what I wanna do.

By 6:30 I was running to Apple Store to fix the cracked screen on my phone. The guy told me to just upgrade my 5-year-old phone, but I explained that there was no way I was gonna be giving it away – I’m passing this phone to the next generations, kids, grandchildren, etc. Then, he explained, that they actually were gonna replace the screen and not swap the phones as they used to do, and it was not gonna help with the battery life unless I asked to replace the battery too. Then, he told me my battery was probably drained because of all the background app refreshes that I never disable. I got so sleepy – it must be from the second coffee in the afternoon – I thought fuck it, I’ll keep going with the cracked screen. What’s up with Apple Store these days – they just convince you not to pay money.

I thought I’d stop by Trader Joe’s since I was in the hood. Picked up some Ube cookies – they are back on the shelves. Omg I love these cookies! – the cute cashier girl said. Yeah, they just stashed them for a while and didn’t sell anymore, I said. They are seasonal, and now they are back, she explained. What are you listening to in your headphones, she asked. Oh, my, what am I listening. War and scare and blood in faraway countries. A podcast, I say. No one tells me just a track, she says, nobody listens to music anymore. I listen to music all day at work, and a bit tired of it, just now I wanna hear someone’s mumbling. Oh yeah, music at work, do this, rhythmically do that, she plays a robot. She tells me about a track called Kambuforia, it’s cause she likes Kambucha, which is what relaxes. Have a good night, honey, she says. Honey? Is it cause I shaved this morning? Or the cause of my cool long raincoat?

Haha, you look like shit, B says when I get home. She worked from home all day, while outside it was raining pretty much non-stop all day. I definitely looked a bit like a stray dog left alone in the rain. We ate comfy tofu Korean soup with rice for dinner. I love eating Korean soups on rainy days.

 Woke up at 5, then tried to sleep till 6, but I couldn’t. I had some dreams, but boring as hell – I woke up, walked in the room, open the drawer. What’s the hell. Can I see interesting dreams? By 6 it is already bright outside. Slow breakfast, egg salad on toast, coffee, Omega-3, then I thought I’d bike to work. 

The park was pretty empty despite the sunny morning and comfy temperatures in the 50sº. It was mostly old people who biked or exercised in the Upper West Side, not many commuters. It was about 8. Then, by midtown, yuppies started coming out walking their dogs. Girls in bras and shirtless guys were jogging on the trail. The headwind was making pedaling harder. It took me 50 minutes and more effort to get to the office.

At work, I tried to make Lambda run locally in AWS SAM. That worked, but without DynamoDB. With DynamoDB it died from OOM killer without reporting anything. I didn’t figure out why. Instead, I wrote a local harness and tested it this way. Nothing interesting.

Learned about JWT. It is a cool idea: instead of a session token and storing user variables on the server, it signs those variables by a private then clients can decode using a public key. 

Then biked back home by 6. It was sporadically raining, but I had a portable parka jacket with me; still, I worried that it would start raining heavily. 

We ate pizza for dinner from an Italian owner who spoke Spanish to his employees. Hamilton Heights – everyone speaks a bit of Spanish here.

 Woke up at 7:10 – seeing some vivid dreams (something stupid that I told myself to remember, but forget as I got up), then slept till 8. I had insomnia the night before night. So, I hardly got up by 8. Coffee, cookies, and running to the train. The train was pretty packed, but I could sit after the 96th, and read Maslowska’s “Polish-Russian War”. 

In the office by exactly 9:30; just enough time to open my laptop and join the standup. Abhi was showing his platform drawing screens. That looks pretty cool. Sunny is working on the real-time buses API. I work on emailing receipts. Then another standup at 10. That went not as lively. 

Then I tried to run the existing Lambda locally, with Gateway API, and SNS events. Abhi suggested just making another Lambda in AWS and uploading and debugging there. That suggestion I didn’t like – there must be a way to run it locally, debug, write tests, etc. So I spent a few hours trying to make this thing called SAM work, but it was showing key auth errors. I changed the configs, trying various options: so I try some bullshit config from the web or from ChatGPT, and it runs, and the API says key error when I make a request. Then I realized I just misspelled my request URL. Dang. That must be from not sleeping enough.

Another thing I’ve done was to file a "Statement of Financial Disclosure" which is due on May 15. As state employees, we are required to file these essentially anti-corruption forms for the "New York State Commission on Ethics and Lobbying in Government". It was mostly about income, assets held, debts, property value, and associations/previous employers. I didn’t figure out if the information was going to be publicly available. It seems on their website they ask to file a request per person to access the disclosure. I wonder how easily they approve those requests, and how easily this financial info is accessible about any state employee.

And one more thing updated: late last week Sunny found some config in Firebase, disabling “localhost” domain somewhere, and suddenly last week’s SMS spam just stopped. It looks like the spammers exploited this debug/developer configuration leftover in production. So, now Sunny started unbanning those countries, gradually, and we don’t see the abuse anymore. This makes me somewhat sad and dissatisfied with myself: it was not exactly my fault, but I was assigned to it, spent some time trying to understand the problem, but came up only with the dumb banning countries solution; I didn’t get deep enough into Google’s long Firebase FAQ, where they mentioned that “localhost” problem. Finally, I’m making silly typos in simple URLs and then troubleshooting it for hours. What am I even doing with this dumb tech? What do I want to be doing and what should I be doing? An easily spent life on dumb tech. It’s so important to find worthy problems. Mess. So, I was feeling moody.

Back home by 7. It was B’s first day at her new job. She’s fully remote now. She says she hardly got up from her desk between 9 and 6. So we talked about that.

 Woke up at 7:20. The plan was to leave the house by 8:20, but I left by 8:30. The train was medium packed: I managed to squeeze in on a seat between people; but was I not lucky I’d have to stand.

I read Maslowska’s “Polish-Russian War” on the train. Mostly engaging in action; sex, drugs, and war. Well, it’s not really about war; rather a state of young mind in reflection to scare of war occupying old people’s minds; Polish revisionism of the 2000s. They say Maslowska was 19 when she wrote the text. 

The Russian translation is at times annoying. I think it’s probably written in modern Polish “street language”, but in Russian translation it’s a blend of informal language from all over. For example:

Так что я чего-то тут не понимаю, когда она идет таким бодрячком и строит из себя модель. Крутит задницей так, что мама дорогая. На ногу свою уже не хромает. Модель, актриса и одновременно певица в одном флаконе. Перетраханная вдоль и поперек. Живая реклама дырявых колготок, покупайте дырявые колготки, последний писк моды, самые что ни на есть стильные.

“мама дорогая” is the kind of language my parents used. It doesn’t sound right for the young messy character that I imagine in the book. But in English, it’s all quite lost, if it intended to be there:

Therefore, there’s something here that I don’t get when she goes off so playfully. Shakes her little ass. Sweetness itself. Her leg no longer lame. A model-actress-singer all at the same time, all in one. Fucked through and through. Her holey panty hose advertise, Buy holey panty hose, right now they’re the in thing, they’re all the rage.

I couldn’t find the Polish text, unfortunately, yet. I wanna look what the original looks like.

I got to the office by 9:25, five minutes before the standup. At least, not late this time. The standup was lively. We got more in-depth in our reports and had time to listen to opinions and have a conversation. I like it more this way, than disengaging two to five-sentence reports that only a few managers care about. It took 30 minutes. It’s not a “standup” in the classical sense, of course. Sometime in the future, they will run conferences under the “standup” banner.

After standup, we scheduled a meeting with Ryan, Sunny, and Will to discuss my project. We looked into the client code, and discussed the flows – that was helpful. From that was supposed to write a doc about the plan.

Otherwise, the office was empty. Everyone working from home. I went for a haircut by 4:30pm, then worked at the nearby cafe on the planning doc. David was the hairdresser; he was new. Not sure why they assigned me to him – usually I don't have to ask for John when I schedule a time. John was there too, bored on the phone, without clients. I think he's jealous of me visiting others. I'm his client. But I like Jimi too; he's a bit too crazy, too experimental – good twice a year. Then John to other times to recover from Jimi's experiments. They are good together. They should not be possessive of their clients. Such a hair salon drama.

Back home by 6:30; we grabbed a pizza and crashed into bed early.

 Woke up at 7:10 with the alarm. B went ahead and cooked me You-tiao from H-Mart, and I brewed some coffee; rather "poured" some coffee – in a pour-over – that is our coffee fix these days. Omega-3, of course. No, my allergy last week was obviously not from Omega-3 – it's the spring pollen season, apparently.

I worked from home before lunch cause I needed to pick up a paper for DMV after 10. I released PDF Owl in AppStore at 11:58am. Let's see how it goes. Then went for the paper.

The assistant working at the optometrist's office calls me "young man". Another man in his 60s walks in, limping, he calls him "young man" too. "Have a seat, young man!" – he says to the barely walking old guy. He speaks Spanish to another client: obviously joking but also to the point. He tells me to send the note to DMV, but takes another copy; he tells me if they mess up my mail, I'd have a copy. He is bald, with two rings in both ears and a grey goatee beard. He's around 50, maybe? A happy man in his 50 running the office. "Hey, Grigory, why are you not wearing your glasses?" – he asks me. My glasses; he remembers my glasses. "I'm not used to those glasses yet, I don't need them too often," – I say. The prescription glasses take time to get used to, he explains; especially first prescription glasses. 

I got to work by 1:30. The office was empty. I tried to think of Lambdas and SNS, but, somehow, fruitless. I was thinking I needed to learn React Native. That is where it is all going. I step into the territories when Abhi says he doesn't know what's going on there with the client. And I don't wanna bother Will with that. Basically, I need to understand a little bit what are the flows of the client, and nobody around seems to be able to help me with that. I clicked the links around; when was the first time I had heard of React? 2016? 2017? It's been around me but always passed by my side. Not exactly where I'd like it to move. Will said, "it's up to me". Maybe I'm actually interested in the front end, am I not? 

Unable to settle my thoughts, I decided I'd do at least one useful thing – finish signing up for the pension. VDC it is called, and it's one of the plans for State employees. -6% of the salary contribution from me, +8% contribution from them – not too bad. Vesting is just one year. For the alternative, signing up for 10 years minimum service on NYSLRS I'm not ready yet.

News arrived from the SMS spam meeting with the diversity team. It all went well – we are green-lighted on banning abusing SMS countries. Just asked to keep them updated on how it goes. I also read some more on the problem and discovered that Google before October 2013 offered the Firebase identity service for 6 cents per sign-up. But then due to "significant changes in market conditions require more granular and variable pricing" – they started charging one cent per sent SMS, essentially dumping the spam/verification problem on the clients. I'm surprised Google's muscle couldn't deal with the abusing carriers and filter it somehow more meaningfully. They just deferred it to the clients to decide to ditch certain countries. Something smells fishy in this story.

I went back home by 7. Stopped by Trader Joe's and bought goat yogurt – accidentally – no idea what it is like. I will try another morning.

 Woke up at 6:20 without alarm. I couldn’t sleep more. Coffee, egg salad sandwich, Omega-3. Easy morning. No L-Carnitine; no workout today, so no need for L-Carnitine. Then scribbled something in the notebook, read a few pages, and I don’t know what else I had done, but it was 8:30 already.

The train around 8:40 was quite crowded. I didn’t even sit after the 96th. Then around 72nd I crashed on the chair and read the Polish novel. A little delay, and I was late for the standup at 9:30. I lost track of time: just kept reading, and then realized I was late.

The standup was lively – everyone discussing something, engaging, not like it was on Monday. The news was that the diversity team will be reviewing our ban on the number of countries for SMS login. We’ll see what they say. Of course, it rings a bell when we say we just banned a bunch of African and East Asian countries.

Then Will was asking me to make sure I came to the standups. Is it my second or third time that I’m late? He offered to move the standup later or earlier (so I could call from home before going to the office). I said I just needed to adjust to my commute, and that I didn’t expect a delay today, but I should plan for it. So, yeah, I should plan to come maybe 20 mins before the standup. 

Then pretty much all day I was planning my email receipts project. It’s getting surprisingly heavier than I expected. We have four different databases across AWS and Google Cloud, and a React Native app that I barely understand how it’s working. So, there will be some learning curve. I suspect I should learn React Native. I asked Will – he said it’s up to me if I wanna learn it. I’m not very passionate about it; but I think it’s good to understand what’s going on there on the client.

I asked Abhi about his emacs setup: I was surprised – for years I haven’t seen people that use vim or emacs so heavily like it was an IDE. Turns out he’s doing pretty much everything in emacs. Jumping between references and all that, of course, but also notes management that can link across pieces of code (called org-mode), git management including code reviews (called Magit). Even ChatGPT is just another emacs buffer there. And CoPilot is there to help too, with its config in Lisp. So cool!

Ah, and I learned that some people get pissed if I wash my mug in the kitchen sink and don’t wipe the splashes with a paper towel. Why would I do that? Should we not save the trees after all? I will think about it.

Back home by 7. Sleepy as if it was Thursday, but it’s only Wednesday. Finished "Perfect Days" in the evening. We managed to split this movie into three parts. Beautiful cinematography, but I didn't understand what the authors tried to say. Mistake splitting this beautiful movie into three parts. Bed by 11.

Woke up at 7:10. Coffee, cookie. Good coffee – the beans have finally arrived from Bottomless. 

Let it be the bike day! The day was gonna be warm and sunny. Omega-3, L-Carnitine. Then what. Replied to a couple of messages, pumped the bike tires, prepared a change for the office, and it was almost 9 already. 

The bike commute was pleasant: happy people biking, jogging, walking their dogs, playing tennis at Riverside park. To the right – Hudson River, to the left – Riverside park trees, then Upper West Side Art Deco changing to the midtown all glass skyscrapers. 65ºF/18ºC and sunny morning. It took 46 minutes – exactly the same as the subway. 

I got to the office by 10:15; I changed my bike clothes and then discovered that Abhi was back in the office. He was good, nothing bad happened; good. Then we talked with Abhi for another 20 minutes – he’s a talkative dude. I realized I was getting lonely in this office last week when he was out. Hanif is quick to the point, and somewhat shy, like myself, but also not sharing much; he asks something on his mind and listens, but is too shy to engage and tell me what he really thinks about the bullshit that I’m telling him. Paula, sitting just across the aisle from me, is rather talking non-stop – on the headset, but not with me. She asks me about my weekend, but before I even open my mouth she tells me she’s gotta run to another meeting and runs to her desk before I close my mouth. Her life looks fast; I’m just too slow for a conversation with her. Then there is the invisible man: he’s a chameleon in his cubicle. He either works from home too often, or his sweater is of color of his cubicle. I never heard a sound from him, and I don’t know what team he is from. There are of course more people not from my team on the floor.

I started to work on a new small project related to cost reduction from sending SMS. As it turns out it’s quite pricey sending those SMS. One cent per message, multiplied by millions, go figure. So I will need to change some flows to send emails instead. Ask users in the app for emails when we don’t have one. I looked into SNS queues, Lambda, and TypeScript Lambda scripts that use DynamoDB. Not too excited about this project but alright.

I biked back home by 6. Downtown was gorgeous: everyone was outside. On the street: poor people trapped in their Ferraris and BMWs moving 3 miles per hour on average. On the bike lane: crème de la crème, the best of society, – models, ballerinas, politicians, power-hungry Wall street guys biking in suits, actors, athletes, designers, entrepreneurs, – happy and moving bike lane.

Woke up at 7:10, then 7:30. Monday is hard to get up – get up earlier, to get to that stupid standup at 9:30. Yogurt, strawberries, granola; instant coffee – cause we ran out of good coffee; omega-3. I was on my way by 8:30.

The train was easy: half empty, on time. I started reading “Польско-русская война под бело-красным флагом” by Masłowska – that Magda recommended me; Magda said it’s a brilliant modern Polish novel – but most of the greatness comes from its language, and it’s totally untranslatable to English, she said. I said perhaps it’s translatable to Russian cause those are related languages. So, I’ll read it in Russian; I will see. 

Тут она мне и говорит, что у нее для меня две новости: одна хорошая, другая — плохая. А сама через стойку перегнулась. Какую, значит, я хочу сначала. Я говорю, хорошую. А она, что вроде в городе польско-русская война под бело-красным флагом. Я говорю, откуда ей знать, а она, что слышала. Я говорю, ну, тогда плохую. А она вынимает помаду и говорит, что Магда сказала, что между нами все кончено. И мигнула Бармену, чтоб подошел в случае чего.

Reminds me of gonzo fiction on first look, but I've read only twenty pages. The protagonist is a mess: I used to like that kind of characters. Not anymore. But I will probably sympathize with him later.

9:30 standup. Not many joined. Everyone is busy, somehow. I took the opportunity to ask Ryan to show me around Jira. Jira's editor is like from 2005. Outside was drizzling, or just foggy; the Statue barely seen in the fog.

Then I realized I was signed up for another standup at 10. That was a bigger group; Jessica was there – she’s in LA; jeez, it was 7am on Monday for her. Glen was leading the standup. And others I’ve seen before, but barely understood what I’m doing. Sunny repeated his two sentences from the previous standup. I repeated mine.

Then I went back to my SMS scammers investigations. Joined the purchases table with the SMS billing, then made the script to read directly from BigTable. I like Kotlin Notebooks so far; even though it’s probably not a full Python replacement – but I’m just learning Kotlin, I tell myself. The idea anti-spam metric was to combine how much we get paid from the country and subtract how much we spend on the SMS to the country. I was careful and proposed a threshold well below negative, just to ban the top abusers. I still wanted to be careful with banning, after being too quick about it on Friday. Then, Sunny looked at the numbers – and he was a bit shocked: he said we should ban 30+ countries. So we did that. And then I wrote another query to catch the users from the banned countries who purchased the tickets. Then we sent them to our support, so they will try to reach out to those supposedly real users and refund. That was pretty much the day. 

I liked working on this small project for the last few days – to learn about and play with the data available; it was fun. Still, need to make the script send notification alerts. And we have an adversary on the other end, which may act unpredictably. We will see. What a job for someone writing those bots.

Left the office at 6:40 and back home by 7:30. Dinner with B. Seems we’re going to Boston in June. Enough for a Monday. Feeling sleepy.

 Woke up by 7:15 as the alarm went off. Cookie, coffee, omega-3 (resumed) – if I get the allergy again it must be omega-3.

No surprises on the train this time. I sat on the chair and read another paper about Argentina’s welfare offices. From the same author. He just goes there and describes everything in detail. And then analyzes.

Then in the office, In the morning, I made some changes to the screens API: don’t include trains arriving later than 45 minutes. At night the headways are 20 minutes. This will show the next two trains. No need to scroll the screen with the trains for the next two hours. That is what Sunny told me to do. So many nuances – so cool.

Another thing I added was to limit the number of trains returned. I filter the trains; I sort them by estimated arrival time; I take top K. Is it O(N) or O(N log N)? I suspect the latter. But perhaps it is smart enough to consider both sortBy and take and not sort everything filtered? I don't know yet.

trains
    .asSequence()
    .filter {
        // apply filter
		currentStation in it.stops
    }
    .sortBy { it.estimatedTime }
    .take(2)

Then I got a new task. I feel like I'm in the Disneyland of cloud infrastructure: every day I get a new task learning a part of an interesting piece. This time I looked into Google Cloud. The task: the costs rose N times in the past months – what's the hell with that? It feels like a game, a puzzle. I quickly discovered this was a fraud scheme called SMS pumping. Bots generate login requests via SMS. SMS goes to the countries where the scammers take a cut from the network carriers making money from receiving the SMS. 

I went to Google Cloud metrics. I figured out that most of the spending was on the SMS to Togo and Sri Lanka. The proper way to measure this would be to look at the ratio of login requests (that send SMS) and successful logins. Then I fought Google Metrics to compute these metrics over the last couple of weeks. What the fuck is this system. It has a whole new language for querying the metrics, and nothing really useful. It shows the sent SMS count; it shows successful signups. Divide them by one another over the window of two weeks – nope, it shows me per-second rates instead. As their tutorial popups kept showing, I realized this metrics analytics system was complete crap. 

I told Will. He said: "i defer to you on recommendations for moving forward". I thought – alright; what would I really do if it was my system? I think I should just go ban Togo and Sri Lanka phone numbers for a start. This is New York local service – those are the top spenders from foreign countries; it's obvious they are the main source of the fraud. Then, we can re-evaluate the long-term strategy. I told Will. He took a pause, then said that he was "not comfortable blocking African and Middle Eastern countries" just because there were too many login requests coming from their area code. I realized I forgot to tell him the main part – that it was the common fraud; with a link. That was kind of funny. But yeah; maybe I was too quick. It's not my own service, after all; we make a public service in a large metropolitan area. I should think twice before giving such recommendations.

Then Will told me about the accounts dataset in BigTable, and I wrote a script in Kotlin Notebooks joining that with the billing costs, and then tried to think of some more arguments of when the benefits of the country phone code go below the cost of the fraud. And I thought that was the topic to think about for Monday, or maybe to puzzle it over the weekend.

That was pretty engaging; I realized it was almost 7. B texted. I went back home. We cooked soba together, with salmon, cherry tomatoes, cucumber, and sauerkraut.


Profile

soid

November 2024

S M T W T F S
     12
3456 789
10111213141516
17181920212223
24252627282930

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 30th, 2025 10:46 am
Powered by Dreamwidth Studios