Posts tagged: remote

Startup Weekend Okanagan, Remote Working Panel

On Tuesday I was part of a panel on remote working moderated by Kazia Mullin and sponsored by Sproing Creative. I’m not big on public speaking and wasn’t sure I would have much to contribute to the discussion, especially since for the last month I’ve been a regular old employee who drives into work every day, working with other developers in an office. I was given a list of questions to prepare for but only glanced over them and may not have delivered quality answers during the panel. Having 2 kids and a full time job, and a 45 minute commute to work both ways, I don’t have much free time. The questions were as follows:

  1. Why did you decide to work remotely?
  2. How did you find or create your remote position?
  3. Tell me about the culture of the company you work for? How do they facilitate having remote workers?
  4. What tools do you use to make working remotely possible?
  5. What are your biggest challenges working remotely?
  6. What networks would you like to see in place to better support remote workers?
  7. What advice do you have for someone looking for remote work?

Why did you decide to work remotely? I was previously employed to a local software development studio. A small team with only two developers (myself included) which relied largely on a government contract. That contract dried up and I found myself unemployed. I wasn’t looking for remote work, I was just looking for a job. A friend was looking to subcontract another developer and I fell into the position. Once again working with a small team with only two developers (myself included) but this time I’d get to work from home.

How did you find or create your remote position? As above, I wasn’t looking for remote work. I needed work and a friend offered me a job. But once I worked remotely I told myself I never wanted to work in an office again. Four years later, when that contract dried up, I found myself once again looking for work. Any work. And I’m once again working in an office.

Tell me about the culture of the company you work for? How do they facilitate having remote workers? The company I worked for, in the beginning, was mostly local. Everyone lived within 30-45 minutes of each other, scattered across 4 local cities, with the exception of one support personnel who lived in the Philippines. We were each responsible for our own hardware. Us two developers chose Linux while the owners/marketers, accounting/QA, and support used various versions of Windows. The only commonality was the use of Skype which we’d use for semi-frequent but usually sporadic meetings. Though we all lived relatively in the same location, we’d rarely see each other. Maybe once a month or so, a few of us might meet for wings. Later, when the company sold, a more structured management system was put in place. One with regular weekly meetings, still done over Skype. The main body of the company was shifted to Vancouver where an office was set up and employees were hired to work in the office. The remote workers started dropping, starting with the lead developer and then lead support. Eventually I was let go, due to budgetary issues, and soon after that they gave up the office. Of the people left, they began working from home again.

What tools do you use to make working remotely possible? Skype for instant messaging and one-on-one or group voice chat. Company email addresses. Free and open source software to keep costs low. And since I worked from home, a room in the house dedicated to my work space. A lock on the door is optional, but a spouse who understands that work time is work time was a definite requirement. At least for me.

What are your biggest challenges working remotely? Taxes. I was a contractor so I was responsible for keeping track of business-related taxes and making sure I was paying them on a regular basis. Another challenge was getting paid enough. I don’t think I was very good at negotiating wages on my own. One contract I was getting $50/hour but the main 4-year long contract I was averaging in the mid-$20/hour range. Another contracting-related challenge was finding work. I looked for a remote employed position after the big contract dried up for a full 8 months. Mid-May through to the end of January. When you’re looking for work locally you compete against a local workforce. When you’re looking for work remotely, on sites such as http://weworkremotely.com and http://careers.stackoverflow.com, you’re competing with a global workforce. That’s a lot of competition.

What networks would you like to see in place to better support remote workers? I’d like to see a local co-working space. Working from home has its advantages, but in a house with small children it’s often hard to get the quiet that’s often needed to get “in the zone”.  The job I’m working right now, it’s a 45 minute drive away. I’d happily trade 45 minutes for a 15 minute drive to a local co-working office. As an aside, I found that working from home, by myself, that my skills were stagnating. I find it beneficial to be able to just walk over to someone to ask them a question, or to start a conversation with someone face to face to discuss the latest trends. Especially over lunch, which wouldn’t happen in isolation.

