Lenovo x230 quick review


Lenovo x230

Here’s a quick and dirty review and notes on installation of my new Lenovo X230.

Here’s the key specs:

  • Lenovo x230
  • Intel i5-3320m processor
  • 8GB RAM
  • IPS screen upgrade
  • backlit keyboard upgrade
  • Intel AGN wifi
  • 500GB 7200 RPM hard disk
  • 120 GBIntel 525 mSATA SSD (purchased separately)
  • 9 cell battery
  • Weight in this configuration (excluding power adapter) is 1.73kg (3.8lbs if you must). Power adapter is approx 350g.

(Weight was taken after Linux was installed – all those extra bits might add up to an ounce or two)

Total cost was AU$1205 + $AU 184 for the SSD in late May / early June 2013

Windows 8 came installed on the 500GB hard disk. I shrunk it down to around 100GB which left approximately 370GB free for installing linux, in addition to the 120GB SSD. SSD installation was fairly straightforward (although I am an electronics repair technician). A number of screws to be removed from the bottom cover, lift the keyboard and then palm rest off and install it.

I have a DC car charger on order, as well a neoprene sleeve and mini DisplayPort adapters, all from eBay. A 270x350mm padded envelope works well as a slip case until the neoprene sleeve arrives (no, I’m not going to pay $20 for a fake one)


Installation / setup Linux Mint

Here’s how I partitioned and installed:

  • / and /home were put on the SSD, approximately 55GB each,
  • swap (8.5GB), /tmp and /var/log (2GB each) were put on the hard disk,
  • the remaining space formatted as ext4 and mounted as /pub, to be used for videos, music and other such things,
  • Linux Mint Debian Edition 64 bit (Cinnamon) installed after a few goes (live distro kept locking up during the installation process),
  • grub was installed on the SSD, and BIOS boot order was changed to boot from the SSD first,
  • BIOS changed to legacy mode

(On boot, hit F1 to enter BIOS setup, and F12 to temporarily select a different boot device).

As far as function keys etc goes, LMDE works great out of the box, nothing required except installing the necessary software, and perhaps encrypting your home drive. I made a few changes as recommended here for better SSD performance, and also installed TLP packages for better power savings

Review of the hardware itself

I’m fairly happy overall. With the 9 cell battery it is a bit bigger and heavier, but for me, well worth the trade off. I have not used it enough yet to get good battery life estimates, but operating on battery with wifi on and decent screen brightness, system battery life estimates range from six to eleven hours, which I’m fairly happy with.

As far as ergonomics goes, this is the first Thinkpad I’ve had so I’m not quite yet used to the trackpoint (my crappy work HP laptop has one, but it is very inferior to this one). The touchpad is disappointing – the left and right bottom corners act as buttons, but cause pointer movement. Even when using the trackpoint buttons (above the touchpad, so takes some getting used to), the touchpad just doesn’t feel that nice. Scrolling is software driven, so can be set for single finger right hand edge, or two finger. Two finger works better for me, as there’s less unintentional scrolling from palms while typing.

This isn’t anything unexpected, but I really wish there was a higher screen res option – 1366×768 just doesn’t cut it, especially in the vertical dimension. I very nearly bought an Acer Aspire S7-191 purely for the awesome 1080p 11″ screen. I would happily have paid an extra $100 – $150 for a higher res IPS screen on the x230.

Overall, I’m pretty happy. Certainly a nice upgrade from the ageing Asus 1201pn (old atom netbook with a completely dead battery) and old Dell Core2duo Inspiron (with about 15 mins of battery life).


12V 50Ah portable battery bank

batt bank and light bar

Here’s a portable battery bank I put together for camping and power outage use. Rated capacity is 12V 50Ah (via 3 x 12V 12Ah batteries and 2 x 12V 7Ah batteries wired in parallel). These are used freebies which are sitting at between 60 – 90% so capacity will be a bit less than rated, but for the price I can’t complain. Weight is 18kg.

