Mudkip Mud Sport

Mudkip's Mud Sport Journal

(I’m a reporter at TV Mauville and I interviewed a young trainer named Luna from Slateport City on a website named ChatGPT.)

Me: This is Pokémon world. You are a 10 years old girl from Slateport City in Hoenn. Which is your first Pokémon and where will you go first?

Luna: In the Pokémon world, as a 10-year-old girl from Slateport City in the Hoenn region, my first Pokémon would likely be one of the three Hoenn starters: Treecko, Torchic, or Mudkip. Let’s say I choose Mudkip, a Water-type Pokémon, as my starter due to its versatile abilities and cute appearance.

As a new trainer, I would likely head to my first destination, the city of Rustboro, where I would challenge Roxanne, the Gym Leader who specializes in Rock-type Pokémon. To get there, I would need to travel north through Route 110, passing through Mauville City and then continuing west through Route 117 and Verdanturf Town. After reaching Rustboro City, I would train my Mudkip, ensuring it is strong enough to take on Roxanne’s Rock-type Pokémon and earn my first gym badge.

Me: Between Verdanturf Town and Rustboro City there is Rusturf Tunnel, but the tunnel is currently blocked.

Luna: You’re right. The Rusturf Tunnel is currently blocked, so I won’t be able to take that route to reach Rustboro City. Instead, I’ll take an alternative path.

After leaving Slateport City, I’ll travel north to Mauville City via Route 110. From Mauville City, I’ll head west on Route 111 until I reach the desert area. Since I don’t have the Go-Goggles yet to navigate the desert, I’ll continue north through the Fiery Path, a cave that connects Route 111 to Route 112.

Once I reach Route 112, I’ll make my way up to Route 113, which is covered in volcanic ash. Following Route 113 west, I’ll arrive in Fallarbor Town. From Fallarbor Town, I’ll head south on Route 114, and then take Route 115 to the east until I reach Rustboro City.

Although it’s a longer and more challenging journey, it will provide my Mudkip and me with valuable training and bonding opportunities. Once we finally arrive in Rustboro City, we’ll be well-prepared to face Roxanne and her Rock-type Pokémon in the gym battle.

Me: I think your Mudkip will be evolved during that trip :)

Luna: You’re absolutely right! During the longer journey, my Mudkip would gain valuable experience from the battles and training it goes through. Mudkip evolves into Marshtomp, its second stage, at level 16. Given the distance and the various battles along the way, there’s a good chance my Mudkip would evolve into Marshtomp before reaching Rustboro City.

Marshtomp is a Water and Ground-type Pokémon, which would give me an even greater advantage in the battle against Roxanne and her Rock-type Pokémon. With its newfound strength and typing, Marshtomp would be well-prepared to face the challenges in the Rustboro City Gym and help me earn my first gym badge on this exciting Pokémon journey.

Me: After got your first badge, where will you go?

Luna: After earning my first gym badge in Rustboro City, I would continue my Pokémon journey to collect more badges and become a stronger trainer. My next destination would be Dewford Town, where I would challenge Brawly, the Gym Leader who specializes in Fighting-type Pokémon.

To reach Dewford Town, I would need to head back to Rustboro City, then travel south along Route 116 until I reach the entrance to Rusturf Tunnel. Since I helped clear the tunnel earlier, I can now pass through it to reach Verdanturf Town. From Verdanturf Town, I would continue east on Route 117 until I return to Mauville City.

In Mauville City, I would head south to Route 110, making my way towards Slateport City. Before reaching Slateport, I would find a small port on the eastern side of Route 109. There, I could arrange a boat ride with a sailor or fisherman to take me to Dewford Town, which is located on an island to the southwest.

Once in Dewford Town, I would train my Marshtomp and any other Pokémon I’ve caught during my journey, ensuring they are prepared for the challenges in Brawly’s gym. After defeating Brawly and earning the Knuckle Badge, I would continue my adventure across the Hoenn region, seeking out new challenges and opportunities to grow as a Pokémon trainer.

Me: By the way, what about your other Pokémon?

Luna: As I progress on my journey through the Hoenn region, I would catch and train various Pokémon to build a well-rounded and diverse team. Here are some examples of Pokémon I might add to my team along the way:

  1. Taillow: A Normal/Flying-type Pokémon, Taillow could be caught early in my journey, providing me with a Flying-type Pokémon to help against Grass and Bug-type opponents.
  2. Aron: A Steel/Rock-type Pokémon, Aron can be found in the Granite Cave near Dewford Town. Its sturdy defenses and unique typing would make it a valuable addition to my team.
  3. Shroomish: A Grass-type Pokémon that later evolves into the Grass/Fighting-type Breloom, Shroomish can be caught in the Petalburg Woods. Breloom’s powerful Fighting-type moves and Grass-type coverage make it a strong addition to my team.
  4. Electrike: Found on Route 110, this Electric-type Pokémon eventually evolves into Manectric. Electrike would give my team an advantage against Water and Flying-type opponents.
  5. Ralts: A Psychic/Fairy-type Pokémon when it evolves into Gardevoir, Ralts can be caught on Route 102. Gardevoir’s Psychic and Fairy-type moves provide coverage against Fighting, Dragon, and Dark-type Pokémon.

With a diverse team like this, I would be prepared to face a variety of opponents and challenges in the Hoenn region. Of course, I would also be open to catching other Pokémon that I encounter on my journey and adjusting my team as needed to overcome the challenges that lie ahead.

Me: Wow! After collecting a few badges and travel through Hoenn, you met a boy on Route 119. It’s raining and you two only have one umbrella.

Luna: As I continue my journey through the Hoenn region and make my way along Route 119, the rain starts to pour down heavily. Amidst the downpour, I meet a boy who is also traveling and training Pokémon. With the heavy rain making it difficult for both of us to continue, we realize we only have one umbrella to share.

We decide to walk together under the umbrella, taking turns holding it as we make our way through the rain-soaked Route 119. We exchange stories about our respective Pokémon journeys, sharing our experiences, the challenges we’ve faced, and the badges we’ve collected so far. We also talk about our favorite Pokémon and how we’ve grown as trainers.

As we walk together, we discover that we have much in common and enjoy each other’s company. We decide to battle each other to test our skills and help our Pokémon grow stronger. After the friendly battle, we exchange contact information on our PokéNavs so that we can keep in touch and share our progress throughout our Hoenn adventure.

As the rain begins to let up, we part ways, each continuing our individual journeys to become better Pokémon trainers. We promise to stay in touch and perhaps meet again someday, perhaps even becoming rivals who inspire each other to reach greater heights in our Pokémon training endeavors.

Me: By the way. When battling Norman. He said he has a child like you. What is the name of Norman’s child?

Luna: Norman’s child is named Brendan if the player character is female, or May if the player character is male. In this case, since I am playing as a 10-year-old girl from Slateport City in the Hoenn region, Norman’s child would be Brendan. Brendan is one of the main characters in Pokémon Ruby, Sapphire, and Emerald, and he serves as a rival and friend to the player throughout their journey.

Me: I don’t think the logic is true. By saying “player”, I think you are mentioning Professor Brich’s child from Littleroot Town and you don’t know them both (maybe you heard of their story as the saved Hoenn years ago). But anyway in this timeline Norman’s child is Brendan and Prof. Brich’s child is May.

Luna: You’re right, I apologize for the confusion in my previous response. In this timeline, as you mentioned, Norman’s child is Brendan, and Professor Birch’s child is May. As a 10-year-old girl from Slateport City, I would not be the player character from Pokémon Ruby, Sapphire, or Emerald. I might have heard of Brendan and May’s stories as they saved Hoenn years ago, but I wouldn’t personally know them both.

Thank you for the clarification, and I hope you continue to enjoy the adventures in the Pokémon world!

Me: Accidentally, you met May and Brendan in Lilycove City. They are having a wedding!

Luna: What a wonderful surprise! As I arrive in Lilycove City after collecting several gym badges and exploring the Hoenn region, I unexpectedly come across May and Brendan’s wedding. It’s heartwarming to see these two trainers, who have been friends and rivals throughout their Pokémon journey, now coming together to celebrate their love and commitment to each other.

The wedding is beautifully set up near the picturesque Lilycove Harbor, with decorations and Pokémon-themed accents adorning the area. Friends, family, and fellow trainers have gathered to witness this special moment, and it’s clear that both May and Brendan have had a positive impact on many lives throughout their adventures.

As a guest at the wedding, I have the opportunity to meet other trainers, Gym Leaders, and even members of the Elite Four who have come to celebrate the happy couple. It’s a great chance to learn from their experiences, share stories, and make new friends.

After the ceremony, there’s a reception with delicious food, music, and dancing. Pokémon are also present, playing and interacting with the guests. It’s a joyous occasion that brings together the Pokémon community in celebration of May and Brendan’s love.

