25 December, 2016

Make /var/www/html/ writable

From the history:

 76  sudo gpasswd -a "per" www-data
   77  sudo chown -R "$USER":www-data /var/www
   78  find /var/www -type f -exec chmod 0660 {} \;
   79  sudo find /var/www -type d -exec chmod 2770 {} \;
   80  touch x
   81  rm x

Line 80 - 81 is just a test. 

17 December, 2016

WordPress Localhost 404 errors

I had to change /etc/apache2/apache2.conf file. In these lines None were changed to All:

14 December, 2016

Speed Up Mint

I have used two simple steps:

  • Cinnamon: disable all visual effects
  • Install the MATE Desktop: good for old PCs
After a few minutes with MATE my reaction was: why on earth didn't I change before ...

21 November, 2016

Where is the anacrontab log?

You can access the anacrontab like this:

awk '/anacron/' /var/log/syslog | less


root@Odin:~# awk '/anacron/' /var/log/syslog
Nov 21 08:11:58 Odin anacron[877]: Job `cron.daily' terminated
Nov 21 08:11:58 Odin anacron[877]: Normal exit (1 job run)
Nov 21 18:42:13 Odin systemd[1]: Started Run anacron jobs.
Nov 21 18:42:13 Odin anacron[845]: Anacron 2.3 started on 2016-11-21
Nov 21 18:42:13 Odin anacron[845]: Normal exit (0 jobs run)
Nov 21 20:38:31 Odin systemd[1]: Started Run anacron jobs.
Nov 21 20:38:31 Odin anacron[770]: Anacron 2.3 started on 2016-11-21
Nov 21 20:38:31 Odin anacron[770]: Will run job `db.backup' in 60 min.
Nov 21 20:38:31 Odin anacron[770]: Will run job `daglig.backup' in 200 min.
Nov 21 20:38:31 Odin anacron[770]: Jobs will be executed sequentially
Nov 21 21:05:50 Odin systemd[1]: Started Run anacron jobs.
Nov 21 21:05:50 Odin anacron[833]: Anacron 2.3 started on 2016-11-21
Nov 21 21:05:50 Odin anacron[833]: Will run job `test' in 1 min.
Nov 21 21:05:50 Odin anacron[833]: Will run job `db.backup' in 60 min.
Nov 21 21:05:50 Odin anacron[833]: Will run job `daglig.backup' in 200 min.
Nov 21 21:05:50 Odin anacron[833]: Jobs will be executed sequentially
Nov 21 20:07:06 Odin anacron[833]: Job `test' started
Nov 21 20:07:06 Odin anacron[833]: Job `test' terminated
Nov 21 22:05:50 Odin anacron[833]: Job `db.backup' started

Nov 21 22:05:50 Odin anacron[833]: Job `db.backup' terminated

Test anacrontab

Edit the anacrontab file:

nano /etc/anacrontab

Write this line:

1 1 test echo "anacron okidoki" > /home/yourUserName/anacron.log

Reboot. Wait one minute. If you see the file anacron.log in your home directory, you know that anacrontab runs.

07 November, 2016

Linux: Sound Recorder in Bash

This file is made for my research project "What You Should Know About WordPress". I need to record a series of semistructured interviews. So I needed something as simple as a soundrecorder. That's a job for bash:


# Record interview
# Encode as MP3

# User Input
echo "I'll record sound and save the file as MP3"
echo "What is the name of your file? (Remember: .mp3)"
read filename

# Record and encode
arecord -v -f cd -t raw | lame -r - $filename

07 October, 2016

Mount H: on Windows shares

# sudo apt get install samba-client samba-common cifs-utils
# mount -t auto -o user=XXXX //server

05 October, 2016

MS Lumia Phone

My new work phone is MS Lumia. I've never tried MS in the role as a mobile. Now the battery is loading, and I wait for some apps to download. Only 3 reboots was necsessary in order to use the thing.

Setting up Outlook was easy, but I had to ignore several "helpfull" suggestions about getting a MS account. No thanx.

A nice feature is the watch when the screen is blank.

MS Lumia Phone

My new work phone is MS Lumia. I've never tried MS in the role as a mobile. Now the battery is loading, and I wait for some apps to download. Only one reboot was necsessary.

