Monday, March 21, 2022

BusyBox HTTP Daemon not recognizing mime types

Busybox is a collection of very small linux tools that can be helpful when you want to build a very small system. Among them there is a httpd server that can serve static pages. You can use this server to serve files from a folder.

My problem was trying to serve some wasm+javascript files built from rust code: the MIME type for the .wasm file was not sent.

I fixed this by creating a httpd.conf file and added these lines to it:

.wasm:application/wasm 
.js:text/javascript
.json:application/json
.html:text/html

.html was probably not necessary :-) .

Starting the server:
$ busybox httpd -p 127.0.0.1:8080 -h ./ -c httpd.conf

Sunday, August 30, 2020

lxd notes

# set password on server 
lxc config set core.trust_password .........passwordhere....
  
# lxd define a remote: remotename is a string, the name by which you want to use the remote, arbitrary
lxc remote add remotename 192.168.10.4 
# you'll be asked for a password after enter

# then list containers on that remote
lxc list remotename: 

# list images on that remote
lxc list remotename:

# get the result of a command in a particular format
lxc list remotename: --format=json 
lxc list remotename: --format=cvs
lxc list remotename: --format=yaml 

# rename container 
lxc stop old_container_name
lxc move old_container_name new_container_name 

  

Monday, September 30, 2019

anycubic i3 mega-s, cura 4.2.1 and Linux Mint 19.1 Tessa

Bought myself a Anycubic i3 Mega-S. Not sure why, probably ramping up to a midlife crisis or something.

Downloaded the Linux version of Cura 4.2.1 from Ultimaker.

Printed a few things from thingiverse. Learned enough Freecad to design simple brackets, screws and clamps.

Spent the last few days trying to make Cura see the printer from Linux. It turns out that the solution was very simple, at least on Linux Mint 19.1: all I had to do was to add my user to the "dialout" group and then restart the X server and log back in to Mate.

Wednesday, July 10, 2019

zug.tap updated with example about how to run dlang TAP tests with Perl's prove

What is "prove": prove on perldoc.perl.org

zug.tap is my implementation of a TAP producer in dlang zug.tap in the official Dub repo

contents of .proverc:


-e '/usr/bin/rdmd -I./source/ -I../../source/'
--ext '.d'


all options in the command line:

prove -e '/usr/bin/rdmd -I./source/ -I../../source/' --ext '.d' -v



emilper@home ~/work/zug_project_dlang/zug-tap/examples/run_with_Perl5_prove $ prove
t/t0001_tests_pass.d ................. ok
t/t0002_tests_fail.d ................. Failed 5/5 subtests
t/t0003_tests_some_fail_some_pass.d .. Failed 2/5 subtests

Test Summary Report
-------------------
t/t0002_tests_fail.d (Wstat: 0 Tests: 5 Failed: 5)
Failed tests: 1-5
t/t0003_tests_some_fail_some_pass.d (Wstat: 0 Tests: 5 Failed: 2)
Failed tests: 4-5
Files=3, Tests=15, 0 wallclock secs ( 0.02 usr 0.00 sys + 0.02 cusr 0.00 csys = 0.04 CPU)
Result: FAIL
emilper@home ~/work/zug_project_dlang/zug-tap/examples/run_with_Perl5_prove $ prove -v
t/t0001_tests_pass.d .................
1..5
ok 1 should pass 1
ok 2 should pass 2
ok 3 should pass 3
ok 4 should pass 4
ok 5 should pass 5
ok
t/t0002_tests_fail.d .................
1..5
not ok 1 should fail 1
not ok 2 should fail 2
not ok 3 should fail 3
not ok 4 should fail 4
not ok 5 should fail 5
Failed 5/5 subtests
t/t0003_tests_some_fail_some_pass.d ..
1..5
ok 1 should pass 1
ok 2 should pass 2
ok 3 should pass 3
not ok 4 should fail 4
not ok 5 should fail 5
Failed 2/5 subtests

Test Summary Report
-------------------
t/t0002_tests_fail.d (Wstat: 0 Tests: 5 Failed: 5)
Failed tests: 1-5
t/t0003_tests_some_fail_some_pass.d (Wstat: 0 Tests: 5 Failed: 2)
Failed tests: 4-5
Files=3, Tests=15, 0 wallclock secs ( 0.02 usr 0.01 sys + 0.01 cusr 0.01 csys = 0.05 CPU)
Result: FAIL

Monday, March 11, 2019

remote backup script via ssh, new version

#!/bin/bash -x

SITE=$1
if [ -z "$SITE" ]
  then
    echo "no site supplied"
    exit
fi
echo SITE IS $SITE
ACCOUNT=root@$SITE
COMMAND="/bin/tar czf - /home "
BACKUP_FOLDER=~/backup
DATE=`date +%Y-%m-%d_%H-%M-%S`
echo DATE IS $DATE
DESTINATION=$BACKUP_FOLDER/$SITE/home_$DATE.tar.gz
mkdir -p $BACKUP_FOLDER/$SITE/

/usr/bin/ssh $ACCOUNT $COMMAND > $DESTINATION 

echo DONE

Saturday, January 12, 2019

vector operations in D

Up to a few years ago I was of the breed that spawns code fated to wait for requests for most of it's life so really bothering with optimizing it is not cost effective. Then I stumbled into the one million to one situations which warranted a lecture about how many of my monthly wages a server upgrade is worth. It was revealed to me that adding more memory to that particular server was worth what was spent on me over more than 6 months, and as a result I had suddenly become interested in optimization. The story ended with that particular call being upgraded from finishing in more than 4 hours to finishing in less than 5 minutes and in me starting to have real doubts about the meme regarding the cost ratio hardware/developer time.

This is the context. The meat of the issue is Dlang has a very easy to use way to let the compiler decide how operations on arrays should be done based on what is available to it at compile time: Array Operations . Testing the performance gains was done according to Other Dev tools: Valgrind Helper . Screenshots are of KCachegrind.

The code:

module tests.vector_operations;

void main(){
    test_loop();
    test_vector();
}

void test_vector() {
    int[1000000] test;
    int[] result;
    result[] = test[] + 1;
}

void test_loop() {
    int[1000000] test;
    int[1000000] result;
    for (size_t i = 0; i < test.length; i++) {
        result[i] = test[i] + 1;
    }
}
Compiling, running valgrind, demangling
$ dmd -g vector_operations.d 
$ valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes --callgrind-out-file=callgrind_out ./vector_operations
$ ddemangle callgrind_out > callgrind_out.demangled
Inspecting the results in KCachegrind: