The Score

Title: The Score: How to Stop Playing Somebody Else’s Game

Author: C. Thi Nguyen

Completed: Sept 2026 (Full list of books)

Overview: During our move back to the UK, there were many interactions with large bureaucratic institutions that tried to simplify us to as small a series of data points as possible. Reading this book that discusses (among many other topics) how and why this happens, helped a little. When making a decision, we often want all the inputs to be as simple and similar as possible to help expedite our process. However, we were are having a decision made about us, we want to be able to include all the important nuances that make us and our situation unique. Those two forces are always pulling in different directions.

I’ve also seen this push in education. The state and federal level decision-makers want to have a simple ruler by which to measure schools, administrators, teachers, and students, but every time we create a new test, we further discourage more of the people we’re trying to help by measuring them in ways that don’t work for their situation. None of this is Earth-shattering, but it felt good to have someone explain it so clearly.

This was also another in my long list of books that talks about the benefit of productive struggle and taking on optional challenges. Life becomes far more interesting and fun when we decide to do something the hard way.

As we continue to settle in, I’m now starting to interact with more large institutions as I apply for jobs (“Hi” to any hiring managers who found this while doing the required online name search check). Again, I don’t fit the typical boxes of those applying for a job in the UK, but hope that they will be able to look beyond that to see all that I have to offer… If not, I’ll just keep baking.

Highlights:

  • Value capture happens when a restaurant stops caring about making good food and starts caring about maximizing its Yelp ratings. It happens when students stop caring about education and start caring about their GPA. It happens when scientists stop caring about finding truth and start caring about getting the biggest grants. It even happens in religion. A pastor recently told me that his church had become completely obsessed with baptism rates. The higher-ups had established an internal leaderboard in which the pastors competed on monthly baptism rates, and it was starting to dominate everybody’s attention. He’d found himself caring less about the long-term spiritual development of his flock and focusing more on trying to deliver popular sermons that would up his baptism rates and move him up that leaderboard.
  • Metrics are shaped by institutional forces. They are subject to demands for fast, efficient data collection at scale, to demands of fitting into spreadsheets and action reports. Institutional metrics are part of a system that abstracts away from personal difference and local detail and identifies some thin, measurable detail. And what’s easily measurable is rarely the same as what’s really valuable.
  • Because often in games, the goal isn’t what really matters. We adopt the goal in order to experience the process. The beauty is in the struggle.
  • How do I compare the value of spending an hour reading to my toddler with the value of spending an hour lifting weights? How do I calculate the relative value of spending this Saturday morning reading an exciting new sci-fi novel versus hacking away at my email pile? Life is a jumble of different values, all shouting at each other, with no clear centralized method for making sense of it all. But games are different. Games grant us a precious experience of clarity. It is a clarity of purpose—a clarity of value. In a game, for once in our lives, we know exactly what we’re supposed to be doing, and afterward, we know exactly how well we have done.
  • I became obsessed with a new question, which seemed for a while to matter only to me: Why is it that mechanical scoring systems are, in games, the site of so much joy and fluidity and play? And why, in the realm of public measures and institutional metrics, do they drain the life out of everything?
  • There’s striving play, and then there’s also achievement play. The achievement player is trying to win because they actually value winning. The striving player, on the other hand, doesn’t actually care about the win, deep down. They are only trying to win because they value the struggle. The achievement player cares about the win itself; the striving player cares about the process of trying to win.
  • I’m not saying that games are always good and metrics are always bad. You can be value-captured by a game. Plenty of high school athletes get value-captured by the sports they play. I spent years obsessed with grinding my way up for more poker wins, until I realized the whole thing just made me miserable. And it’s possible to be playful with institutional metrics, to find the ones that make your life fun. But it’s unlikely. The basic nature of games encourages—but does not mandate—playful freedom. And the nature of bureaucracies and institutions resists—but does not make impossible—that kind of playful control.
  • We’re so used to modern competitions, which usually deliver an official list of winners. But the joy of competition doesn’t always demand that we reach a settled agreement about who won.
  • To play a game is to voluntarily take on unnecessary obstacles to make possible the activity of struggling to overcome them.
  • People, she said, think that trust and transparency go together. But in fact, they’re deeply in tension. Transparency, she said, demands that experts explain themselves to nonexperts. But they can’t actually do it, because an expert’s real reasons are often opaque or incomprehensible to nonexperts. The whole reason you go to a doctor is that they understand things you don’t. Nobody has enough mental power to understand everything by themselves. The world is so vast and complicated that we have to divide it up—each of us devoting ourselves to understanding one particular patch of the world. So experts can’t explain themselves fully to the public, because expert reasoning is, by its very nature, specialized.
  • Many of us have been trained to think transparency is all good, and the more the better. But we are also intimately familiar with the downsides of transparency. It’s easy to see the insensitivity and inexpertise of metrics when you’re under the gun. When you’re the expert and it’s the rest of the world looking in—watching you, demanding that you justify yourself in clear, accessible, concrete terms—then you can see how much the metrics miss.
  • cookbook reviews almost never talk about the joys of cooking—which is funny because I often spend way more time on the cooking part than the eating part. The official culture ignores the beauty of the process, trains us not to pay attention to how it feels to act, to believe that joyous action doesn’t matter.
  • In 1977, Nicaragua had no sign language of its own. The government tried a project: They gathered together fifty deaf schoolchildren from around the country and tried to teach them to lip-read. Instead, the children spontaneously invented their own sign language—a rich, fully functional one, which eventually became the official sign language of Nicaragua. It’s a minor human miracle that linguists still study to this day.
  • John Harper’s extraordinary design Lady Blackbird shows off many of these innovations. The primary rule set is only one page long, and it comes with a prepackaged set of characters and a scenario. Just like in D&D, the game rewards you with XP that you can use to improve your character. But unlike in D&D, there are no automatic XP for killing monsters, or even for completing quests. Instead, your character comes with a set of “Keys,” which are their core motivations or character traits. And you get XP for hitting your Keys—for acting in character.
  • Principles and models both require careful judgment to apply. Whether such a rule applies to this particular case will always be open to interpretation and up for debate. The third kind of rule is completely different. This is a rule as an algorithm, an explicit directive meant to be applied mechanically—without discretion or judgment, exactly as it is written, with no exceptions. And it is this algorithmic conception of a rule that has become dominant in the past century, says Daston. It is so dominant, in fact, that people can have a hard time wrapping their heads around these older conceptions of rules—to see what they’re for and why we might ever prefer the fuzzier, more open-ended principles and models to the more precise, complete algorithms.
  • There are lots of different kinds of objectivity, and those different kinds often run at cross purposes. Sometimes, by “objectivity,” we mean that something is bias-free. But as we’ve seen, mechanical procedures can be deeply biased toward what’s mechanically countable. Sometimes, objectivity means a process is accurate. But mechanical values often fail to capture what we originally cared about.
  • When we create procedures with mechanical rules, we make workers fungible. We no longer need to depend on a particular person with a particular long-developed sensitivity. We no longer need to spend years having an expert gradually train their apprentice to be able to do the job. We no longer need to court some small set of specialists. We can look for an easy signal, like having a high school diploma, or a bachelor’s degree in the relevant field, and swap out one worker for another with high confidence that they’ll do the job the same way,
  • saying that something is a social invention doesn’t mean we’re denying its reality. Money, time, dates, and medical degrees are all social inventions. These things are real. They affect the world; we live and die by them. But we should also remember that we invented them; we brought them into being. And we could still decide to make them differently if we wanted. When we remember that we drew the lines in the first place, it reminds us that we could choose to redraw them to better suit our purposes.
  • States, says Scott, can only “see” the parts of the world that they can process through bureaucratic systems. They can only see the parts of the world they can classify, measure, and summarize. That is what is legible to the state. The rest of the world—all the stuff that’s too mushy and variable and weird to be well tracked by state tools—is illegible to the state. States have a hard time tracking and managing the irregular parts of the world.
  • In between the rules dogmatist and the rules skeptic is the playful person. To be playful with the rules is to try them on, but lightly—to slip in and out of worlds. A playful person is willing to try on different rules for a while and see how it goes. But they’re not stuck there. A playful person is exploratory. And part of that is trying on new goals and values. The playful person, as Lugones puts it, occupies a world creatively. They are willing to rewrite the rules if they need to.
  • Once the state has created these centralized, easy-to-follow rules, they have eliminated the need for highly skilled local specialists. The state can now employ almost anybody to follow these rules. Monocropping de-skills workers. It takes a highly autonomous, highly skilled farmer and replaces them with a more mechanical rule-follower.
  • So here is a recipe for a seductive clarity trap: First, build a belief system that offers a satisfyingly clear, coherent explanation of the world. Second, make sure the belief system conceals any evidence of its own error. In conspiracy theories, the error-concealment device is usually an add-on—a separate set of beliefs about those lying, cheating scientists and journalists. Conspiracy theories build echo chambers by getting their believers to dismiss any nonbelievers as untrustworthy. A good echo chamber will block their followers from receiving any evidence of error.
  • Organized social systems will tend to give power to those who game the system, rather than those who pursue what’s really valuable.
  • Process beauty is everywhere. But a lot of the time, we ignore it. It seems less important, less meaningful than object beauty. All the high arts, the really respectable ones, seem to be the ones where a singular genius broadcasts their art out to us lowly masses, and we just soak it up in relative passivity. And what gets mocked as low geek culture—tabletop role-playing, fan fiction, cosplay—are exactly those communities where everybody gets to be creative, and actively participate in the process of making art. But why is object art so much better? Why is it better for beauty to be in external, separate objects than to reside in us? Why is it better to concentrate the power to make art in a few geniuses? Why do we seem to look down on those lifestyles that disperse the right to creativity across an entire community?
  • Suppose Aristotle and Suits are right, and what makes our lives good and fulfilling is rich, meaningful activity. The meaning of life is in the process and not the outcome. Meaning lies in doing: in thinking interesting thoughts, having interesting conversations, playing fascinating games. Meaning lies in the process of making things, in moving your body in thrilling and elegant ways, in loving people.
  • My grading system does not exist in isolation. A college class is not a game. It does not exist in a magic circle; its scores are not disconnected from the rest of the world. Class grades lead directly to aggregate grade averages, which lead directly to scholarship and job opportunities. And what matters to most of my students, at least for the very next stage, is not what they learned, but what grade they got—because that is how the world will evaluate them. The scoring system in my class is part of a larger scoring system, a world-spanning one, that is out of my control. And if I try to detach myself from this large-scale scoring system, I render my class irrelevant to the powers of the large-scale system. I’ve done what I can—little moves, like offering students their choice of the most interesting question from a long list on exams, or offering them the chance to pitch wildly different alternate final projects. It restores a little bit of room for exploration. But it isn’t much, and I haven’t figured out anything better to do. The sweep and power of the large-scale scoring system mostly beats out my little efforts.
  • What’s meaningful is impossible to capture in metrics, but easy to find in games. And this is because metrics are designed from the top down and enforce a centralized view of the world. They presume a kind of sameness to life. And games, at their best, offer the possibility of a splintered, decentralized, hyper-tailored form of life. The meaning of life, whatever the hell that is, defies centralized approaches.
