Candy 25 cabinets — hell on Earth, part 2

In late 2013 I wrote a blog post describing the negatives of owning one of SNK’s Candy 25 cabinets. I wanted to follow up to that with an incident that happened today, adding further justification.

For the first time in almost 10 years I had an interested buyer in the cab. A mutual friend introduced us, and both of them visited. The potential buyer seemed incredibly interested. Said mutual friend wanted to try out (or demonstrate) the fact that the cabinet had a rotatable monitor, and proceeded to do exactly that. This is something I had done before (maybe back in 2001) without issue, but I was very very careful about it, but since then had always run my display horizontally, not vertically. So I hadn’t rotated it for a very long time.

What happened today: a mounting bolt on the rotating chassis (which holds the CRT) didn’t have full clearance, and ended up smacking into the Toei TC-RM25T CRT chassis (this is what contains all electronics that drives the CRT), specifically the large transformer (not the flyback) — and it bent/tilted quite severely. It was with enough force that something between the transformer and PCB became damaged; that is to say, the force used likely broke or damaged one of the pins that kept the transformer on the PCB. The clearance was short by about 1/16th of an inch.

Upon powering on, the CRT or its electrical circuit emits a very high pitch yet slightly variable-frequency noise, and nothing happens past that point.

Visual inspection showed no actual damage to the transformer or the pins, but very close examination showed that the PCB itself may have cracked as well (2 traces showed signs of possible cracking). We verified continuity with a multimeter that those traces were OK (but that’s just continuity — the damage may be enough that voltage flowing across those traces is no longer reliable). We also tried re-flowing a couple of the solder points on the PCB relating to those traces. No improvement.

Accidents happen, and I consider this exactly that. But how could it have been avoided? Surely SNK wouldn’t make a cabinet prone to this type of problem, would they? No, they wouldn’t. How was that bolt too long for clearance? I hadn’t changed a single thing about the CRT or related parts since I bought it. We’ve only been able to reach two conclusions:

1. The previous owner of the cabinet was an arcade or gaming operator himself. As we began to inspect the CRT chassis itself, we found that the bolt had been put on backwards — that is to say, the long end of the bolt was facing towards the TC-RM25T, rather than the other way around. In fact, several bolts and screws were found to be like this. Additionally, several screws looked to be non-standard (as in the previous owner had likely lost screws and found makeshift screws/bolts/whatever that fit the threading but were never cut down to proper lengths).

2. When I bought the cabinet, it was shipped to me via freight from southern California. It arrived at my workplace, which is where it sat (and got used). This was also the place where we tested the monitor rotation capability (without issue or clearance problems). Since then, the cabinet has been moved twice: once to my apartment, and later from there to the garage of my current abode. It’s very likely that the cabinet (especially during the 2nd move, which is how and when I threw my back out) had been jostled severely and shifted around, maybe just enough where clearance became a problem. Since I’d never rotated the monitor since that one time, it wasn’t something I ever discovered or came across.

So I now have a non-working Candy 25 cabinet due to a somehow-badly-damaged Toei TC-RM25T CRT chassis.

Finding a replacement CRT chassis is, needless to say, a serious pain in the fucking ass. First of all, nobody I can find sells the TC-RM25T. Instead, the only one you can find is the (older) TC-RM251S. Next, is it fully compatible with my tube? I don’t know. Does it need or use a different flyback than the TC-RM25T? I don’t know. Next, how much does a TC-RM251S cost? The guy who runs arcadecup.com sells them for US$150 (or US$175 if you need the flyback), plus shipping. And then: how easy it is to replace/install? It’s not an issue of easy vs. hard, it’s an issue of safety: the CRT chassis directly connects to the CRT tube via an anode and anode cup, which is literally the most dangerous aspect of a CRT (runner up is high-voltage circuitry and capacitors that hold charge for months even after being powered off). There is no way in hell I would attempt to disconnect the anode cup because of the danger — I could literally die. Considering I’ve had bad luck nearly my entire life, yeah, NOT doing this myself is the obvious and safe choice. Leave it to a professional. These are just a few of the complications.