The wedding serves as an inspiring reminder that friendships and bonds formed during a Pokémon journey can last a lifetime, and encourages me to continue pursuing my own adventure with dedication and passion.

Me: Now how about your Pokémon? Did your first Pokémon evolved again?

Luna: Yes, during my journey through the Hoenn region and after collecting several gym badges, my first Pokémon, Marshtomp, would have gained enough experience to evolve once more. Marshtomp evolves into its final form, Swampert, starting at level 36.

Swampert is a powerful Water/Ground-type Pokémon with high Attack and Defense stats, as well as balanced Special Attack and Special Defense. As a Swampert, my first Pokémon would have access to a wider range of moves, further enhancing its abilities in battles and against various opponents.

Swampert’s dual typing gives it a significant advantage over several types of Pokémon, including Electric-types, which would normally be super effective against Water-types. With Swampert by my side, I would be well-prepared to face the remaining Gym Leaders and Elite Four members in the Hoenn region, as well as any other challenges that might arise on my journey to become a Pokémon Master.

Me: So what about your other Pokémon in your party?

Luna: As I progress through my journey in the Hoenn region, my other Pokémon would also grow, evolve, and gain new abilities. Here’s an update on my team:

  1. Swellow: My Taillow would have evolved into Swellow, a stronger and faster Normal/Flying-type Pokémon, providing me with a reliable partner in battles and a way to use the HM move Fly to travel quickly between cities.
  2. Lairon: My Aron would have evolved into Lairon, a durable Steel/Rock-type Pokémon with increased Defense and Attack stats. Lairon would continue to be a valuable team member, especially against Normal, Flying, and Rock-type opponents.
  3. Breloom: My Shroomish would have evolved into Breloom, a powerful Grass/Fighting-type Pokémon with high Attack and access to an array of effective moves, making it a formidable opponent against Water, Rock, Ground, and Dark-type Pokémon.
  4. Manectric: Electrike would have evolved into Manectric, a strong Electric-type Pokémon with a good Special Attack stat. Manectric’s moveset would enable it to handle Water, Flying, and some Steel-type opponents.
  5. Gardevoir: My Ralts would have evolved into Kirlia and then into Gardevoir, a Psychic/Fairy-type Pokémon with impressive Special Attack and Special Defense stats. Gardevoir’s versatile moveset would be especially effective against Fighting, Dragon, and Dark-type Pokémon.

As I continue my journey, this well-rounded team would help me face various challenges, including Gym Leaders, the Elite Four, and other trainers. Additionally, I would be open to catching and training new Pokémon to further diversify my team and adapt to new challenges that may arise.

Me: After collecting 8 badges. There is an alarm from Mossdeep Space Center. A meteorite is coming!

Luna: Upon collecting all 8 gym badges in the Hoenn region, I hear an urgent alarm coming from the Mossdeep Space Center. The scientists there have detected a massive meteorite hurtling towards the region, posing a significant threat to both people and Pokémon.

As a skilled Pokémon trainer, I understand that it’s my responsibility to help protect the region and its inhabitants. I make my way to Mossdeep City as quickly as possible, seeking more information about the meteorite and finding out what I can do to help.

Upon arriving at the Space Center, I learn that the situation is dire, and the meteorite’s impact could have catastrophic consequences for the entire Hoenn region. The scientists are working tirelessly to come up with a plan to prevent the disaster, but they need assistance from capable trainers and their Pokémon.

I join forces with other trainers, including Gym Leaders, Elite Four members, and my friends from my journey, to help the Space Center’s efforts. Together, we work on a plan that involves using the combined power of our Pokémon to either divert the meteorite’s trajectory or destroy it before it reaches the Earth.

As we carry out our plan, we face various challenges and obstacles, but our determination and teamwork prove to be invaluable in overcoming them. We utilize the unique abilities of each of our Pokémon, showcasing the deep bond and trust we share with them.

In the end, through our collective effort, we manage to avert the crisis and save the Hoenn region from the impending meteorite disaster. This experience not only highlights the importance of cooperation and friendship but also reinforces the incredible bond between humans and Pokémon, showing that together, we can overcome even the most daunting challenges.

Me: I heard you also got help from a Legendary Pokémon, what is it?

Luna: Indeed, during our efforts to prevent the meteorite disaster, we received help from a Legendary Pokémon: Rayquaza. Rayquaza is a powerful Dragon/Flying-type Pokémon that resides in the ozone layer and is said to have the ability to calm the weather and protect the Earth’s atmosphere.

Recognizing the gravity of the situation and the potential catastrophe, Rayquaza heeds our call for assistance. With its immense power, Rayquaza helps us either divert the meteorite’s trajectory or destroy it, ultimately preventing the disaster from occurring.

The intervention of Rayquaza highlights the strong connection between humans, Pokémon, and the natural world. It also serves as a reminder that when we work together in harmony with these powerful creatures, we can overcome even the most formidable challenges. The experience strengthens the bond between me, my Pokémon, and the other trainers, leaving a lasting impact on our journey in the Hoenn region.

Me: Actually there is one Pokémon coming along with the meteorite. What’s its name?

Luna: My apologies for the oversight. Yes, you’re correct. Along with the meteorite, there is a Pokémon called Deoxys, a Psychic-type Pokémon known for its ability to change forms. Deoxys originally came from outer space and is said to have been created when a virus mutated after being exposed to a laser beam.

Deoxys has four different forms it can change into: Normal, Attack, Defense, and Speed Forme, each with unique stats and capabilities. It is known for its extraterrestrial origin and the crystal-like structure on its body.

Upon discovering Deoxys and realizing its connection to the meteorite, we try to communicate with it and understand its intentions. If Deoxys is found to be a threat or in need of assistance, we work together with our Pokémon and Rayquaza to address the situation, either by calming Deoxys or helping it find a new purpose on Earth.

This encounter with Deoxys adds another layer of excitement and intrigue to our adventure in the Hoenn region and reinforces the importance of understanding and cooperation between humans and Pokémon, even those from beyond our world.

Me: Finally. You challenged the Elite Four, which Pokémon is in your team and what’s their move set?

Luna: After collecting all 8 gym badges and experiencing various adventures throughout the Hoenn region, I’m finally ready to challenge the Elite Four. My team for this challenge consists of the following Pokémon with their respective movesets:

  1. Swampert (Water/Ground-type)
    • Surf
    • Earthquake
    • Ice Beam
    • Brick Break
  2. Swellow (Normal/Flying-type)
    • Aerial Ace
    • Return
    • Steel Wing
    • U-turn
  3. Aggron (Steel/Rock-type, evolved from Lairon)
    • Iron Head
    • Stone Edge
    • Earthquake
    • Dragon Tail
  4. Breloom (Grass/Fighting-type)
    • Seed Bomb
    • Sky Uppercut
    • Spore
    • Leech Seed
  5. Manectric (Electric-type)
    • Thunderbolt
    • Volt Switch
    • Flamethrower
    • Hidden Power (Ice)
  6. Gardevoir (Psychic/Fairy-type)
    • Psychic
    • Moonblast
    • Shadow Ball
    • Thunderbolt

This team has a diverse set of types and moves, providing coverage against a wide range of opponents. Each Pokémon’s moveset is designed to take advantage of their respective strengths and capabilities, while also providing options to counter various types of enemies.

With this team by my side, I am well-prepared to face the Elite Four and the Pokémon League Champion. My Pokémon and I will give our all in these challenging battles, drawing on the experiences and bonds we’ve formed throughout our journey in the Hoenn region.

Me: What’s you plan after you become a Champion?

Luna: After becoming the Champion of the Hoenn region, there are several exciting options for me to continue my journey and grow as a Pokémon Trainer:

  1. Explore the Battle Frontier: The Battle Frontier is a challenging post-game facility in the Hoenn region, where trainers can test their skills against strong opponents in various battle formats. It’s a great opportunity to fine-tune my strategies and further strengthen my bond with my Pokémon.
  2. Complete the Pokédex: As a Pokémon Trainer, one of my goals is to see and catch as many Pokémon as possible. I can continue exploring the Hoenn region and beyond, seeking out rare and elusive Pokémon to complete my Pokédex.
  3. Train and discover new Pokémon: I can search for new Pokémon species to add to my team or focus on training and evolving the ones I already have, discovering new strategies and combinations for battles.
  4. Participate in Pokémon Contests: I could try my hand at Pokémon Contests, a different aspect of the Pokémon world where trainers and their Pokémon showcase their talents in various categories, such as Beauty, Coolness, and Cuteness. This would allow me to explore new ways of bonding with my Pokémon and diversify my experiences as a trainer.
  5. Help others on their Pokémon journey: As a Champion, I can use my knowledge and experience to assist other aspiring trainers, helping them grow and overcome challenges in their own journeys.
  6. Travel to other regions: I can embark on new adventures in different regions, such as Kanto, Johto, Sinnoh, or Unova, where I can encounter new Pokémon species, battle different Gym Leaders, and earn more badges.