Posted in Lit Review | Tagged , , , , | Leave a comment

Quest for My (New) Local – Marble Arch

When we first arrived, I started looking for pubs in the few blocks south of us. Most of the blocks north are industrial or under construction. I did notice two pubs about a block north and opted to check them out later. Then I talked to several locals, including one at the library mentioned before, who all recommended getting to the Marble Arch soon. I’m very glad we did… In fact, we’ve now been back a second time before I even got this review posted.

Morgan chilling in one of the semi-private heated huts. I’m really excited to try one in winter

Details:

It was just after dinner on Wednesday, when Morgan and I needed to find something to do for an hour before bedtime. We wandered in and I was immediately sold on this place. Everything has that lived-in patina that says it’s been here for ages. I ordered drinks (their own Mild for me and a lemonade/Sprite for Morgan) and she went to check out the garden in back. Her curiosity was piqued by the sign pointing towards “Heated Huts”. Before my beer was fully pulled, she was back with a grin saying we need to sit out back. She led me to a cozy, well-built shed with a glass roof, soft lights, and a heater, where she declared we would be playing Go Fish. We later noticed there were blankets in there as well. I assume these are extremely popular in winter.

After an hour of losing to a nine-year-old at cards, I decided it was time to head home for bedtime. On the way out, she wanted me to get a photo of the tile floor to share. Two days later, we had a little time after dinner and she immediately asked if we could go back. Instead, we waited another day or two before returning. This time, on a weekend afternoon, all the huts were full so we sat inside. Everywhere I looked, there was some previously overlooked detail telling about the history of this place and the area. I think it’s safe to say, we’ve found our local… but we’ll continue to try other occasionally to be sure

Score:

