BSD Chromium Audio/Mic

If you encounter a problem with microphone in Chromium on FreeBSD (and other *BSD), this is because it uses sndio audio backend and probably default microphone is not the one you want to use. In my case /dev/dsp0 is the HDMI input/output thus no audio input. There is no need to start system wide sndiod. You can use environment variables in ~/.profile to control audio input/output for the local spawning sndio client:

  • export AUDIODEVICE="rsnd/4" sets default input/output device to /dev/dsp4.
  • export AUDIORECDEVICE="rsnd/3" sets default input device to /dev/dsp3.
  • export AUDIOPLAYDEVICE="rsnd/2" sets default output device to /dev/dsp2.

You can simply set AUDIODEVICE="rsnd/4" to switch default input and output device, and/or AUDIORECDEVICE="rsnd/3" to change default microphone source. If you want to have choice to switch between several devices on the fly you will need to use sndiod and provide set of devices with -f flag. See sndio [1] and sndiod [2] man pages for more information.
[1] https://man.openbsd.org/sndio.
[2] https://man.openbsd.org/sndiod

CED 7000 battery replacement

If you need to replace battery for CED 7000 timer [1] you can either buy a HLP 443450 3.7V 800mAh 2.96Wh accumulator [2] or dedicated inexpensive Power Bank [3] that contains two accumulators inside – one for quick replacement of the timer battery and the other to charge timer over the USB cable – this way you can also safely carry a backup and replacement power source at hand :-) One thing that could be improved here is using both accumulators in the Power Bank so capacity is doubled and both are always charged – that should also prevent self-discharge below safe point of the unused unit.





[1] https://www.cedhk.com/ced7000-shot-timer
[2] https://www.cedhk.com/ced7000-replacement-battery
[3] https://www.halinka-arms.pl/timery-i-akcesoria/1096-power-bank-do-timera-ced-7000.html

Make PDF small with GS

With this trick you can make your PDF smaller even 10x with no noticable picture quality loss :-)

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH  -dQUIET -dDownsampleColorImages=true -dColorImageResolution=200 -dColorImageDownsampleType=/Bicubic -sOutputFile=output.pdf input.pdf

Xilinx USB JTAG Platform Cable Vivado Linux

If you work with Xilnx Vivado Design Suite [1] for FPGA development using USB JTAG interface such as Xilinx USB Platform Cable [2] or its cheaper clone from WaveShare [3], everything seems to be connected properly, but it cannot find the Target for programming, you probably need to perform drivers setup manually [4]. Error message looks like this:

ERROR: [Labtoolstcl 44-494] There is no active target available for server at localhost.
Targets(s) ", jsn3" may be locked by another hw_server.

Error message may indicate that another instance of hw_server is running in the background but that is not the case. Check your drivers first [4]. Some hints:

  • Run as root and be careful as this will modify your OS.
  • Install script location is Vivado/2020.2/data/xicom/cable_drivers/lin64/install_script/install_drivers.
  • Platform Cable USB interface is pcusb.
  • Make sure UDEV rules are installed in /etc/udev/rules.d/ (i.e. 52-xilinx-pcusb.rules file).
  • After drivers are set up remember to restart UDEV with service udev restart command and re-attach your USB JTAG cable.

[1] https://www.xilinx.com/products/design-tools/vivado.html
[2] https://www.xilinx.com/products/boards-and-kits/hw-usb-ii-g.html
[3] https://www.waveshare.com/platform-cable-usb.htm
[4] https://www.xilinx.com/support/answers/54381.html

DSO QUAD MINI SCOPE ACCU REPLACEMENT

If you are happy user of DSO QUAD pocket oscilloscope from Seeed Studio [1] then probably after all those years you need to replace the accumulator. Because stock model PL384070 3.7V 1000mAh is not available anymore you can safely use CL404070 3.7V 1300mAh that is only 0.2mm thicker but it also fits the scope very well and you gain 30% capacity. You only have to solder the plug from the old accumulator. Enjoy :-)







[1] https://www.seeedstudio.com/DSO-Quad-Aluminium-Alloy-Black-p-1034.html

Why Linux Sux?

Imagine you have a disk full of your precious data that you want to mount to a new Ubuntu Linux system and add user to match the existing home directory.

# adduser user
Adding user `user' ...
Adding new group `user' (1000) ...
Adding new user `user' (1000) with group `user' ...
Creating home directory `/home/user' ...
Stopped: Couldn't create home directory `/home/user': File exists.

Removing directory `/home/user' ...
Removing user `user' ...
Removing group `user' ...
groupdel: group 'user' does not exist
adduser: `groupdel user' returned error code 6. Exiting.