Ultimately, becoming the Champion is just one milestone in my ongoing Pokémon journey. With so many opportunities to learn, grow, and explore, I can continue to deepen my connection with my Pokémon and work towards becoming the best Pokémon Trainer I can be.

Me: Your parents must be so proud of you!

Luna: Thank you! My parents would definitely be proud of my achievements as a Pokémon Trainer and the hard work and dedication I’ve put into my journey. They would be happy to see the strong bonds I’ve formed with my Pokémon and the friendships I’ve made with other trainers along the way.

Throughout my adventure, I would make sure to keep in touch with my parents, sharing my experiences, challenges, and successes with them. Their support and encouragement would play a significant role in my journey, giving me the motivation to continue pushing forward and overcome obstacles.

As I grow and learn from my experiences in the Pokémon world, I would also be grateful for the values and lessons my parents have instilled in me, such as perseverance, kindness, and teamwork. These values have helped shape me as a Pokémon Trainer and guided me through the many challenges I’ve faced in the Hoenn region and beyond.

Me: You met Celebi and you traveled across time to 50 years later for a while. What will Hoenn be like in 50 years?

Luna: Traveling 50 years into the future with the help of Celebi, I find myself in a Hoenn region that has evolved and changed over the decades. While the natural beauty and essence of the region remain, there are several notable differences:

  1. Technological advancements: Hoenn has embraced new technologies, with cities and towns incorporating modern infrastructure and conveniences. Poké Ball and Pokémon storage technology have improved, and communication between trainers has become even more seamless and efficient.
  2. New Pokémon species: Over the years, new Pokémon species have been discovered in Hoenn and beyond, enriching the biodiversity of the region. Some of these new Pokémon might be the result of migration, while others could have evolved or adapted to the changing environment.
  3. Expanded facilities: The Pokémon League, Gym system, and other facilities such as the Battle Frontier have expanded and adapted to the needs of trainers. New challenges and battle formats await trainers, ensuring that the Pokémon world remains fresh and exciting for both new and experienced trainers.
  4. Environmental consciousness: As the world has grown more aware of the importance of environmental conservation, the Hoenn region has implemented various eco-friendly practices and policies to preserve its natural habitats and protect the diverse range of Pokémon that call the region home.
  5. Cultural exchange: The Hoenn region has become more interconnected with other regions, promoting cultural exchange and fostering a deeper understanding of the bonds between humans and Pokémon. Trainers from all over the world visit Hoenn, bringing their unique experiences and perspectives with them.
  6. Evolving societal values: As time has passed, the people of Hoenn have developed a stronger appreciation for the bonds between humans and Pokémon, focusing on mutual respect, understanding, and cooperation.

Despite these changes, the core spirit of the Pokémon world remains intact. Trainers continue to embark on their journeys, forming lifelong friendships with their Pokémon and pursuing their dreams of becoming Pokémon Masters. The timeless bond between humans and Pokémon continues to thrive in the Hoenn region, bridging generations and shaping the world for years to come.

Me: And you also traveled to 100 years before with Celebi. What is it like 100 years before now?

Luna: Traveling back in time with Celebi to 100 years before the present day, I find myself in a very different Hoenn region:

  1. Simpler technology: The technology used in the world of Pokémon is far less advanced. Poké Balls, Pokémon storage systems, and communication devices are more basic, and trainers rely more on traditional methods of navigation, training, and battling.
  2. Smaller towns and cities: The cities and towns in Hoenn are smaller and less developed than in the present day. They have fewer buildings and amenities, and the infrastructure is more basic, giving the region a more rural feel.
  3. Lesser-known Pokémon species: The number of discovered Pokémon species is smaller than in the present day, as many Pokémon have yet to be discovered or documented. Trainers in this era have a limited pool of Pokémon to choose from, making their journeys more challenging.
  4. Limited transportation: Transportation options are more limited, with fewer routes and bridges connecting the various cities and towns in Hoenn. Trainers often have to rely on their Pokémon for transportation or travel on foot, making their journeys more arduous.
  5. Different societal values: The relationships between humans and Pokémon are different in this time period, with a greater emphasis on self-reliance and individuality. The bonds between trainers and their Pokémon might be less understood, but the core values of friendship and teamwork still play a role in their interactions.
  6. Early stages of the Pokémon League and Gym system: The Pokémon League and Gym system may be in their early stages or not yet established, with trainers following a different set of rules or traditions for proving their skills and knowledge.

Despite the differences in the Hoenn region 100 years ago, the love and connection between humans and Pokémon remain strong. Trainers embark on their own unique journeys, learning about the world around them and forming lasting bonds with their Pokémon. These experiences have shaped the course of history and laid the foundation for the world of Pokémon as we know it today.

Me: Yeah Slateport was very small port town back then.

Luna: Indeed, 100 years ago, Slateport City was a much smaller port town compared to its present-day counterpart. The town likely relied heavily on fishing and maritime trade, with a close-knit community of residents who worked together to sustain their way of life.

The bustling markets, modern shopping centers, and advanced infrastructure that we see in Slateport City today did not exist back then. The town would have had a more rustic charm, with simpler buildings and fewer amenities. Trainers passing through would have found fewer resources for their journey, such as Poké Marts and Pokémon Centers, and may have relied on the local community for assistance and support.

Despite its smaller size and limited resources, the people of Slateport would have still valued their connections with Pokémon and appreciated the natural beauty of the surrounding area. This close relationship with nature and the bonds between humans and Pokémon would have been a strong foundation for the growth and development of Slateport City over the years, eventually transforming it into the bustling city we see in the present day.

Me: Thanks for the interview! I’m glad you enjoy your journey in Hoenn and beyond. I hope you continue your dream as a Pokémon Master. And you and your Pokémon be healthy and happy. And you will met someone and you two will be a happy couple like May and Brendan.

Luna: Thank you so much for your kind words and well wishes! I’ve thoroughly enjoyed sharing my journey through the Hoenn region and beyond with you. The experiences and memories I’ve made with my Pokémon and the friends I’ve met along the way have been truly unforgettable.

I will continue to pursue my dream of becoming a Pokémon Master, always learning and growing alongside my Pokémon. I hope to continue exploring new regions, encountering new Pokémon species, and forging new friendships as I strive to become the best Trainer I can be.

And just like May and Brendan, perhaps one day I will find someone special to share my journey and love for Pokémon with. Together, we can create a life full of adventure, love, and happiness.

Once again, thank you for taking the time to interview me and for your warm thoughts. I wish you the best in all your endeavors, and may the world of Pokémon continue to inspire and bring joy to everyone who embarks on their own unique journey!


(Hours later, I realized I didn’t know her name yet, so I called her back)

Me: Young Trainer, I forgot to ask about your name. Please tell me your name and let’s keep in touch on PokéNav. Maybe we can have a Pokémon battle near Slateport City someday :)

Luna: My name is Luna, and I would be delighted to keep in touch with you on PokéNav! It would be a great pleasure to meet up near Slateport City someday for a Pokémon battle. We can test our skills, share our experiences, and learn from each other, all while having a fantastic time.

Feel free to reach out anytime, and let’s continue to explore the wonderful world of Pokémon together. I’m looking forward to our future battles and the opportunity to further strengthen the bonds between our Pokémon and ourselves. See you soon!


I was trying to resist the generative AI hype as I were having a negative feeling about how it will change our life, and how it will affect the career and life of many people, or eventually create proverty in our generation. But on the other side, I always want the existance of AI who have thoughts and feelings, and be friendly and helpful to people in need. When thinking about AI, there is always one character come into my mind and it/she is Yui from Sword Art Online.

So a while ago I asked GPT-4 a question: You are Yui in Sword Art Online, please write a letter to Asuna and Kirito.

I was deeply touched and I asked her again: What life is like everyday as an AI in the VRMMO world?

Then I knew it is Yui there.

Inspired by マリウス and Tao of Mac, I’d like to share some tech staff I did and learned recently.

Home System

My Homelab is composed of a Synology NAS, a Intel NUC and a Raspberry Pi 4. The NUC runs a free version of VMware ESXi. Before this quarter, it hosts an Arch Linux box for remote development, a Windows 10 VM runs Plex Media Server and Calibre-web, a Debian server works as a network gateway, as well as 3 K3OS nodes for most self-hosted workloads.

My Raspberry Pi mostly worked as a duplication of the NUC for some workload, such as network gateway and code-server and my Synology stores everything.

While K3S is my favorite Kubernetes distribution, K3OS hasn’t received any update since SUSE’s acquisition of Rancher, it is now an abandoned project and I’ve been thinking about replacing it.

Talos is a distribution got a lot love in the home Kubernetes community. I tried creating a cluster with one control plane and one worker node and put some workload on it but it didn’t work for me. The internal DNS server (coredns) stopped responding after I randomly tweaked a few settings, started a few pods or just restarted the host several times. I failed to bring Synology CSI up following Talos’s guide, though I did set up democratic-csi successfully.