In other words: replacing the CRT chassis would require me to spend probably US$175 for the chassis, then pay someone for the labour (which is expensive, especially considering I live in Silicon Valley). If I chose to have the TC-RM25T repaired (vs. replaced), I’d have to pay for that labour *twice* — once for removal (of the damaged chassis), and once for installation (post-repair).

So what am I going to do? I don’t know. Financially it doesn’t make any sense to have anything repaired or replaced. For about as much as I could sell the cabinet for (I was hoping for US$300), it’d cost me to have the parts repaired or replaced and labour (maybe even a bit more than that). In short, I don’t know what I’m going to do. To be honest, it’s actually more cost-savvy to just pay someone to pick the thing up and haul it to a landfill and pay the enormous dumping fee. Seriously.

This is just another example of why these things are a fucking money sink. They’re only plausible (and economical) to own if you have the capability to get parts *and* know how to repair them yourself. Fuck arcade cabinets. Never again.

Advertisements

Moto G 2015 (3rd Gen) vs. 2013 (1st Gen)

Since mid-2014 I’ve owned a mobile phone: a Motorola Moto G 2013 (1st Generation model). When shopping for a phone (since the last time I owned a mobile was in 2002 or thereabouts), the requirements were pretty simple: low-cost (I cannot justify spending US$600), worked with T-Mobile (i.e. used GSM), and was something I could buy immediately (vs. buying it through the carrier + paying monthly charges). My friend Liz recommended the Moto G.

In May 2014 I purchased the 16GB GSM model from Amazon for US$199.95, and I’ve been mostly happy with it (my biggest complaint has been the selfie camera brightness bug introduced in KitKat 4.4.3, which still exists even as of Lollipop 5.1). I was also a Motorola beta tester of Lollipop (I had a lot of UI-related complaints, some of which got rectified, others didn’t).

However, odds are the Moto G 2013 won’t get Marshmallow 6.0 (another example of Google and vendors focused excessively on their cash cow of forcing people to buy new phones just to get software updates), and I had begun to encounter several applications which really didn’t perform very well. And that selfie camera bug really pissed me off (yup, I’m OCD about bugs).

I began looking for a replacement phone with the same requirements as before, and of course was introduced to the Moto G 2015 (3rd Generation model). The 8GB model was US$179.99, while the 16GB model was US$219.99. The 2015 model included a microSD slot (the 2013 model doesn’t have one), and after doing some research I found that with Marshmallow you’d be able to use your microSD card for system space/storage; it didn’t make much sense to me to spend US$40 to get 8GB of space when I could spend US$14 and get a high-end 32GB microSD card. After reading several reviews of the 2015 model, I ended up purchasing the 8GB version from Amazon. The first one I received actually had dead pixels and a touch screen that seemed non-responsive about 20% of the time (more on that in a moment), so I got a replacement (which had no dead pixels).

Below are the reasons why I’ve chosen to return the 2015 model and stick with my 2013. This is literally the only “review” of this sort — specifically giving a negative opinion rather than a positive — that I could find, so apparently I’m in the minority.

Continue reading

Sharing introverted communication wisdom

I’ve been having a lot of interpersonal conflicts with people as of late, and after lots of introspection over several weeks, I decided to write down some thoughts I had. Below is what I put down this morning.

Being an introvert is difficult, given that American society caters to and is predominantly extroverted, but the world becomes a completely different place when you have people who are neglecting you either directly/intentionally or indirectly.

Those who aren’t introverted often seem to have difficulty understanding that our time alone (to recharge, recompose) doesn’t mean we don’t want contact, we just want contact that amounts something: something with weight or substance. Small 5-10 minute chitchats, or “conveniently short” texts discussing trivialities, do not make us feel appreciated nor do they give the impression the listener is applying empathy (trying to connect with their conversation partner) — instead, the introvert is left feeling unfulfilled and in many cases belittled. They feel like best-effort communication is being prioritised over quality.

In today’s world so many people “don’t have time” for X/Y/Z. The excuses are literally endless. I’ve always maintained that making time for things (especially people) you care for is always worthwhile. Rebuttals like “there need to be more hours in a day” are nothing but impractical and convenient excuses. If I can make time for you, surely you can make time for me — golden rule and all that.

I don’t think I’ve ever heard a person ask another “is the way we communicate fulfilling? Are you happy with how we talk?” Maybe those are questions that, if were to become more commonplace, would save more friendships and relationships.

I’m of the strong belief that this advice can apply to extroverts too, but it’s important to remember that the nuances and needs of introverts and communication are different.

小鸡小鸡 (Chick Chick) lyrics (Chinese and English)

Rollin’ WANG’s 小鸡小鸡 (小雞小雞 / xiao3ji1 xiao3ji1 / Chick Chick) video is currently a viral hit. It also happens to be one of the Mandarin videos that I absolutely love — it’s probably the only thing that makes me want to get up and dance.

I thought it’d be and maybe benefit non-Mandarin speakers to translate the lyrics. But honestly it’s not that hard: a lot of it consists of onomatopoeias (words imitating sounds), and the rapping part has no actual lyrical content (it’s just about making sounds that have a good rhythm).

Enjoy!

Chinese (Simplified)

母鸡母鸡母鸡母鸡母鸡母鸡 咕咕day
小鸡小鸡小鸡小鸡小鸡小鸡 咕咕day
母鸡母鸡母鸡母鸡母鸡母鸡 咕咕day
公鸡公鸡公鸡公鸡 喔喔 喔喔喔
母鸡母鸡母鸡母鸡母鸡母鸡 咕咕day
小鸡小鸡小鸡小鸡小鸡小鸡 咕咕day
母鸡母鸡母鸡母鸡母鸡母鸡 咕咕day
公鸡公鸡公鸡公鸡
谁偷了我的 Chua米 $^@#%?

咕咕day 咕咕咕咕day
咕咕咕咕咕咕day
咕咕咕咕day
咕咕day 咕咕咕咕day
咕咕咕 咕咕咕咕 咕咕咕 咕咕咕咕
咕咕咕 咕咕咕 咕咕day
喔喔 啊~~~ 喔喔啊~~~
喔喔喔喔喔喔啊~~~
叽 叽叽 叽叽 叽叽叽叽 叽叽
喔喔喔喔 喔喔哎~
喔喔喔喔 喔喔哎~
汪 汪汪 汪汪

么么咩~~ 么么咩~~
么咩么咩 么么咩~~
呱 呱呱 呱呱 呱 呱呱
哞~

喔喔喔喔 喔喔哎~ 汪汪
喔喔喔喔 喔喔哎~ 汪汪
咩~~ 哞~~ 咩~~ 哞~~
谁偷了我的 Chua米 $^@#%?

{cuckoo day chorus}
{random rapping}
{repeat of earlier verses}

Chinese (Pinyin)

mǔjī mǔjī mǔjī mǔjī mǔjī mǔjī gūgū day
xiǎojī xiǎojī xiǎojī xiǎojī xiǎojī xiǎojī gūgū day
mǔjī mǔjī mǔjī mǔjī mǔjī mǔjī gūgū day
gōngjī gōngjī gōngjī gōngjī ōō ōōō
mǔjī mǔjī mǔjī mǔjī mǔjī mǔjī gūgū day
xiǎojī xiǎojī xiǎojī xiǎojī xiǎojī xiǎojī gūgū day
mǔjī mǔjī mǔjī mǔjī mǔjī mǔjī gūgū day
gōngjī gōngjī gōngjī gōngjī
shéi tōu le wǒ de Chua mǐ $^@#%?