Now you can say your all precious data goodbye. No questions asked. Core Linux utility adduser just found your existing data and erased them without even asking. The years is 2021 (30 years since Linux was created).

This is why for over 15 years I am only working with BSD Operating Systems [1] [2] [3] [4]. Its Open-Source with long-term maintenance and self-compatibility in mind.  BSD license is even more liberal than GPL for your products [5]. You should try BSD too :-)

[1] https://www.freebsd.org/
[2] https://www.openbsd.org/
[3] https://netbsd.org/
[4] https://www.dragonflybsd.org/
[5] https://en.wikipedia.org/wiki/List_of_products_based_on_FreeBSD

Synaptics TouchPad on Panasonic CF-MX4

This wulf7 [1] is a really nice guy that helped me run full featured Synaptics TouchPad with FreeBSD on Panasonic Toughbook CF-MX4 [2][3]. Now it works for moused and libinput with all multitouch gestures like two or three finger scroll, scale, etc! The problem was in detection mechanism as device is connected over multiplexer with both PS/2 and SMBus but multitouch works only over SMBus. Although fix requires change and rebuild of FreeBSD Kernel I hope it gets quickly to the upstream [4]. I had a chance to exercise building whole FreeBSD distribution into the USB memstick image, so I could test driver fix on a target computer without even touching its hard drive contents :-)

/* psm has a special support for GenMouse + SynTouchpad combination */
if (active_ports_count >= 2) {
    for (port = 0; port < KBDC_AUX_MUX_NUM_PORTS; port++) {

That 2 above had to be changed into 1 in /usr/src/sys/dev/atkbdc/psm.c. Nice? That’s what I call a one-bit-fix :-)

In addition, when you work with Synaptics Touchpad in Xorg and you want to use its all features like tap-to-click, natural (swapped) two finger scroll, two and three finger gestures, don’t use moused,xmodmap, or xinput as this will produce inconsistent behavior in applications based on different toolkits (i.e. GTK will scroll up while Qt will scroll down etc), instead use the new way of input based on libinput and modify MatchIsTouchpad section of /usr/local/share/X11/xorg.conf.d/40-libinput.conf like:

Section "InputClass"
        Identifier "libinput touchpad catchall"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event5"
        Option "NaturalScrolling" "on"
        Option "Tapping" "on"
        Option "ClickMethod" "clickfinger"
        Driver "libinput"
EndSection

[1] https://github.com/wulf7/iichid
[2] https://github.com/wulf7/iichid/issues/51
[3] https://github.com/wulf7/iichid/issues/53
[4] https://reviews.freebsd.org/D28502

Disable Comments in WordPress

You can disable comments for existing posts using Bulk Edit, but this is not possible for existing media files. You can do both with a single SQL command :

UPDATE wp_your_table_with_posts SET comment_status = 'closed';

You can disable comments for all new posts either by hand as administrator unchecking Settings / Discussion / Allow people to submit comments on new posts, or using SQL command:

UPDATE wp_your_table_with_options SET option_value = NULL WHERE option_name = 'default_comment_status';

LimeSuite on FreeBSD

I have ported LimeSuite [1] to FreeBSD [2]. You can now work with LimeSDR [3] / LimeSDR-Mini [4] and others on my favourite OS. Please visit MyriadRF [5] for various radio inspirations. Have fun! :-)

[1] https://github.com/myriadrf/LimeSuite
[2] https://www.freebsd.org/
[3] https://limemicro.com/products/boards/limesdr/
[4] https://limemicro.com/products/boards/limesdr-mini/
[5] https://myriadrf.org/

Panasonic Toughbook WWAN modem unlock

If you have Panasonic Toughbook laptop with no LTE/4G cellular modem and after you attach internal modem but it is still not visible in BIOS Setup nor in the Operating System, go to the Main / Optional Kit Configuration, use toughkit password, then set Wireless WAN ID = 15 (in case you use original Sierra Wireless EC7305 device). WWAN card should be now available both in BIOS Setup and Operating System USB port. Enjoy! :-)

Mounting external ZFS volume

If you need to perform a data recovery from an external ZFS [zfs] volume you may find those hinds helpful:

  1. Attach encrypted partition where ZFS pool resides with:
    geli attach /dev/your_device_partition
  2. Import ZFS pool at given mountpoint (/mnt/zfs):
    zpool import -af -R /mnt/zfs
  3. Modify mount point location for a given dataset that may have mountpoint set to none what marks it as no mount (note this mountpoint will append to parent mount point location):
    zfs set mountpoint=ROOT zroot/ROOT/default
  4. Mount and mount all pool datasets:
    zfs mount -a
    zfs umount -a
  5. Mount/umount given dataset:
    zfs mount zroot/ROOT/default
  6. You can verify if your ZFS pool is active with:
    zpool status
  7. You can see what ZFS datasets are available with mount points with:
    zfs list