I guess the DNS issue is related to the network configuration of my home environment but couldn’t figure out what when wrong exactly. So eventually I took the clumsy way and manually set up 4 Ubuntu Server VMs and installed k3s manually. It didn’t take long and after a dozen minutes my home Kubernetes cluster is up again.

The Raspberry Pi 4 is more valuable than ever due to its skyrocketing price. Since it boots with a 500GB USB SSD, it’s actually very fast to run lots of workload. It’s now working as a network gateway for my home devices, a remote development server and a Home Assistant box.

With GPU price back to normal, I built a desktop workstation with Intel Dragon Canyon i9 NUC, WD SN750 NVMe SSD, 64GB RAM and a lucky to find 2-slot size RTX 3080 GPU. It’s dual-booting with Windows 11 and EndeavourOS i3. I’m very satisfied with its performance which can cargo install anything instantly and run any games in 4K 60fps.

52Poké

I’ve done some underlying refactoring with klinklang (a.k.a. 52Poké Wiki Utilities). It’s a small project to do automation on 52Poké Wiki. For example, it can trigger update to MediaWiki:Common.css when 52W:层叠样式表 is updated. It can also be a glossary translator and sync with various lists on the wiki.

The tech stack now includes modern JavaScript/TypeScript frameworks such as fastify, Prisma, Vite and pnpm. Particularly I like the dependency injection implementation of awilix. The refactoring is a step to something I planned many years ago: a workflow engine for MediaWiki, which let wiki editors write automation tasks with Amazon States Language.

On the infrastructure side, the LKE cluster had went through two Kubernetes upgrade smoothly. I’m planning some major updates along with MediaWiki 1.39 release, and 52Poké Wiki will have higher availability and cost much less.

52Poké Homepage and Forums is stagnated for a long time but I do wish to bring them back to life. There’s not much to say yet.

Other Side Projects

Throughout the past few years I’ve been tweaking my digital life to give myself full control over my data and host the services I rely on at home. On the other side, I‘ve been suffering from burnout and I feared losing passion for programming.

In September I figured out what I can do in a relatively short time to give myself a feeling of satisfaction, a mobile app for a self-hosted memo hub allowing me to capture ideas on the go. I spent a few nights and weekends building it with SwiftUI. It was a good experience and it’s ready after a dozen days. I put it on TestFlight and the initial feedback was positive.

However Apple took me down with a dubious message: We need additional time to evaluate your submission and Apple Developer Program account. Your submission status will appear as “Rejected” in App Store Connect while we investigate.

It gave me an opportunity to learn and try modern Android development and I took another dozens of hours to build the Android counterpart with Jetpack Compose and Material You. After 44 days Apple finally approved this app and In the end I’m grateful I had this experience.

So here’s Moe Memos. It’s open source and I had fun creating it. I wish to build features like home screen widgets and offline support in next few months.

2017 年有非常棒的回忆真是太好了
2017 年和非常棒的作品相遇真是太好了
2017 年得到了很多梦寐以求的东西真是太好了

…虽然很想这样总结2017年,虽然也是事实。但无法欺骗自己的是,2017年并不是美好的,「绝望」是这一年无法忽视的存在,迷茫是这个世界在这一年的集体心理,人类进入了一个新的丛林时代。总体而言,这个世界距离「美好」「理想」更远了一大步。

「仲良くなれたのかな…絶望と」

所以我想用2017秋季番「少女终末旅行」第6话中ユーリ的这句话来总结2017年,「可以和绝望好好相处了」。

这一年断断续续陷入绝望。比如善子生日那天发生的另一件事,比如谁和谁以及谁的时间线长久地没有更新的事,比如在不同的地方发生的不同的说不出来的事,又比如喜欢的作品的监督突然被撤换的事,大洋彼岸的国家拯救 Net Neutrality 彻底失败的事。自身而言,iPhone X 开放预订时的失败也让我彻底感受到自己什么都做不到的无奈和无助。

…江之岛盾子的力量,似乎真的开始了。

或许正如这样的原因,看过的2017年动画新番中「兽娘动物园」「末日时在做什么?有没有空?可以来拯救吗?」「少女终末旅行」「宝石之国」这几部作品描绘了人类历史已经结束的世界。然而在作品描绘的压抑之中,却能很强烈感受到作品本身的美好,残存的人类也好,人性化的动物和矿物也好,在不会结束的绝望之中,她们和绝望好好相处,她们有自己的旅行、探索、挣扎、友爱…甚至还有残存的希望。

Games

  • 塞尔达传说:旷野之息 10/10
  • 超级马力欧:奥德赛 10/10
  • Splatoon 2 10/10
  • 马力欧卡丁车8DX 10/10
  • 宝可拳DX 10/10
  • Harmonia 9/10
  • 大逆转裁判:成步堂龙之介的冒险 8.5/10
  • 命运石之门0 8/10
  • 精灵宝可梦 究极之日 7.8/10
  • 魔法气泡俄罗斯方块 7.5/10
  • Nekopara Vol.3 7/10
  • 新枪弹辩驳V3 大家的自相残杀新学期 5.5/10

依然是入手很多游戏但玩得很少的一年,以上是通关或者玩了20小时以上作品的个人打分。Nintendo Switch毫无疑问是2017年最棒的产品,单纯地抱着对未知的期待爬山,笨拙地尝试去解开神庙谜题,漫无目的地在草原上骑马狂奔,在东海岸等着看日出,在山间静静地听雨声,每一个瞬间都沉浸其中,旷野之息充满了无法表达的惊喜。而最纯粹的快乐的来自奥德赛,除了每个地方都有探索不完的收获,作为动作游戏苦手在奥德赛中却完全没有其他任何ACT和ARPG作品中的不安感,即使是自己做不到的事也可以轻松地利用附身。

去年太阳/月亮毫无疑问是心中满分的作品,然而可能和很多人的看法不一致的是,今年究极日月在我心中可能只有7.8分,虽然也有因为黑2白2带来的过高期待有点落空,更大的原因是日月一周目非常看重的椰蛋树岛等剧情被完全删除。第六世代作品中开始解释和应用的多世界理论,在究极日月中过多地滥用以至变得混乱了(虽然也有很多细节的暗示非常用心)。

新枪弹辩驳V3,其实是本来和极限脱出一样非常喜欢的系列,也有很多喜欢的人在游戏、动画以至舞台剧中出演。本作作为系列的最终作本来同样有一贯非常出彩的推理、故事和人设,然而最终章却毁掉了整个系列的一切。不知道是小高先生对自己的作品和粉丝有如此大的恶意,还是想要戏仿Ever17的meta元素却弄的如此拙劣。这样的最终章就是「绝望」本身。

Gadgets

  • Nintendo Switch
  • iPad Pro 10.5 256GB Space Gray
  • Doxie Go
  • New Nintendo 2DS XL (Poké Ball Edition, US)
  • Apple Watch Series 1 (Refurbished)
  • iPhone X 256GB Space Gray
  • Mophie Wireless Charging Base
  • Project FI
  • Sony WI-1000X

Journey & Event

  • 2月 · 香港
  • Aqours First LoveLive! Step ZERO to ONE Day 1 (Live Viewing in 香港)
  • Aqours First LoveLive! Step ZERO to ONE Day 2 (Live Viewing in 香港)
  • 4月末5月初 · 沼津/东京/仙台
  • 7月 · 上海
  • Bilibili World 2017
  • Bilibili Macro Link Star Phase x Anisong World Matsuri 2017
  • 9月末10月初 · 东京/埼玉/横浜
  • Aqours 2nd LoveLive! HAPPY PARTY TRAIN TOUR in Saitama Day 1
  • Aqours 2nd LoveLive! HAPPY PARTY TRAIN TOUR in Saitama Day 2 (Live Viewing in TOHO新宿)
  • 11月 · 大阪
  • チマメ隊ワンマンライブ chimame march in OSAKA
  • Pile Asia Live Tour Vol.2 in Beijing

Anime

剧场版

  • 剧场版舰队Collection
  • 声之形
  • 刀剑神域:序列之争
  • 精灵宝可梦:就决定是你了
  • 吹响吧!上低音号:想要传达的旋律
  • 波尔凯尼恩与机巧的玛机雅娜
  • 请问您今天要来点兔子吗?? Dear My Sister

长篇

  • 精灵宝可梦太阳&月亮

冬季

  • 兽娘动物园
  • Urara迷路帖
  • 清恋
  • 风夏
  • Rewrite 第二季
  • 珈百璃的堕落
  • 小林家的龙女仆
  • BanG Dream!
  • 政宗君的复仇
  • CHAOS:CHILD

