<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>RexBlog</title><description>Technology Culture</description><link>https://www.rexfeng.com/</link><item><title>Tokyo &amp; Seoul June 2025 Family Trip Report</title><link>https://www.rexfeng.com/blog/2026/09/tokyo-seoul-june-2025-family-trip/</link><guid isPermaLink="true">https://www.rexfeng.com/blog/2026/09/tokyo-seoul-june-2025-family-trip/</guid><pubDate>Tue, 29 Sep 2026 07:39:52 GMT</pubDate><content:encoded>&lt;p&gt;In June 2025, we spent a week in Tokyo and a week in Seoul as a family of 4. It was our first time doing either city with kids. This post is what went well and what didn’t. It’s all anecdotes, but hopefully it’s useful to other families.&lt;/p&gt;
&lt;p&gt;Also, I know I posted 2026 already, but I might as well post thoughts on 2025 for posterity.&lt;/p&gt;
&lt;p&gt;What went well in Tokyo&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Asakusa: Senso-ji was good to check out, and Suzukien matcha gelato was great to try. Good area to lean into the touristy vibe to check out tourist shops.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Harajuku: Takeshita Street is extremely touristy, but it’s great to walk around a street where it’s 1 long, straightforward street. In the surrounding area, Reissue’s 3D latte art was great.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Afuri ramen near our hotel was amazing. There are a number of Afuris, and I have to imagine much of the ramen in Tokyo is going to be good.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Shibuya Parco: the Pokémon Center and Nintendo Tokyo are in the same building. Kind of crowded and chaotic. Worth checking out since there’s a lot in this Parco building.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Akihabara: Yodobashi Akiba’s toy floor was a hit with my kids.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don Quijote: you probably know, but this 24-hour store is great to buy things (tax-free if you spend enough).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unicorn Gundam statue (Odaiba): great photo op, but it’s removed now (2026).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What went well in Seoul&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Gyeongbokgung Palace with a hanbok rental: a great experience, even in the rain.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Seongsu: super hip and trendy. Beton salt bread was super amazing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Yukjeon Gukbap: we went twice. A solid chain for a quick meal.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sulbing: we kept going back for bingsu.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cheonggyecheon Stream: great to walk along.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Banpo Bridge: the fountain show was super amazing. We got really lucky and went when there happened to be a night festival.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What didn’t go well&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;We showed up to Seoul markets at night. We went to Namdaemun and Gwangjang Market in the evening, and both were mostly closed. Apgujeong Rodeo and K-Star Road were empty at night. Do your research on when markets and places are open.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Character cafes: the Pokémon Cafe food was bad, and the Sanrio cafe in Ueno was overpriced. The merch and photos were ok, but the food was an afterthought.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tsukiji Outer Market: ok, but very much a tourist trap.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mandarake (Akihabara): more expensive collectibles than I wanted. I was hoping for affordable old Game Boys.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Seoullo 7017 (elevated walkway near Seoul Station): too hot to enjoy in June.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Samwon Garden: the Korean BBQ was hyped up &amp;amp; expensive, but not amazing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Starfield COEX and Lotte Outlets: just malls.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tokyo and Seoul were both great with kids. We went back in June 2026 and fixed some of these, which I wrote about in &lt;a href=&quot;/blog/2026/07/japan-korea-june-2026-trip/&quot;&gt;Japan &amp;amp; Korea June 2026 Trip&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>How I cancelled a $500 WordPress hosting plan</title><link>https://www.rexfeng.com/blog/2026/09/how-i-cancelled-a-500-wordpress-hosting-plan/</link><guid isPermaLink="true">https://www.rexfeng.com/blog/2026/09/how-i-cancelled-a-500-wordpress-hosting-plan/</guid><pubDate>Sun, 27 Sep 2026 06:30:00 GMT</pubDate><content:encoded>&lt;p&gt;I got an email from DreamHost that my 3 year hosting plan was about to renew for $504. This hosting was for wordpress and very old sites. It’s not worth paying this much for hosting that I no longer need.&lt;/p&gt;
&lt;p&gt;Here’s what I did:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Backed up WordPress databases and uploads&lt;/li&gt;
&lt;li&gt;Crawled every URL on both blogs and saved the status codes, so I could check nothing broke later&lt;/li&gt;
&lt;li&gt;Converted this blog to Markdown with &lt;a href=&quot;https://github.com/lonekorean/wordpress-export-to-markdown&quot;&gt;wordpress-export-to-markdown&lt;/a&gt; and built it with &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt;. A new post is now just a new &lt;code&gt;.md&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Deployed all three sites to Netlify and pointed DNS at them&lt;/li&gt;
&lt;li&gt;Cancelled the $500 hosting plan&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I’ve had this hosting plan for a while, and I’m glad I was able to migrate off this hosting plan I don’t need anymore.&lt;/p&gt;
</content:encoded></item><item><title>Japan &amp; Korea June 2026 Trip</title><link>https://www.rexfeng.com/blog/2026/07/japan-korea-june-2026-trip/</link><guid isPermaLink="true">https://www.rexfeng.com/blog/2026/07/japan-korea-june-2026-trip/</guid><pubDate>Sun, 05 Jul 2026 07:35:39 GMT</pubDate><content:encoded>&lt;p&gt;Just got back from two weeks visiting Tokyo, Kyoto, Osaka, Busan, and Seoul with family. This post is to highlight things we enjoyed.&lt;/p&gt;
&lt;p&gt;Amazing food&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Ebisu, Tokyo: ramen with cheese (Tsukumo Ramen Ebisu Honten) with Ice Ouca nearby. Both were great.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kyoto: Gyukatsu at Katsugyu: cook beef on your own hot stone. This walk-in beat our dinner reservations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kyoto: Journey Tabikori shave ice (Pontocho): can’t go wrong with giant, top-tier shave ice.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ikseon-dong, Seoul: Jaeyondo salt bread came out of the bag still warm. The best bread.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hongdae, Seoul: BBQ chicken: amazing KFC spot where Jensen Huang visited.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Walkable, vibrant areas&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cat Street, Harajuku: great to wander, lots of shops.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Arashiyama bridge area, Kyoto: walk around with % Arabica coffee.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pontocho alley + Kamo River, Kyoto: great vibes at night.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Shinsekai, Osaka: old tower lit up at night.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Gwangalli beach, Busan: good to walk at night.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cheongsapo / Haeundae coast, Busan: scenic area with the sky capsule mini-train.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cheonggyecheon stream, Seoul: nice to stroll; check out Hikr Ground nearby.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some random Japan &amp;amp; Korea tips&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Anecdotally, transit cards are easier to drain in Korea than Japan. The Japanese convenience store limited us to one Suica/IC card per transaction. At the Korean convenience store, they let us use multiple T-money cards in one purchase.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Korean department stores close one day a month, and it’s not obvious. Shinsegae Centum in Busan was closed when we showed up. Check first.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;At Incheon Airport Terminal 2, the Korean food court on B1 is a great last Korean meal before the flight.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With June being Japan’s rainy season, it’s a less popular time to visit. I’ve enjoyed my trips to Japan &amp;amp; Korea in June and wouldn’t hesitate to go back in the future if given the opportunity to.&lt;/p&gt;
</content:encoded></item><item><title>Universal Studios Hollywood family tickets 2026</title><link>https://www.rexfeng.com/blog/2026/04/universal-studios-hollywood-family-tickets-2026/</link><guid isPermaLink="true">https://www.rexfeng.com/blog/2026/04/universal-studios-hollywood-family-tickets-2026/</guid><pubDate>Sat, 04 Apr 2026 07:50:13 GMT</pubDate><content:encoded>&lt;p&gt;We recently went to Universal Studios Hollywood and had to figure out which tickets to get. By default, I would’ve just gotten annual passes at Costco and called it a day. Thankfully on Reddit, people discuss the different tickets you can choose from.&lt;/p&gt;
&lt;p&gt;It seems to me there’s 2 main paths to choose from: 1.) minimum price or 2.) maximum value. For the former, you can get a single day pass (and maybe look online for discounts).&lt;/p&gt;
&lt;p&gt;For value, I was initially considering the Costco pass since the value is there on the surface. You get “a year” (with a bunch of blockout/restricted dates) for $180 per person. Living in LA and being close to Universal Studios, getting an annual pass seems like a good deal.&lt;/p&gt;
&lt;p&gt;After doing some research (reading Reddit), the Costco annual pass appears to match the California Neighbor Pass in both price and blockout dates. So the Costco pass doesn’t offer anything better than the CA annual pass.&lt;/p&gt;
&lt;p&gt;What I ended up doing was buying 1 Gold annual pass ($299) and the rest in Silver annual passes ($219 per person). This helps for going often since the Gold pass comes with parking while the other passes (Silver, Costco, and CA neighbor) make you pay $40 parking per visit.&lt;/p&gt;
&lt;p&gt;There’s also a current promo (at this time of writing) where you get 3 more months free when you buy a new pass. You might wonder why not just mix 1 Gold with the rest as Costco passes? The problem is the Gold pass would be valid for 15 months while the Costco passes only get 12, so the last 3 months wouldn’t be very useful.&lt;/p&gt;
&lt;p&gt;If you’re buying Universal Studios passes for a family, you don’t need everyone on the same tier. Get one Gold pass to cover parking for the whole group.&lt;/p&gt;
</content:encoded></item><item><title>Building a 6 7 image classifier with fast.ai</title><link>https://www.rexfeng.com/blog/2025/12/building-a-6-7-image-classifier-with-fast-ai/</link><guid isPermaLink="true">https://www.rexfeng.com/blog/2025/12/building-a-6-7-image-classifier-with-fast-ai/</guid><pubDate>Tue, 09 Dec 2025 10:09:22 GMT</pubDate><content:encoded>&lt;p&gt;I recently took Fast.ai’s &lt;a href=&quot;https://course.fast.ai/&quot;&gt;Practical Deep Learning for Coders&lt;/a&gt; (part 1) course. As practice, I used transfer learning to build an image classifer. Given a handwritten number image, &lt;a href=&quot;https://huggingface.co/spaces/xtapal/six-seven-classifier&quot;&gt;the model will classify it as a 6, a 7, or neither&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;images/Screenshot-2025-12-09-at-2.06.01-AM-540x302.png&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;With transfer learning, I was able to fine tune resnet18 against the MNIST database (handwritten digits). Using fast.ai’s library on paperspace, it was easy to create DataLoaders, fine tune the pretrained model, and evaluate the model loss. With gradio, I was able to deploy this to huggingface spaces to easily run inference.&lt;/p&gt;
&lt;p&gt;Testing out the gradio app, I find the prediction itself to not be very reliable. This is ok since I wanted practice with the end to end process, and the image dataset can be expanded to gather more images of 6 and 7 digits for better fine tuning.&lt;/p&gt;
&lt;p&gt;With fast.ai, paperspace, and huggingface, ML classification is accessible.&lt;/p&gt;
</content:encoded></item><item><title>Apple Vision Pro Demo Impressions</title><link>https://www.rexfeng.com/blog/2024/02/apple-vision-pro-demo-impressions/</link><guid isPermaLink="true">https://www.rexfeng.com/blog/2024/02/apple-vision-pro-demo-impressions/</guid><pubDate>Tue, 13 Feb 2024 07:46:40 GMT</pubDate><content:encoded>&lt;p&gt;I tried out the Apple Vision Pro (AVP) hardware in an Apple store today. The ball was in Apple’s court. I really wanted to be impressed by the hardware and put me over the edge to pick one up and develop apps for it. I’ve released Day 1 apps for the Apple Watch &amp;amp; ARKit (iOS 11), and I believe in the future of AR for productivity.&lt;/p&gt;
&lt;h2 id=&quot;not-sharp&quot;&gt;&lt;strong&gt;Not Sharp&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Unfortunately, when I wore the AVP, the content (text, images, etc.) was not razor sharp. I could use the device and navigate the OS without an issue, but I was expecting next-gen sharpness on the AVP displays.&lt;/p&gt;
&lt;p&gt;My guess is I could try different distances (closer or further) from the screen to find the distance where all the content is sharp and crisp. Probably try different light seals. I couldn’t achieve the level of sharpness that I expect from any 2020 device (phone, HD monitor, etc).&lt;/p&gt;
&lt;p&gt;Also, there was an opening at the bottom of my headset (towards my nose). I thought the light seals were supposed to block 360 degrees of light around the headset and not leave a small gap. That gap was normal per the Apple rep.&lt;/p&gt;
&lt;h2 id=&quot;demo&quot;&gt;Demo&lt;/h2&gt;
&lt;p&gt;Apple did a great job with the demo. The demo was seated (smart) and focused on VR content, not passthrough use cases.&lt;/p&gt;
&lt;p&gt;The OS (visionOS) was simple to use. Pinching to drag around or press buttons worked fine with hand gestures. When I tried to resize windows (bottom corners) or use two hands to pull apart, I ran into problems with certain apps where it wouldn’t work.&lt;/p&gt;
&lt;h2 id=&quot;content-2d-vs-3d&quot;&gt;Content (2D vs 3D)&lt;/h2&gt;
&lt;p&gt;My imagined ideal use case would be having several large macOS screens in front of me to get work done. However, Apple marketing seems to be focused on entertainment (big TV in front of you) as their selling point.&lt;/p&gt;
&lt;p&gt;The problem (in my opinion) is that the content was not great. Spatial content, shot on what I presumed are iPhone 15 Pro Maxes or AVPs, seemed low resolution to me. Enlarging an iPhone photo to fill up your entire room’s wall doesn’t work that well. It lacked detail. Even viewing a Panorama (shot on iPhone? not sure), the resolution was not great when viewed at such a large size.&lt;/p&gt;
&lt;p&gt;Part of the demos included immersive environments. The environments were impressive since they were built natively for the device and 3D rendered. Viewing a photo from the moon environment was great since the nearby 3D rocks on the ground really sell the illusion.&lt;/p&gt;
&lt;p&gt;I personally felt the other content fell apart. Spatial videos (shot with iPhone 15 PM?) were fun but it didn’t feel immersive to me since moving around lacked the convincing parallax experience you get from viewing things in your every day life.&lt;/p&gt;
&lt;p&gt;While internet AVP users seem to enjoy viewing 2D movies on a giant, virtual screen, I think there is a huge opportunity for companies to build 3D immersive environments or games for users to be in (and interact with). Using the AVP’s state of the art hardware to view 2D images is like watching television without sound - a missed opportunity.&lt;/p&gt;
&lt;h2 id=&quot;takeaway&quot;&gt;Takeaway&lt;/h2&gt;
&lt;p&gt;Despite the hardware issues (I suspect the light seal), I’d be interested in making AR apps for the AVP. Paying almost $4K to buy a dev kit and develop for Apple is a tough sell for an indie developer. I honestly think Apple should have a program for developers to borrow AVPs and build apps.&lt;/p&gt;
</content:encoded></item><item><title>Paris November 2023 Trip Report</title><link>https://www.rexfeng.com/blog/2023/12/paris-november-2023-trip-report/</link><guid isPermaLink="true">https://www.rexfeng.com/blog/2023/12/paris-november-2023-trip-report/</guid><pubDate>Sun, 10 Dec 2023 09:41:57 GMT</pubDate><content:encoded>&lt;p&gt;During Thanksgiving week, we went to Paris. This is a review of how things went traveling as a family with young kids in a city without strollers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flight: French Bee&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I wasn’t sure what to expect flying this budget airline. They changed our flight months before from [Saturday to Saturday] to [Sunday to Sunday]. This was annoying but we dealt with it by updating hotel plans. The outbound flight was good. The airplane was a modern Airbus plane and we could watch movies from a limited selection. While we had meal service pre-purchased, they only offered water with our meal. Anything besides water cost extra. Not a deal breaker but kind of odd? The prepaid pasta entree was not good.&lt;/p&gt;
&lt;p&gt;On the inbound flight, our plane had an issue. This was very concerning as it wasn’t clear if we were going to be able to fly home on Sunday. After a few hours delay, they switched us to another plane (from partner Air Caraïbes) and we were flying home. Despite this significant delay on the return flight, I would be open to flying French Bee again as long as the price is low enough.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hotel: Hyatt Regency Paris Étoile&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We stayed a week in the 17th arrondissement on points. No cash cost for a suite (actually a family room: 2 connected rooms) with a great view of the Eiffel Tower and lounge access. Our kids enjoyed the lounge and we took advantage of the lounge to eat breakfast. The location is not central, so doing stuff “in Paris” meant taking the subway for 20 minutes one way, doing stuff, and then coming back another 25 minutes.&lt;/p&gt;
&lt;p&gt;I enjoyed our stay here. There are plenty of other hotels in more central or vibrant locations which would have been more conducive to a mid day rest. This Hyatt had convenient subway access and a great view of the city.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Transportation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We flew into Orly airport and were lucky that our trip lined up with the Navigo weekly pass. It was hard to purchase the weekly pass since we had to find a manned booth at the “5th” bus stop area outside Terminal 4. Regular public transit machines did not sell the weekly pass. For 30 euros, you get a pass that works exactly from Monday to Sunday for metro, train, RER, express tram, tram and bus. This means you can take unlimited Paris subway, train to Versaille, city buses, etc. rides all for 1 low price.&lt;/p&gt;
&lt;p&gt;When it made sense to, I did supplement with Taxi rides via the G7 Paris Taxi app. Not all taxis can hold 4 passengers so hailing a taxi is hit or miss. Also when taking a large passenger van official taxi (with the taxi light on top), I ran into upcharges for luggage and stuff even though the fare from the airport to Paris was supposed to be a lower flat fee. It’s unclear how much of these fees are valid or the taxi driver tacking on extra charges.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Weather: cold &amp;amp; challenging&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So this isn’t unexpected, but it’s worth mentioning. The weather during Thanksgiving week is very cold. Even when my iPhone Weather app says today is “cloudy and not raining”, some days would still have drizzle or rain. This made sightseeing or walking around VERY difficult with young kids.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Itinerary&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We had 5 full days to sight see. Jetlag was a real challenge during the trip and even after the trip.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Tues - Eiffel Tower summit, Le Bon Marché department store, Tuileries Garden Christmas market. The Eiffel Tower was pretty awful with cloudy &amp;amp; rainy weather, but we had pre-purchased tickets. The Tuileries Christmas market was fun with lots of carnival games.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Weds - Louvre, Sacré-Cœur de Montmartre. The Louvre was good as we saw the famous art and ate at Cafe Angelina inside. There was also a kids studio in the basement of the Louvre with crafts. For dinner, we ate at Bouillon Pigalle which was pretty awful, my fault for picking a lower end place.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Thur - Versailles palace, Bateaux-Mouches Seine river boat cruise. In Versailles, the weather was pretty bad with drizzle. Since we have young kids, there was no way to walk around the whole estate, so we rented a golf cart which was fun. The boat cruise was definitely worth it to see the city of lights at night.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fri - Shopping (La Samaritaine, BHV Marais), walking around (Île de la Cité). We made a pit stop at Boulangerie BO&amp;amp;MIE which had excellent pastries. For dinner, we ate at Grand Brasserie. Our kids were really tired. The beef quality in France seems worse than the US. Obviously the wine, cheese, bread, etc. are all top notch in Paris.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sat - More shopping (Printemps Haussmann, Galeries Lafayette Haussmann), Saint Germain Christmas Market. The rooftop of the Printemps was not anywhere as amazing as the Galeries Lafayette. Since this was a Saturday and “Black Friday” shopping, the crowds at Galeries Lafayette Haussmann was just too crowded. I wanted to look around more for kids stuff, but there were way too many people. Also the Saint Germain Christmas Market was a few stalls alongside the road - not worth checking out.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Overall&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Despite the weather and time difference, we enjoyed the trip. The kids already want to go back to Paris. While we can’t go back right away (the trip just happened), it will be fun to come back eventually and spend time doing other things (walking around, eating, shopping, and not visiting the Louvre or Eiffel tower). It was good to take an international trip, expose our kids to a different culture/language, and challenge ourselves visiting a major European city (instead of a more typical Hawaii vacation at the beach/resort).&lt;/p&gt;
</content:encoded></item><item><title>Installing Ruby 2.X on Intel macOS Monterey (12.6)</title><link>https://www.rexfeng.com/blog/2023/07/installing-ruby-2-x-on-intel-macos-monterey-12-6/</link><guid isPermaLink="true">https://www.rexfeng.com/blog/2023/07/installing-ruby-2-x-on-intel-macos-monterey-12-6/</guid><pubDate>Thu, 27 Jul 2023 07:44:57 GMT</pubDate><content:encoded>&lt;p&gt;In this guide, we’ll be using rvm &amp;amp; homebrew to install Ruby 2.X on our Intel Mac. The key is to specify the location of openssl.&lt;/p&gt;
&lt;p&gt;First, make sure you have Xcode Command Line Tools installed on your mac. You can install it with&lt;/p&gt;
&lt;p&gt;        &lt;code&gt;xcode-select --install&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then install openssl (v1.1):&lt;/p&gt;
&lt;p&gt;        &lt;code&gt;brew install openssl@1.1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To install Ruby on my Mac, I’ve had to specify the openssl directory when compiling Ruby. Make sure to replace “2.7.8” with your target Ruby version.&lt;/p&gt;
&lt;p&gt;        &lt;code&gt;rvm install 2.7.8 --with-openssl-dir=`brew --prefix openssl@1.1`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can set this version of Ruby as your default version with rvm:&lt;/p&gt;
&lt;p&gt;        &lt;code&gt;rvm use --default 2.7.8&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;That’s it! Installing older versions of Ruby isn’t too tough.&lt;/p&gt;
</content:encoded></item><item><title>Updating web app from Rails 4 to Rails 7</title><link>https://www.rexfeng.com/blog/2023/07/updating-web-app-from-rails-4-to-rails-7/</link><guid isPermaLink="true">https://www.rexfeng.com/blog/2023/07/updating-web-app-from-rails-4-to-rails-7/</guid><pubDate>Mon, 10 Jul 2023 05:41:21 GMT</pubDate><content:encoded>&lt;p&gt;A few months ago, &lt;a href=&quot;https://certbot.eff.org/&quot;&gt;certbot&lt;/a&gt; gave me the warning “Your system is not supported by certbot-auto anymore.”. With my Rails 4 app running on old Ubuntu 14.04, it was time to update the app &amp;amp; environment.&lt;/p&gt;
&lt;p&gt;Since I’m using Digital Ocean’s droplets, it was easy to spin up a new droplet, setup the new droplet, and then destroy the old droplet. This is way better than operating in situ.&lt;/p&gt;
&lt;p&gt;This blog post will provide a high level overview of update steps &amp;amp; pitfalls encountered.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Spin up a Ruby on Rails (v7.0.4.2, OS Ubuntu 22.04) droplet &lt;a href=&quot;https://marketplace.digitalocean.com/apps/ruby-on-rails&quot;&gt;https://marketplace.digitalocean.com/apps/ruby-on-rails&lt;/a&gt; This also involved setting up a SSH key to access the new droplet server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Exfiltrate the example Rails 7 app from the server to my local machine &lt;code&gt;scp -r root@{SERVER_IP}:/home/rails/example .&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a new private GitHub repo for this example Rails 7 app&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the new example Rails 7 app locally This step should be super simple, but it was not. Getting RVM to run Ruby 3.2.0 with OpenSSL was not trivial on my Intel Mac. Here’s what I ran to setup Ruby 3.2.0 locally:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo -i&lt;/code&gt;&lt;br&gt;
&lt;code&gt;cd /usr/local/src&lt;/code&gt;&lt;br&gt;
&lt;code&gt;curl -O https://www.openssl.org/source/openssl-1.0.2t.tar.gz&lt;/code&gt;&lt;br&gt;
&lt;code&gt;tar xzf openssl-1.0.2t.tar.gz&lt;/code&gt;&lt;br&gt;
&lt;code&gt;cd openssl-1.0.2t&lt;/code&gt;&lt;br&gt;
&lt;code&gt;./Configure darwin64-x86_64-cc&lt;/code&gt;&lt;br&gt;
&lt;code&gt;make&lt;/code&gt;&lt;br&gt;
&lt;code&gt;make install&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rvm reinstall 3.2.0 --with-openssl-dir=/usr/local/ssl&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the new Rails 7 app, I moved my psql DB migrations over by hand. I copied the files and had to update the &lt;code&gt;ActiveRecord::Migration&lt;/code&gt; with &lt;code&gt;ActiveRecord::Migration[7.0]&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Draw the rest of the owl. I had to port lots of Rails files over from my Rails 4 to the target Rails 7 app.&lt;/p&gt;
&lt;p&gt;I ran into an issue with a model validation callback. To fix my issue, I created a migration to add uniqueness validation at the postgres layer and removed the &lt;code&gt;uniqueness&lt;/code&gt; check in my model.&lt;/p&gt;
&lt;p&gt;This also include various site fixes. Such as Open Street Map tiles, using 3rd party APIs, and Font Awesome icons.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setup deployment to the server using Capistrano.&lt;/p&gt;
&lt;p&gt;Setting up Capistrano with Puma on Digital Ocean was not trivial at all. I followed this guide by Matthew Hoelter &lt;a href=&quot;https://www.matthewhoelter.com/2020/11/10/deploying-ruby-on-rails-for-ubuntu-2004.html&quot;&gt;https://www.matthewhoelter.com/2020/11/10/deploying-ruby-on-rails-for-ubuntu-2004.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In my config/deploy.rb file, I had to add this &lt;code&gt;set :branch, :main&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In my root Capfile, I had to use &lt;code&gt;install_plugin Capistrano::Puma::Systemd&lt;/code&gt; due to using Puma 5.6.5.&lt;/p&gt;
&lt;p&gt;After a ton of trial and error, I had setup my nginx config at &lt;code&gt;/etc/nginx/sites-available/rails&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;There was a ton of issues with the .sock file from Puma not getting generated.&lt;/p&gt;
&lt;p&gt;Setting up the &lt;code&gt;secret_key_base&lt;/code&gt; is a newer Rails convention. Luckily Matthew’s blog post goes into detail on how to set it up in &lt;code&gt;/etc/environment&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Using &lt;code&gt;systemctl&lt;/code&gt;, I got puma setup to run the command &lt;code&gt;bundle exec puma -C /home/rails/apps/[APP_NAME]/shared/puma.rb&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Also, due to running on Digital Ocean, I had to update permissions for the rails user. &lt;code&gt;cd /home; chmod o=rx rails&lt;/code&gt;. See Stack Overflow for details &lt;a href=&quot;https://stackoverflow.com/questions/70028324/nginx-permission-denied-accessing-puma-socket-that-does-exist-in-the-correct-loc&quot;&gt;https://stackoverflow.com/questions/70028324/nginx-permission-denied-accessing-puma-socket-that-does-exist-in-the-correct-loc&lt;/a&gt; Without running this, I was getting a 502 (Bad Gateway) error, even though everything else was setup. I can see traffic in my nginx.access.log, but I was still getting the 502 (before running this command).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Move psql data over. This step is going to vary a lot on your setup. I was able to run &lt;code&gt;pg_dump&lt;/code&gt; to export my data and import data using &lt;code&gt;psql APP_NAME_production &amp;lt; latest_pg_dump.sql&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update A record. In order to point my domain to my new droplet, I went into Digital Ocean and updated the A record from my old IP to my new IP. This is going to vary depending who you’re using for domain names.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run certbot. Running certbot for SSL was super easy. &lt;a href=&quot;https://certbot.eff.org/instructions?ws=nginx&amp;amp;os=ubuntufocal&quot;&gt;https://certbot.eff.org/instructions?ws=nginx&amp;amp;os=ubuntufocal&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Destroy old droplet. When you’ve verified everything is working with your new Rails 7 app, you can destroy the old droplet in Digital Ocean.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;My app, &lt;a href=&quot;https://geographapp.com/&quot;&gt;GeoGraph&lt;/a&gt;, is now running on Rails 7 and &lt;a href=&quot;https://geographapp.com/&quot;&gt;lets anyone bookmark their location&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>Disney California Adventure (CA) Trip Report - June 2023</title><link>https://www.rexfeng.com/blog/2023/06/disney-california-adventure-ca-trip-report-june-2023/</link><guid isPermaLink="true">https://www.rexfeng.com/blog/2023/06/disney-california-adventure-ca-trip-report-june-2023/</guid><pubDate>Fri, 30 Jun 2023 07:32:18 GMT</pubDate><content:encoded>&lt;p&gt;Our family went to Disney CA on a weekday in early June. I read online there would be lots of graduating high school students, but I didn’t anecdotally feel like the park was filled with students.&lt;/p&gt;
&lt;p&gt;We opted for 1 day of intensity instead of going to Disneyland over multiple days. Since we haven’t been to Disney CA in a while, I opted for the paid fast pass (Genie+ Lightning Lane). The Lightning Lane proved helpful since you can skip some long lines.&lt;/p&gt;
&lt;p&gt;The Disneyland Genie+ Lightning Lane (G+LL) system is confusing. As of June 2023, there was 1 paid ride that was not part of the G+LL pass: Radiator Springs Racers (RSR). RSR has its own paid Individual Lightning Lane, which we did not buy. With the G+LL, you can book another Lightning Lane (LL) every 2 hours or after you scan in your LL pass at the ride entrance.&lt;/p&gt;
&lt;h2 id=&quot;8am---rope-drop&quot;&gt;8am - Rope Drop&lt;/h2&gt;
&lt;p&gt;We went for the rope drop. However we hit some bad traffic on the highway driving down. So after parking in the Toy Story parking lot, we got to the rope drop area at 7:45a. We were stuck in the back of the rope drop crowd. Everyone was heading towards Radiator Springs Racers.&lt;/p&gt;
&lt;h2 id=&quot;810a---radiator-springs-racers&quot;&gt;8:10a - Radiator Springs Racers&lt;/h2&gt;
&lt;p&gt;90 minute posted wait. Actual wait was ~80 minutes. We rope dropped this ride since I didn’t want to pay for the Individual Lightning Lane. I enjoyed the Cars Land area decorations, but I didn’t think RSR was a great ride. For whatever reason, the car we sat in didn’t even race another car. There was simply no car next to us, so we went through the ride just cruising around the track by ourselves. I honestly don’t see what all the hype is about.&lt;/p&gt;
&lt;h2 id=&quot;940a---web-slingers&quot;&gt;9:40a - Web Slingers&lt;/h2&gt;
&lt;p&gt;45 minute posted, 45 minute actual wait. I think this was a decent ride. The ride broke down on us a couple times while on the ride. Overall, it was fun with young kids to shoot webs and go for high value targets.&lt;/p&gt;
&lt;h2 id=&quot;1040a---guardians-of-the-galaxy---mission-breakout-ll&quot;&gt;10:40a - Guardians of the Galaxy - Mission Breakout (LL)&lt;/h2&gt;
&lt;p&gt;80 minute posted. 30 minute actual wait with LL reservations. The Lightning Lane queue wasn’t moving when we checked in. So even with a LL, it can take a while to get on the ride. This ride was one of the best rides of the day. I wanted to go on it again, but the line throughout the day was just long. And you can’t use LL twice on 1 ride in a day.&lt;/p&gt;
&lt;h2 id=&quot;1140a---lunch&quot;&gt;11:40a - Lunch&lt;/h2&gt;
&lt;p&gt;We went to Pacific Wharf Café and had clam chowder bowls. I had low expectations, but the bread (and the soup) was pretty good.&lt;/p&gt;
&lt;p&gt;For the next LL ride, I wanted to give us enough space to walk around, eat lunch, and take a breather from rushing to 3 heavy hitting rides in the morning. I didn’t want to have to cut lunch short in order to make a LL reservation.&lt;/p&gt;
&lt;h2 id=&quot;1250p---mike--sulley-to-the-rescue-ll&quot;&gt;12:50p - Mike &amp;amp; Sulley to the Rescue! (LL)&lt;/h2&gt;
&lt;p&gt;35 minute posted. 9 minute wait with LL. So I booked this LL when the ride was showing up as down. It didn’t work as the ride came back up eventually. If the ride didn’t come back up in time for our LL, then we would have a pass to use at another similar tier ride. I think this ride was OK. It’s a ride for kids who really love Monster’s Inc.&lt;/p&gt;
&lt;h2 id=&quot;120p---animation-academy&quot;&gt;1:20p - Animation Academy&lt;/h2&gt;
&lt;p&gt;This was a 2 for 1. There’s a bunch of attractions in the Animation Academy. Each has different waits. We took the Learn the Secrets of Drawing class and it was fun to draw Dumbo. However, we also waited for the Frozen meet and greet (Royal Welcome) and that wasn’t a great use of our time. No issues with the character we met, but the line was just way too long and not worth meeting a character for 30 seconds.&lt;/p&gt;
&lt;h2 id=&quot;235p---redwood-creek-challenge-trail&quot;&gt;2:35p - Redwood Creek Challenge Trail&lt;/h2&gt;
&lt;p&gt;This was our resting period for the day. The kids ran around the play area and we were able to sit for a little bit.&lt;/p&gt;
&lt;h2 id=&quot;320p---grizzly-river-run-single-rider&quot;&gt;3:20p - Grizzly River Run (Single Rider)&lt;/h2&gt;
&lt;p&gt;70 minute posted wait, actual wait 9 minutes. While other members were at the challenge trail, I rode the Grizzly River Run as a single rider. The ride was fun and the tube spun around a lot. While I was in the Single Rider line, I saw a party of 2 (parent and child?) try to use the Single Rider line to go on the ride together. The Disney CM called them out for it, but ultimately the 2 were able to go on the ride together.&lt;/p&gt;
&lt;h2 id=&quot;410p---incredicoaster-single-rider---did-not-ride&quot;&gt;4:10p - Incredicoaster (Single Rider - did not ride)&lt;/h2&gt;
&lt;p&gt;55 minute posted wait. Did not actually ride it at 4pm. So the Single Rider line for Incredicoaster was pretty long and not moving with any regularity. I think the 2+2 seating doesn’t lend itself well to single riding. I waited for 20 minutes and left since the line wasn’t moving.&lt;/p&gt;
&lt;h2 id=&quot;430p---jessies-critter-carousel&quot;&gt;4:30p - Jessie’s Critter Carousel&lt;/h2&gt;
&lt;p&gt;10 minute posted wait. 5 minute actual wait. This ride is pretty self explanatory. It’s a carousel for young kids. The short wait helps.&lt;/p&gt;
&lt;h2 id=&quot;445p---toy-story-midway-mania-ll&quot;&gt;4:45p - Toy Story Midway Mania (LL)&lt;/h2&gt;
&lt;p&gt;40 minute posted wait. 15 actual wait with LL. This was a fun ride. Shooting targets for a high score was fun for the family.&lt;/p&gt;
&lt;h2 id=&quot;515p---emotional-whirlwind-inside-out&quot;&gt;5:15p - Emotional Whirlwind Inside Out&lt;/h2&gt;
&lt;p&gt;30 minute posted wait. 20 minute actual wait. This ride was OK. We recently watched Inside Out so I figured this would be a fun ride to go on. Note: Bing Bong’s Sweet Stuff nearby has some sweet (pun intended) treats!&lt;/p&gt;
&lt;h2 id=&quot;545p---pixar-pal-a-round-swinging&quot;&gt;5:45p - Pixar Pal-A-Round (Swinging)&lt;/h2&gt;
&lt;p&gt;30 minute posted wait on the physical entrance sign. The app said 60 minute wait. Actual wait was 25 minutes. This was a fun ride. I wasn’t sure if we were able to fit it in our schedule. The Swinging version is no joke. The Swinging was more than I expected, but it was fun. Also seeing various Pixar characters on the Ferris wheel pods was fun.&lt;/p&gt;
&lt;h2 id=&quot;7p---soarin-around-the-world-ll&quot;&gt;7p - Soarin’ Around the World (LL)&lt;/h2&gt;
&lt;p&gt;55 minute posted wait. 15 minute actual wait with LL. We enjoyed this ride. I’m not sure when the ride soars around the world VS California. We went on a world tour and it was really fun.&lt;/p&gt;
&lt;h2 id=&quot;730p---cozy-cone-motel&quot;&gt;7:30p - Cozy Cone Motel&lt;/h2&gt;
&lt;p&gt;Dinner was fine. I wanted something fast casual. Using the Disney app to order in advance definitely saved a lot of time (vs waiting in line to order food). Also as already mentioned, I really like the Cars Land theming/decor.&lt;/p&gt;
&lt;h2 id=&quot;8p---goofys-sky-school-ll&quot;&gt;8p - Goofy’s Sky School (LL)&lt;/h2&gt;
&lt;p&gt;50 minute posted wait. 10 minute actual wait. The LL really helped here. I don’t think this ride was a must ride, but it’s included in the LL so why not ride it? At this point, we had used the LL on almost all the LL eligible rides. This was a bumpy/rough and fun kids roller coaster.&lt;/p&gt;
&lt;h2 id=&quot;815p---the-little-mermaid-ariels-undersea-adventure&quot;&gt;8:15p - The Little Mermaid: Ariel’s Undersea Adventure&lt;/h2&gt;
&lt;p&gt;10 minute posted wait. 5 minute actual wait. This ride wasn’t running earlier in the day. But it was up and running throughout the day. During the afternoon, the posted wait was long so I didn’t go on it. At night, there was practically no line. This was a fun ride for our kids since we also recently saw the classic animated The Little Mermaid movie.&lt;/p&gt;
&lt;h2 id=&quot;830p9p---world-of-color-one-woc&quot;&gt;8:30p/9p - World of Color ONE (WoC)&lt;/h2&gt;
&lt;p&gt;My family got in line at the designated seating area for WoC around 8:30p. I left for the Incredicoaster and came back by 9pm to watch the show. I would say the show is OK. Some people really enjoyed it, but I wasn’t personally invested in light projection on water meant to invoke classic Disney/Marvel/etc memories.&lt;/p&gt;
&lt;h2 id=&quot;840p---incredicoaster-ll&quot;&gt;8:40p - Incredicoaster (LL)&lt;/h2&gt;
&lt;p&gt;45 minute posted wait. No wait while using LL. As I walked to the Incredicoaster ride, I could see the Single Rider line still really long. With the LL reservation, I walked all the way onto the ride. This ride was amazing. Definitely one of my top rides in California Adventure.&lt;/p&gt;
&lt;h2 id=&quot;930p-to-close&quot;&gt;9:30p to Close&lt;/h2&gt;
&lt;p&gt;We walked around the shops to get some last minute souvenirs. Honestly, I prefer the Main Street shops in Disneyland more. I think CA park is great if you want very specific stuff (Avengers, Spider-Man, Pixar, etc gear), but otherwise I felt the selection in Disneyland main street was much greater.&lt;/p&gt;
&lt;h2 id=&quot;takeaways&quot;&gt;Takeaways&lt;/h2&gt;
&lt;p&gt;At rides, the posted wait time changes constantly and really doesn’t tell you exactly how long the wait is.&lt;/p&gt;
&lt;p&gt;Walking around Disney CA is a challenge. I usually had to take the long way and walk through a ton of the park to get where I wanted to go. The layout of Disney CA doesn’t lend itself well to doing stuff nearby when I’m trying to also use Lightning Lane for rides that are often on the other side of the park.&lt;/p&gt;
&lt;p&gt;On our weekday, there were some rides down in the morning and throughout the day. I think most or all of them were back and running later in the day. I think Zephyr kept going down but was up every now and then. The good news is that just because I saw a ride being unavailable at rope drop, it didn’t mean the ride was down for the whole day.&lt;/p&gt;
&lt;p&gt;I think 1 day is enough to see Disney California Adventure with the G+LL constantly used. Compared to Disneyland, I think Disneyland is the top tier park and Disney California Adventure is the second choice. So depending on how many days you want to spend at Disney: if you only have 1 day, go to Disneyland. If you have 2 or more days, you can do 1 day Disneyland, 1 day California Adventure, etc. I personally don’t buy the park hopper, but park hopper seems like a popular add-on.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;P.S. - I can’t help but feel like posting content to the internet is just feeding LLMs (ChatGPT, etc.).&lt;/em&gt;&lt;/p&gt;
</content:encoded></item></channel></rss>