Cask: 1 / 1 – They have their own brewery a few blocks away and offered 6 of their beers on cask (plus 8 in kegs)
Fireplace: 1 / 1 – Not currently in use but right in the center of the room where you’d expect
Recorded Music: 1 / 1 – No notable music
Seating: 2 / 2 – Benches, chairs, and the “heated huts” with booth seating
Community Energy: 0.5 / 1 – Visited during slow times but it certainly has potential for good community energy
Granddad: 2 / 2 – I think I saw him sitting in the corner
Morgan: 2 / 2 – Morgan has asked to go back several times. She LOVES the heated huts.
Overall: 9.5 / 10 — It probably deserves a 10, I admit that, but I just could give that score yet. Over time, it will probably get there. We will certainly be back

Pub Leaderboard

Pub NameScoreNotes
Marble Arch9.5 / 10Search is over
Angel Pub8 / 10Best spot yet!
Crown & Kettle6.5 / 10Good first stop. Could be it, but need to explore more
Seven Bro7hers6 / 10Good brewery, not a traditional pub
Spinners Rest5.5 / 10New and trendy
Jimmy’s4 / 10Lots of neon
Posted in Quest for My New Local, Travel | Tagged , , | Leave a comment

Relearning to make bread

I’ve been baking bread since around 2010 and over time, I’ve continued chasing the perfect loaf. During the first month of Covid lockdown, several people in my baking club wanted details about my sourdough recipe and method. Since then, my method continued to evolve but I never wrote it down. Now in Manchester, with my 7+ year old starter, stand mixer, dutch oven, bread tools, flour, and everything else I’ve used to make bread over the last decade still in Seattle, it’s time to relearn how to make bread.

It was very hot when I tried to get my new starter growing which meant it developed quickly, but tended to contain a lot of acid producing bacteria rather than yeast. I should have waited but I really wanted to homemade bread so I rushed it. As a result, the first loaf was… a bit flat and we shall never speak of it again.

Don’t look at this! This was my first “loaf” and we need a REALLY broad definition of that word for this flat monstrosity to count.

After that, I let the starter develop a bit more in cooler temperatures and fed it better flour from a local bakery. The second loaf was much better (as in, we all agreed it was edible and some even thought it was delicious). The third loaf just came out of the oven and, so far, is looking decent. I still have a long way to go to get back to the loaves I was baking in Seattle, but considering all the tools I don’t have currently, I’m pleased with how this came out.

Third loaf is finally getting a very slight ear and looking closer to what I’d hoped for

So, what do I do these days that’s different from when I wrote about it a few years ago? First, my starter lives in the fridge and only comes out for 10-20 minutes when it’s time to start a new loaf. Next, the starter goes directly into the dough rather than building it up overnight first. I therefore need to give the dough more time during the initial rise to let the yeast really wake up and get to work. The end result is about the same amount of between starting a loaf and finishing the bake but less hands-on time which means it fits my schedule better and tends to be more flexible. Here are the details:

  1. Pull starter out of the fridge and put 100g in mixing bowl (leaving only 5-10g starter in the jar)
  2. Add 50g flour and 50g water to the starter jar, mix well, and put it back in the fridge. That’s all the time it gets to warm up
  3. Add water (see below for how much) to the mixing bowl and stir slightly to spread the starter. Stirring here isn’t really needed, but it makes me feel better about the whole process
  4. Add flour and salt (see below) and start mixing. If mixing by hand, mix for a couple of minutes to ensure all the flour is wet and the dough is “shaggy” (not yet smooth and well mixed, we’ll get there soon). If using a mixer, turn it on for 6-10 minutes. The dough will come out much smoother than hand mixing but it won’t matter in the end.
  5. Set the dough aside for 10-15 minutes, covered so it doesn’t dry out
  6. Do some bowl folds.
  7. Repeat steps 5 & 6 two (usually good for mixers) to four (usually best for hand mixed) more times. Each time, the dough will get smoother and better mixed. You know you’re done when the dough has a consistent feel throughout.
  8. Let rise at room temp for 8-12 hours. You’re looking for it to double in size, but if it’s in a curved mixing bowl that can be hard to measure. If it’s warm (above 24C / 75F) it might even go as fast as 6 hours. The nice thing is that it usually rises pretty slowly so if you’re an hour early or late, the bread will still be fine.
  9. Turn out the dough onto the counter and do a few stretch and folds. Form into a ball
  10. Let rest for 15-20 minutes
  11. Form the loaf and place in a banneton or mixing bowl lined with a floured dishcloth. Cover and place in the fridge.
Showing the stretch and folds from Step 9 and forming the loaf from Step 11

12. Let rest/rise in the fridge for 8-12 hours (or longer, if that works better for your schedule. I’ve gone up to ~20 hours and it was still fine. It’s a flexible and forgiving recipe)

13. Preheat oven to 450F / 225C with baking surface: dutch oven, baking stone, or fry pan (what I have in Manchester)

14. Place bread in/on baking surface and bake with steam for 15 minutes. For steam, either cover the loaf with the lid of the dutch oven or add water to a baking pan below the loaf

15. Rotate the bread and lower the oven temp to 425F / 215C and bake for another 15 mintes

16. Pull bread from oven and let cool. Enjoy

How much water and flour?

With a larger oven in Seattle I went for a slightly larger loaf which used:

  • 425g water
  • 625g flour (usually a mix of bread flour and whole wheat)
  • 14g salt

In Manchester, I’m going slightly smaller but keeping the ~70% hydration, giving me:

  • 300g water
  • 450g flour
  • 11g salt

Remember, both of these also include the 100g starter. Well, that’s it. If you try it, let me know and happy baking. Hopefully my Manchester loaves will eventually get back to looking as good as my Seattle loaves:

Posted in Cooking | Tagged , , | 2 Comments

Quest for My (New) Local – The Angel Pub

The second stop (that I attended) of the Ancoats Run Club Birthday Pub Crawl was The Angel Pub. Knowing this is one of Manchester’s oldest freehouses (like a pub but not connected with a specific brewery), I was excited to check it out after experiencing the newness of Spinners Rest; it did not disappoint.

You’d have a better view without all the runners in the way
Books, games, and a fireplace in the mirror, this would certainly be Morgan’s corner

Details:

Walking in, the bar was tucked back in the corner. There were chairs near the fireplace and couches beside them. We mostly stayed outside on the patio, enjoying the cooling evening air after another warm summer day. The whole place felt like it’s been here for ages.

Morgan and Dom went home before the group made it to this one, so I couldn’t get an official score for Morgan, but the noise level was lower, there were some cozy corners, and anyone reading books or playing games at a table would have fit right in so I’ll assume she’d give it fun marks.