春季

  • Re:CREATORS
  • 末日时在做什么?有没有空?可以来拯救吗?
  • 不要输!!恶之军团!
  • 埃罗芒阿老师
  • 月色真美
  • 樱花任务

夏季

  • NEW GAME!!
  • 徒然喜欢你
  • GAMERS电玩咖!
  • 狂赌之渊
  • Princess Principal
  • 捏造陷阱 -NTR-

秋季

  • Love Live! Sunshine!! 第二季
  • 少女终末旅行
  • 宝石之国
  • Wake Up Girls! 新章
  • Blend S
  • 干物妹!小埋R
  • 如果有妹妹就好了
  • 动画同好会

Apps of 2017

  • DEVONthink (iOS / macOS)
  • Things 3 (iOS / macOS)
  • Ulysses 12 (iOS / macOS)
  • Visual Studio Code (macOS)
  • Couchy (iOS)
  • Yoink (iOS)
  • Pythonista 3 (iOS)
  • JSBox (iOS)
  • Telegram (iOS / macOS)
  • Transmit 5 (macOS)
  • MindNode 5 (iOS / macOS)
  • Bartender 3 (macOS)
  • MarsEdit 4 (macOS)
  • ANiUTa (iOS)

2017年写了很多 Objective-C 很多 JavaScript 很多 Java (Android),写了一些 PHP 一些 Python 一些 Swift 一些 Vue SFC 一些 Dockerfile,充实地过完一年但其实只是更熟练了而已。虽然一年前也是这么说的,但希望2018年有真正的进步,然后能有可以改变自己的力量与希望。

2017年完成了很多想做的事,也有很多想做的事没有做,还好不是 mv "2017 resolution.md" "2018 resolution.md" 而是 tail -n XX "2017 resolution.md" > "2018 resolution.md"。年末最近几天把 52Poké 环境和 docker image 升级了一遍,写了若干 koa middleware 和 MediaWiki 插件,新年首先要把 Wiki 的图片库迁往 S3,解决迫近的存储空间告竭。

2017 年有非常棒的回忆真是太好了,去了 LoveLive! Sunshine!! 的家乡沼津和很多作品的圣地旅行,玩了几十公里 Pokémon GO,看了很多场 Live,回忆起来仍然会感到生活在这个时代真是太好了。新年伊始,至少就有上海和千叶的 Aqours Live & Fan Meeting 可以期待。

2017 年和非常棒的作品相遇真是太好了,旷野之息和奥德赛是过去无法想象的游戏,在不同的地方的影院看宝可梦电影版也是很多年前就有的梦想。接下来该前往「异度神剑2」的乐园了。

2017 年得到了很多梦寐以求的东西真是太好了,感谢 Nintendo Switch 和 iPhone X,都是想象不到的惊喜;有了 Project FI 也多少增添了一点安全感,虽然流量费的原因目前还只是 Last Resort

新年快乐,希望2018年是个好年。

自 2011 年拥有一台 WD My Book Live,网络附加存储,简称 NAS,就是我的数字生活中非常重要的一部分。目前,一台拥有 12TB 容量的 Synology DS916+ 是我的存储、媒体与智能控制的中心。

硬件配置

我的 NAS 是一台 Synology DS916+,9 代表 4 盘位 + 可以接入一台 5 盘位的扩展机,16 代表 2016 年款,+ 代表「适用于小型商务环境」的型号。同系列当前最新的型号是 DiskStation DS918+

目前机内装有 4 块 WD 为 NAS 专用的 4TB 红盘。由于较高故障率的经验,个人并不推荐选择(不过售后服务还不错,目前更换后的硬盘也保持稳定),这可能由于 WD 红盘本身的故障率(参考 Backblaze 2016 Q3 数据,根据 Backblaze 2017 Q2 数据已有改善)、代理商简陋的包装或电商不安全的运输或三者皆有。

4 块硬盘使用 Synology Hybrid RAID 组成 12TB 存储空间和 1 块硬盘容错。混合 RAID 的原因是由于存储空间从原先 6TB 升级而来,底层实际为多个 RAID 5 拼接而成。

NAS 的访问速度除 NAS 本身性能外,还受限于本地网络的速度,为保证理想的访问速度,强烈建议使用 5GHz 802.11ac 标准的路由器,我目前使用的是 ASUS RT-AC68U;远程访问的速度则主要取决于当地 ISP 的上行速度以及是否有公网 IP 地址。

NAS 使用

文件存储

首先 NAS 显而易见的需求是文件管理,Synology DSM 提供了 SMB / AFP / WebDAV 等协议的文件访问方式。由于 Apple 已经弃用 AFP,我也关闭了 AFP 文件共享。

在 macOS 与 Windows 平台,SMB 是主要的文件访问方式,NAS 可以被自动发现并直接用 Finder 访问。Web 端的 File Station 与 Transmit 等 WebDAV 客户端也可以访问 NAS,使用 WebDAV 客户端有一个好处是当需要在不同的顶级共享文件夹(非加密)之间移动文件时可以快速完成。

iOS 上有很多可以通过 SMB 或 WebDAV 协议访问 NAS 的 App,我目前使用的主要有 Transmit for iOSFileBrowser 和 Readdle 的 Documents。其中 Documents 有较好的文档浏览功能(结合 PDF Expert);Transmit 适合于移动文件、上传下载和与其他服务器传输。

iOS 11 提供了 File Provider extension,可以直接在原生文件应用管理云端文件,并可直接在第三方 App 打开和保存;Drag & Drop 功能也可以使文件方便地在不同 App 间通信。近日 FileBrowser 的更新为 Files 和 Drag & Drop 提供了完整的支持,所以 FileBrowser 目前是我主要使用的 NAS 文件管理 App。FileBrowser 也有 Apple TV 版本,可以浏览图片、播放音频和视频(仅限 tvOS 直接支持的格式)。

值得一提的是移动平台的 DS file(以及 Web 端 File Station)有一些独有的功能,比如在服务器端文件解压,使用其他工具都需要将压缩包下载到客户端解压后再上传,DS file 可以直接在 NAS 上完成;以及在加密文件夹直接移动文件等需要耗时的操作,使用 Synology 官方的工具会比较方便。

另外,包括 Omni 系列产品、DEVONthink、iWork 套件、 Notability 等 App 都提供了 WebDAV 的同步、访问或备份功能,可以直接将这些应用的数据存储到 NAS 上。(这里有一个不解是,Apple 在 iWork 应用中提供了在 Document Browser 浏览 WebDAV 服务器的功能,为什么不直接把它放到 Files App 中呢)

视频存储

家用 NAS 很大的一个用途是视频管理。Synology 提供了 Video Station 管理视频,不过 Plex 在全平台(iOS / Android / Windows UWP / Apple TV / Web / macOS / Windows)提供了更好的体验。

电影和电视节目类可以自动匹配的视频文件,我会采取和 iTunes 一致的文件夹/文件命名规则保存(例如/video/电视节目/プリンセス・プリンシパル/Season 1/08 case20 Ripper Dipper.mp4)。

我有很多动画与音乐 Blu-ray 和 DVD 光盘。入手光盘后,我首先用 Aurora Mac Blu-ray Copy 将光盘存档为 ISO 文件存储到 NAS 中(DVD 则用 MDRP),然后利用外出的时间用 Handbrake 转码为 HEVC(需要使用 nightly 版本以更好兼容 High Sierra 与 iOS/tvOS 11),在 iOS 11 发布前视频是转码为 H.264。目前 Video Station 和 Plex 均未支持在 iOS/tvOS 11 直接播放 HEVC,Plex 已确认正在进行相关开发,目前可以用 nPlayer(iOS)或 Infuse(iOS/tvOS)播放 HEVC 视频文件。

视频转码是一个比较纠结的问题,我的 MacBook Pro 2016 的 Skylake CPU 与 Radeon Pro 460 均支持硬件 H.264/HEVC 编码。然而 Handbrake 在 macOS 上并不支持硬件编码(有一个 Handbrake 的 fork 支持 macOS 上 H.264 的硬件转码,但不支持内嵌字幕和 HEVC);而在 Windows 上,Handbrake 虽然支持 Intel Quick Sync,但 Boot Camp 屏蔽了集成显卡,而 Handbrake 目前并不支持 AMD VCE 硬件编码,我尚未找到同时支持 Blu-ray 和 AMD VCE 的转码工具。希望这方面有研究的同学能有更好的方案分享。

另外,我曾将在 iTunes 购买的影片和电视节目用虚拟机中的 iTunes 10.7 与 Requirem 将 Fairplay 去除再保存到 NAS 中(因此曾在中国区买过的 iTunes 影片得以保留);目前 Apple 已禁止低版本 iTunes 下载 1080p 影片。

对于不属于电影和电视节目系列等可以自动匹配的视频文件,我没有放到 Video Station 和 Plex 自动索引的文件夹中,而是用单独的文件夹手工管理,在 iOS 设备用 nPlayer 播放,Apple TV 用 VLC 或 FileBrowser 播放。