The case is a Supercheap Auto safe case (found here). Cost $35, which I think is an absolute bargain, as these cases are well designed, if sometimes a little iffy on the quality control of assembly. I also bought myself one of the smaller $18 ones, which is also great value.

Batteries are a bit snug, but this also servers to hold them in place well. They are held down using lengths of 25mm nylon webbing. Small slots were cut in the sides of the case to allow the webbing to wrap around fully. Much simpler than affixing internal brackets to hold. Waterproofing is compromised, however I don’t mind this, as I would prefer the case to have some capacity for ventilation in case of hydrogen build up.

Batteries are wired using 6mm and 4mm automotive wire (what I had lying around) and insulated crimp connectors. There’s a mini blade fuse inline with the output, and a 2 pin JST SM 2.5 connector as the main output. This connector isn’t high capacity (3A max), but I will primarily be using this to run LED lighting, charge USB devices and to power ELV devices (eg plugpack replacement).

The light strips I have pictured above are simply a set of these LED light strips screwed to short sections of PVC pipe with hanging loops. Some twin core figure 8 speaker wire is used for power leads. each tube, which consists of six modules, draws around 250mA at 12V.

Another shot of the side, showing the battery straps:


batt bank


Things to improve/add:

  • 4.65mm^2 wiring and higher quality brass female spade connectors for batteries, with PVC covers
  • multiple JST SM 2.5 outputs (collectively fused at 5A) for running ELV devices and also for charging input
  • small solar panel and charge regulator, probably in a separate case
  • main isolator switch
  • terminal block / busbar to neaten up wiring
  • 50Amp anderson plug (fused separately) for heavy loads (eg inverter)
  • power switches on each light module

Once some bits and pieces arrive from ebay for the above improvements I’ll update.



Replacing lost adjustment screws on a Cartel EX target sight

The screws on my Cartel EX target sight (and everything else on my bow, for that matter) are always coming loose. I managed to lose the brass windage adjustment thumbscrew today. I’m not sure on the exact specification of it, but the thumbscrew from a VGA, DVI or other D style connector is the same thread. A handy replacement!

While I was at it, I checked the elevation adjustment, and it is a M5x0.9 thread, which is the same as the two 3mm allen head bolts holding the vertical rail/scale to the extension bar. Can’t imagine this one would be easy to lose though as your sights would drop if it came loose.

Reading files line by line in Bash – performance

I’m processing stored  HL7 message files with a bash script, and have been getting pretty poor performance (around one message per second for simple parsing, processing and outputting to CSV format). I thought I might be able to improve performance by using a different method of loading the text file.

The two methods of reading a file in line by line:

while read line ; do
echo “$line”
done < “$1″

LINES=(`cat $1`)
for i in ${LINES[@]} ; do
echo “$i”

The test:

phil@mig1:~/$ time ./bashreadtest1.sh 20120821_prjBsqrPacsIn.dat | wc -l

real 0m2.708s
user 0m2.492s
sys 0m0.096s

phil@mig1:~/$ time ./bashreadtest2.sh 20120821_prjBsqrPacsIn.dat | wc -l

real 0m1.096s
user 0m0.920s
sys 0m0.116s

The verdict – read the file into an array and iterate through the array – somewhere around twice as fast.

(I did actually run the test multiple times and they were fairly consistent. The script was also using the second, faster method, so I’ll need to look elsewhere for performance improvements)




Don’t even think about talking at me about motorcycle safety until you’ve read this


Let me stop you right there, mmmm-kay? I can tell by that little intake of breath what’s coming next. Thank you in advance, but I already know that motorcycles are “dangerous.” After nearly twenty years of riding on the streets, I am aware; telling me now will not be a revelation. It is not an insight into my lifestyle that has remained hidden from me until this, the moment of epiphany when you shine the light of outsider wisdom on my foolhardy choices.

Seriously, read the whole thing, hypocritical motherfuckers.

Google Chrome with proxies under Debian / Xfce