gūgū day gūgūgūgū day
gūgūgūgūgūgū day
gūgūgūgū day
gūgū day gūgūgūgū day
gūgūgū gūgūgūgū gūgūgū gūgūgūgū
gūgūgū gūgūgū gūgū day
ōō ā~~~ ōōā~~~
ōōōōōōā~~~
jī jījī jījī jījījījī jījī
ōōōō ōōāi~
ōōōō ōōāi~
wāng wāngwāng wāngwāng

mememiē~~ mememiē~~
memiēmemiē mememiē~~
gū gūgū gūgū gū gūgū
mōu~

ōōōō ōōāi~ wāngwāng
ōōōō ōōāi~ wāngwāng
miē~~ mōu~~ miē~~ mōu~~
shéi tōu le wǒ de Chua mǐ $^@#%?

{cuckoo day chorus}
{random rapping}
{repeat of earlier verses}

English

Chick chick chick chick chick chick cuckoo day
Hen hen hen hen hen hen cuckoo day
Chick chick chick chick chick chick cuckoo day
Cock cock cock cock oh-oh oh-oh-oh
Chick chick chick chick chick chick cuckoo day
Hen hen hen hen hen hen cuckoo day
Cock cock cock cock
Who stole my Chua-mi[1] %^@#%?

Cuckoo day cuckoo-cuckoo day
Cuckoo-cuckoo-cuckoo day
Cuckoo-cuckoo day
Cuckoo day cuckoo-cuckoo day
Cuck-cuckoo cuckoo-cuckoo cuck-cuckoo cuckoo-cuckoo
Cuck-cuckoo cuck-cuckoo cuckoo day

Oh-oh ah~~~ oh-oh ah~~~[2]
Cheep cheep-cheep cheep-cheep cheep-cheep-cheep-cheep cheep-cheep
Oh-oh-oh-oh oh-oh-ai~[3]
Woof woof-woof woof-woof

Me-me-mehh~~ me-me-mehh~~[4]
Me-mehh-me-mehh me-me-mehh~~
Qua- quack-quack quack-quack qua- quack-quack
Moo~

Oh-oh-oh-oh oh-oh-ah~[2] woof-woof
Oh-oh-oh-oh oh-oh-ah~[2] woof-woof
Mehh~~ mehh~~ mehh~~ meh~~[4]
Who stole my Chua-mi[1] %^@#%?

{cuckoo day chorus}
{random rapping}
{repeat of earlier verses}

[1]: I had absolutely no clue what Chua米 (Chua mi3 / Chua-mi) was. Some folks on Baidu also had the same question. Chua isn’t a Chinese word, 米 (mi3) means metre (unit of length). A couple people on Baidu said that “it was just a weird word the artist heard in a dream” and I’m inclined to believe that. One guy said that it’s some kind of chicken feed and is a colloquial term specific to Chengdu (capital of Sichuan province) but I find that highly dubious. In all likelihood it’s just Rollin’ WANG being weird and awesome. :-)
[2]: Imitating chicken “bawk” noise (sort of)
[3]: Imitating chicken clucking
[4]: Imitating sheep bleating (similar to “baa”)

Ruby warnings and scope

Today I wrote some Ruby code at work. We use Ruby 1.8 for reasons I won’t go into here. The code works fine, no issues. But we use Rubocop (under Ruby 1.9) to enforce consistent styles and also to look for any kind of oddity situations that might bite us.

Today Rubocop complained at me about my code. Likewise, many versions of Ruby complained in the same manner, excluding Ruby 1.8. Since the actual code I wrote wouldn’t make any sense to readers, I wrote a very easy-to-understand test case that reproduces the problem reliably, with lines 7 and 10 highlighted:

#!/usr/bin/ruby
# Encoding: UTF-8

foo = true

if foo
  bar = 'something'
  puts bar
else
  [1, 2, 3].each { |bar| puts 'hello' }