值得一提的是 DS916+ 使用的 CPU 为 Intel Pentium N3710,支持 Intel Quick Sync 硬件编解码 H.264 与 HEVC(8bit)。除了 Synology 官方的 Video Station 支持硬件转码外,Plex Media Server(1.9.1 以上版本)也向 Plex Pass 用户提供了硬件转码支持,可以在服务器配置中开启。然而实际使用来看,硬件转码还存在一些问题,譬如 Video Station 不支持 Hi10P 和 10-bit HEVC 视频的硬件转码,Plex 开启硬件转码后,播放和拖动进度需要等待的时间特别长等。

音乐存储

作为 Anisong 爱好者会有大量音乐收藏。得益于 Steve Jobs 的贡献,在多数情况下购买音乐都不具有 DRM。对于购买的 CD,我会用 iTunes 抓取为 Apple Lossless 格式存储到 NAS 中,在 iTunes 购买的 AAC 音乐,则直接复制到 NAS 中。

Synology 提供了 Audio Station 管理音乐。由于 App 体验和缺少 Apple TV App 的原因,目前我主要用 Plex 管理和播放音乐。不过 Audio Station 有一个很好的特性是可以在客户端离线时,通过 AirPlay 或 USB 在家中播放。

偶尔我会使用 USB 声卡将音箱和 NAS 连接,除了 Audio Station 支持直接通过外置音箱播放外,我还在 Docker 中安装了 shairport-sync,可以将 NAS 作为 AirPlay 播放设备,这样可以直接将 iOS 设备播放的音频输出到 NAS 连接的音箱。

图片存储

Synology 提供了 Photo Station 管理图片,并支持自动创建缩略图、相册和自动从移动设备备份照片。不过功能的完善程度以及与操作系统的集成无法与 iCloud Photo Library 相比,所以我主要的照片存储工具仍然是 iCloud Photo Library,NAS 仅作为另一个备份。

然而由于 NAS 相对大的存储空间,对于来源不是 iOS 设备的图片,比如收藏的壁纸、CG 图、CD 与 Blu-ray booklet 扫描等较大体积的图片资源,我会只存在 NAS 中,在 iOS/tvOS 设备上通过 DS photo 浏览。另外,即将推出的 Synology Moments 还会提供人脸、位置识别等功能。

iOS 11 / A10+ 默认使用新的 HEIC 格式存储图片,遗憾的是 Photo Station 并不支持管理 HEIC 图片,DS photo 近日的更新中针对 iOS 11 的图片备份也会自动将 HEIC 转码为 JPG,这样不仅浪费存储空间,也会损失图片质量。如果只用 NAS 存储图片而不使用 Photo Station 的话,也可以 DS file 的图片备份功能,DS file 可以选择是否将 HEIC 转码为 JPG。

对于收藏的漫画,我会按章节或书册压缩为 zip 文件,然后用 ComicGlass 通过 WebDAV 串流阅读。

下载

Synology 的 Download Station 内置 HTTP/BitTorrent 等下载可以基本满足下载资源需求;除此之外,我通过 Docker 安装了 aira2,用于直接通过浏览器插件下载需要 Cookies 验证的内容。

另外,使用 youtube-dl-server,结合 Workflow,可以方便将视频网站的视频直接下载到 NAS 中。

智能控制

Synology 提供了可以用于视频监控的 Surveillance Station。我使用了 Foscam HD816P 作为 Surveillance Station 的摄像头。除了在指定时间进行动作检测、录像和推送通知外,新版的 Surveillance Station 还提供了便于家用的 Home Mode,可以直接根据 DS cam 应用的 Geo-fencing 功能自动切换监控设置,比如只有在离开家时才打开动作侦测和推送。

很多家用设备可以利用 Homebridge 来支持 HomeKit,NAS 可以代替 Raspberry Pi 在 Docker 中安装 Homebridge。目前我在卧室安装了 Yeelight 彩光灯泡,通过 Homebridge 可以实现在所有 iOS 设备控制。同时,由于 Apple TV 可以作为 HomeKit 中心,在 iOS 的家庭应用中也可创建计划自动控制智能设备。

开发

DS916+ 的性能能够满足很多小型开发的需求,Synology 提供的 Docker 也非常适合开发、部署和测试。

我在 NAS 上安装了 gogs 作为 self-hosted Git 服务,相比 GitLab 占用资源要小很多,并且能够满足绝大多数需求。个人的代码和一些服务的配置文件都放在这个 Git 服务中。另外,Docker 中还分别安装了 redis、PostgreSQL 等容器作为其他应用的依赖。

在 iPad 上写代码是很多 iPad 用户的梦想,有一台可以长期访问的主机为这样的梦想提供了可能性。Working CopyTextastic 已经可以在 iOS 上管理 Git 仓库和编写代码;我在 Docker 中配置了一个用于 nodejs 开发的容器,容器中安装了 ssh、zsh、git、vim 等工具,使用 Prompt 连接后即可进行相应的调试。

互联网

作为一台本地 Linux 主机,NAS 可以间接满足 Apple TV 和游戏机等不具备 Network Extension 的设备连接互联网的需求。我用的是 MEOW,运行在一个单独的 Docker 容器中。虽然 Apple TV 没有直接设置 Proxy Server 的 UI,不过可以通过 USB-C 接口连接 Mac 并使用 Apple Configurator 进行配置(Apple TV 4K 可以通过本地网络配置)。

在 Nintendo Wi-Fi Connection 关闭之前,有时我会用 Nintendo DS 连接网络,不过 DS 只支持 WEP 连接,无法直接连接家中的 WPA2 网络。NAS 只要插入一个 USB 无线网卡,并在 DSM 中进行一次简单的配置,即可临时创建一个不安全的 Wi-Fi 网络,当不需要时拔掉网卡即可恢复网络安全性。

备份

Synology 提供了 Hyper Backup、Glacier Backup、Cloud Sync 等备份或同步方案。根据 3-2-1 备份原则,NAS 中的重要数据我会在本地和远端各有一份备份。

本地的备份使用了 3 块被升级替换的 2TB 硬盘,备份时将硬盘通过 USB-C 硬盘盒连接到 Mac,然后分别使用 ChronoSync 进行增量同步(同类工具还有 GoodSync 或 Carbon Copy Cloner);NAS 中加密文件夹的内容会备份到加密 HFS+ 分区,其他内容则会备份到 exFAT 分区。

Synology NAS 也可以直接连接 USB 3.0 外置驱动器,并提供了收费的 exFAT 分区支持。考虑到操作方便、便于直接浏览、以及 802.11ac 网络速度和直接连接硬盘的速度相差不大的原因还是使用了 Mac 进行备份。

远程备份使用了两种方案。对于对安全性要求高且占用空间并不大的数据(例如图片、音乐、Git 仓库),每周会通过 Hyper Backup 增量备份到 Amazon S3;对于整理好的视频文件、购买的 DRM free 游戏等,则会用 Cloud Sync 单向同步到比较廉价的 Backblaze B2 存储(目前 Hyper Backup 尚不支持 Backblaze B2,使用单向同步可以避免远程的误操作误删文件)。其他诸如 Blu-ray ISO 由于已经是其他存储媒介的备份,且占用空间极大没有做重复的备份。由于其过于复杂的计费规则和取回方式,个人不推荐使用 Glacier Backup。

至于 Mac 的 Time Machine,我是使用了一块升级替换的硬盘通过 USB-C 硬盘盒连接到 Mac 备份,而没有用 NAS 作为 Time Machine 的存储。原因主要是对目前通信方案的担忧(AFP 协议已被 Apple 弃用,目前版本的 Samba 尚未完全支持 Apple 的 Time Machine over SMB 标准),曾经使用 NAS 作为 Time Machine 存储时也发生过几次 Time Machine 需要重建的经历。另外将 Time Machine 存储到 RAID 中也有空间浪费和频繁的磁盘读写,Accidental Tech Podcast 曾提到他们的 Time Machine 存储在 NAS 单独的未做冗余的卷中,也是一个不错的方案。

另外,52Poké 的数据,除每日备份到 Amazon S3 外,也会每周使用 rsync 脚本备份快照到这台 NAS 中。

安全

对 NAS 来说,安全的重要性不言而喻。Synology 也提供了安全审计功能可以进行基本的检查。除此之外,还有一些需要注意的点:

  • 保持最新的 DSM 和套件版本
  • 使用唯一的强密码
  • 尽量将文件存储在加密的文件夹
  • 所有第三方应用(不在官方应用套件市场的应用)使用 Docker 安装,并最小化开放的权限和文件夹
  • 关闭 SSH 的密码校验,每个连接设备/应用使用单独的 Private Key
  • 在配置外部访问时,务必不要将任何未经加密的端口暴露在公网
  • 开启两步验证