Something that seems to be a bit more difficult to solve than it should have been. Google Chrome expects to use Gnome/KDE’s network manager for proxy config. Under Xfce, this isn’t present so proxies can’t be configured in the usual manner (Options -> Under the Hood -> Network).

(note this refer’s to Google’s release of Chrome, not the chromium package)

The first step to fixing this is to launch chrome with the –proxy-server option:

/usr/bin/google-chrome --proxy-server=http://proxy.url.com:80

If a username and password is required, Chrome seems to understand and prompt you for one. I did try the format http://user:pass@proxy.url.com:80 but this didn’t work for me.

Second is to tell Xfce to use this option when launching the default web browser. I created a launcher script, then set the default web browser to this script in Xfce’s Preferred Applications (Xfce Menu -> Settings -> Preferred Applications).

With that, now when opening the web browser in Xfce (which uses the exo-open command) will launch chrome with the correct proxy settings.

Croudsourced weather forecasting idea

I often hear grumpy old farts complaining about the accuracy of weather forecasts, and it seems that (grumpy, old) people who have lived in an area for a while actually do have a fairly good idea of the weather in their area. I guess this is based on experience noting prevailing conditions and subsequent weather patterns. Of course, this knowledge isn’t going to do anything for predicting weather in a neighboring city, but for their own area, they could probably be considered an expert. Considering that the Bureau of Meteorology (BoM) is making forecasts for large geographic areas, it isn’t surprising that they cannot match the accuracy of a local expert.

So, this got me thinking – a crowdsourced weather forecasting system. For a given region, users can predict the weather (rain/storm, hot/cold, humid, dry etc). Actual observations from the BoM and other recognised sources can be used to score the accuracy of predictions. Users can also rate the accuracy of predictions of other users. These ratings can be used to give confidence in future predictions.

I haven’t the time (or skill, really) to implement something like this – anyone want to have a go?

Burnt SATA power connector/cable

An interesting issue that I had to look at today – a burnt out SATA power connector. Some pictures:

Burnt SATA power connector

The connector on the control board

Burnt SATA Power connector - drive

Another view of the connector on the control board - note the scorching of the surrounding circuit board, but the lack of any burnt out components or tracks

Burnt SATA Power Connector

The SATA power plug. I think I see the problem here...

Burnt SATA power connector - molex plug of adapter cable

The Molex connector which fed the SATA power adapter cable. Note the damage to the insulation on the 5V line

Burnt SATA power connector - molex plug and wire of adapter cable

The Molex connector of the SATA power cable adapter. Note the break in the 5V wire where it was vapourised.

My guess is that the SATA connector, where it plugs into the drive, had some sort of short between the pins on the drive’s socket. It must have pulled a lot of current to so completely melt the connector, and vapourise the 5V (supply rated for 30A) copper conductor. There was no obvious damage to the circuit board or drive, ruling out a failure on the board/drive causing a short.

Using find in a bash script

Here’s something that will hopefully save someone the frustration that I experienced getting this working. I am writing a script that needs to traverse a directory structure, then operate on the files it finds (read DICOM tags, modify/add tags). The reading and modifying was simple enough, but I could not get find to work inside the script, so basically resorted to running a command like:

$ find . -type f -exec fileops.sh {} \;

That worked fine, but I really wanted to have it all integrated into a single command. The problem I had was that the output of a find command couldn’t be used to iterate in a for loop – as a scalar (FILES=`find . -type f`) it was a single string, and as an array (FILES=(`find . -type f`)) elements would be split on spaces and newlines, which breaks if your paths have spaces in them.

The trick here is to change the IFS variable, which tells bash what to split strings on (by default it is space, tab or newline).  In my case, the output of find is separated by newline characters. Change it to a newline and now it works as expected. yay! Here’s the code:

# IFS controls how bash splits strings (by default, whitespace.
# change to newline
# dummy function for demo
fileops () {
    echo $1
FILES=(`find "$1" -type f`)
    for i in "${FILES[@]}" ; do
fileops "$i"
# restore IFS