end

The warning message, both from Rubocop under Ruby 1.9, and from multiple versions of Ruby via ruby -w natively:

jdc@ubuntu:~$ rvm list

rvm rubies

=* ruby-1.8.7-p374 [ x86_64 ]
   ruby-1.9.3-p547 [ x86_64 ]
   ruby-2.1.0      [ x86_64 ]
   ruby-2.1-head   [ x86_64 ]

# => - current
# =* - current && default
#  * - default

jdc@ubuntu:~$ rvm 1.8.7-p374 do ruby -w ./x
something

jdc@ubuntu:~$ rvm 1.9.3-p547 do ruby -w ./x
./x:10: warning: shadowing outer local variable - bar
something

jdc@ubuntu:~$ rvm 2.1.0 do ruby -w ./x
./x:10: warning: shadowing outer local variable - bar
something

jdc@ubuntu:~$ rvm 2.1-head do ruby -w ./x
./x:10: warning: shadowing outer local variable - bar
something

jdc@ubuntu:~$ rvm 1.9.3-p547 do rubocop ./x
Inspecting 1 file
W

Offenses:

x:10:21: W: Shadowing outer local variable - bar
[1, 2, 3].each { |bar| puts 'hello' }
^^^

1 file inspected, 1 offense detected

I’m a C programmer (and also do assembly and Perl), so am quite familiar with -Wshadow, so the message itself made sense (most of what I found on Google were Ruby coders not understanding the message). But what didn’t make sense is that there was no shadowing violation here — the code within the if has a different scope than within the else. There is no way possible for these two to “share” scope, unless the language was horribly brain-damaged.

Simply renaming the variable bar (in either scope, but not both) rectifies the “problem”.

So, Ruby… do you simply not understand scope, or does your warning mode — which it appears very few people use (otherwise I’d have expected this to come up by now, and that’s pretty disappointing in itself) — simply have bugs (someone’s bison/yacc code is broken somewhere)?

The answer, as I found out in mid-2017, is that Ruby’s definition/concept of variable scope is unlike any other programming language I’ve used — and, if you ask me, borders on dangerous (I personally would use much more colourful language). In Ruby, variable scope segregation is limited to functions, classes, modules, procs, and blocks. Thus, in the above example, the if/else “sections” technically all have the same scope (i.e. main).

Equally dangerous and stupid, I also learned that Ruby internally declares the existence of a variable even if that code never gets run (i.e. the internal creation of said variable happens at parse-time, not run-time). As such, variables which are declared (but not used or not ever assigned to a value during run-time) end up with a value of nil (rather than throwing a variable-is-unknown error). A variable existing and assigned to nil is substantially different than a non-existent variable. With this design choice in mind, how can one trust the defined? expression? (answer: one probably can’t).

It never ceases to amaze me how much advocacy there is for Ruby, that has either awful design decisions (here’s another one) or bugs; it doesn’t matter to me which. No PL is perfect, but I would expect a language that’s been around since 1995 (with Ruby 1.8 being out as of late 2003) to have their ducks in order by now.

It’s amazing how nearly every single time I have to deal with Ruby, I find or encounter something like this.

Lizard

Like NES/Famicom games? Good! So check out Brad Smith’s upcoming NES/FC game called Lizard:

There are fully-playable demos available for NES/FC (specifically a ROM file which you can use on your favourite emulator), PC (Windows), and Mac (OS X). Linux is a possibility if folks donate enough.

So stop reading this and go donate + help out. Every little bit counts! :-)

Personal NES/Famicom and SNES/Super Famicom nostalgia

I’ve kept a lot of memoires from my childhood, though not as many as I’d have liked. But the one subject matter I tried very hard to hold on to was anything relating to the NES/Famicom or SNES/Super Famicom.

Given my previous blog post, I decided I’d make a short itemised list — with photos, if available — of just some (hardly all!) of the things I’ve done or kept over the years:

Continue reading