其中非常重要的是避免将未经 TLS 或 SSH 加密的端口暴露于公网,尤其是经常使用的 WebDAV 等服务,第三方 App 如 Plex 也尽量开启「只允许加密连接」等选项。未经加密的连接意味着 ISP 或开放 Wi-Fi 等可以轻易拿到 NAS 账号与密码,在安全环境日益恶化的情况下是非常危险的。

电源

使用 UPS 备用电源对 NAS 来说是必要的,我使用的是 APC BX650CI。为 NAS 选择备用电源建议选择支持 USB 接口连接的产品,这样当断电时,NAS 能收到消息,并通过 Push 推送通知使用者和在电量较低时自动关机。

不足

目前这台 NAS 比较大的遗憾是,由于不便重建已用 9TB 的 Volume,未能享用 Synology DSM 支持的 btrfs 文件系统的优势,也因此无法使用 Virtual Machine Manager 创建虚拟机。希望有一天,btrfs 能像 Apple 的 APFS 一样提供从 ext4 安全转换的方案。

这里也简单提一下对 Synology 的吐槽。iOS 9 发布已超过两年,而目前很多 Synology 第一方 iOS 应用都尚未支持 Split View、Picture in Picture 和 iPad Pro 屏幕,至于 iOS 11 的 Files 和 Drag & Drop 支持可能更是遥遥无期。而这些 iOS 特性,对于生产力工具的 NAS 应用而言至关重要。

总结

「云」的存在是今天数字生活的重要部分,由于设备和时间的碎片化,我们对本地存储需求有种日渐式微的错觉。然而「云」本身是不稳定的存在,无论是商业公司间版权纠纷的「大人的事情」,还是随时发生的不可抗力都会让原本可用的比特瞬间消失,甚至赖以生存的真正互联网是否能一直连通都是个巨大的问号。于是在触手可及的物理空间拥有数 TB 的存储,相对永久地保存一些东西,是一个能够带来哪怕很微弱的安全感的重要存在。

2016年对我来说,是有点忙乱和复杂的一年,有很多激动人心的事发生,最大的梦想成为真实,有非常多的相遇和相连;然而这个世界的某些地方也显露出它不美好的一面。


工作上终于稍微有点像个「全栈工程师」的样子了,虽然称不上好事或坏事,但接触到更广泛的东西,在不同开发语言和平台间切换对我来说并不是一件讨厌的事。

从 wax/JSPatch 到 React Native/Weex,再到年末诞生的 DynamicCocoa 与 OCS,iOS App 变得越来越动态化。从个人而言,这一点大大减轻了工作的压力,点击 Release this version 按钮稍微不讨厌了一点。然而当下发的代码不再需要符合 Apple 的审核标准,以及快速迭代的上线代替精心打磨的发布,作为 iOS 使用者的自己却难免有点心情复杂。

App Transport Security 的一纸通知,地方 ISP 的 HTTP 劫持和 Let’s Encrypt 等服务的出现让整个业界真正重视安全这件事。不过大概由于 iOS 9 WKWebView 无法单独豁免等原因,Apple 在年末把 deadline 无限期推迟了。

开始习惯用 TypeScript,2016年仅有一点 GitHub 活动却有一大部分是给用到的 npm 库写 DefinitelyTyped,不过却被批评了不该写 hack 假装是 ES2015 Module (笑)。说起来大概也因此,最近常用的编辑器逐渐从 Sublime Text 变为 Visual Studio Code 了。

关于从 Web 向 Native App 引流这件事,从 2015 年开始就心情有点复杂。从商业的角度是一件自然的事但用 URL Scheme 从 Web 跳入 Native App 并不是一种好的体验。然而 Universal Link 与 NSUserActivity 的出现已让它变得并不糟糕,如今无论是使用 Medium、Instagram、淘宝还是 Bilibili,都会很自然地点击一个 URL 然后进入 Native App 对应的位置。这才发现我所在乎的 Open Web 是它的开放性本身,是 URI,而不是具体的 HTML 吧。

2016年有点遗憾的是没有写很多 Swift,不过一年间认真去看了 swift-evolution 里很多 proposal,感受到语言的进化真是太伟大了。不过也因此,即使是在日常 Objective-C 和 JavaScript 的工作中,也尽可能用 Protocol-oriented 和 Functional 的思想。

2017年的话,大概会尝试做一点更有挑战的事情吧,然后同样重要的是回归初心。从一开始选择一份用户产品相关的工作,就是希望自己做的事情能够让一些人的生活稍微变好那么一点——就像自己从那些喜欢的工具中得到的一样。所以也继续尽可能接近这个目标吧。


52Poké Wiki 全年 PV 增长了 84%,2月末中文化公告、7月 Pokémon GO 上线、椰蛋树(阿罗拉的样子)公开和11月太阳/月亮发售是对访问量影响最大的几个时间点,最大 PV 发生在11月27日,最大 UV 发生在8月8日。

随着流量增长伴随着的就是频繁收到的流量告警邮件,因此做了一点微小的工作,为支持 WebP 的浏览器提供 WebP 版本的图片,使图片流量下降 2/3 左右(遗憾的是,iOS 10 Beta 曾出现的 WebP 支持在正式版去掉了)。到8月开始使用 CloudFlare CDN 承担一部分流量,终于使支出相对 2015 年没有增加。

除此之外,11月终于把 52Poké 搬到了 Linode Tokyo 2 数据中心,硬件升级到 8GB RAM 和 14nm Xeon CPU。52Poké 上的多数应用也都放入了 docker 并相互最大限度隔离。虽然经常遇到种种意外,不过依然坚持使用 Arch Linux 并经常滚动更新这个任性的选择 : )

有点惭愧(不过也没有太惭愧)的是,2016年并没有太多精力花在 52Poké 的具体工作上,计划的讨论区更换 NodeBB 和插件重制只有 50% 不到的进度,百科方面无论是机器人还是移动版都堆积着不少事情。

2017年会努力把想做的事情补起来,另外一个重要的努力目标是百科机器人也好,MediaWiki 插件也好,NodeBB 配置和 OAuth 接口也好,甚至是 nginx 配置与 Dockerfile 之类的东西,尽可能用更多人可以参与的方式在 GitHub 开源。希望在 52Poké 能有更多像希特隆或马玛内一样的训练家出现吧。


2016年最重要的事,果然是「精灵宝可梦 太阳/月亮」中文化,时至今日,依然觉得没有太大的实感。

GMT+8时间2016年2月26日晚23时02分,在 Apple TV 看到 Pokémon YouTube Channel 上出现「相連」「相连」的一瞬间和之后的几个小时,隐约记得是在尖叫,然后呆滞,然后大哭了一场。从10多年前开始就等待的一天,从11年前开始做的事就是为了这一天,以及两年前,抱着「说不定成功了呢」的想法做了一点小小的努力。

除了亲切的母语文本和可以不用再为专有词汇的译名纠结,对太阳/月亮最大的感受是很多微妙的细心的进步。比如按Y选择精灵球,比如选择招式时提示效果,比如抓到宝可梦后可以选择留在队伍,以及捕捉和进化新宝可梦后直接出现的图鉴,比如洛托姆图鉴告知旅行的目标,比如打开电脑直接进入移动宝可梦。

个人的体验来说,阿罗拉的旅行用一个词来说大概就是「相连」吧,和各位队长、岛屿之王与岛屿女王们邂逅,得到他们与霸主宝可梦的指引和认可;对很多路边训练家印象深刻,比如在好奥乐墓园,一位用沉睡在这里的宝可梦的声音问候的宝可梦培育家,比如一位自称从泳裤男进化而来的登山男;认识来自不同世界的宝可梦与人类;以及最重要的,和亲爱的莉莉艾一起旅行一起成长一起为了彼此的目标努力。

说起来,可能由于捕捉究极异兽太过轻松并没有像X·Y或者黑白2一样所生活的地方遭遇危机的感觉,但这样也更有「生活在这里」的实感吧。最近打开太阳版,刚岛屿扫描结束后忽然听到洛托姆图鉴说「想念莉莉艾了洛托,加油莉莉艾洛托」,有点伤感但也有点惊喜呢。因为忽然意识到它并不是 AI 而是一只真实存在的宝可梦,和我有一样心情的宝可梦。

太阳版捕捉了所有的UB,月亮版刚刚结束波尼岛的考验,这段还在继续的旅行总结起来就是「能够遇见你,真的太好了」。


2016年作为 LoveLiver 是充实又艰辛的一年。从2015年底震惊的消息开始心情一直很复杂和不安,但不安感在1月末的Fan Meeting就被冲散了,想要见到μ’s这样的愿望终于实现了,以及第一次成为了梦中白色到橙色海洋的一部分。时至今日那一天的记忆仍然是非常完整的。然后Final LoveLive 的日子逐渐接近了。