What advice do you have for someone looking for remote work? Know someone. Not everyone has that luxury, but networking has always played an important part in my professional life. Go to http://www.meetup.com and look for a group in your area that suits your interests. You might find a WordPress meetup, or even a Telecommuter group. Where I live, there is http://startupvernon.com which has been a huge boon to my social life. And that’s saying something, since as a geek I typically only left the house once a month to have #GeekBeers with the rest of the Startup Vernon community. And if you can’t find the time to know someone (people really do want to help place you in a job), check the remote-oriented job sites on a daily, or even hourly, basis. They’re linked two paragraphs above. Also, don’t talk yourself out of a position. Let the potential employer decide whether or not you’d make a good fit. Don’t let yourself be the biggest barrier to entry. Apply to everything you think you might be capable of.

Additional thoughts follow.

Someone asked the panel about how an employer with remote employees can help keep the employees motivated. That made me think of a previous remote position I had where, when the company exchanged hands to new owners, they removed everyone’s yearly bonus. Don’t do that. It did the opposite of motivate.

Though he made many good points, Justin Jackson’s “single point of failure” really made me nod my head. When an entire staff works under a single roof, the company is dealing with a single point of failure. The power goes out? A router died or the internet is flaky that day? Everyone stops working. Today at my job, the power went out at 10:10am. We had 8 minutes of battery backup to save our work. We did what little work we could with the outage, and though the power was back on within 30 minutes, that’s 30 minutes across maybe 70 employees. That’s 35 man-hours. Compound that with the fact the network wasn’t back online for another hour and a half after that. Had the team been distributed across the valley, or even the world, the downtime could have been mitigated. Work would have continued as normal.

A big reason to work remotely? Higher rate of pay. You can live in a town with a small tech scene with average wages in the $50k/year range, but find a wealth of employed remote positions online paying big-city competitive wages in the $70k-$90k/year range. Tonight I met a guy who works remotely for a company based out of Australia. Their support positions start at a higher salary than I make as a developer who works locally. Think about that.

Companies that have embraced remote working really have their finger on the pulse. Managers do not have to mistrust remote employees because they know those employees are happier and less likely to leave their jobs, all the while doing quality work. And employees get the benefit of competitive perks. During my remote-job search, I found companies that supplied personal-use cell phones, gym memberships, 401k plans, medical and dental, 5 weeks of vacation (to start), and regular in-person meetups at exotic locations.

Why not work remotely?

XBMC, from the couch with an IR Remote

There’s not a whole lot of coverage on how to get your XBMC working with a remote control. Here’s the short of it. If you’ve followed my guide for installing MCE remote control using LIRC with Ubuntu 8.10, and assuming that worked, then this may very well work for you.

Open up a terminal and start irw. We want to echo the keypresses from the IR remote. Mine does something like this for the Play, Left Arrow and Power buttons (just for example).

USER@PC:~$ irw
000000037ff07be9 00 KEY_PLAY mceusb2
000000037ff07bdf 00 KEY_LEFT mceusb2
000000037ff07bf3 00 KEY_POWER mceusb2

Which means when I press the Play button, XBMC is going to want to know that it should be looking for the “KEY_PLAY” message. Here’s how we do that.

First, back up your XBMC Lircmap.xml file. Mine was found in /usr/share/xbmc/system/

sudo cp /usr/share/xbmc/system/Lircmap.xml /usr/share/xbmc/system/Lircmap.xml.orig

That’s just so you’ve got an original to fall back on if things really mess up. Next, download my Lircmap.xml configuration.

wget http://n3wt0n.com/blog/wp-content/uploads/2009/02/lircmap.xml

Stick the Lircmap.xml file in /usr/share/xbmc/system/

sudo mv lircmap.xml /usr/share/xbmc/system/Lircmap.xml

NOTE: Keep a copy of your configured Lircmap.xml handy. I just turned on XBMC today and found that my remote wasn’t working. My customized Lircmap.xml was overwritten (possibly through an update) so I had to find my configured Lircmap.xml and overwrite the default one again.

irw should show you that your keys map the same way mine did (KEY_PLAY, etc). If they don’t, open up the /usr/share/xbmc/system/Lircmap.xml and replace the KEY_X with whatever irw tells you it is.

Here’s a snippet of what my Lircmap.xml looks like:

<lircmap>
    <remote device="mceusb2">
        <pause>KEY_PAUSE</pause>
        <stop>KEY_STOP</stop>
        <forward>KEY_FORWARD</forward>
        <reverse>KEY_REWIND</reverse>
        <left>KEY_LEFT</left>
         ...
        <zero>KEY_0</zero>
        <mytv>KEY_RED</mytv>
        <mymusic>KEY_GREEN</mymusic>
        <mypictures>KEY_YELLOW</mypictures>
        <myvideo>KEY_BLUE</myvideo>
    </remote>

One thing you may notice, and this is very important, is the <remote device=”mceusb2″> part. Remember irw told me that my Play button echos

000000037ff07be9 00 KEY_PLAY mceusb2

Well, pay attention to that mceusb2 part there. If yours does not say mceusb2 then change <remote device=”mceusb2″> to reflect whatever yours may be (perhaps just mceusb).

And contrary to other tutorials out there, you do not need a Keymap.xml file in your ~/.xbmc/userdata directory for this to work.

Ubuntu, from the couch with an IR Remote.

irw is the command to test if your IR Remote is working. I’m using a “Windows Vista Certified” MCE remote. irw becomes available when lirc has been installed, so go ahead and install lirc now if you havent’ already.

sudo apt-get install lirc

superm1 at the Ubuntu forums says:

Start out by installing lirc-modules-source
sudo apt-get install lirc-modules-source

Next grab the lirc_mceusb2.c source file from LIRC CVS.

Drop it in the appropriate directory in /usr/src/lirc-0.8.3/
sudo cp lirc_mceusb2.c /usr/src/lirc-0.8.3/lirc_mceusb2

Now issue these commands:
sudo dkms -m lirc -v 0.8.3 build
sudo dkms -m lirc -v 0.8.3 install

Remove and reload the module
sudo rmmod lirc_mceusb2
sudo modprobe lirc_mceusb2

Restart lirc to try it (assuming that it has been configured for a mceusb2 properly)
sudo /etc/init.d/lirc restart

Now you can give irw a try from the command line. It’ll start listening for button presses from the remote. If you press play and it shows that you pushed the play button (or left arrow, right arrow, stop, pause, etc) and the buttons match then that’s good.

Troubleshooting (like I had to do)

If you do this

sudo dkms -m lirc -v 0.8.3 build

and you get this

Error! This module/version has already been built on: 2.6.24-19-generic
Directory: /var/lib/dkms/lirc/0.8.3/2.6.24-19-generic/x86_64
already exists.  Use the dkms remove function before trying to build again.

Then you’ll have to do what it says and use the dkms remove function like this

sudo dkms remove -m lirc -v 0.8.3 --all

followed by

sudo dkms add -m lirc -v 0.8.3

And then pick up from the build stage again. That should set things straight.

Wifi at boot

Some people may have noticed that wifi doesn’t exactly turn itself on until the user has logged in to the desktop. That’s a problem for some users. How is it a problem? It gets in the way of remote administration.

If I’m at work and am remotely logged in to my home PC (via SSH, for example) then there may come a time when I want to reset my PC. If my wireless does not turn itself on when the PC turns on then I end up with a PC turned on at home, not connected to the internet, and no one around to log in for me.

Note: In the following example, your wifi card may not be recognized as “wlan0”. Type “ifconfig” to see what yours may be. Substitute whatever yours is in place of wlan0.

How do you connect to a wireless access point from the command line?

First, you “turn on” your wireless card

sudo ifconfig wlan0 up

Now you should be able to

sudo iwlist wlan0 scan

which will show you all the wifi access points within range. The wifi card needs to know which access point to connect to. This is done by

sudo iwconfig wlan0 essid WhateverAPYouAreConnectingTo

and if it uses a (WEP) key then set the key

sudo iwconfig wlan0 key WhateverTheKeyIs

But you’re not connected yet. You need to establish the PC’s IP address within the network

sudo dhclient

and you’re set. You should see “bound to 192.168.x.x — renewal blah blah blah” as the last line. Test the connection

ping google.com

and you see that packets are being transmitted and received.

So how do you set that automatically? Stick the commands in your /etc/rc3.d/S99rc.local file, at the very bottom.

...blah blah...
esac

# Added on this date to get wifi on bootup
ifconfig wlan0 up
iwconfig wlan0 essid WhateverMyAccessPointIsCalled
iwconfig wlan0 key WhateverMyKeyIs
dhclient

Now every time you restart your computer, your computer will be connected to the network before you even log in.

Take a look at this article for some explanation of what rc.d scripts do.

Staypressed theme by Themocracy