The people here seemed like a broader cross-section of the community as well. There were a few regulars sitting near the (unlit) fireplace who look like they started drinking here sometime before I was born while there were others outside in torn denim jackets that looked too young to be drinking now. I suspect after a few visits, I would know and be known here. This was the first pub that really felt like it could be what I’ve been looking for. There is at least one other spot that could challenge this one but for now, we have a clear leader.

Score:

Cask: 1 / 1 – Yes, several
Fireplace: 1 / 1 – Yes and there is evidence that it gets plenty of use in winter
Recorded Music: 0 / 1 – There was music playing, but we were outside.
Seating: 2 / 2 – Couches, chairs, outdoor patio, cozy corners
Community Energy: 0 / 1 – I was there with a large group of runners and didn’t feel much connection to others, but worth revisiting with a smaller group
Granddad: 2 / 2 – Granddad would have been sitting in his usual chair
Morgan: 2 / 2 – Cozy corners and a shelf of books and games. She’d be set
Overall: 8 / 10 — Definitely the best spot we’ve visited so far. I suspect it could score even higher on another visit to really sense the Community Energy

Also, decided to switch up the Leaderboard to only show the top five pubs, in order so hopefully after the next stop, Jimmy’s will be gone from the list.

Pub Leaderboard

Pub NameScoreNotes
Marble Arch9.5 / 10Search is over
Angel Pub8 / 10Best spot yet!
Crown & Kettle6.5 / 10Good first stop. Could be it, but need to explore more
Seven Bro7hers6 / 10Good brewery, not a traditional pub
Spinners Rest5.5 / 10New and trendy
Jimmy’s4 / 10Lots of neon
Posted in Quest for My New Local, Travel | Tagged , , | Leave a comment

Quest for My (New) Local – Spinners Rest

The after run party at Jimmy’s on Thursday was the start of the run club’s birthday celebration and on Saturday night it continued with a pub crawl. They made it to six pub (or at least planned to). I joined them at two. This was the first one, Spinners Rest. I had very high hopes for this one when we were first moving in… So far, it’s always been busy to the point of too crowded and too new/trendy to be my perfect spot, but it’s not bad.

Somehow, despite people being everywhere, I managed an unobstructed view of the bar which does look very nice

Details:

Dom, Morgan, and I tried to go here a few days ago, but it was just too busy. We were concerned Morgan wouldn’t like all the noise. Tonight was no different except we were coming from the playground so she was a little more prepared for loud spaces.

The bar has a classic look about it with both draft and cask beer, but the first thing I noticed was how new it looked. I think it’s older than it appears, but it must have been renovated recently because the whole place lacks the lived-in patina I expect in a traditional pub. This isn’t a bad thing and judging by how many people were there, many others like it this way. It’s just not exactly what I’m looking for currently.

After grabbing drinks, I went out to the patio to meet the other runners. Dom and Morgan joined me there. Morgan waved hi to a few people, then ducked under the table to sip her lemonade in peace. She stayed there until we were ready to leave.

Score:

Cask: 1 / 1 – Confirmed, local Holt beer on cask
Fireplace: 1 / 1 – At least one inside and one outside, but they don’t look like they get much use
Recorded Music: 1 / 1 – There was a football match on which may have influenced the music, but it was too busy/loud with conversations to hear any music
Seating: 1 / 2 – It looked decent enough but I wasn’t ever able to sit during the hour or more we were there
Community Energy: 0 / 1 – Maybe on at a less busy time, but when we were there, I had a little trouble talking with the people in our group, much less strangers
Granddad: 1 / 2 – Trendy granddads would approve
Morgan: 0.5 / 2 – Said she’d go back if we could find a quieter corner
Overall: 5.5 / 10 — Maybe worth reevaluating if the crowd thins during the colder months.

Pub Leaderboard

Pub NameScoreNotes
Marble Arch9.5 / 10Search is over
Angel Pub8 / 10Best spot yet!
Crown & Kettle6.5 / 10Good first stop. Could be it, but need to explore more
Seven Bro7hers6 / 10Good brewery, not a traditional pub
Spinners Rest5.5 / 10New and trendy
Jimmy’s4 / 10Lots of neon
Posted in Quest for My New Local, Travel | Tagged , , | 1 Comment

Quest for My (New) Local – Jimmy’s

Another run with Ancoats Run Club (ARC) and this time we were celebrating ARC’s 6th birthday. There was cake and vegan treats, but we grabbed beers at Jimmy’s. Again, not a traditional pub, but only two or three blocks from the flat we we need to score it. The exciting time with ARC will be this Saturday when we’re doing a birthday pub crawl all around Ancoats (the neighborhood our flat is in), hitting several spots that are on my list to visit.

Also note, a running leaderboard was requested. I’ve added that at the bottom. It currently displays based on latest review, but I might change it to highest ranking… we’ll see.

Details:

Jimmy’s is NOT a traditional pub. For anyone in Seattle, it reminds me a bit of Lucky Liquor… without the cool penny-top bar. Lots of neon and plenty of hard alcohol. Most of the beer on tap was Jimmy’s brand beer, but I don’t think they actually brew it and I didn’t see any on cask.

Score:

Cask: 0 / 1 – None that I saw
Fireplace: 0 / 1 – None that I saw
Recorded Music: 0 / 1 – Music was playing, but it wasn’t obnoxious. Maybe it deserves half a point… but I assume there are times it gets loud
Seating: 1 / 2 – There was some comfy seating, but we were mostly outside
Community Energy: 1 / 1 – I did start talking to the people at the table next to me and they were happy to chat
Granddad: 1 / 2 – It’s a type of bar that some granddads would feel comfortable in
Morgan: 1 / 2 – She likes Lucky Liquor, but I think that’s as much for the pinball and TVs showing Monster Trucks as anything else and both were missing here
Overall: 4 / 10 — It’s not what I’m looking for most of the time. Seven Bro7hers is next door and would be preferable most nights… but when I want a Lucky Liquor type experience, it’s waiting for me.

Pub Leaderboard

Pub NameScoreNotes
Marble Arch9.5 / 10Search is over
Angel Pub8 / 10Best spot yet!
Crown & Kettle6.5 / 10Good first stop. Could be it, but need to explore more
Seven Bro7hers6 / 10Good brewery, not a traditional pub
Spinners Rest5.5 / 10New and trendy
Jimmy’s4 / 10Lots of neon
Posted in Quest for My New Local, Travel | Tagged , , | 4 Comments

Quest for My (New) Local – Seven Bro7hers

