Wednesday, May 17, 2017

Recover deleted photos from SD card

My friend came back from Africa with all photos on his SD card deleted. He knew that it is technically possible to recover them if they are not overwritten by new photos so he stopped using the SD card until he gave the card to me.

I used the program photorec to recover the photos. He used them happily for presentations.

With modern phones like Android, if the photos are stored in the internal storage instead of the SD card, I do not know an easy way to recover them (unless the phone is rooted).

Thursday, February 9, 2017

Hard disk full on Ubuntu

If you encounter low disk space on Ubuntu (eventually on other Linux flavour), a useful program to find size of directories is baobab.

You might see that /lib/modules contains gigabytes of files related to old kernel versions. How to remove them? The answer is here:

apt install --auto-remove

Tuesday, January 31, 2017

Migrate a WordPress blog into HubSpot

There is a tutorial on how to migrate WordPress blog posts into hubspot. If anything more complicated is needed, e.g. to deal with language variants, here are some commands that will help to automate it. I am also offering the migration as a service.

The situation was that the original blog had language variants in the form of (without any language specified) for English and for other languages (in this case, "ru" for Russian).

Therefore, we process English blog items separately:

{ xmlstarlet ed -d '//item[not(contains(link,""))]' all.xml; echo ""; } > all-en.xml

Other languages are processed automatically with the help of a loop:

for L in cs de es fr it ja pl pt-br ru tr uk ; do export F=all-$L.xml;  { xmlstarlet ed  -d '//item[not(contains(link,"'$L'/"))]' all.xml; echo ""; } > "$F"; sed -r -i "s:(<link.*$L/:\1:g" $F; done

There are redirects to be set up in the HubSpot settings so that the old URLs are still accessible and they will point to existing articles (new locations). This helps to maintain ranking in search engines and does not break links from other sites.

# english without a cycle
L="" perl -ne 'if(/^http:\/\/*),http:\/\/*)$/ && not ($1 eq $2)) { print "$1,$2\n"}' > redirects-languages.txt

# other languages
for L in de it fr ru pl pt-br cs es; do
perl -ne 'if(/^http:\/\/*),http:\/\/*)$/ && not ("/'$L'$1" eq $2)) { print "/'$L'$1,$2\n"}' >> redirects-languages.txt

One may have to deal with CDATA:

CDATA tag replace in ViM:

:%s#\(<script.*\)// <!\[CDATA\[#\1#
:%s#// \]\]\]\]><!\[CDATA\[></script>#</script>#

When uploading new redirects (which is possible to do in bulk), we deleted the old redirects first. It is possible to automate it with an iMacros script:

TAG POS=1 TYPE=SPAN ATTR=CLASS:dropdown-targetsettings-icon&&TXT:
TAG POS=1 TYPE=A ATTR=ID:hs-fancybox-ok

With these commands, it was possible to migrate thousands of blog posts from WordPress into HubSpot.