Saturday nights with a PSU

Read Later

Clara fixing my tower computer!

With a little spare time, my girlfriend Clara and I decided to see why my venerable Antec A300-encased Core 2 Duo Xen tower had trouble rebooting. In the process, we managed to clean her up, reorganise her internals, tie down cables and generally have a fun and terribly nerdy Saturday evening!

"Her" referring to the computer, not Clara.

When reboots involve unplugging things

Since our last move, my secondary tower has had trouble with rebooting. I could almost hear my Mac Pro chucking to herself each time I had to reach to the back of this DIY box to unplug her. In this case it wasn't a three finger salute, as much as it was a scraped knee and soft muttering.

Originally designed as an outlet for DIY fun since going to the Mac, this tower has gradually assumed more responsibilities once I started getting into KVM and, more recently, Xen. Like all good open source projects, this tower had no plan whatsoever, but evolved organically as I sourced cheap parts to fit exactly what I needed.

In keeping with my anime girl naming scheme, she became Yuki. An understated machine with more power than her outward appearance would suggest. 2008 Ruben thought that was clever.

Until last night, she would shut down just fine, but soft or hard reboots would result in a blank screen, no reassuring whirring of her hard drives and misleading LED indicators. The only viable remediation was flicking the physical switch on the PSU, waiting ten seconds, then booting her again.

That should have sounded warning bells that the PSU was shot, but like any good self diagnosing gentleman who assumes they have some horrible condition when they're manfluing, I assumed I had a shot motherboard or worse. I reseated the soft power switch cable in its pins, tested the RAM in other machines, even went out and bought a replacement graphics card.

(To be fair, the old one was noisy, and I was able to source a fanless one. For a server I'd even just serial console into if I could, this is fine).

The advantage of being an electronic archivist

So over the course of the evening, Clara and I decided to pull apart some other half working, accumulated desktops into one fully functioning unit. Turns out our mothball collecting, CD ripping tower had a far newer PSU, so on a hunch we decided to try it out.

One transplant later, and Yuki is completely back in business. She can shutdown, soft reboot, hard reboot and sleep like the best of them. I was also able to show Clara some of the finer points of DIY computer hardware, gleaned from years of introverted teenage tinkering that often resulted in serious damage and wasted money.

Moral of the story, if your machine has power troubles, shock of horrors, it may be the power supply. And if so, use the opportunity to upgrade the machine and generally have some nerdy fun :).


On Australian housing affordability

Read Later

From ABC PM's Friday bulletin:

MICHAEL JANDA: But the founder of Meriton, one of Australia's biggest apartment developers, dismisses the concerns about affordability.

HARRY TRIGUBOFF: The people are the young ones that can't buy in the area they want, there's not many people by the way, they talk a lot. Why they talk a lot because they would like to buy cheap and sell dear but they haven't got the guts and haven't got the money.

Class.


Rubénerd for the next ten years

Read Later

A few of you have noticed some c-c-changes around here. As a blog reader myself, I know there's nothing better than meta blogging, so here we we go.

First, I've all but revered back to my 2011 theme. Save for my 2004 rainbow tabs, this is one of the few themes I'm almost proud of. It's simple, but somewhat more interesting than the generic one column stuff being peddled thesedays. It also matches my business card site, sort of.

Second, I moved cloud providers. Clara's and my tiny instance is now running on a Debian nginx stack in an Equinix data centre in Sydney, Australia. The difference in performance and reliability is pretty eye popping, which I otherwise wouldn't recommend doing. The company also has excellent, handsome support.

Which gets us to the final, and arguably most important point. Which means it should probably have come first. Darn.

As you've all probably noticed, I've barely been blogging lately. When I started this site almost ten years ago, I had all the time in the world to blog and podcast. Today, many other commitments have evaporated all but a precious amount of introvert-sustaining personal downtime. I still love writing and sharing ideas though, so what to do?

Adapt!

To do so, I'll be thinking about ways to make the site simpler to maintain and write for. No more mandatory post images? Textile or Markdown instead of HTML? Become one of the cool kids and linkblog? Ditch social networks that take ownership of our content, and focus that energy here? Who knows.

One thing is certain, no matter what form it takes, I'm determined to take Rubénerd into another ten years. What can I say, you've been a gracious audience :).


Happy birthday @hanezawakirika!

Read Later

The Kiri with her Nemuneko!

It wouldn't have been hard to top Clara's birthday last year. I'd broke my ankle a few days prior. Infinitely worse however, she had an exam on the exact day. I mean really, how positively evil is that?

Suffice to say, this weekend was far nicer. We had Taiwanese tea and food with friends, caught an exhibition at the PowerHouse Museum, goofed around at home and exchanged more Nemuneko than perhaps one should!

I'm back at my VMs this evening, but just wanted to send one final warm Happy Birthday to Clara. The competition is less than steep once more, but you would look infinitely nicer in a tutu than me. ♡