Yesterday was an exciting day on the Quest for My (New) Local (Q4ML) when two things happened. First, I walked with Morgan to library for an activity. While she was crafting, I started talking with another dad who was wearing a “Coffee & Beer; Beer & Coffee” shirt and he excitedly had ideas about where I should go. He started by listing the best local microbreweries, one of which I visited back in Feb when we came to check out Manchester. There were several good recommendations before he asked if I was interested in “Traditional Pubs”. When I asked for the top 5 in the city, his eyes lit up. I assumed he would start with the one that seems to be at the top of all the lists, Britons Protection. (We also visited this pub in Feb, see the last photo in Morgan’s post. If it were closer, I would already have completed my Quest). To my surprise, he said that was Top 5, but not number 1. That honor goes to Marble Arch Inn… which happens to be two blocks from our flat and high on my list of next places to try. I can’t wait!

The next exciting event in my Quest yesterday was my second run with the Ancoats Run Club. After the run, about half of us grabbed a beer from Seven Bro7hers Brewing. Although not a Traditional Pub, it has good beer and is close enough to at least consider. Even if it doesn’t become My Local, I’m certain that I’ll be returning.

Details:

After one of my hottest runs in a while, all I really wanted was something cold. Although it looks like they do have cask ale (at least occasionally), I saw a Helles lager on the board as I walked up and my mind was instantly decided. When I ordered, I was asked if it was “for here or to go”? Not the sort of question I ever got in Seattle. There is a great square where people gathered after work or after the run so I took mine to go and went back outside.

Score:

Cask: Yes (I saw the beer engines, but couldn’t tell if anything was on cask currently)
Fireplace: Not that I saw
Recorded Music: No
Seating: Good mix with at least a few comfy couches (This is a new category suggested after the Crown & Kettle review)
Community Energy: Another new category. Hard to judge for just the brewery since most people were outside, but there was huge community energy in the square
Granddad: 1, I wasn’t the oldest there and I think he would have been comfortable there, but focusing on microbrews (and many that were very hoppy) would probably make it not his top spot.
Morgan: 1, She wasn’t with me, but the couches convinced her we should go back
Overall: 6 / 10 — Still hot from the run, I spent only a little time in the actual brewery itself. As a result, several of the categories might not be judged with absolute fidelity, but as I mentioned before, it’s not really in the running. It has good beer and outdoor seating which on a hot day, wins.

Pub Leaderboard

Pub NameScoreNotes
Marble Arch9.5 / 10Search is over
Angel Pub8 / 10Best spot yet!
Crown & Kettle6.5 / 10Good first stop. Could be it, but need to explore more
Seven Bro7hers6 / 10Good brewery, not a traditional pub
Spinners Rest5.5 / 10New and trendy
Jimmy’s4 / 10Lots of neon
Posted in Quest for My New Local, Travel | Tagged , , | 4 Comments

Right to Repair

Title: The Right to Repair Reclaiming the Things We Own

Author: Aaron Perzanowski

Completed: Aug 2026 (Full list of books)

Overview: I’ve been trying to repair broken stuff since I was a kid. When I was about 7, my walkie-talkie stopped working. With my dad’s help, I took it apart, found a broken wire, soldered it back in place, and to my amazement, it worked again.

It’s never made sense to me why companies are so concerned about people fixing their devices. They add all kinds of warning stickers and are unwilling to share repair guides they have, even after they stop manufacturing devices. The Right to Repair has clearly been a cause I support for a while and reading more about the struggle convinced me we need to continue to push for this. (Among other reasons, it’s one topic that brings conservative farmers and liberal environmentalist into agreement and there are remarkably few such topics these days).

This book covers how we went from a country of fixers and tinkerers to one where we just throw away broken things. I also covers much of the work that’s been done to rebuild the repair culture.

As if to show the importance of being able to repair the things we own, when I got to the section about washing machines being one of the least likely appliances to be repaired, my 17 year old washing machine needed repairs (again). By this point, I was very comfortable moving the dryer, taking the top off it and poking around inside. It first broke about 7 or 8 years ago so by repairing it, I was able to double it’s lifespan for a fraction of what it would cost to replace.

I would certainly recommend this book. I would also recommend trying to fix stuff. Remember, if something’s broken and you’re thinking about replacing it, the absolute worst way you could mess it up by trying to repair it would cause you to… replace it. You might be able to fix it, saving money and learning how things work in the process.