27 September, 2016

Raspberry Pi B+

Use a USB to mini-USB cable as a power supply between TV (or similar) and Pi.

15 September, 2016

Webp and Linux

Install the package webp:

# sudo apt-get install webp

Now you can convert image files with cwebp:

# cweb file.png -o file.webp

Or decompress via dwebp.

08 September, 2016

Windows improved

Today's work on a Windows system was pleasant. W10 is a great improvement. But I still prefer Linux.

01 September, 2016

Tex to Docx

So you want to translate .tex to .dex? It's easy. Use pandoc:

# /home/per/Dropbox/ddfo/sit_lux/synopsis.tex

31 August, 2016

Cannot connect to Philips Hue

For some reason Philips Hue cannot get an ip-address it seems. So the system is basicly useless. I have tried several reboots of the router, the Hue thing etc. Nothing has helped so har.

I suspect an error because my Android phone wants the same IP. However if I turn off the phone and boot from rock bottom there is only light in two LEDs.

30 August, 2016

Synchroniz Tomboy Notes

If you have more than one computer: save the notes on Dropbox. Then synchronize your systems with that folder. It works like a charm.

26 August, 2016

Docx - cannot print properly from Linux

Skyprinting from Linux or Windows does not give the same result. I'm not printing from Libre Office. I just upload the file from the directory. My conclusion: .docx is not an open format at all. You have to print from Windows.

15 August, 2016

Latex and Your Organization

As a researcher and author it's obvious to write in the Latex format. But when you hand in your work, you often have to downscale to some MS Word .docx template. I can do it. But I don't love .docx.

13 August, 2016

Lyx Debugging

Getting an error in Lyx is pretty normal. That is when you try to compile to .dvi or .pdf. But how can you edit an error in myfile.lyx in line 666? From inside Lyx it's not possible to edit the source. As far as I know, that is.

So, the quick a dirty solution is:
  1. Get out of the file in Lyx.
  2. Open the file in your favorite editor (vi, nano, gedit ... etc.)
  3. Go to the line with an error. 
  4. Fix or remove whatever seems wrong. 
  5. Save and open the file in Lyx again.
  6. Compile ... and hope for the best.
Sometimes the error may have it's origin from a bibtex file. Same recipe here.

06 August, 2016

Lyx header for a Paper

Latex header sample.

  • Colored table cells
  • Author / year bibliography
  • Somewhat scalable tables
The Latex header:

 Formatterer farvede tabeller.
 Husk: man kan definere farvekoder.


 Indsæt herunder

\lhead{"Et in arcadea ego"}
\rhead{Per Thykjær Jensen}


17 July, 2016

HP Elitebook / Ubuntu Studio: battery decharge after shutdown

Trying this recipe.

# sudo -i
# gedit gedit /etc/default/grub

Change the line to:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=force"

06 July, 2016

Dropped Linux Mint

Well ... I tried and tried, but never found a  cure fore the unstable wifi under Linux Mint. So I dropped Mint in favor of Ubuntu Studio Edition. I teach multimedia design. So it must be a good match.

LInux MInt: unstable wifi

Yep, it's still a problem. Tried this recipe: http://ubuntuforums.org/showthread.php?t=1980142

26 June, 2016

Linux Mint: Network Manager Headache

The network manager unconnects randomly. It's annoying during streams or online games. I have tried to install wicd, but cannot make the network manager inactive.

Removing the darn thing results in a dark screen. It's almost a Windows blue screen of death experience. And I've had this experience twice.

So now I'm left with a blank screen, gde hangs.

What are my options? Trying:

  • Install KDE
  • apt-get install kde-full
If that does not work the only option is to reinstall the entire system. For the third time.

Perhaps the HP EliteBook favors another Linux flavour?

The trick worked. After installing KDE wicd runs like a charm .. in KDE that is.

20 June, 2016


