Latest Publications

How to generate a prepared set of pictures for sharing on the internet

When working with pictures, you might have a set of original pictures, that can be prepared to fit a certain target and be shared on the internet. This procedure automates this proces.

Raw pictures can have non-efficient file names from the digital camera. This makes them hard to organize and list. Raw pictures can be huge in file size. This is a problem for storage, backup, transfer, upload and download. Raw pictures can contain hidden data from your camera, camera software and picture editing software. The hidden data can include automatic data, such as timestamps, face identification and software details. That can be a security problem.

In this example, we will prepare a set of raw pictures from a Canon EOS D30 digital camera for sharing on a social network.

The raw pictures are rotated and deleted as necessary. A copy of the raw pictures is prepared in a directory.

mkdir foobar
cp *.JPG foobar
cd foobar

The files are renamed according to time stamp. The comment field in the JPEG header is removed for security reasons. The data from graphical editors are removed for security reasons. The data in Exchangeable Image File Format (EXIF) is removed for security reasons. This is done using jhead, which a JPEG EXIF header manipulation tool, that is perfect for this task.

jhead -nf%Y-%m-%d-%H-%M-%S -purejpg *.JPG

If needed, the comment field in the JPEG header is set.

jhead -cl 'Open Tech SmbA <opentech@opentech.dk> holds the copyright to this picture.' *.jpg

The pictures are resized. This makes them smaller in file size and makes them fit. In this example, the pictures are resized to a maximum size of 720 pixels. This is done using mogrify, which is perfect command line processing tool for this task. mogrify is a part of ImageMagick. If the picture is horizontal, the picture is resized to a maximum width of 720 pixels. If the picture is vertical, the picture is resized to a maximum height of 720 pixels. The aspect ratio remains the same.

mogrify -resize 720x720 *.jpg

The pictures are watermarked using mogrify.

mogrify -font ~/Documents/fonts/excelates.ttf -pointsize 36 -draw "gravity southeast stroke rgba(255,255,255,0.05) fill rgba(0,0,0,0.05) text 0,0 'OT'" *.jpg

If needed, we can be rename the pictures to a number incremented and padded form, such as 001.jpg, 002.jpg and so on. This can be automated with the following bash oneliner.

a=1; for i in *.jpg; do new=$(printf "%03d.jpg" ${a}); mv ${i} ${new}; let a=a+1; done

The privileges are set.

chown opentech *.jpg
chmod 0600 *.jpg

Kundestyringssystem (CRM)

Et kundestyringssystem er også kendt som et customer relations management (CRM) system. Det består af en central database, der indeholder data om Jeres kunder, og en brugerflade, der giver adgang til disse data. Det betyder, at I kan styre Jeres kunder fra en eller flere computere hos Jer eller et andet sted, hvor I har forbindelse til internet.

Adgangen sker med en helt almindelig browser. Det betyder, at I kan bruge en almindelig computer eller mobiltelefon, samt, at I ikke skal installere klientsoftware, drivere eller andet tilbehør.

Kundestyringssystemet indeholder et kunderegister, der indeholder oplysninger om Jeres kunder, herunder kontaktoplysninger og kommentarer. Det betyder, at I kan vedligeholde Jeres kunderegister centralt, hvilket sikrer en ensartet og velinformeret kommunikation med kunden. Kunderegistret kan tilpasses. Det betyder, at I bestemmer, hvilket oplysninger, der skal gemmes. Kunderegistret har søgefunktion. Det betyder, at kunden hurtigt kan findes frem ved søgning.

Kundestyringssystemet kan senere udvides med moduler, der udvider funktionaliteten. Eksempler på dette er breve til kunder, nyhedsbreve til alle eller udvalgte kunder, salgsbreve til alle eller udvalgte kunder, produktionsstyring, processtyring, interne standarder, interne ressourcer og meget mere. Et andet eksempel på et modul er SMS. Det betyder, at I kan søge kunden frem, skrive Jeres meddelelse i en tekstboks og afsende beskeden, der modtages på kundens mobiltelefon et øjeblik efter. Det betyder også, at I på samme måde kan sende en meddelelse til alle eller udvalgte kunder. Moduler kan udvikles og tilpasses efter behov.