Highlights:

  • Jibo illustrates the risks to repair posed by the Internet of Things. The robot’s physical components could be repaired. If its screen was on the fritz, it could be replaced. If a sensor wasn’t working properly, it could be recalibrated. Even the embedded software in the device could be updated and patched. But most of Jibo’s features were not housed in its plastic shell. Instead, they resided on a server that Jibo owners could not access, let alone repair. Jibo’s basic operation, as purchasers eventually learned, depended on hardware and software over which they had no control. The tether connecting devices to remote servers in unknown locations is a core, if not defining, feature of smart devices. On a fundamental level, the Internet of Things as currently constructed is incompatible with repair
  • three sets of concrete benefits that flow from repair. First, repair helps consumers save money by extending the lifespan of products and fostering secondary markets. Second, repair lessens the massive environmental burden of modern consumerism, from the extraction of natural resources to the eventual disposal of the devices we buy. Finally, repair helps us grow and flourish as people. Through repai / 7 — r, we become better informed about the world around us, develop analytical and problem-solving skills, exercise greater autonomy, and build stronger communities.
  • If we can slow the replacement cycle, we will spend less over the course of our lives on clothes, cars, and electronics. And those expenses add up. Collectively, we spend unthinkable sums on new devices–$500 billion a year on smartphones, and roughly the same on household appliances. Both of those figures, however, are dwarfed by the nearly $3 trillion we spend every year buying cars.
  • In perhaps the most extreme example, a customer took his Mac Book Pro to Apple because the display was completely dark. After months of attempted repairs totaling more than $10,000–including two replaced logic boards and eventually an entirely new laptop–an Apple technician uncovered the issue. The screen brightness was turned to zero, a problem solved with a single keystroke.
  • fill your water bottle, and strap on your helmet, only to discover a flat tire. If you have the parts, tools, and know-how to swap out a punctured innertube, the flat is an annoyance, a mere stumbling block. But without the ability to repair, your plans are undone. You are defeated by circumstance. Repair cultivates a sense of self-sufficiency and autonomy that is increasingly rare in a world shaped by networked technologies.
  • consider how the inability to repair motorized wheelchairs can leave their users immobile and isolated. When the battery in the motorized wheelchair Kenny Maestas used couldn’t hold a charge, the device maker told him it would be a month before a technician could look at it. Even if the company had the necessary parts in stock, its policy insisted on separate inspection and repair appointments. In the end, it took more than two months before Kenny’s wheelchair was running again.
  • repair helps develop valuable problem-solving skills. Repairs vary in their difficulty. Some failures are easy to diagnose and simple to fix. But often, repair is far from straight forward. There is no simple algorithm or checklist to follow. It requires a creative, even improvisatory approach. These more challenging repairs require you to start with an immediate problem–your car won’t start–and identify potential causes within a complex system. Maybe the battery is dead, or maybe it’s one of a dozen other possible problems: a failed timing belt, a clogged fuel filter, carbon-fouled sparkplugs, a cracked distributor cap, a bad fuel pump, or an oversensitive security system, among others. Determining the right diagnosis requires some combination of experience, intuition, educated guessing, and trial and error.
  • By deliberately directing attention to the cracks and their repair, kintsugi draws on the Japanese notions of mottainai a feeling of regret over waste–and wabi-sabi–an aesthetic tradition that embraces imperfection and impermanence. Not only does kintsugi extend the useful life of objects, but it respects the effort and artistry of the original creator and the repairer inequal measure.
  • Landlords sat idly by as their tenants endured deteriorating buildings. Device makers, on the other hand, play a far more active role in obstructing repair. Imagine you have a leaky pipe flooding your kitchen. There are worse things your landlord could do than ignore your pleas for a fix. They could buy up all the wrenches in town and refuses to sell you one. They could refuse to let your plumber in the building, insisting you hire their Preferred Plumbing Partner who happens to charge twice the market rate. They could conceal your pipes behind a locked door and refuse to give you a key. When it comes to our devices, that’s too often the sort of reaction we can expect from the most powerful and profitable companies on the planet.
  • Replacement bearings are generally not terribly expensive, only $40 or so. But the job is labor intensive, as it involves the removal of the drum and the reassembly of the machine. The price for a repair is often nearly as much as buying a replacement.
  • As Douglas Adams wrote in The Hitchhiker’s Guide to the Galaxy, “The major difference between a thing that might go wrong and a thing that cannot possibly go wrong is that when a thing that cannot possibly go wrong goes wrong, it usually turns out to be impossible to get at or repair.”
  • we ought to be incredibly skeptical of any technology deployed to undo the very idea of interchangeable parts.
  • a supply chain focused on making new products is more efficient if it devotes minimal resources to servicing old ones, even if they end up in landfills. In the same way, Uber is more profitable if it refuses to recognize drivers as employees, Facebook is more profitable if it opens its platform to disinformation, and fossil-fuel companies are more profitable if they can pollute at will. Companies profit by externalizing costs. That doesn’t mean we should let them.
  • Despite the dire warnings, there are no laws, rules, or regulations in the United States concerning used or expired car seats. And regulators in countries like Sweden, which has some of the most stringent child safety laws in the world, actually encourage the use of secondhand car seats. When pressed by Minter, leading car-seat manufacturers and retailers offered no evidence supporting their claims.
  • The iPhone was also the best predictor of educational attainment. Back in 1992, before computing technology became pervasive, the best predictor was Grey Poupon mustard.
  • Even with in the internal logic of intellectual property law, repair deserves greater emphasis. Rather than a purely countervailing consideration, repair is intertwined with questions of innovation and progress. Our approach to repair influences what sort of innovations we are likely to see, who can access Repair and Intellectual Property, and under what conditions. In that sense, our attitudes about repair reflect what sort of technological and social progress we value.
  • But annual product releases aren’t compatible with truly innovative breakthroughs, at least not on any regular basis. Even if Apple, Samsung, and other device makers could churn out major new features every year, why bother? People need phones, cars, and dishwashers. If they can’t fix their current devices, they’ll buy new ones even without new major technological advances. In contrast, an environment that encourages repair creates stronger incentives for genuine innovation. If you can reliably and cheaply keep your four-year-old phone or decade-old car working, you’re more likely to holdout for some significant new functionality before replacing it.
  • As a matter of legislative history, Bork’s assertions have been thoroughly debunked. Nonetheless,they found a receptive audience in the Supreme Court. Beginning in the mid-1970s, the Court’s approach to antitrust began to shift, adopting the consumer welfare framing of the Chicago School. By the mid 2000s, Justice Scalia–writing for a unanimous Court–was praising monopolies: “The mere possession of monopoly power, and the concomitant charging of monopoly prices, is not only not unlawful; it is an important element of the free market system. The opportunity to charge monopoly prices–at least for a short period–is what attracts ‘business acumen’ in the first place; it induces risk taking that produces innovation and economic growth.”
  • As Justice Louis Brandeis put it, “We can have democracy in this country, or we can have great wealth concentrated in the hands of a few, but we can’t have both.”
  • Firms are also obligated to maintain a stock of parts available to third-party repair providers. Makers of electronics and appliances with wholesale prices above $50 must make parts and information available for at least three years. For devices over $100 at wholesale, that requirement extends to seven years. Given California’s size, the Song-Beverly Act has shaped device maker policies nationwide.
  • Depending on the product, between 62 and 83 percent of European consumers elected to repair their products in the experiment. But when the level of effort was increased, the experimenters found a significant decline in repairs. When repair is less convenient, fewer people do it. Rather disconcertingly, the same was not true for replacement. When the effort needed to replace a product increased, there was no notable drop in replacement.
  • A number of Austrian states and cities offer “repair bonuses” that cover as much as 50 percent of the cost of repairs. And in 2020, France launched a program that offers individuals €50 to spend on professional bike repairs in an effort to reduce traffic.
  • And as the Commission pointed out, if repair presents safety risks, manufacturers are best positioned to mitigate them through design changes.
Posted in Lit Review, Maker | Tagged , , , | Leave a comment

Quest for My (New) Local – Crown & Kettle

Having recently arrived in Manchester, I realized I needed to find a local pub that I could call my own. I wanted to find as close to the perfect pub that I could within easy walking distance of our flat… But that leads to the important question, what makes the perfect pub? In my mind, it’s a place with hygge. The kind of place you could enjoy while a British winter storm rages outside; where you could chat with old friend or make new ones and the regulars know you; somewhere that feels like a true Third Place… But how do you quantify those into something that can be measured or compared.

After overthinking it for far too long, I came up with five criteria. First, do that have cask ale? This is fairly common in the UK, but still worth noting, especially if they have only or mostly cask ale. Next, does it have a fireplace. It’s August as I start this quest and expected to be 30° C tomorrow so we have no use for this now, but when the hypothetical storm arrives in November, it will be wonderful. Third, is there recorded music playing? This is a “reverse point” because most of the better pubs I can think of don’t play recorded music and if they do, it’s fairly quiet. If the pub is blasting the latest Top 40 at 85+ dB, it’s going to loose a point. Live music, doesn’t could against them.