I've experimented with automation, here's the first Gulp file (yea, it's work in progress).

GULP - watch and compile code 

File: gulpfile.js
Version: 0.1
Tags: Sass watch, Sass compile
By: Per Thykjaer Jensen
Url: http://multimusen.dk/

## Howto

 1. Download plugin
 2. Require the plugin
 3. Define a gulp.task

Run the task either:

 * :: gulp [taskname]
 * or add the task to the gulp.task default and run via :: gulp

Best Practise

Separate your working files into a src/ and a dest/ directory. 
This is my first playground, so the pressent file 
structure is a darn mess.


//'use strict';

// === Gulps ===
var gulp = require('gulp');
var sass = require('gulp-sass');

// sass compiler
gulp.task('sass', function () {
  return gulp.src('./sass/**/*.scss')
    .pipe(sass.sync().on('error', sass.logError))

// watcher
gulp.task('sass:watch', function () {
  gulp.watch('./sass/**/*.scss', ['sass']);

// sass lint
var sassLint = require('gulp-sass-lint');
gulp.task('sassLint', function () {

// minify images
var imagemin = require('gulp-imagemin');
gulp.task('imageMin', function () {

// === Javascript Lint ===
var jslint = require('gulp-jslint');
var jshint = require('gulp-jshint');
gulp.task('lintJs', function () {
    return gulp.src(['js/*.js'])
        .pipe(jshint({ /* lint placeholder */ }))


// === Jade Template Engine ===
jade = require('gulp-jade');

// run this task by typing in gulp jade in CLI
gulp.task('jade', function() {
    return gulp.src('src/templates/**/*.jade')
        .pipe(jade()) // pip to jade plugin

// === Default ===
gulp.task('default', [
  'lintJs'], function() {

16 June, 2016

Write permission in /var/www/html/

# sudo usermod -a -G www-data[USERNAME]
# sudo chmod -R g+w /var/www

ad 1) Add the user to the www-data group
ad 2) Give write permissions to the group in /var/www
ad 3) Be that user and edit

28 April, 2016

Index Acta Masonica

Created this model and implemented it in PhpMyadmin. Seems to work all right.

21 April, 2016

Noscript: a candidate for the most useless plugin for Firefox

Tried the Noscript plugin for Firefox. Yeah: it really blocked all scripts. And nothing worked. Not even a search on Duckduckgo. My browser was probably secured.

But it was also totally useless.

So I decided to dump the darn thing.

16 April, 2016

CakePhp still sucks

Well, I just gave CakePHP one more chance. After a whole day of errors, I guess that enough is enough. Again: the system sucks big time.

Ruby server: the long and winding road

Not elegant, mostly try and error. Eventually everything seems to work, here's the history:

 234  sudo apt-get install build-essential
  235  rails server
  236  rails
  237  ls
  238  cd rails
  239  bin/rails server
  240  ls
  241  cd blog
  242  bin/rails server
  243  gem install bundler
  244  sudo gem install bundler
  245  bin/rails server
  246  bundle install server
  247  bundle install
  248  gem install json
  249  sudo gem install json
  250  rails server
  251  bundle install
  252  sudo apt-get install libgmp-dev
  253  sudo apt-get install libgmp-dev
  254  rails server
  255  bundle install
  256  sudo apt-get install ruby-full build-essential
  257  sudo apt-get install apache2 apache2-mpm-prefork apache2-prefork-dev
  258  sudo apt-get install rubygems
  259  rails -v
  260  sudo apt-get install rails
  261  sudo gem install rails
  262  rails -v
  263  gem update --system
  264  \curl -L https://get.rvm.io | bash -s stable --rails
  265  rails -v
  266  bundle install
  267  rails -v
  268  rails server

03 April, 2016

Lyx and Bibtex: convert .bib file to 8859-1

  1. Install KbibTex.
  2. Open your .bib file.
  3. Save as  ....bib - and remember so set the fileformat to 8859-1.

26 March, 2016

Processing - cross platform

Processing can export to Windows and Linux. For a Mac you need a developer license. Alternative: publish in Python. In the wiki it's said that you need to run OS X in order to export to that OS.

02 March, 2016

WordPress Xampp on Mac - how to install themes or plugins

On a Mac WordPress via Xampp you cannot install themes or plugins because of the settings. In a terminal do like this:

# sudo -i
# (write your password)
# cd /Applications/Xampp/xamppfiles

Now find out where your WordPress files are and cd to the relevant folder, then do something like this:

# chmod -R 777 wordpress/
# chown daemon:daemon wordpress/

Now ... this is a quick and very, very dirty fix. In a production environment the folders should have chmod 755 and the files chmod 644.

24 February, 2016

Linux Evening

Reconstructed my 8 year old server, now it serves as file server. Removed Cinnamon and the slowwww wifi manager. Installed wicd, KDE and lightdm. Added WordPress for tomorrows class.

Linux Antix Missing Icons

Solution: install some icon themes via Synaptic. QED.

15 February, 2016

MySQL World Database

I had some issues with international characters. Solution: install directly from the zip file.

If you try to install the tables at one.com:

  1. Unzip the file.
  2. Edit these lines (from line 18) like this:
-- USE world;

06 February, 2016

Texturepacker - no thanx

Tried the texturepacker for Linux. The result was a total waste of time. Here is the result:

The pictures did were turned up and down, and most of them were covered with an embarassing ad.

Verdict: apt-get remove.

Adobe Flash - or the Image Magick is much better, see my article on Multimusen.dk.

02 February, 2016

Fooling around with Modernizr and Foundation

Modernizr is an easy to use framework consisting of tests like "can my browser _____ "? You'll get a true or false.

Foundation is very much like Bootstrap. However the code seems less bloated. Foundation makes heavy use of Sass. And that's nice.

There are several tutorials e.g. on Youtube, where developers are building Foundation solutions for WordPress.

28 January, 2016

Pandoc - very old version in Linux Mint repo

Tried to follow this guide. Downloaded the Debian packet and installed it from the download page:

 Now pandoc and pandoc-citeproc seems to work.

27 January, 2016

Pandoc error

Looking for at solution for this pandoc error message:

Error at "source" (line 1, column 94):
unexpected end of input
expecting new-line

Python and MySQL on Linux Mint

Got an error because the MySQLdb package wasn't found. Solution:

# apt-cache search MySQLdb

python-mysqldb - Pythongrænseflade for MySQL
python-mysqldb-dbg - Pythonbrugerflade til MySQL (fejlsøgningsudvidelse)
bibus - Bibliografisk database
mysql-utilities - collection of scripts for managing MySQL servers
petj-HP-EliteBook-850-G1 ~ # apt-get install python-mysqldb


# sudo apt-get install python-mysqldb

Then everything worked like a charm. 

24 January, 2016

Tomboy Notes

My old laptop literaly crashed. Litterally. During the reconstruction efforts I found out, that one of my primary concerns was to get the Tomboy Notes.

The files are stored in:



  • #killall tomboy
  • copy the files from the backup
  • paste the files to ~/.local/share/tomboy
  • start tomboy
That's it.

13 January, 2016

How to make an icon for a Python App

The files and the icon.

So now I have some Python GUIs for my Philips HUE, but I'd like to have a nice Desktop Icon, like any other Linux App. How can I do this?

In Ubuntu - and probably most Linux systems the paths to executable programs are stored in hidden .desktop files.

First create a file and save it as .myApp.desktop

The content of the file could look like this:

[Desktop Entry]
GenericName="Python tkEntry Exp"

There are more possible setting, see here.

The next step is to make your file executable, write these commands in the terminal window:

# chmod a+x .myApp.desktop
# chmod a+x tkEntry.py
# cp .*desktop ~/.local/share/applications/

In order to give all system user access to your program, you can:

# cp .*desktop /usr/share/applications

Now you'll see an icon with the chosen picture in the folder. You can drag this icon to e.g. the menu. And now you can run your GUI as you would run any program.

The line Terminal can be true or false. If it's true the program will launch in a terminal window.

11 January, 2016

Json Parsing in Python (Philips Hue Sample)

Import libraries:

import requests
import json
from urllib import urlopen

Here's a class that will print out the names of the scenes:

    ''' AUTORUN METHOD '''
    def __init__(self,master):

        self.apiUrl = ""
        self.user = "xxxxxxxxxxxxxxxxxxxxxxxxx"

        self.a = urlopen(self.apiUrl 
            + "/" 
            + self.user 
            + "/" 
            + "scenes").read()
        self.a = json.loads(self.a)
        for thing in self.a:
            self.theName = self.a.get( thing ).get('name')
            print self.theName

The function will print out a list of scene names.