[zfs] https://www.freebsd.org/doc/handbook/zfs.html

macOS Virtual Audio SoundFlower Loopback

SoundFlower [1] is amazing Free and Open-Source extension to macOS BSD that allows you to create Virtual Audio Device in order to Route and Record Applications Audio. This is especially important for activities like Online Streaming and Presentation/Lectures Recording.

If you need more advanced Audio Routing with a nice GUI and lots of options try Loopback [2] from RogueAmoeba [3].

Thank you for this amazing fork and keeping it Open-Source! :-)

[1] https://github.com/mattingalls/Soundflower
[2] https://rogueamoeba.com
[3] https://rogueamoeba.com/loopback

Blender Player Python

If you encounter a problem with running Python [python] scripts on a “bare” Blender Player [blender], make sure that both PYTHONHOME and PYTHONPATH are set correctly to match your needs. You can also use native Blender python with a simple shell script:

#!/bin/sh
export PYTHONHOME="/path/to/blender/python/"
export PYTHONPATH=$PYTHONHOME"/bin"
/path/to/your/blenderplayer $@

[python] https://www.python.org/
[blender] https://www.blender.org/

Migrating from MS Office365 to Googe Suite

If you want to move a business from Microsoft Office365 to Google Suite, there is a nice migration utility in Google Suite Admin Console that helps you transfer all accounts data from Exchange Web Server or IMAP.

In case you encounter an error here goes a list of error codes and troubleshooting guide [1].

I did a full migration by granting my temporary user Global Administrator right by current Admin user, then in Exchange Admin Console I had to grant myself an ApplicationImpersonation Admin Role (to access other accounts for migration). After the migration was complete I have rolled back my permissions to a minimum level.

[1] https://support.google.com/a/answer/6254288

binary file hexdump

Sometimes you need to quickly create a hexeditor like dump of a binary file. HEXDUMP is your friend. It may be a standard Unix application or Python module.

Unix hexdump use example:

hexdump -Cv file.bin
00000000  12 01 00 02 ef 02 01 40  28 0d 04 02 00 10 01 02  |.......@(.......|
00000010  03 01 12 01 00 02 ef 02  01 40 28 0d 04 02 00 10  |.........@(.....|
00000020  01 02 03 01 09 02 82 00  04 01 00 80 fa 09 02 82  |................|
00000030  00 04 01 00 80 fa 09 04  00 00 02 08 06 50 07 07  |.............P..|
00000040  05 82 02 40 00 00 07 05  02 02 40 00 00 09 04 03  |...@......@.....|
00000050  00 02 03 00 00 06 09 21  00 01 00 01 22 21 00 07  |.......!...."!..|
00000060  05 81 03 40 00 01 07 05  01 03 40 00 01 08 0b 01  |...@......@.....|
00000070  02 02 02 01 04 09 04 01  00 01 02 02 01 04 05 24  |...............$|
00000080  00 10 01 05 24 01 03 02  04 24 02 06 05 24 06 01  |....$....$...$..|
00000090  02 07 05 83 03 10 00 20  09 04 02 00 02 0a 00 00  |....... ........|
(...)

Python hexdump use example:

python -m pip install hexdump
python -m hexdump file.bin
00000000: 12 01 00 02 EF 02 01 40  28 0D 04 02 00 10 01 02  .......@(.......
00000010: 03 01 12 01 00 02 EF 02  01 40 28 0D 04 02 00 10  .........@(.....
00000020: 01 02 03 01 09 02 82 00  04 01 00 80 FA 09 02 82  ................
00000030: 00 04 01 00 80 FA 09 04  00 00 02 08 06 50 07 07  .............P..
00000040: 05 82 02 40 00 00 07 05  02 02 40 00 00 09 04 03  ...@......@.....
00000050: 00 02 03 00 00 06 09 21  00 01 00 01 22 21 00 07  .......!...."!..
00000060: 05 81 03 40 00 01 07 05  01 03 40 00 01 08 0B 01  ...@......@.....
00000070: 02 02 02 01 04 09 04 01  00 01 02 02 01 04 05 24  ...............$
00000080: 00 10 01 05 24 01 03 02  04 24 02 06 05 24 06 01  ....$....$...$..
00000090: 02 07 05 83 03 10 00 20  09 04 02 00 02 0A 00 00  ....... ........
(...)

Apple macOS 10.13 High Sierra Fail

Guys at Apple are either stoned or really working hard to make macOS as bad as Windows. macOS High Sierra (10.13) was probably designed by people that were really “high”. They removed TELNET utility that is second most valuable network testing utility after PING. Except for noticeable performance degradation glitches during video modeswitch and other failures macOS really gets close to Windows in its poor design decisions and obvious quality degradation for professional applications.. now I will hardly consider buying another overpriced MacMookPro..

Added GOBI2000 support to FreeBSD U3G

I have added support for Panasonic ToughBook CF-F9 U3G GOBI2000 to FreeBSD U3G kernel module [1]. I have added firmware for Panasonic CF-F9 and HP EliteBook 2740p along with gobi_loader updates [2] that are required for 3G modems to work.

At first U3G module will create /dev/cuaU0 interface for QDL firmware load, then after successful firmware load device will reload itself to a modem mode and U3G module will provide additional /dev/cuaU0.* nodes for operations (/dev/cuaU0.2 is the AT command intarface).

In order for this modem to work on FreeBSD you also need to tune some configutation files:

  • /etc/devd.conf:
    attach 100 {
     match "vendor" "0x04da";  #adjust your device VID
     match "product" "0x250e"; #adjust your device PID
     action "/usr/local/sbin/gobi_loader -2000 /dev/cuaU0 /boot/firmware/gobi/";
    };
    
  • /etc/ppp/ppp.conf:
    default:
     set log Phase Chat LCP IPCP CCP tun command
     ident user-ppp VERSION
     set device /dev/cuaU0.2
     set phone *99\#
     set redial 5 10
     set speed 115200
     set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
               \"\" AT AT-OK-AT ATH OK ATZ OK ATE1Q0 OK \
               AT+CFUN=1 OK-AT-OK \
               AT+CPIN? READY-AT+CPIN=\"YOUR_PIN_HERE\"-OK \
               AT+CGDCONT=1,\\\"ip\\\",\\\"internet\\\" OK \
               \\dATDT\\T TIMEOUT 40 CONNECT"
     set timeout 20
     enable dns
     set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255 0.0.0.0
     add default HISADDR
    

You now should be able to use your 3G modem connection with ppp -ddial, after you add your local user to the dialer group with pw groupmod dialer -m your_user_name. Remember to have U3G compiled in. Enjoy the Internets! :-)

[1] https://github.com/freebsd/freebsd/pull/115
[2] https://github.com/cederom/gobi_loader

Python Matplotlib macOS backend

Matplotlib is a nice Matlab-like environment for Python. If you encounter a backend related problem while using Matplotlib [1] on a Python Virtualenv [2], then you need to explicitly select one (i.e. backend : Qt5Agg) in a ~/.config/matplotlib/matplotlibrc (or directly in a matplotlib file located in current working directory) configuration file. Then remember to use modern interpreter and meet dependencies requirements. Example below:

$ mkdir ~/.matplotlib
$ echo "backend : Qt5Agg" >> ~/.config/matplotlib/matplotlibrc
$ echo "backend : Qt5Agg" >> matplotlibrc
$ python3.6 -m venv venv-mac-36
$ source venv-mac-36/bin/activate
$ which python
$ pip install matplotlib pyqt5

Now you can use Matplotlib inside created Python Virtualenv (assuming you had Python 3.6 and Qt5 [3] already installed on your system). Other backends are: TKAgg, GTKAgg, Qt4Agg, Qt5Agg, WXAgg [4].

[1] https://matplotlib.org/
[2] https://www.python.org/
[3] https://www.qt.io/
[4] https://matplotlib.org/faq/usage_faq.html

Docker and Travis are Linux only solutions

If you wonder to use Docker [1] or Travis CI [2] for build test or more advanced automation, note that these are Linux [3] only solutions and will not work with other operating systems such as FreeBSD [4]. You may want to take a look at old good Jenkins [5] for wider application possibilities :-)

[1] https://www.docker.com/
[2] https://travis-ci.org/
[3] https://www.linux.com/
[4] https://www.freebsd.org/
[5] https://jenkins.io/

European Canopy Formation at SkyCamp PL 2017

I was great pleasure to take part in European Canopy Formation [1] at SkyCamp [2] Polska 2017! So many experienced and relaxed people, so much fun, and so much development (I was part of CRW-16-DIAMOND). Thank you!! Hope to see you soon folks! :-)

I am also happy to announce that I had become a website editor and administrator :-)

[1] http://europeancanopyformation.eu/
[2] http://www.skycamp.pl