The final two criteria are more subjective and look at how other people would rate the pub and are measured on a 0-2 scale. First, what would granddad think? This is not necessarily what my granddad would think, but more about the platonic ideal of grandfatherliness. Would he feel comfortable ganging out there? A night club with strobe lights and loud music scores a 0, while a place where I’m one of the youngest there scores a 2. Finally, what does Morgan think? Since she will likely be joining me more often than not, her opinion of the place is important. When I asked her what she’s looking for, she said, “Um… I duh know… is it good?” Well, fair enough, that’s basically what I said when I started this. For her, a 0 means she doesn’t want to go back, a 1 she’d be fine returning to, and a 2 means we definitely need to go back there.

I’m sure I’m missing some very important criteria. What else would you look for in a pub? Let me know below and I’ll look at updating the scoring system.

Details:

With the rough rubric sorted, we started our quest at the Crown & Kettle just down the road. It was a warm day with people spilling out onto the picnic tables out front. Once inside, the highly decorated vaulted ceiling is what I would picture for a 1920’s bank, but no longer kept at the level of “bank shine”. Good selection of beers and about a dozen ciders which seems unusual to me. Maybe they’ve gotten more popular since I last lived here? All beers were listed on TV screens and the one in our corner was a bit small for all the beers (granddad would have had a hard time reading it… unless I was leaning on the bar, I had a hard time reading it). My phone started acting up so I didn’t get any photos, but hope to include those in future updates. I also saw that they have a brewery Tap Takeover at the end of the month, so that will be worth going back to check out.

Score:

Cask: 1 / 1 – Yes
Fireplace: 0 / 1 – Didn’t see it
Recorded Music: 0 / 1 – Yes, loud outside, but not too bad inside
Seating: 1 / 2 – Decent mix
Community Energy: 1 / 1 – Spoke briefly with the table beside us
Granddad: 1.5 / 2 – I wasn’t the oldest and I certainly wasn’t the youngest
Morgan: 2 / 2 – She loved the cat clocks on the wall. None of the tails were swinging, but she still thought they were cool
Overall: 6.5 / 10 (Updated scoring system, original 4 / 7) — Not bad and about where I’d hope our first pub landed, with room to move in both directions. Overall, it’s close and we will definitely be going back but we’ll have to check out other first. Time to keep exploring Manchester.

Pub Leaderboard

Pub NameScoreNotes
Marble Arch9.5 / 10Search is over
Angel Pub8 / 10Best spot yet!
Crown & Kettle6.5 / 10Good first stop. Could be it, but need to explore more
Seven Bro7hers6 / 10Good brewery, not a traditional pub
Spinners Rest5.5 / 10New and trendy
Jimmy’s4 / 10Lots of neon
Posted in Quest for My New Local, Travel | Tagged , , | 7 Comments

CYD Control Board Learning

Shortly after moving to Seattle, we put string lights over our patio to better enjoy the long summer evenings and got a simple remote control to turn them on and off. After a year, the remote stopped working. Rather than buy another one, I realized it’s just a wireless receiver and a relay… I could build that. So I did.

I gutted the weatherproof box that held the electronics and started building. The old system appeared to transmit over 433MHz. I thought it would be nicer to control the lights from my phone and I already had some experience building BLE devices. I put an Arduino Nano 33 BLE, 5v relay, and USB power plug in the box. A bit of coding and everything worked great.

Well, five years later, I’ve updated my phone and the code I wrote no longer runs on the latest version of Android. Going back and redoing a project is never as fun as building it the first time so I hacked a solution that worked on my phone only but isn’t user-friendly enough for anyone else. That’s where the project sat for five months… until I received my first Cheap Yellow Display (CYD). That is the semi-official name.

This thing is fun. It has a full touchscreen, ESP32 with Bluetooth and WiFi, several I/O ports, and all programmable within Arduino IDE. After looking at the demos and building a simple temperature gauge, I started working on a new control board for my outdoor lights. I kept it simple with just the On and Off buttons I had in the app I wrote years ago, but maybe I need additional functionality? Automatically switch on at sunset based on data it grabs over wifi?

Anyhow, these ~$20 devices are fun to play around with. I’ve got another one coming and now I’m trying to figure out other projects for them. Have you built with one? Any recommendations for project ideas to try or modifications for my porch lights?


For anyone interested, here’s the code I wrote (with a lot of help from other examples) for the CYD:

#include <TFT_eSPI.h>
#include <SPI.h>
#include <Arduino.h>

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEClient.h>
#include <BLEScan.h>

// ================= BLE UUIDs (Nano 33 BLE) =================
#define SERVICE_UUID        "0000180A-0000-1000-8000-00805f9b34fb"
#define CHARACTERISTIC_UUID "00002a57-0000-1000-8000-00805f9b34fb"

// ================= TOUCH (FNK0104B) =================
  #include "FT6336U.h"
  #define I2C_SDA 16
  #define I2C_SCL 15
  #define RST_N_PIN 18
  #define INT_N_PIN 17
  FT6336U ft6336u(I2C_SDA, I2C_SCL, RST_N_PIN, INT_N_PIN); 
  FT6336U_TouchPointType tp; 

// ================= STYLE =================
  #define COLOR_BG        0x18E3      // charcoal
  #define COLOR_CARD      0x2945      // dark blue-grey
  #define COLOR_HEADER    0x0418      // navy
  #define COLOR_ON        0x3D8E      // modern green
  #define COLOR_OFF       0xD145      // modern red
  #define ON_LIGHT        0x7F30
  #define OFF_LIGHT       0xF2A8
  #define COLOR_BORDER    0x7BEF
  #define COLOR_TEXT      TFT_WHITE
  #define COLOR_ACCENT    TFT_CYAN

// ================= DISPLAY =================
TFT_eSPI tft = TFT_eSPI();

// ================= BLE =================
BLEClient* client;
BLERemoteCharacteristic* characteristic;
bool connected = false;

// ================= BUTTONS =================
struct Button {
  int x, y, w, h;
  uint16_t color;
  const char* label;
};

Button btnOn = {25, 65, 270, 58, COLOR_ON, "ON"};
Button btnOff ={25, 140, 270, 58, COLOR_OFF, "OFF"};