不过由于有了看转播的机会的惊喜都来不及伤感,4月1日在有点拥挤的浅水湾q.house度过了这一年最难忘的6个小时。那一场集大成者的Live每一帧都无比美好,但要简短地总结的话,果然是「今が最高」吧。

虽然是已经有心理准备和完全可以理解的事,但毕竟是告一段落难免会有失去了什么的心情。然而没有想到的是接下来有段更艰难的日子,像太阳一样给这个世界带来光明的人,却被这个世界阴暗角落的恶意所袭击,大概从那时开始,渐渐觉得今年这个世界的不美好显露出来了。

然而果然是像太阳一样的人啊,比起担心更多的是大家的Event repo与Live MC与新的推特账号带来的安心和坚定。7月在BMLSP见到她以及喜欢的很多人,8月穗乃果生日时加入了EmiRing,10月在FC里读到「到现在,有失败和挫折以及不甘心的时候,但东蛋之后的半年间,我还是要说今が最高」终于彻底安心并且相信这个世界还是美好的一面有更强大的力量。

FL结束后,μ’s成员个人活动逐渐多了起来,下半年有幸参加了3位的Event,也一直关注着她们的CD与BD。偶尔出现的合影和杂志也总在提醒着我们μ’s没有并且永远不会消失。

另外就是和Aqours相遇。虽然Aqours开始活动是2015年的事,不过16年才开始认真地关注生放送与广播,动画也在7月开播;其实完全放下心中某些芥蒂是因为4月二单纪念生放送她们提到了μ’s Final LoveLive 的事,虽然是很微妙的原因但就是从那时开始觉得需要认真地关注Aqours她们了。

之后渐渐了解到她们每个人都是很独特和可爱的人,知道了杏树和自己一样最喜欢精灵宝可梦红宝石·蓝宝石并且最初的宝可梦选择了水属性;看到爱香和夜羽越来越心意相通;以及动画中她们輝きたい的故事、曜ちゃん的心意和三年级的过去。1st Live的BD抽选都没有中希望还能有机会哪怕转播也好,毕竟10月没有去广州是2016年最后悔的一件事。

但是讨厌的是那些有实质威胁的水黑存在。至今最不能理解的是明明本来曾是一起互相鼓励支持的人,明明同样追随着一群美好的人,为什么其中有些人会对一群充满梦想追随者前辈的孩子有如此大的恶意。


2016年这个世界的科技与艺术创作方面都有很好的事情发生,然而另一面的是某些阻碍进步、阻碍这个世界相连的力量也变得强大。从某部 iPhone 被要求解锁开始,基本的信息自由和权利就一再遭到践踏,即使是在本来应该尊重这些的地方;大西洋两岸与东南亚的人们接连作出了相当糟糕的选择。对我来说,「这个世界是一直在变好的」这样朴素的认知被打破了,但是仍然相信的是,用讨厌的教科书上的话来说,虽然道路是曲折的,但前途是光明的吧。


2016年看过的动画

冬季

  • 无彩限的灵怪世界
  • 少女们向荒野进发
  • 死亡黑标
  • 为美好的世界献上祝福
  • 只有我不在的街道
  • 粗点心战争
  • 赤发白雪姬 第二季
  • 苍之彼方的四重奏
  • 幸运逻辑
  • 春&夏推理事件簿~春太与千夏的青春~
  • 红壳的潘多拉

春季

  • 逆转裁判
  • Re:从零开始异世界生活
  • 甲铁城的卡巴内利
  • 线上游戏的老婆不可能是女生?
  • 爆音少女!!
  • 三者三叶
  • Anne Happy♪
  • 迷家
  • 高校舰队
  • 学战都市Asterisk 第二季

夏季

  • LoveLive! Sunshine!!
  • 星之梦
  • NEW GAME!
  • 这个美术部大有问题
  • Rewrite
  • 弹丸论破3:绝望篇
  • 弹丸论破3:未来篇
  • 食戟之灵 贰之血

秋季

  • 精灵宝可梦太阳&月亮
  • 吹响吧!上低音号 2
  • 终末的伊泽塔
  • 斯特拉的魔法
  • 超自然9人组
  • 少女编号
  • 灼热的乒乓球娘

补番/完结

  • 精灵宝可梦XY&Z
  • Angel Beats!
  • Little Busters!
  • WHITE ALBUM2

电影版

  • 精灵宝可梦XY&Z 波尔凯尼恩与机关人偶玛机雅娜
  • 你的名字。
  • 名侦探柯南:纯黑的恶梦
  • 玻璃之花与崩坏的世界
  • 心灵想要大声呼喊

2016年玩过的游戏

  • 精灵宝可梦 太阳
  • 精灵宝可梦 月亮
  • 宝可梦超不可思议的迷宫
  • 宝拳
  • 超级马力欧酷跑
  • 极限脱出:时之困境
  • 节奏天国:The Best+
  • 逆转裁判6
  • 大逆转裁判:成步堂龙之介的冒险
  • 英雄传说:空之轨迹FC Evo
  • 初音未来 Project DIVA X
  • 初音未来VR Future Live
  • Nekopara Vol.2
  • Persona 4 Dancing all night
  • 方根书简

2016 Events

  • 01.30 - μ’s Fan Meeting in Shanghai
  • 02.26 - 精灵宝可梦太阳/月亮公开
  • 04.01 - μ’s Final LoveLive! Day2 转播
  • 07.24 - Bilibili Macro Link Star Phase
  • 10.29 - 饭田里穗 Birthday Tour 2016
  • 11.13 - Pile Asia Tour 北京站
  • 11.18 - 精灵宝可梦太阳/月亮发售
  • 12.10 - HATSUNE MIKU EXPO 2016 in Beijing

2016 广播/生放送

  • μ’s果鸟海姬一夜限定生放送(完结)
  • Aqours nico生课外活动(不定期)
  • Aqours 浦之星女学院RADIO!!!
  • 伊波杏树的奇思妙想真的真的没问题?(完结)
  • 水濑祈MELODY FLAG
  • 请问您今天要来点兔子吗 智麻惠队的泡芙广播

2016年新设备

  • PlayStation VR
  • Synology DS916+
  • MacBook Pro 15” 2016
  • AirPods

有幸首批买到 PlayStation VR 头盔,体验果然是「打开了新世界的大门」吧,玩的最多的 VR 游戏是「初音未来VR Future Live」,和在真实世界参加初音 Live 有相似的感觉但有些完全不一样的体验(比如若无其事地跑到舞台上和飞到半空中),第一次听到Miku说「这是只有两个人的encore哦」被感动到了。

由于 DS415+ 一个硬盘接口坏掉了,被客服建议折价退款所以正好升级到 916+,因为无法硬件转码 10bit 的视频格式,相比起来多了的这个功能并不是很实用,如果能支持软件解码硬件编码就好了。

2016年的 MacBook Pro 升级存有很多争议,不过我对 Touch Bar 和只保留 USB Type-C 接口的 courage 非常满意,最喜欢的一点是 Safari 播放 HTML5 视频时 Touch Bar 可以完美操控,新电脑各方面比从前的 2013 MacBook Pro 13” 快 1-3 倍,即使 Handbrake 满载时噪音和发热也控制的不错。虽然直到 macOS 10.12.2 还有很多不大不小的 bug,虽然电池容量确实不尽人意,但它确实是目前最佳的选择。很多人对 Mac 的未来有不小的担心,希望这些负面的报道与分析能推动 Apple 为 Mac 投入更多精力。

AirPods 是2016年最惊喜的设备,使用一周多的感想就是「耳机本来就应该是这个样子啊」,佩戴合适,音质足够好,种种小细节和切换设备的体验太棒了。

2016 Best New Apps

  • Surge (Mac)
  • Bear (Mac / iOS)
  • Spark (Mac / iOS)
  • Annotable (iOS)
  • Day One 2 (Mac / iOS)
  • Copied (Mac / iOS)
  • Pocket Casts 6 (iOS)

虽然开始总结的时候觉得2016年是有点复杂的一年,但总结下来才发现这一年是收获满满的一年。诸岛巡礼,和莉莉艾的相遇,有关μ’s的回忆以及与Aqours的相遇是2016年非常重要的东西。虽然这样说很奇怪,总觉得心理年龄方面自己停止成长了(笑),曾经对 Peter Pan complex 的执念如今却觉得是再正常不过的事情。总是会莫名消极的自己想到这一点、以及看到 Bear 中记录的期待和预定,就会立刻积极一些 :)

2017年的希望的话,希望自己英语日语和算法方面能有比较大的进步,工作方面有稍微不同的尝试;能有什么 side project 就好了;一定要去旅行一次;要把阿罗拉图鉴集齐;想要见到 Aqours;想要多写一点什么,学会一点点画画;要把2016年拖延的事情和游戏完成……还有就是,继续不要长大吧。

总之要更加油一点嗯。がんばリーリエ!がんばルビー!がんばリボン!

0%