Minimalizm, czyli i3-wm + connman.

Od kilku lat używałem Plasma Desktop, ale mój sprzęt nie jest bardzo szybki i czas startu tego środowiska zaczął być uciążliwy. Nie byłem przekonany co do tzw. tiling window managerów, ale chyba powoli zmieniam zdanie. Zmiany środowiska zwykle powodują problemy, które rozsądnie byłoby szybko rozwiązać, u mnie problemem okazał się Network Manager, którego szczerze mówiąc nigdy nie lubiłem. Wszystkie te dodatkowe warstwy (polkity i inne wynalazki) czasem po prostu wchodzą w drogę, ale connman, jako alternatywa dla Network Managera sprawdził się doskonale i raczej na pewno zostanie u mnie na dłużej.

i3wm najbardziej trafnie określa powyższy zrzut ekranu. Ale po raz kolejny zdałem sobie sprawę, że tak na prawdę do pełni szczęścia potrzebny mi dobrze działający dostęp do sieci i programy typu dmenu i rofi jako wygodna alternatywa menu.

Szybkość i wygoda jest na tyle duża, że oba moje laptopy działają od dziś z i3-wm.

Reklamy

Jackd i PulseAudio.

Jackd + Chromium albo Firefox = problem. Tak się jakoś porobiło w Linuksie, że PulseAudio stało się standardem w obsłudze audio i chyba nie ma w tym nic złego. Mimo tego, że Firefox w Archlinuksie  skompilowany jest z obsługą jackd, to wyjście jackd w FF nie działa. Na szczęście nie jestem z obozu ultra-tradycjonalistów i udało mi się szybko i prosto pożenić jackd z Pulseaudio. Nie zadziała to jednak z jack2 i ogólnie moje doświadczenia z jack2 w ostatnich latach są raczej traumatyczne, więc nie będę tego tematu rozwijał ;).

Potrzebny będzie pakiet pulseaudio-jack zawierający module-jack-sink.so i module-jack-source.so​.  Do /etc/pulse/default.pa trzeba dodać te moduły:

load-module module-jack-sink
load-module module-jack-source

Każdorazowo po odpaleniu jackd pulseaudio musi zostać przeładowane: pulseaudio -k, a potem: pactl set-default-sink jack_out. Dzięki temu pulseaudio przekieruje audio systemowe na jackd, co pozwala jak w moim przypadku bębnić w realtime do kawałków na Youtube. Pozytywne jest to, że po ubiciu jackd, PulseAudio przywraca odtwarzanie na defaultowej karcie dźwiękowej „w locie”.

Przykre, że jackd nie jest traktowane jak należy, a użytkowników w niszy audio na Linuksie chyba nie ma wielu i od przynajmniej dekady nic się w temacie nie robi, żeby im ułatwić życie.

FreeRTOS tasks.

RTOS w Esp-idf to jest to, co tygryski lubią najbardziej, ale nikt mi nie powie, że Arduino-IDE nie jest fajne? Ani pół include-a i działa :).

//Isn't it cool? 

void setup() {

  Serial.begin(115200);
  delay(1000);

  xTaskCreate(
                taskOne,          /* Task function. */
                "TaskOne",        /* String with name of task. */
                2000 ,            /* Stack size in words. */
                NULL,             /* Parameter passed as input of the task */
                1,                /* Priority of the task. */
                NULL);            /* Task handle. */

  xTaskCreate(
                taskTwo,          /* Task function. */
                "TaskTwo",        /* String with name of task. */
                2000,             /* Stack size in words. */
                NULL,             /* Parameter passed as input of the task */
                1,                /* Priority of the task. */
                NULL);            /* Task handle. */
}

void loop() {
  delay(1000);
}

void taskOne( void * parameter )
{
    for( int i = 0;i<10;i++ ){

        Serial.println("Hello from task 1");
        delay(1000);
    }
    Serial.println("Ending task 1");
    vTaskDelete( NULL );
}

void taskTwo( void * parameter)
{
    for( int i = 0;i<10;i++ ) {
        Serial.println("Hello from task 2");
        delay(1000);
    }
    Serial.println("Ending task 2");
    vTaskDelete( NULL );
}

Swoją drogą fajny opis, świetna książka, a ten opis SMP i przeportowanych funkcji RTOS v9 poprostu trzeba przeczytać 😉

Kompletnie nie rozumiem, dlaczego ludzie na Arduino-IDE tak psy wieszają? Dla początkujących jest świetne, geek ugotuje w nim coś na szybko, a SDK nie zając :).

 

Esp8266ex.

Po raz kolejny odkrywam Amerykę jakieś 2 lata za późno ;). Esp8266ex zafascynował mnie swoją prostotą w połączeniu z Arduino-IDE, a dostosowanie przykładu serwera Wifi do swoich potrzeb to kilka minut (potrzebuje sterować przekaźnikiem tranzystorowym z komórki).

Wemos D1 mini Pro ma chyba wszystko czego mi trzeba, ale do kompletu potestuje jeszcze Wemos Lolin32 ;). Eksperymenty z układami Esp będę wrzucał tutaj.

Oswajanie asm.

Ostatnie moje pomysły skłoniły mnie do dalszego oswajania madsa 🙂

adres equ $80

      org $600
      print_line #napis1
      print_line #napis2
      print_line #napis3
      jmp *

print_line .proc (.word adres) .var
      ldy #0
@     phr
      lda (adres),y
      beq @+
      print_char
      plr
      iny
      jmp @-
@     plr
      rts
.endp

print_char .proc
      tax
      lda $0347 ;ICPTL/H from IOCB #0
      pha
      lda $0346
      pha
      txa
      rts
.endp

napis1 .by 'Atari',$9b,0
napis2 .by 'rulez',$9b,0
napis3 .by '!!!!!!!!!!',$9b,0

Spodobała mi się sztuczka z wypchaniem na stos wektora i rts, co  powoduje „powrót” pod adres ze stosu (zamiast jsr). Druga sztuczka, której zastosowania jeszcze przede mną do odkrycia, to magiczne gwiazdki:

      org $600
      ldy #0
      sty test
test  equ *+1
      lda #111
      sta 710
      jmp *

*+1 to bieżące położenie w pamięci + 1 bajt, czyli wartością spod etykiety można nadpisać operand. Takie programowanie generyczne sprzed trzech dekad :). No i jmp * sam sobie wykoncypowałem.

Neo430 czyli coś więcej niż mikrokontroler w FPGA.

Szukałem jakiegoś małego rdzenia mikrokontrolera w FPGA, który miałby wsparcie w gcc i znalazłem: projekt Neo430. Rewelacja! Jest to rozwinięcie MPS430 firmy Texas Instruments, które wykorzystuje narzędzia tego mikroprocesora. Co najważniejsze: dokumentacja jest świetna. Nawet taki lajkonik jak ja dał radę. Jedyna modyfikacja dla mojego chińskiego devboarda (Daxigua Logic^3 na Alterze Cyclone IV EP4CE6E22C8), to odwrócenie sygnału ledów gpio w neo430_test.vhd:

— constrain output signals —
gpio_o <= not gpio_out(7 downto 0);

Core zajmuje 19% LE (1181 elementów logicznych) FPGA, zostaje sporo na zabawę i mieści się bez problemu we flashu EPCS4 :).