GNU make, get relative PATH for i.e recursive builds with dependencies based on local git copies

In case you’re building yourself everything from source in your project, there is a good chance you once had a problem because you were using relative (like ../myressource) paths in your CFLAGS or LD_FLAGS definition and passed them down to the build system.

Short answer: when getting down in sub directories to i.e build your dependencies, the relative path can’t stay good. Only the absolute path can work.

One solution, if using GNU make, is to use something like this to compute the absolute path:

RES_RELATIVE_PATH=./path_to_my_ressource
RES_ABSOLUTE_PATH=$(realpath $(RES_RELATIVE_PATH))
CFLAGS+= -I$(RES_ABSOLUTE_PATH)

# Note: the naming is up to you. In my case, for something like cJSON, I'm using the following naming:

CJSON_RELPATH=./external/cJSON
CJSON_PATH=$(realpath $(CJSON_RELPATH))
CFLAGS+= -I$(CJSON_PATH)

You can also directly initialize with a shell call:

CJSON_CFLAGS=-I$(shell realpath "./external/cJSON")
CFLAGS+= $(CJSON_FLAGS)

#code #makefile #gnu #path #absolute #relative

Error 407 when using git and a proxy with authentification

Recently I stumbled upon that kind of error when trying to update a submodule:

git submodule update –remote –merge
fatal: unable to access ‘https://github.com/DaveGamble/cJSON.git/’: Received HTTP code 407 from proxy after CONNECT

Turns out that it was the proxy authentification not being sent correctly.
In our case we are using system defined proxy, so we do not need git’s ones

Solved by using:


git config –global http.proxyAuthMethod ‘basic’
git config –global –unset http.proxy
git config –global –unset https.proxy

Some also encountered SSL verification problems due to auto signed certificate use in their network, and had to disable SSL verification. It’ done with the following command, but we do not recommend to use it unless really needed:

git config –global http.sslVerify false

New portapack mayhem app, Level app !

Level app interface

The level app is as simple as possible and allow you to monitor available level meters in a single view.
There is a live graph of each RSSI values and power level.

Link to Documentation

Link to official Nightly build

or click to download compiled version at the time of the post (bin only)

#hackrf #portapack #mayhem #level-app

Edit: it’s the hundredth post of that blog, yay !

KAFKA

KAFKA is in all mouths these days. So I share here, also as a reminder for me, a couple of #KAFKA ressources that looked helpful to me.

TLDR:

Do not use KAFKA for:

-“Little” Data flows (overkill)

-Streaming ETL (handling transformation is a hassle)

-Store and process large files (images, videos, proprietary files, etc.)

https://www.kai-waehner.de/blog/2020/08/07/apache-kafka-handling-large-messages-and-files-for-image-video-audio-processing/

https://www.upsolver.com/blog/apache-kafka-use-cases-when-to-use-not

https://kafka.apache.org/intro

https://docs.confluent.io/kafka-clients/librdkafka/current/overview.html

https://docs.confluent.io/platform/current/clients/librdkafka/html/md_INTRODUCTION.html

Why gettimeofday() is bad at timing things

I was reading a changelog from a library I love (unrelated but here is the link: https://liballeg.org/ ) and I stumble upon that change:


“Use clock_gettime with CLOCK_MONOTONIC instead of gettimeofday (check-switch-26)”

Then I did a bit of research on the topic, and found a good explanation here:

https://blog.habets.se/2010/09/gettimeofday-should-never-be-used-to-measure-time.html

TLDR: if you use gettimeofday to time things then your program may be affected by time shift, because gettimeofday is not monotonic. if you do not care about the date and only about elapsed time, use clock_gettime.

HackRF Portapack Mayhem Firmware, Search/Freqman evolution branch

On top of the existing ‘search and stay X seconds after a match’ the SearchApp have been updated with a ‘search and stay’ mode: stay while matching, leave after X seconds of inactivity, reset counters on activity during the wait. mode,
To use it just specify a negative value in the ‘wait’ field using the rotary encoder.

As some have some problems getting the bin back from discord, here you are:

The documentation is on the wiki, here:

https://github.com/GullCode/portapack-mayhem/wiki/Search

Github page:

https://github.com/GullCode/portapack-mayhem

grep: retain colors when piping

By default grep -color is not producing color symbols if it detects that the output is not a terminal.

grep -color=auto is doing the same, that is not producing color symbols if it detects that the output is not a terminal.

The solution is to use “grep -color=always“ in the place that need it.

Do not put it in an alias of grep as it would break some code somewhere else. Color symbols are strings like “ESC[35m” and they will be inserted in the text.

Portapack firmware with Search App and updated Freqman files (based on latest next )

  • I’ve build an up to date firmware with the last updates from next and the last version from search app and freqman enhancements.
  • The Search app is in the ‘receive’ menu
  • The documentation is here : https://github.com/GullCode/portapack-mayhem/wiki/Search
  • -Freqman now do understand freq files with that format:
    f=468000000 f=468000000,d=Single Freq f=468000000,m=AM,d=Single Freq AM f=468000000,m=NFM,d=Single Freq NFM f=468000000,m=WFM,d=Single Freq WFM f=468000000,m=AM,b=DSB,d=Single Freq AM DSB f=468000000,m=AM,b=USB,d=Single Freq AM USB f=468000000,m=AM,b=LSB,d=Single Freq AM LSB a=87000000,b=110000000 a=87000000,b=110000000,m=AM,s=100KHz,d=AM radio search a=87000000,b=110000000,m=AM,b=DSB,s=250KHz,d=AM radio search LSB a=87000000,b=110000000,m=WFM,b=16k,s=50KHz,d=WFM radio search s=50KHz r=430150000,t=430550000 r=430150000,t=430550000,d=HAM radio r=430150000,t=430550000,m=AM,b=DSB,d=HAM radio
  • The freqman GUI have note been improved and may show partial results on new formatted lines
  • Description of the fields:
    f=freq for one frequency or a=start_frequency,b=end_frequency for a range
    m=modulation
    b=bandwidth
    s=step
    d=description
  • All fields except ‘f=freq’ or ‘a=freqA,b=freqB’ are mandatory. If nothing specified actual value is used.
  • As a reminder :
    -Most of the time if the Search app is not working as you expected it’s coming from a SDCARD problem.
    -You need a SDCARD for the Search app to save settings between runs and between settings menu / main gui, and you need a SEARCH folder at the root of it.
    -Don’t forget to check that by default the ‘input: load’ fields in ‘search app -> params -> more ‘ are all checked.
    -You HAVE to click save in ordre to save the settings.

GitLab: WARNING: gl-sast-report.json: no matching files

When enabling SAST in a gitlab project you can have that kind of error at the tests part:

The yaml provided is not containing the needed part:

artifacts:
   name: sast
   paths:
     - gl-sast-report.json
   reports:
     sast: gl-sast-report.json
   when: always

Source:

https://forum.gitlab.com/t/uploading-artifacts-warning-gl-sast-report-json-no-matching-files-error-no-files-to-upload/60887/5

https://gitlab.com/gitlab-org/gitlab/-/issues/345696#note_737150614

Compare two json in shell

I did it using the JQ command line tool from https://stedolan.github.io/jq/

Exemple: list all json files from current directory and print the difference with updated jsons from updated/ directory

for user in  `ls updated-users`
do
    # print file name
    echo $user
    # simple 
    diff <(jq -S . users/$user) <(jq -S . updated-users/$user)
    # or full on one side and the diff on the other side
    # diff -y --left-column <(jq -S . users/$user) <(jq -S . updated-users/$user)
    # or full on one side and the diff on the other side, colored
    # diff -y --left-column --color  <(jq -S . users/$user) <(jq -S . updated-users/$user)
done

#shell #diff #json #script

Khelda II [KrampusHack 2021] Game Jam

I made a Zelda II alike world with a big map on top view and some dungeons in side view. Permanent world, only the monsters are reset between dungeons / starts.

The limit was way overdue before I could do all I wanted so I’m linking both version here, the entry for the compo and the updated / finalised one.

Compo rules: https://tins.amarillion.org/krampu21/rules/

Tins log : https://tins.amarillion.org/krampu21/log/entrant/4277

git repo: https://framagit.org/GullRaDriel/krampushack2021-kheldaii

Click here for full pack with datas, sources and binaries

Screens:

Gameplay demo : 

Khelda II gameplay demo

=============================================

How to play:

  • You are Kwink. You have to save princess Khelda which is kept prisonner by an Ogre
  • You directly start on the main map. Move around and kill some simple monsters to gain a bit of XP/Life before trying yourself at the dungeons.
  • Each dungeons is guarded by a lot of mobs. Killing them is up to you. Leveling up before being traped in a dungeon is recommended
  • Find all the 3 key fragments before going onto the last dungeon. Deliver princess Khelda by defeating the last mob

Keys:

  • Esc: quit
  • Arrow keys: move, go up/down or jump/crouch
  • CTRL/LeftMouseButton: attack
  • F1 -> F4t: change weapon (Wood stick, sword, magic bow, magic wand)
  • Key PAD PLUS: shield potion
  • Key PAD ENTER: health potion

Items to be collected:

  • shield (passive, always equiped once found)
  • sword of Khelda
  • magic ice wand
  • infinite arrow bow
  • health potion
  • shield potion

Obtain: the kiss of the princess one the Ogre is dead !

Tips:

  • Leveling up a bit on easy monsters before trying yourself to a dungeon
  • Wandering around and use the map find the sword, the magic wand, the arrow, the shield
  • Loot a bit of potions before entering the last dungeon

==============================================

Options:

  • configurable log level, example: ./KheldaII.exe -V DEBUG
  • cheat: editable player_state.json after first execution

==============================================

How to build: need gcc on linux and gcc + msys / cygwin on windows

mkdir -p KheldaII
mkdir -p KheldaII/LIB
mkdir -p KheldaII/Src/
cd KheldaII/LIB
git clone https://framagit.org/GullRaDriel/nilorea-library.git .
cd ../Src/
git clone https://framagit.org/GullRaDriel/krampushack2021-kheldaii.git
cd https://framagit.org/GullRaDriel/krampushack2021-kheldaii.git
make