// ---------------- DRAW BUTTON ----------------
void drawButton(Button &b)
{
  uint16_t highlight;
  if(b.label=="ON") highlight = ON_LIGHT;
  else highlight = OFF_LIGHT;
  
    // Shadow
    tft.fillRoundRect(
        b.x+4,
        b.y+4,
        b.w,
        b.h,
        14,
        TFT_BLACK);

    // Main button
    tft.fillRoundRect(
        b.x,
        b.y,
        b.w,
        b.h,
        14,
        b.color);

    // Top Highlight strip
    fillGradient(   //tft.fillRoundRect(
        b.x+7,
        b.y+2,
        b.w-14,
        14,
        //8,
        highlight,
        b.color,
        1);

    // Bottom Highlight strip
    fillGradient(   //tft.fillRoundRect(
        b.x+7,
        (b.y+b.h-2),
        b.w-14,
        14,
        //8,
        highlight,
        b.color,
        -1);

    tft.drawRoundRect(
        b.x,
        b.y,
        b.w,
        b.h,
        14,
        COLOR_BORDER);

    tft.setTextDatum(MC_DATUM);   
    tft.setTextColor(TFT_WHITE,b.color);

    tft.drawString(
        b.label,
        b.x+b.w/2,
        b.y+b.h/2,
        4);
}

void fillGradient(int x, int y, int w, int h, uint16_t c1, uint16_t c2, int upDown)
{
    for (int i = 0; i < h; i++)
    {
        float t = (float)i / (h - 1);

        uint8_t r1 = (c1 >> 11) & 0x1F;
        uint8_t g1 = (c1 >> 5) & 0x3F;
        uint8_t b1 = c1 & 0x1F;

        uint8_t r2 = (c2 >> 11) & 0x1F;
        uint8_t g2 = (c2 >> 5) & 0x3F;
        uint8_t b2 = c2 & 0x1F;

        uint8_t r = r1 + (r2 - r1) * t;
        uint8_t g = g1 + (g2 - g1) * t;
        uint8_t b = b1 + (b2 - b1) * t;

        uint16_t color = (r << 11) | (g << 5) | b;

        tft.drawFastHLine(x - i/2, y + (upDown*i), w +i, color);
    }
}

// ---------------- DRAW STYLES -----------------
void drawHeader()
{
    tft.fillRect(0,0,320,42,COLOR_HEADER);

    tft.fillCircle(
        16,
        21,
        6,
        connected ? TFT_GREEN : TFT_RED);

    tft.setTextDatum(CL_DATUM);

    tft.setTextColor(TFT_WHITE,COLOR_HEADER);

    tft.drawString(
        connected ?
        "Connected" :
        "Disconnected",
        28,
        21,
        2);

    tft.setTextDatum(CR_DATUM);

    tft.drawString(
        "Outdoor Lights Controller",
        310,
        21,
        2);
}

void drawTitle()
{
    tft.setTextDatum(MC_DATUM);

    tft.setTextColor(COLOR_ACCENT,COLOR_BG);

    tft.drawString(
        "DROWNED CHIPMUNK DEVICES",
        160,
        52,
        2);
}

void drawStatus(String text)
{
    tft.fillRoundRect(
        10,
        205,
        300,
        28,
        10,
        COLOR_CARD);

    tft.drawRoundRect(
        10,
        205,
        300,
        28,
        10,
        COLOR_BORDER);

    tft.setTextDatum(CL_DATUM);

    tft.setTextColor(
        TFT_WHITE,
        COLOR_CARD);

    tft.drawString(
        "Last command:",
        20,
        219,
        2);

    tft.drawString(
        text,
        180,
        219,
        2);
}

void pressAnimation(Button &b)
{
    uint16_t old = b.color;

    b.color = TFT_WHITE;

    drawButton(b);

    tft.setTextColor(old,TFT_WHITE);

    tft.drawString(
        b.label,
        b.x+b.w/2,
        b.y+b.h/2,
        4);

    delay(90);

    b.color = old;

    drawButton(b);
}

// ---------------- TOUCH HIT TEST ----------------
bool inside(Button b, int x, int y)
{
  char tempString[128];
  sprintf(tempString, "Button X: %4d to %4d and Touch X: %4d\tButton Y: %4d to %4d and Touch Y: %4d\n", b.x, (b.x+b.w), x, b.y, (b.y+b.h), y); 
  Serial.print(tempString);
  return (x > b.x && x < b.x + b.w &&
          y > b.y && y < b.y + b.h);
}

// ---------------- BLE CONNECT ----------------
bool connectNano()
{
  BLEDevice::init("");

  BLEScan* scan = BLEDevice::getScan();
  scan->setActiveScan(true);

  BLEScanResults results = *scan->start(5);

  Serial.println("Scanning...");

  for (int i = 0; i < results.getCount(); i++)
  {
    BLEAdvertisedDevice dev = results.getDevice(i);

    Serial.println(dev.toString().c_str());

    if (dev.haveName() && dev.getName() == "Nano 33 BLE")
    {
      Serial.println("Found Nano 33 BLE");

      client = BLEDevice::createClient();

      if (!client->connect(&dev))
      {
        Serial.println("Connection failed");
        return false;
      }

      BLERemoteService* service =
          client->getService(SERVICE_UUID);

      if (!service)
      {
        Serial.println("Service not found");
        return false;
      }

      characteristic =
          service->getCharacteristic(CHARACTERISTIC_UUID);

      if (!characteristic)
      {
        Serial.println("Characteristic not found");
        return false;
      }

      connected = true;
      Serial.println("BLE Connected!");
      return true;
    }
  }

  Serial.println("Nano not found");
  return false;
}

// ================= SETUP =================
void setup()
{
  Serial.begin(115200);

  // DISPLAY
  tft.init();
  tft.setRotation(1);
  tft.fillScreen(COLOR_BG);
  drawHeader();
  drawTitle();
  drawButton(btnOn);
  drawButton(btnOff);
  drawStatus("Connecting BLE...");

  // TOUCH
  ft6336u.begin(); 

  // BLE
  connected = connectNano();
  drawHeader();
  if(connected) drawStatus("Connected");
}

void loop()
{

  tp = ft6336u.scan(); 
  
  if (tp.tp[0].status==0)
  {

    Serial.print("Raw X=");
    Serial.print(tp.tp[0].x);
    Serial.print(" Raw Y=");
    Serial.println(tp.tp[0].y);
    
    int x = map(tp.tp[0].y, 9, 310, 0, 320);
    int y = map(tp.tp[0].x, 239, 7, 0, 240);

    if (inside(btnOn,x,y))
    {
        pressAnimation(btnOn);
        characteristic->writeValue(0x01,1);
        drawStatus("ON");
        Serial.println("ON");
        delay(250);
    }
    
    if (inside(btnOff,x,y))
    {
        pressAnimation(btnOff);
        characteristic->writeValue(0x02,1);
        drawStatus("OFF");
        Serial.println("OFF");
        delay(250);
    }
  }

  delay(5);
}
Posted in Education, Maker | Tagged , , , | Leave a comment