Squirt 0.2: Now with SMTP

As you may or may not be aware I have been tinkering with a command-line FTP client over the past year or so. And now seems as good a time as any to release version 0.2. The main change here is that the FTP client now supports sending data via SMTP.

In order for this to work, you need to be able to specify an SMTP server and port but, if you have a spare gmail account knocking around, server smtp.gmail.com and port 587 will work quite nicely.

As ever, you can find all of the source on GitHub. Feel free to tinker around with it.

flattr this!

Fun with Git: Moving a file from one repository to another

This has taken a while for me to come up with an approach, and the approach I took probably isn’t the most efficient. In fact I am sure it isn’t.

But it worked and I thought it would be worth documenting it for the next time I want to do something like this.

So the issue was that I had two files (dicetastic.py and dicelib.py) that needed to be moved. These files has started out in their own (now deleted) Dicetastic repository and then merged into my utilities repository. Now I wanted to move them to silliness, while retaining the git history.

The approach I eventually took was to format a set of patches from the original repositor(y|ies) and then merge them into the new.

So first I created a folder called rollout:

mkdir rollout

Then I formatted the patches I needed from the utilities folder:

cd utilities
git format-patch -o ../rollout --root dice*

This created three patches in the rollout folder. Unfortunately this wasn’t quite what I wanted as none of the history from before I started mucking about with this.

So I went back and formatted the patches from the Dicetastic folder:

cd ../Dicetastic
git format-patch -o ../rollout --root dice*

And I will note here that I should have done this for everything, not the dice* files, in order to include the changes to the README. Oh well.

So now I have a collection of patches in the rollout folder, which I could use to rebuild the history in the silliness folder.

If I had done this properly, I should have been able to use:

git am ~/Code/patches/*.patch

Unfortunately, because I had created two sets of patches in the same folder I had a slightly scary numbering issue. And because there were only seven patches I decided to apply them individually so that I could see what I was doing.

But it worked and all that was left was for me to commit the changes and push them and both the files are in the right place, along with their full history.

I hope.

flattr this!

Towel was a silly name for a repository

I mentioned about a week ago that I was starting to consolidate some of the short scripts that I have knocked together and pushed to GitHub over the years. This is still in progress but I have decided to consolidate these into two repositories: utilities and silliness. Because A lot of what I do is quite silly.

Going forward, anything short I throw together will end up in one or the other of these repositories. Now I just need to tidy up my current mess of folders.

flattr this!

An administrative note

I don’t think anyone actually looks at these but, in the site menu here are a bunch of links to IBM i and Linux utilities that I have knocked together over the years. They are useful to me and may be useful to someone else at some point.

However, my habit of throwing each script into a seperate folder, and a seperate repository on GitHub has let to a bit of a mess of tiny repositories. So I have started thinking about consolidating these in the Towel repository (because it’s a tough universe out there).

So far Photog (a photo renaming utility) and killchar (a utility to strip annoying characters from file names) are in there. Others will follow as and when I find the time.

And then I will need to look at repairing or removing the links and static pages on this site.

flattr this!

Tsuro: The Game of the Path

Tsuro: The Game of the Path

Tsuro: The Game of the Path

This is a recent addition to our collection of board games, and a very good one. What is nice about Tsuro is that the gameplay is as simple, or as complex as the people playing the game.

The board is a 6×6 grid and the players each start with three tiles on which parts of a path are marked. You place a tile, move your stone to the end of the path and draw another tile. Once the path takes you off the board, you are out of the game. The aim, of course, is to be the last player left on the board and the strategy consists of trying to keep your own path going while forcing your opponents out of the game.

It’s a beautifully simple game and one that is very easy to pick up. It’s also a game for which, the more you play, the more complexity emerges. As such, it is one of the very few games that really does work for all ages from 8 (or 7, in out case) to adult.

Each individual game is pretty short – the game takes as long as it takes to place 35 tiles – but its sheer playability makes this a very addictive game. We have played several games already and I can see Tsuro being pulled out and played quite regularly over the next few years.

flattr this!

Quote of the Day: Immigration and health

In a spirit of helpfulness to our politicians, I suggest to them that one way to address the funding gap would be to welcome more migrants to our ageing country. Typically being younger than the indigenous population, they make many fewer demands on the health service. Migrants also contribute quite a lot more in tax than they take out in benefits; extra funds that could be spent on the NHS.

Andrew Rawnsley

flattr this!

Adding variables to ad-hoc SQL queries with REXX

It’s incredible how easily I can be distracted. All I needed was a quick and dirty way of capturing the input into an interface and now I’m writing a blog post.

Everything starts with an issue and, in this case, the issue is with an interface not behaving as expected in production even though everything works as expected in the test environment. My suspicion is that the incoming data is not correctly formatted, causing transactions to not meet the selection criteria. But to confirm this, I need to see exactly what is waiting to be processed when the interface runs.

Since this interface runs after the end of business I want to be able to submit an SQL query to capture the input data into a separate table so that I can see what was processed when I come in tomorrow morning. And, because much of this data is not destined to pass through the interface in question (this is why we have selection criteria) I want to be able to select today’s transactions for whatever the current value of today happens to be.

In a sane world, this would be a simple case of using the current date but in the real world there are still people using eight digit numbers to represent the date. This leads to some unwieldy date calculations in SQL which led me to wondering whether I could capture this in a variable to make things a bit more readable. It turns out I can, but not on the version of the IBM i operating system that I am currently using.

What really caught my eye at the above link however, was this:

but if “ad hoc sql + variables” is the thing you need, you should really try Rexx.

And I thought: “Rexx. That’s something I haven’t used since last century.”

Any excuse to download a couple of manuals is reasonable as far as I’m concerned, so off I went.

And here’s the script (library and table names have been changed):

datenow = DATE('S')
statement = 'insert into MYLIB/INPUTDATA' ,
            'select * from PRODLIB/INPUTDATA where dhdate =' datenow
address 'EXECSQL'
EXECSQL 'SET OPTION COMMIT = *NONE, NAMING = *SYS'
EXECSQL 'delete from MYLIB/INPUTDATA'
EXECSQL statement

The DATE function returns the current date and the 'S' option handily reformats it into an eight digit number (yyyymmdd). The address 'EXECSQL' statement handily points the subsequent commands to the SQL command environment and then it’s just a case of executing the statements I need to execute.

It all works very nicely indeed.

On a tangential note, I noticed that Rexx is also available in Arch. I may well install this sometime soon just to have a play around with the language.

flattr this!