Thinking of @CaseyLiss when learning C#

Read Later

With potentially my last C# project at university wrapping up, I thought I'd share some "outsider" experiences with the language before bidding it farewell.

Skip this nostalgia crap

My first experience with C# was in high school. At my weird Australian International School in Singapore, a bunch of us did accelerated Software Design and Development. Unfortunately, the course should have been called Software Algorithms, as there was no officially mandated development in the silly-bus. VB had been used to demo ideas, which I translated to VB.NET at home, then made the leap to C#. It seemed oddly familiar, almost like VB.NET expressed with C syntax. I was about to learn there was far more to it!

My dad bought me The Petzoid Book at the time. I've since learned it's the Perl Camel or Ruby Pickaxe of the C# world. Even as a Mac and *nix guy now, I do like how the book flows, and many pages have been folded and spilled with coffee. Good times.

But I digress. Sitting at UTS this year, I couldn't help but smile as all this nostalgia washed over me. In some ways C# has changed markedly since I moved off Windows in the 2000s, but in other ways it was its old familiar self. In fact, it was almost... too familiar; doing Java and C# in the same semester was a recipe for confusion and misplaced syntax.

Data types

In Java and C#, Strings are reference data types. In C#, lowercase "string" is a keyword alias, so we can use both interchangeably.

string Greeting = "Nyanpasu~";
String strcopy = "Look ma, no pointers!";

Simpler data types such as int are actually structs. Remember those from C? More on those shortly.

Auto-implemented properties

An interesting, almost Ruby-esque feature is auto-implemented properties. There's insufficient for complex classes, but if you're mostly encapsulating simple properties, you can avoid all that nasty Java getter/setter boilerplate. For example:

class Character {
    private string name;

    public string Name {
       get { return name; }
       set { name = value; }
    }
}

That I had seen. Since I was gone, C# further simplified it:

class Character {
    private string name { get; set; }

    public Character(string name) {
        this.name = name;
    }

    static void main(string[] args) {
        Character ryuuji = new Character("Ryuuji");
        Console.WriteLine("Hello, {0}!", ryuuji.name);
    }
}

Brackets and evil

I like K+R C brackets, but Visual Studio defaults to newlines, and most documentation uses them. To each their own, but I feel they just add tedious scrolling. Though we can all agree they're far nicer than the hideous GNU recommendations.

C# also allows eschewing (gesundheit) brackets for single line conditional statements and loops. If you think that's bad enough, they also allow GOTO lines.

if (true)
    goto hammerspace;

Die twice, already!

enums

Compared to Java 5+, enums in C# are limited to just representing named constants. This reduces overhead, but you'll need to break out a new class for anything more.

private enum Scale {
    Tsundere,
    Yandere,
    Kuudere
};

static void main(string[] args) {
    Scale tiger = Scale.Tsundere;
    if (tiger == Scale.Tsundere) {
        Console.WriteLine("It's not like I wanted to be an example...");
    }
}

structs

One of the first questions I had when learning Java regarded all the syntax errors my structs were generating. In C#, they're still a part of the language, and are encouraged over fully blown classes for simple data structures due to their lower overhead. The primary practical difference (I can see) is they don't support inheritance.

const and readonly

By now I was starting to realise C# was a little more like C than Java, at least in some ways. My const-antly appearing friend is here, and she brought an initialise-at-runtime companion in the form of readonly:

public const OVER = 9000;
private readonly bool nice;

public Character(bool isNice) {
    nice = isNice; // daijoubu~
    OVER = 2000;   // oh no, you didn't
}

out and ref

I have mixed feelings about these. Broadly speaking, they allow you to pass value types by reference. With out, you must pass it an uninitialized variable, which must then be given a value within the function.

void Process(ref int x, out int y) {
    x = 10;
    y = 20;
}

static void main(string[] args) {
    int x = 1;
    int y;
    Characters.Process(ref x, out y)
    Console.WriteLine("x is {0}, y is {1}", x, y);
}

==> x is 10, y is 20

Namespaces

In most languages I've encountered, we declare the namespace for a class in the source head. In C#, namespaces contain the class within brackets. I can see the pros and cons for both approaches.

namespace Animu {
    class Characters {
        // put methods and attributes here, desu
    }
}

Conclusions

So, that's the end of part one. I have another post queued up with a comparison of Java and C# generics, anonymous and delegate functions, some other random pieces like coalesced nulls, sealed classes, and a brief look at reflections and Linc. No wait, Linq. Clearly I need to select my words more carefully. GET IT!?!? AAAAA... nevermind.

I don't see myself ever writing C# professionally, though I've found the trip fascinating and can see why the Casey Lisses (Casey Lissii?) of the world like the language. At the risk of alienating some of my readers here, I would prefer it to Java. Should I be cowering in a bunker somewhere now?

That said, I aspire to have more Swift and Ruby in my immediate future. And $perl, because it was my first love. Shaddup.