Towards the end of last year I started rereading large portions of Stuart McRobert’s Beyond Brawn and seeing how I’d begun training in the mornings and consequently had less time to do so I decided to experiment with a more abbreviated routine. Here’s how my routine stands as of today:
- Neutral Grip Chin-ups
- Single Leg Dumbbell Calf Raises
- Barbell Bench Press
- Bent-Over Barbell Rows
- Weighted Crunches
- Stiff-Legged Deadlifts
- Parallel Bar Dips
- Dumbbell Shrugs
When I was planning this routine I hadn’t had a break from weight training for a few months and I could feel that a rest would be in my best interests: I was starting to feel tired more often, progress had slowed and I knew from past experiences with over-training that if I kept pushing it I would only regress.
I dismissed strength training for a week, did some extra running and swimming and proceeded to eschew modern bodybuilding techniques, turning my back on split routines and instead focusing on building my basic core strength with a mere handful of big, basic, compound exercises.
The abbreviated approach seemed to go against the generally accepted dogma that you have to train to absolute exhaustion to see results and I admit I was skeptical. For the first month I even avoided accessory movements (in italics above,) only performing 2 exercises per session and was amazed to discover that by doing less work I was able to make more progress!
Over the festive period I did absolutely no exercise, got myself fully rested and since getting back into training I’ve brought in some accessory work for my calves, abs and traps and over the course of a few weeks built back up to my previous bests in the compound movements.
This week has been the start of a journey into new poundages and as such I’ve increased my caloric intake. Generally, I’m performing 2 warm-up sets and 3 work sets for the compounds and 1 warm-up set and 1 or 2 work sets for the smaller exercises. My swimming routine has consisted of 60 lengths of breaststroke and it will be the first thing to be dropped, along with the accessory movements, as I approach the limit of this training cycle. I’m loving making progress again, it reminds me why I like about playing the iron game!
Right, I gotta go eat…
Over the past bunch of days I’ve been back into web-development land and seeing as I was staring at code for prolonged periods I decided I might as well “enhance” this site a bit too.
I started with tweaking the frontpage: I rearranged things a bit and instead of displaying my latest blog entry in its entirety I now have excerpts from the previous 4 entries. I initially tried using the built-in
the_excerpt() WordPress template tag to achieve this but I wasn’t too fussed with the result and after some brief searching I found a plugin called the-exceprt-reloaded which seems to do the job better.
It was only a month ago that I upgraded my WordPress installation to version 2.0.5 and I was aware that 2 other point releases had been since published which I ignored: I just couldn’t be bothered with the hassle of upgrading and I knew that the next minor release was upcoming and was in fact released 8 days ago.
I began the upgrade to 2.1 by packing the full site into a tarball and using the backup plugin to create a copy of the blog database. I deactivated the installed plugins, unpacked latest.tar.gz and replaced all the old files apart from
wp-content/. After running
wp-admin/upgrade.php the blog was up and running without any problems and I could easily reactivate my plugins.
The rest of my site wasn’t so lucky: the
require_once() statement on my frontpage responsible for pulling in
wp-blog-header.php was throwing a fatal error which I eventually solved by moving the statement into
/index.php from its previous location.
So far the things I like about this upgrade are auto-saving of drafts and having the ability to switch between the WYSIWYG and code views smoothly which makes entering XHTML character entities and CSS classes etc much easier. The spellchecker will also come in handy when I’m blogging from my home desktop which doesn’t yet have the benefit of the Firefox 2.0 spellchecker.
I was reading this article on Wikipedia this morning and something didn’t seem quite right. See if you can spot it in this screenshot:
I had been up from early morning and thought my eyes were playing tricks on me. I read it and re-read it and still the words remained, I can’t say I was shocked but I certainly was surprised. My next thought was “hehe, who can I show this to?” quickly followed up by the more altruistic “how do I report this?” I then took a screenshot for posterity.
I didn’t have a Wikipedia account, so I quickly registered one and when I was returned to the offending article there was no mention of cream of any kind whatsoever. I was left wondering about the source of said text but decided whatever the source, it was beyond my bailiwick and just went back to what I was doing beforehand, which did actually involve the use of the plural of virus…
I read a thread over on linuxquestions.org recently about server “hardening” and got thinking about my own security measures and the lack there of. Here’s an example of the content of /var/log/auth on the machine this site is hosted on:
Jan 24 13:43:33 substance sshd: Invalid user test from 18.104.22.168
Jan 24 13:43:33 substance sshd: error: Could not get shadow information for NOUSER
Jan 24 13:43:33 substance sshd: Failed password for invalid user test from 22.214.171.124 port 37298 ssh2
The first time I checked the likes of that file and /var/log/secure it really disturbed me to see the megabytes-worth of failed login notifications. I felt the same way when I first started playing with Apache and saw the number of attempted FrontPage Extensions exploits logged in /var/log/apache/access_log!
That thread led me to a more detailed article which gave me much food for thought. Measures I had already taken included disabling root login via ssh by specifying
PermitRootLogin no in /etc/ssh/sshd_config and I’d spent a bit of time turning off unneeded network services. When I setup the MTA on this machine I fully intended to encrypt the traffic via TLS but I’ve never gotten in the practice of using public-key cryptography and don’t personally know anyone who is so that hasn’t seen fruition yet. The consequence of this was plain-text traffic (including username/password!) which I put up with for a while but solved the problem by closing port 143 in my router and tunneling the IMAP connection through ssh.
Since grokking that info I’ve configured SSHD to only use the SSH2 protocol by specifying
Protocol 2 in /etc/ssh/sshd_config and decided to see what would happen if I changed the port used to connect via ssh. Instead of changing the sshd configuration I took the lazy man’s approach and closed port 22 in my router and forwarded a differently numbered port to port 22 on this machine. I didn’t know if this would be effective but the logs have been unsullied since, take that script kiddies!
Future plans include only permitting login authentication via private keys, implementing packet filtering with iptables and scanning my home network with nmap. Be paranoid!
A couple of weekends ago I decided to reconstruct the system I use for downloading from Usenet: I had been using a Debian machine which I had setup back when I was still trying to get into using Linux on my desktop and as such it was massively over-powered for the task at hand, namely, leeching files from binary newsgroups and making them available via a network share. What follows is a tidied up version of the notes I made as I went along. Continue reading
Coffee time came around this morning at 11am just like it always does, but when I got to the kitchen there was no sign of the usual paraphernalia. I was placed in a moral dilemma: do I selfishly get busy with the 1 mug french press or dive into the catering-sized drum of Nescafe Original Blend? Thankfully, before I had to make my mind up, the green light was given for the purchase of some new equipment, so Phil and myself picked up some funds from petty cash and hit the Argos around the corner.
We had money to burn and the need for something shiny. The laminated book of dreams was consulted and we decided on a Morphy Richards “Cafe Matlino“ filter machine; the product number was written down and handed to the girl behind the counter, money changed hands and we awaited our new piece of kit. Within a few brief minutes the prize was ours and we headed back to the office, unpacked the machine and set it up for a water-only brew to cleanse the system. Here’s an action shot from the first pot of coffee produced:
The machine has an array of esoteric buttons, lights and displays which the documentation insists are used to have the brewing process instigated at a predestined time. Personally I prefer the technique prescribed by Terry Tate, Office Linebacker: “yo’ kill the joe yo’ make some mo’!” Namely, having a pot of black gold available at all times during the day. Already my mind is filled with ideas along the lines of the infamous Trojan Room coffee machine, the granddaddy of all web-cams.
As an interesting end note, when I was checking out the Argos site I discovered a potential for Cross Site Scripting, look at the breadcrumb trail on this page!
I’m just getting started in the development of my next application: a management system for the Agency’s various resources. The intention of this program is to allow members of staff to book laptops, projectors and so on and to see at a glance what is already booked, when for and by whom.
Not since my days of 210CSC218 and the calamity that was my undergraduate dissertation have I done any serious planning or documentation for anything I’ve implemented to date, but for some reason the mood took me this morning and I found myself brushing up on UML and printing off a reference to remind me of the different symbols involved. I remember back in the day finding some of the concepts a bit tricky but ultimately scoring well in that modules assignments and exam, so I wonder what my old lecturer would think of this effort:
I haven’t a clue if I’ve got all the details right but what I’m saying with this Use Case is that a user may book a number of resources and unbook one which they have previously booked and for a resource to be bookable it must first be added into the system by a user in the admin role, who can then remove it aswell as perform the normal user activities.
Nothing complicated then. The only possible difficulty I can see is in interacting with Active Directory / Windows Logon but I’ve seen this done in an app my co-worker Kev has written so I know I’ll get it licked, I just don’t know how much effort it’s going to take. Another interesting challenge is going to be making use of some kind of Object-Relational mapping system: in my last venture into .NET there wasn’t much separation between the objects the program was manipulating and the structures used to interact with SQL Server, ie, any change in an object member resulted in an immediate change in the row of the table it was representing. This approach left me victim to all sorts of minor details concerning DataRows, DataTables and the like, so this time ’round I’ll be taking a higher-level view of things and should have as a result an ORM system which I should be able to reuse in the future.
I just know I’m going to be seeing code in my sleep. Goodnight!
I’ve just committed vdaExtensions 1.1 to SVN: I had had enough of stressing out about minor aspects of the user interface and just went for it and published the application. Only to discover that ClickOnce wasn’t working on the target desktops, doh!
The problem was with the assemblies for the ReportViewer class. I have SQL Server 2005 Express installed on my machine and so had no problems with the app getting access to the appropriate libraries at runtime, but it didn’t look like the .dlls in question were being included in the published solution even when the assemblies were being included via Project Properties > Publish > Application Files and Copy Local was enabled in the References section.
Thankfully Google came to my rescue yet again and I found some info on interfering with the Report Viewer redistributable and I was able to get my hands on the .dll files which I then referenced in the project and bingo! the ClickOnce installer wasn’t complaining about ReportViewer any more, it was now giving me bother concerning ADODB…
A bit more googling provided me with an msi for the Office 2003 assemblies and a program to extract the .dll goodness from it. I referenced the resulting adodb.dll and specified for it to be copied into the build directory and that was thankfully the end of that mini-drama.
I wasn’t too keen on the idea of ClickOnce when I first started with .NET but I must admit that I’ve warmed to it within the context of a Windows domain and with users who don’t have full administrative privileges on their workstations. Or it just might be that I’m less of a Microsoft bashing, Linux fanboi these days! Right tool for the job at hand and all that.
It’s now onto pastures new: I’ve created a new solution in Visual Studio and set it up with a Subversion repository, my only hope being that somebody in the office will actually use this software I’m creating!
It’s now a week into the new year and to heighten my perception of the passage of time my birthday fell on the 3rd, making me a ripe 27. I’ve been thinking long and hard about what I want to achieve this year and the essence of my ruminations was progression: my goal is to make progress in all my hobbies and interests and, of course, life in general. Some prominent points which came to mind are to:
- continue bodybuilding
- write more code
- blog more
- increase Linux skills
- get a “real” job
Those activities pretty much sum up what I do in my life on a day-to-day basis and the only serious challenge will be finding gainfully employment as voluntary work just doesn’t pay the bills. The idea of it still sends chills up my spine but paid work would make other pursuits financially viable as well as advance my career and technological skill-set. Well, that’s what I’m telling myself anyway!
This might also be the year in which I make my return to academia: the job paper on Friday had an ad for postgraduate study at QUB, as well as one for the job I applied for last month and got knocked back for… I’ve regretted at times changing my undergraduate degree pathway from MEng to BSc and absolutely regret opting out of the year of industrial placement when I was studying towards an MEng, so postgrad work has been on my mind for a while and every year I consider applying but don’t. Maybe this time around…
That’s my piece said but don’t assume that I’ll actually hold myself to any of it, goodnight!
I’ve been finishing off the next release of vdaExtensions seemingly forever and have had all the functionality sorted out for ages and without much in the way of trouble but I’ve been struggling with the user interface. The only contents of my main form are a MenuStrip and the meat of the app, a DataGridView.
Throughout the use of the program the DataGridView can change dimensions: information can be added/changed/removed and I’ve also added the ability to show/hide the various columns of the control, with the constraint that at least one column must be visible at all times. The difficulty I’m experiencing lies in having the WinForm fit the DataGridView snuggly, displaying all the cell contents and preventing any empty space around the control:
The control is docked to the form and I’ve taken care of any empty horizontal space by setting the AutoSizeMode of the right-most visible column to Fill, however I’m still left with some vertical empty space as you can see in the screenshot. All the rows are displayed perfectly when the form is resized vertically to it’s maximum, but whenever all the rows cannot be displayed and the vertical scrollbar is visible the control can display some of it’s background along the bottom. This is the last thing on my TODO list for this version and it has been bugging me for at least a month now.
I’ve tried setting the background colour of the control but the empty space was still noticeable, only it was the same colour as the cell backgrounds. I can’t find any row properties that will cause the last row to fill up the available vertical space, like with columns and all screenshots I’ve found online have included a bit of the control’s background.
I might have to accept that what I want to achieve is just not possible using this control but I’m itching to move onto something else so come Monday I’ll probably publish the solution and commit the code to SVN. Perfectionism hurts!