Kundestyringssystemet er baseret på standarder og kan derfor samarbejde med andre systemer og tjenester. Det betyder, at I kan bruge det i mange år, selvom informationsteknologien skulle udvikle sig i andre retninger.

Kundestyringssystemet kører på en server, der er placeret hos Jer. Det betyder, at I har kontrol over, hvem, der har adgang til Jeres data.

Kundestyringssystemet er beskyttet af en firewall på samme server. Det betyder, at I har kontrol over, hvilke computere, der har adgang til Jeres data.

Kundestyringssystemet er beskyttet af adgangskoder. Det betyder, at I har kontrol over, hvilke brugere, der har adgang til Jeres data.

Serveren kan sikkerhedskopiere sig selv og kundestyringssystemet regelmæssigt. Sikkerhedskopien sendes via krypteret kommunikation til et eksternt sted, hvor sikkerhedskopien gemmes i krypteret form. Det betyder, at I er sikret mod datatab, at I kan gendanne kundestyringssystemet helt eller delvist på samme server eller en anden server, samt, at I bestemmer, hvem, der har adgang til sikkerhedskopien.

Kontakt Open Tech SmbA på opentech@opentech.dk.

Importing a spreadsheet into a database

In this example, we will import data from a Microsoft Excel spreadsheet into a MySQL database on a FreeBSD operating system, that is configured for the ISO 8859-1 character set.

We use Open Office Calc to open the Microsoft Excel spreadsheet, remove unwanted columns and rows – and make sure, the data looks fine. We also remove title row. We click File and “Save as”, set “File name” to data.csv, set “File type” to “Text CSV”, set “Edit filter settings” and click Save. We set “Character set” to Western Europe (ISO-8859-1), “Field delimiter” to a semicolon “;”, unset the “Text delimiter” and click OK.

Now, we have a delimited file, we can load into MySQL. This format is also known as comma separated values (CSV). We transfer the file to the file system of the MySQL server in a secure manner.

On MySQL for FreeBSD, it is recommended, that files are loaded from the command line interface (CLI).

We construct the following command, that sets the user to foobar, uses password, loads the file data.csv into the table members, sets the delimiter to a semicolon, sets the terminator for a new line, maps columns and sets the database to foobardb.

mysql -ufoobar -p --local-infile -e "load data local infile 'data.csv' into table members fields terminated by ';' lines terminated by '\n' (name, phone, comment);" foobardb

We log into MySQL, confirm, that the data looks fine and update as necessary.

mysql -ufoobar -p foobardb
select name,phone from members;

Testing domains for information, mail service and web service

The information in WHOIS should be correct. We recommend a command line interface client for this, such as whois for FreeBSD and other Unix-like operating systems.

The root name servers should know, which name servers, that are authoritative for the domain. The name servers should resolve the domain based on the same zone version. If the domain is used for mail, then the mail exchange servers should respond to a SMTP request. If the domain is used for hosting a website, then it should respond to a HTTP request. We recommend a web based tool for this, such as Check DNS.

Configuring a Sigma BC 506 bike computer

The Sigma BC 506 bike computer measures current speed, trip distance, trip time, total distance and displays current time. In order to do so, the computer must know the correct wheel size. In this example, we will configure the computer.

We measure the distance, that the bike wheel rolls in one rotation. 2.133 mm.

We insert the 3V CR 2025 battery, place the rubber ring and close the back cover. The computer is now in programming mode. Programming mode can be entered by holding the indented button. The bottom button can cycle through the different pages.

Wheel size. We press the indented button. The computer cycles through the digits automatically. We use the bottom button to advance the individual digits. We press the indented button. The wheel size is now set.

Auto. We confirm, that the auto mode is on.

Unit. We confirm, that the unit is kmh.

Total distance. We press the indented button. The computer cycles through the digits automatically. We use the bottom button to advance the individual digits. We press the indented button. The total distance is now set.

We hold the indented button. The computer leaves the programming mode.