LINUX.ORG.RU

Сообщения czan

 

Python. Подклассы

Задача «Игровой мир».

Дано:

Теперь нужно населить игровой мир различными существами. Ваш гейм-дизайнер придумал сложную разветвленную иерархию существ.

Во-первых, все существа делятся на земных, морских и воздушных. Среди земных существ выделяются тролли и эльфы, среди морских — русалки и сирены, среди воздушных — драконы и пегасы.

Создайте базовый класс Creature, а также его наследников:

  • EarthCreature (с подклассами Troll и Elf),

  • SeaCreature (с подклассами Mermaid и Siren),

  • AirCreature (с подклассами Dragon и Pegasus).

Никаких методов пока реализовывать не нужно, но каждый класс должен содержать атрибут health_points в соответствии с таблицей.

КлассЗначение атрибута health_points
Troll100
Elf80
Mermaid60
Siren75
Dragon120
Pegasus85

Пример работы программы:

x = Elf()
isinstance(x, EarthCreature)  ⇒ True
isinstance(x, Creature)       ⇒ True
x.health_points               ⇒ 80

Я наваял вот такое:

import abc

class Creature(abc.ABC):
    health_points: int

    @abc.abstractmethod
    def __init__(self):
        pass

class EarthCreature(Creature):
    pass

class Troll(EarthCreature):

    def __init__(self) -> None:
        self.health_points: int = 100

class Elf(EarthCreature):

    def __init__(self) -> None:
        self.health_points: int = 80

class SeaCreature(Creature):
    pass

class Mermaid(SeaCreature):

    def __init__(self) -> None:
        self.health_points: int = 60

class Siren(SeaCreature):

    def __init__(self) -> None:
        self.health_points: int = 75

class AirCreature(Creature):
    pass

class Dragon(AirCreature):

    def __init__(self) -> None:
        self.health_points: int = 120

class Pegasus(AirCreature):

    def __init__(self) -> None:
        self.health_points: int = 85

Но данный код проваливает автоматическую проверку. Вываливается

Ваш код не прошел один или несколько скрытых тестов. Ваш код должен пройти все тесты, чтобы получить какие-либо оценки. Попробуй еще раз.

Прошу знатоков ООП в Python подбросить мне какие-либо умные мысли.

 , ,

czan
()

Python. Аннотации типов

Прошу помощи с решением задачи.

Дано:

Вы решили создать компьютерную игру, в которую будет играть весь мир. Но, как известно, путь в тысячу верст начинается с первого шага.

Для начала вы решили написать класс, содержащий информацию об игроке. А поскольку игроков будет много, класс должен быть хорошо спроектирован. Для повышения качества кода вы решили снабдить класс аннотациями типов.

Итак, ваша задача написать класс Player, содержащий информацию об игроке, и снабдить его аннотациями типов. Класс должен иметь следующие атрибуты:

  • id — уникальный идентификатор игрока, целое число;

  • name — имя игрока, строка;

  • scores — набранные очки, целое число;

  • games — список игр, в которые сыграл данный игрок (укажите просто тип list без уточнения типа содержимого).

Конструктор принимает только id и name, а атрибуты scores и games инициализируются 0 и пустым списком.

У класса должен быть реализован метод add_result, принимающий два аргумента:

  • game_id — id игры;

  • scores — набранные очки.

Метод add_result должен сохранить id игры в списке games и прибавить набранные очки к общей сумме.

Метод get_mean должен вернуть средний балл по всем сыгранным играм (для этого нужно просто поделить количество набранных очков на количество сыгранных игр).

Все методы также должны быть снабжены аннотациями типов. Не забудьте про аннотацию типа возвращаемого значения (для методов, которые ничего не возвращают, это должен быть None). Аргумент self снабжать аннотацией типа не нужно (во-первых, его тип и так очевиден, во-вторых, это не так просто сделать — можете попробовать и убедиться сами).

Пример работы программы:

p = Player(1, 'Bilbo')
print(p.id)              ⇒ 1
print(p.name)            ⇒ Bilbo
print(p.scores)          ⇒ 0
print(p.games)           ⇒ []
 
p.add_result(15, 10) 
p.add_result(21, 5)  
print(p.scores)          ⇒ 15
print(p.games)           ⇒ [15, 21]
print(p.get_mean())      ⇒ 7.5

Моё решение:

#!/usr/bin/env python3

class Player:

    def __init__(self, id: int, name: str) -> None:
        self.id: int = id
        self.name: str = name
        self.scores: int = 0
        self.games: list = []

    def add_result(self, game_id: int, scores: int) -> None:
        self.scores: int = self.scores + scores
        self.games.append(game_id)

    def get_mean(self) -> float:
        return (self.scores / len(self.games))

p= Player(1, 'Bilbo')
print(p.id)
print(p.name)
print(p.scores)
print(p.games)

p.add_result(15, 10)
p.add_result(21, 5)
print(p.scores)
print(p.games)
print(p.get_mean())

Моё определение класса не проходит автоматическую проверку. Прошу подсказки где я прокалываюсь?

 , ,

czan
()

Работа с последовательным портом

Тут такая проблемка.

Есть плата Jetson Nano. Пишу прогу для работы с UART-ом. Надо отослать 5 мегабайт файла с бодрейтом в 1 000 000. Написал программку на C. Байты отсылает порциями по 33 байта. На той стороне принимает Xilinx. Xilinx принимает ориентируясь по задержкам в передаче: то есть, если есть пауза, то считается, что передача очередного пакета закончилась. И вот, при передаче очередных моих 33-х пакетов, иногда, происходит пауза в байт или два байта и на той стороне Xilinx решает, что передача окончилась.

Программку делал по вот этой статье.

Байты передаю через конструкцию

write(serial_port, msg, sizeof(msg));

Подскажите, пожалуйста, чего бы такого можно сделать, чтобы отсылать без этих задержек? Пробовал поэкспериментировать со всякими TCOFLUSH (man), но ничего путного не выходит.

 , , ,

czan
()

Developers! Developers! Developers!

Захотелось мне посмотреть полную речь Балмера «Developers! Developers! Developers!», но везде в интернетах лишь огрызки в четверть минуты. Не будет ли кто-нибудь настолько добр, что даст ссылку на полную версию?

 , ,

czan
()

The Dark Mod. Проблема c OpenGL

Операционная система NixOS. Установил The Dark Mod с помощью tdm_installer.linux64.zip. Пытаюсь запустить:

charlzk@nixos-test ~/G/tdm2> ./thedarkmod.x64 
TDM 2.11/64 #10264 (1435:10264) linux-x86_64 Jan 30 2023 02:02:43
/proc/cpuinfo CPU frequency: 4122.64 MHz
4123 MHz AMD CPU with SSE & SSE2 & SSE3 & SSSE3 & SSE41 & AVX
found interface lo - loopback
found interface enp4s0 - 192.168.1.48/255.255.255.0
Found AMD CPU, features: SSE SSE2 SSE3 SSSE3 SSE41 AVX
TDM using AVX for SIMD processing.
no 'darkmod' directory in exe path /home/charlzk/Games/tdm2, skipping
WARNING: using hardcoded default base path
Found 0 new missions and 0 packages.
------ Initializing File System ------
Current search path:
  [C] /home/charlzk/Games/tdm2/
  [C] /home/charlzk/Games/tdm2/tdm_textures_wood01.pk4 (382 files - 0x54c704d0)
  [C] /home/charlzk/Games/tdm2/tdm_textures_window01.pk4 (399 files - 0x50a48869)
  [C] /home/charlzk/Games/tdm2/tdm_textures_stone_sculpted01.pk4 (464 files - 0x3bd63c7c)
  [C] /home/charlzk/Games/tdm2/tdm_textures_stone_natural01.pk4 (141 files - 0x4d0836ff)
  [C] /home/charlzk/Games/tdm2/tdm_textures_stone_flat01.pk4 (302 files - 0x671a22d2)
  [C] /home/charlzk/Games/tdm2/tdm_textures_stone_cobblestones01.pk4 (271 files - 0xc46ab14f)
  [C] /home/charlzk/Games/tdm2/tdm_textures_stone_brick01.pk4 (527 files - 0x1d087cf8)
  [C] /home/charlzk/Games/tdm2/tdm_textures_sfx01.pk4 (69 files - 0x2c673886)
  [C] /home/charlzk/Games/tdm2/tdm_textures_roof01.pk4 (69 files - 0x24547b7)
  [C] /home/charlzk/Games/tdm2/tdm_textures_plaster01.pk4 (142 files - 0x9747529e)
  [C] /home/charlzk/Games/tdm2/tdm_textures_paint_paper01.pk4 (67 files - 0xa4a95a09)
  [C] /home/charlzk/Games/tdm2/tdm_textures_other01.pk4 (127 files - 0x36932451)
  [C] /home/charlzk/Games/tdm2/tdm_textures_nature01.pk4 (286 files - 0x19240606)
  [C] /home/charlzk/Games/tdm2/tdm_textures_metal01.pk4 (509 files - 0x441d098f)
  [C] /home/charlzk/Games/tdm2/tdm_textures_glass01.pk4 (51 files - 0x3f3721e)
  [C] /home/charlzk/Games/tdm2/tdm_textures_fabric01.pk4 (43 files - 0x649daf73)
  [C] /home/charlzk/Games/tdm2/tdm_textures_door01.pk4 (177 files - 0xb0130166)
  [C] /home/charlzk/Games/tdm2/tdm_textures_decals01.pk4 (474 files - 0xe2ff12c6)
  [C] /home/charlzk/Games/tdm2/tdm_textures_carpet01.pk4 (130 files - 0x79bc3d7c)
  [C] /home/charlzk/Games/tdm2/tdm_textures_base01.pk4 (435 files - 0xc07a324)
  [C] /home/charlzk/Games/tdm2/tdm_standalone.pk4 (4 files - 0xb3f36d20)
  [C] /home/charlzk/Games/tdm2/tdm_sound_vocals_decls01.pk4 (32 files - 0x53cda0aa)
  [C] /home/charlzk/Games/tdm2/tdm_sound_vocals07.pk4 (1111 files - 0xa13ec4c2)
  [C] /home/charlzk/Games/tdm2/tdm_sound_vocals06.pk4 (696 files - 0x44c85e78)
  [C] /home/charlzk/Games/tdm2/tdm_sound_vocals05.pk4 (119 files - 0x6cf23214)
  [C] /home/charlzk/Games/tdm2/tdm_sound_vocals04.pk4 (2869 files - 0xd7ec1256)
  [C] /home/charlzk/Games/tdm2/tdm_sound_vocals03.pk4 (743 files - 0xb3f2e0f1)
  [C] /home/charlzk/Games/tdm2/tdm_sound_vocals02.pk4 (1299 files - 0x5092940e)
  [C] /home/charlzk/Games/tdm2/tdm_sound_vocals01.pk4 (82 files - 0xf4d326b2)
  [C] /home/charlzk/Games/tdm2/tdm_sound_sfx02.pk4 (605 files - 0x31673482)
  [C] /home/charlzk/Games/tdm2/tdm_sound_sfx01.pk4 (987 files - 0x97451b7a)
  [C] /home/charlzk/Games/tdm2/tdm_sound_ambient_decls01.pk4 (8 files - 0x9404877c)
  [C] /home/charlzk/Games/tdm2/tdm_sound_ambient03.pk4 (24 files - 0xd28ca9ec)
  [C] /home/charlzk/Games/tdm2/tdm_sound_ambient02.pk4 (163 files - 0x84efad22)
  [C] /home/charlzk/Games/tdm2/tdm_sound_ambient01.pk4 (220 files - 0xee228c81)
  [C] /home/charlzk/Games/tdm2/tdm_prefabs01.pk4 (1017 files - 0x506baa0b)
  [C] /home/charlzk/Games/tdm2/tdm_player01.pk4 (127 files - 0xd983fc45)
  [C] /home/charlzk/Games/tdm2/tdm_models_decls01.pk4 (101 files - 0x146c787)
  [C] /home/charlzk/Games/tdm2/tdm_models02.pk4 (2241 files - 0x42cdbf62)
  [C] /home/charlzk/Games/tdm2/tdm_models01.pk4 (3326 files - 0x829270f2)
  [C] /home/charlzk/Games/tdm2/tdm_gui_credits01.pk4 (49 files - 0xbff51863)
  [C] /home/charlzk/Games/tdm2/tdm_gui01.pk4 (758 files - 0xcbf4fd2d)
  [C] /home/charlzk/Games/tdm2/tdm_fonts01.pk4 (696 files - 0x7c5027bf)
  [C] /home/charlzk/Games/tdm2/tdm_env01.pk4 (176 files - 0x8bd4045b)
  [C] /home/charlzk/Games/tdm2/tdm_defs01.pk4 (194 files - 0xe5f440dc)
  [C] /home/charlzk/Games/tdm2/tdm_base01.pk4 (223 files - 0x9704b43c)
  [C] /home/charlzk/Games/tdm2/tdm_ai_steambots01.pk4 (31 files - 0x26416485)
  [C] /home/charlzk/Games/tdm2/tdm_ai_monsters_spiders01.pk4 (80 files - 0x15c3ef89)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_undead01.pk4 (55 files - 0x25e463ad)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_townsfolk01.pk4 (104 files - 0xa6f7c573)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_pagans01.pk4 (10 files - 0x566fb35a)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_nobles01.pk4 (51 files - 0x5ca54cab)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_mages01.pk4 (8 files - 0x5e7a666b)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_heads01.pk4 (100 files - 0x45ec787e)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_guards01.pk4 (379 files - 0x9801be8d)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_females01.pk4 (172 files - 0xc7de4598)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_builders01.pk4 (91 files - 0x6dea9b57)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_beasts02.pk4 (229 files - 0x886c9a98)
  [C] /home/charlzk/Games/tdm2/tdm_ai_humanoid_beasts01.pk4 (23 files - 0xba9da54c)
  [C] /home/charlzk/Games/tdm2/tdm_ai_base01.pk4 (9 files - 0x1de319e8)
  [C] /home/charlzk/Games/tdm2/tdm_ai_animals01.pk4 (82 files - 0x6c0fda50)
File System Initialized.
--------------------------------------
Couldn't open journal files
/proc/cpuinfo CPU processors: 2
/proc/cpuinfo CPU logical cores: 4
----- Initializing Decls -----
------------------------------
I18N: SetLanguage: 'english'.
I18N: Found no character remapping for english.
I18N: 1321 strings read from strings/english.lang
I18N: 'strings/fm/english.lang' not found.
Couldn't exec editor.cfg - file does not exist.
execing default.cfg
Gamepad modifier button assigned to 6
Couldn't exec autoexec.cfg - file does not exist.
I18N: SetLanguage: 'english'.
I18N: Found no character remapping for english.
I18N: 1321 strings read from strings/english.lang
I18N: 'strings/fm/english.lang' not found.
----- Initializing OpenAL -----
Setup OpenAL device and context
OpenAL: device '' not found, using default
OpenAL: no device found, sound disabled
----- Initializing OpenGL -----
Initializing OpenGL display
Borderless fullscreen - using current video mode for monitor 0: 2464 x 900
Failed creating window
Retrying OpenGL initialization in safe mode
Initializing OpenGL display
Failed creating window
--------- Game Map Shutdown ----------
--------- Game Map Shutdown done -----
idRenderSystem::Shutdown()
I18NLocal: Shutdown.
------------ Game Shutdown -----------
Shutdown event system
...not started
--------------------------------------
Sys_Error: Unable to initialize OpenGL
About to exit with code 1

Что-то там с OpenGL-ем буксует. Подскажите, куда двигаться? Какие там библиотеки требует этот OpenGL? Что может не хватать?

 ,

czan
()

Imlib2. Как загрузить шрифт

Ковыряю Imlib2. Попытался применить функцию загрузки шрифта imlib_load_font. Долго не получалось загрузить шрифт. Оказалось, что перед функцией загрузки шрифта нужно выполнить функцию добавления пути к шрифтам imlib_add_path_to_font_path. Пример рабочей программы такой:

#include <Imlib2.h> // Для библиотеки Imlib2
#include <stdio.h> // Для printf
 
int main() {
  Imlib_Font font;
  imlib_add_path_to_font_path(".");
  font = imlib_load_font("yudit.ttf/18");
  if (font) {
    printf("Font is loaded.\n");
  } else {
    printf("Font is not loaded!\n");
  }
  return 0;
}

Здесь вызовом imlib_add_path_to_font_path("."); добавляем текущую директорию в пути со шрифтами.

Компилировать можно так: gcc main.c -Wall -Wextra -Werror -lImlib2.

Для NixOS может понадобиться загрузить деривативы xorg.libX11 и imlib2:

nix-shell -p xorg.libX11 imlib2

 

czan
()

TimeZone для Tcl в NixOS

Есть язык программирования Tcl. Есть у него такая конструкция:

eltclsh > set t [clock scan {2004-10-30 05:00:00} \
-format {%Y-%m-%d %H:%M:%S} \
-timezone :America/New_York]

По идее должна выдавать секунды с начала эпохи для указанной даты во времени Нью-Йорка. Установлен Tcl в NixOS. Версия:

eltclsh > nixos-version 
23.11pre497256.86a9533155e (Tapir)

И вот в нём эта штука не работает. Вот что выдаёт:

eltclsh > set t [clock scan {2004-10-30 05:00:00} \
-format {%Y-%m-%d %H:%M:%S} \
-timezone :America/New_York]
time zone ":America/New_York" not found

Здесь пишут:

The current set of places where tcl will try to find Olson files is:

   /usr/share/zoneinfo

   /user/share/lib/zoneinfo

   /user/lib/zoneinfo

   /user/local/etc/zoneinfo

   C:/Progra~1/cygwin/usr/local/etc/zoneinfo

У себя я нашёл только /etc/zoneinfo:

eltclsh > ls /etc/zoneinfo
Africa	    Canada   EST      GMT+0	 Iran	      MET      Poland	 Singapore  W-SU
America     CET      EST5EDT  GMT-0	 iso3166.tab  Mexico   Portugal  Turkey     zone1970.tab
Antarctica  Chile    Etc      GMT0	 Israel       MST      posix	 tzdata.zi  zone.tab
Arctic	    CST6CDT  Europe   Greenwich  Jamaica      MST7MDT  PRC	 UCT	    Zulu
Asia	    Cuba     Factory  Hongkong	 Japan	      Navajo   PST8PDT	 Universal
Atlantic    EET      GB       HST	 Kwajalein    NZ       right	 US
Australia   Egypt    GB-Eire  Iceland	 leapseconds  NZ-CHAT  ROC	 UTC
Brazil	    Eire     GMT      Indian	 Libya	      Pacific  ROK	 WET

Как бы это дело прикрутить к Tcl?

 , ,

czan
()

К кому обратиться за добавлением раскладки в setxkbmap?

Вот захотелось мне попечатать на карельском языке. Начал шерстить setxkbmap на тему карельской раскладки и не нашёл. Ладно. Навелосипедил свою раскладку. Ну, работает. А теперь думаю: а где завести issue какое-нибудь с просьбой добавки карельской раскладки? Кому написать?

Перемещено hobbit из general

 , ,

czan
()

Ищу фантастический рассказ про дикарей с ракетными катерами

Ищу рассказ или повесть про дикарей, которых научили воевать и технологически продвинули люди из будущего. В результате, когда британцы или испанцы на своих деревянных кораблях прибыли к этим дикарям, то у этих дикарей уже были огнестрельное автоматическое оружие, ракетные катера с двигателями внутреннего сгорания на основе спирта.

 

czan
()

Linux + Anki + якутский язык

Столкнулся с проблемой: якутский язык включаю через

setxkbmap -layout "us,ru(sah)" -option "grp:caps_toggle,grp_led:scroll,grp_led:caps,grp_led:num"

При этом, если нужно напечатать, к примеру, букву «ү», то надо нажимать сочетание клавиш [AltGr] + [e]. Всё бы ничего, только вот Anki это сочетание обрабатывает по-своему и выдаёт окно редактирования карточки. Пробовал забиндить [AltGr] на правый [Ctrl], но это не помогло. Anki всё так же открывает окно редактирования карточки. Рылся в аддонах к Anki на тему отключения сочетания клавиш, но ничего путного не нашёл. В итоге пришёл к мысли, что нужно сделать раскладку для якутского языка а-ля Windows. В Windows все дополнительные буквы вынесены на цифры основной клавиатуры. Результатом моих исследований стал файл us_ru_sah.map с таким содержанием:

keycode   8 =
keycode   9 = Escape NoSymbol Escape
keycode  10 = 1 exclam 1 exclam
keycode  11 = 2 at 2 quotedbl
keycode  12 = 3 numbersign 3 numerosign
keycode  13 = 4 dollar 4 semicolon
keycode  14 = 5 percent U0495 U0494
keycode  15 = 6 asciicircum Cyrillic_u_straight Cyrillic_U_straight
keycode  16 = 7 ampersand Cyrillic_shha Cyrillic_SHHA
keycode  17 = 8 asterisk Cyrillic_o_bar Cyrillic_O_bar
keycode  18 = 9 parenleft U04A5 U04A4
keycode  19 = 0 parenright U048B U048A
keycode  20 = minus underscore minus underscore
keycode  21 = equal plus equal plus
keycode  22 = BackSpace BackSpace BackSpace BackSpace
keycode  23 = Tab ISO_Left_Tab Tab ISO_Left_Tab
keycode  24 = q Q Cyrillic_shorti Cyrillic_SHORTI U048B U048A
keycode  25 = w W Cyrillic_tse Cyrillic_TSE
keycode  26 = e E Cyrillic_u Cyrillic_U Cyrillic_u_straight Cyrillic_U_straight
keycode  27 = r R Cyrillic_ka Cyrillic_KA U04C4 U04C3
keycode  28 = t T Cyrillic_ie Cyrillic_IE
keycode  29 = y Y Cyrillic_en Cyrillic_EN U04A5 U04A4
keycode  30 = u U Cyrillic_ghe Cyrillic_GHE U0495 U0494
keycode  31 = i I Cyrillic_sha Cyrillic_SHA
keycode  32 = o O Cyrillic_shcha Cyrillic_SHCHA
keycode  33 = p P Cyrillic_ze Cyrillic_ZE U04E1 U04E0
keycode  34 = bracketleft braceleft Cyrillic_ha Cyrillic_HA Cyrillic_shha Cyrillic_SHHA
keycode  35 = bracketright braceright Cyrillic_hardsign Cyrillic_HARDSIGN
keycode  36 = Return NoSymbol Return
keycode  37 = Control_L NoSymbol Control_L
keycode  38 = a A Cyrillic_ef Cyrillic_EF
keycode  39 = s S Cyrillic_yeru Cyrillic_YERU
keycode  40 = d D Cyrillic_ve Cyrillic_VE
keycode  41 = f F Cyrillic_a Cyrillic_A
keycode  42 = g G Cyrillic_pe Cyrillic_PE
keycode  43 = h H Cyrillic_er Cyrillic_ER
keycode  44 = j J Cyrillic_o Cyrillic_O Cyrillic_o_bar Cyrillic_O_bar
keycode  45 = k K Cyrillic_el Cyrillic_EL
keycode  46 = l L Cyrillic_de Cyrillic_DE
keycode  47 = semicolon colon Cyrillic_zhe Cyrillic_ZHE U0461 U0460
keycode  48 = apostrophe quotedbl Cyrillic_e Cyrillic_E
keycode  49 = grave asciitilde Cyrillic_io Cyrillic_IO U04EB U04EA
keycode  50 = Shift_L NoSymbol Shift_L
keycode  51 = backslash bar backslash slash
keycode  52 = z Z Cyrillic_ya Cyrillic_YA
keycode  53 = x X Cyrillic_che Cyrillic_CHE Cyrillic_u_macron Cyrillic_U_macron
keycode  54 = c C Cyrillic_es Cyrillic_ES
keycode  55 = v V Cyrillic_em Cyrillic_EM U04C8 U04C7
keycode  56 = b B Cyrillic_i Cyrillic_I Cyrillic_i_macron Cyrillic_I_macron
keycode  57 = n N Cyrillic_te Cyrillic_TE
keycode  58 = m M Cyrillic_softsign Cyrillic_SOFTSIGN
keycode  59 = comma less Cyrillic_be Cyrillic_BE
keycode  60 = period greater Cyrillic_yu Cyrillic_YU
keycode  61 = slash question period comma
keycode  62 = Shift_R NoSymbol Shift_R
keycode  63 = KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply XF86ClearGrab KP_Multiply KP_Multiply XF86ClearGrab
keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode  65 = space NoSymbol space
keycode  66 = ISO_Next_Group Caps_Lock ISO_Next_Group Caps_Lock
keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1 F1 F1 XF86Switch_VT_1
keycode  68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2 F2 F2 XF86Switch_VT_2
keycode  69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3 F3 F3 XF86Switch_VT_3
keycode  70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4 F4 F4 XF86Switch_VT_4
keycode  71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5 F5 F5 XF86Switch_VT_5
keycode  72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6 F6 F6 XF86Switch_VT_6
keycode  73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7 F7 F7 XF86Switch_VT_7
keycode  74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8 F8 F8 XF86Switch_VT_8
keycode  75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9 F9 F9 XF86Switch_VT_9
keycode  76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10 F10 F10 XF86Switch_VT_10
keycode  77 = Num_Lock NoSymbol Num_Lock
keycode  78 = Scroll_Lock NoSymbol Scroll_Lock
keycode  79 = KP_Home KP_7 KP_Home KP_7
keycode  80 = KP_Up KP_8 KP_Up KP_8
keycode  81 = KP_Prior KP_9 KP_Prior KP_9
keycode  82 = KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract XF86Prev_VMode KP_Subtract KP_Subtract XF86Prev_VMode
keycode  83 = KP_Left KP_4 KP_Left KP_4
keycode  84 = KP_Begin KP_5 KP_Begin KP_5
keycode  85 = KP_Right KP_6 KP_Right KP_6
keycode  86 = KP_Add KP_Add KP_Add KP_Add KP_Add KP_Add XF86Next_VMode KP_Add KP_Add XF86Next_VMode
keycode  87 = KP_End KP_1 KP_End KP_1
keycode  88 = KP_Down KP_2 KP_Down KP_2
keycode  89 = KP_Next KP_3 KP_Next KP_3
keycode  90 = KP_Insert KP_0 KP_Insert KP_0
keycode  91 = KP_Delete KP_Decimal KP_Delete KP_Separator
keycode  92 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift
keycode  93 =
keycode  94 = less greater slash bar bar brokenbar
keycode  95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11 F11 F11 XF86Switch_VT_11
keycode  96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12 F12 F12 XF86Switch_VT_12
keycode  97 =
keycode  98 = Katakana NoSymbol Katakana
keycode  99 = Hiragana NoSymbol Hiragana
keycode 100 = Henkan_Mode NoSymbol Henkan_Mode
keycode 101 = Hiragana_Katakana NoSymbol Hiragana_Katakana
keycode 102 = Muhenkan NoSymbol Muhenkan
keycode 103 =
keycode 104 = KP_Enter NoSymbol KP_Enter
keycode 105 = Control_R NoSymbol Control_R
keycode 106 = KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide XF86Ungrab KP_Divide KP_Divide XF86Ungrab
keycode 107 = Print Sys_Req Print Sys_Req
keycode 108 = Alt_R Meta_R ISO_Level3_Shift
keycode 109 = Linefeed NoSymbol Linefeed
keycode 110 = Home NoSymbol Home
keycode 111 = Up NoSymbol Up
keycode 112 = Prior NoSymbol Prior
keycode 113 = Left NoSymbol Left
keycode 114 = Right NoSymbol Right
keycode 115 = End NoSymbol End
keycode 116 = Down NoSymbol Down
keycode 117 = Next NoSymbol Next
keycode 118 = Insert NoSymbol Insert
keycode 119 = Delete NoSymbol Delete
keycode 120 =
keycode 121 = XF86AudioMute NoSymbol XF86AudioMute
keycode 122 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 124 = XF86PowerOff NoSymbol XF86PowerOff
keycode 125 = KP_Equal NoSymbol KP_Equal
keycode 126 = plusminus NoSymbol plusminus
keycode 127 = Pause Break Pause Break
keycode 128 = XF86LaunchA NoSymbol XF86LaunchA
keycode 129 = KP_Decimal KP_Decimal KP_Decimal KP_Decimal
keycode 130 = Hangul NoSymbol Hangul
keycode 131 = Hangul_Hanja NoSymbol Hangul_Hanja
keycode 132 =
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R
keycode 135 = Menu NoSymbol Menu
keycode 136 = Cancel NoSymbol Cancel
keycode 137 = Redo NoSymbol Redo
keycode 138 = SunProps NoSymbol SunProps
keycode 139 = Undo NoSymbol Undo
keycode 140 = SunFront NoSymbol SunFront
keycode 141 = XF86Copy NoSymbol XF86Copy
keycode 142 = XF86Open NoSymbol XF86Open
keycode 143 = XF86Paste NoSymbol XF86Paste
keycode 144 = Find NoSymbol Find
keycode 145 = XF86Cut NoSymbol XF86Cut
keycode 146 = Help NoSymbol Help
keycode 147 = XF86MenuKB NoSymbol XF86MenuKB
keycode 148 = XF86Calculator NoSymbol XF86Calculator
keycode 149 =
keycode 150 = XF86Sleep NoSymbol XF86Sleep
keycode 151 = XF86WakeUp NoSymbol XF86WakeUp
keycode 152 = XF86Explorer NoSymbol XF86Explorer
keycode 153 = XF86Send NoSymbol XF86Send
keycode 154 =
keycode 155 = XF86Xfer NoSymbol XF86Xfer
keycode 156 = XF86Launch1 NoSymbol XF86Launch1
keycode 157 = XF86Launch2 NoSymbol XF86Launch2
keycode 158 = XF86WWW NoSymbol XF86WWW
keycode 159 = XF86DOS NoSymbol XF86DOS
keycode 160 = XF86ScreenSaver NoSymbol XF86ScreenSaver
keycode 161 = XF86RotateWindows NoSymbol XF86RotateWindows
keycode 162 = XF86TaskPane NoSymbol XF86TaskPane
keycode 163 = XF86Mail NoSymbol XF86Mail
keycode 164 = XF86Favorites NoSymbol XF86Favorites
keycode 165 = XF86MyComputer NoSymbol XF86MyComputer
keycode 166 = XF86Back NoSymbol XF86Back
keycode 167 = XF86Forward NoSymbol XF86Forward
keycode 168 =
keycode 169 = XF86Eject NoSymbol XF86Eject
keycode 170 = XF86Eject XF86Eject XF86Eject XF86Eject
keycode 171 = XF86AudioNext NoSymbol XF86AudioNext
keycode 172 = XF86AudioPlay XF86AudioPause XF86AudioPlay XF86AudioPause
keycode 173 = XF86AudioPrev NoSymbol XF86AudioPrev
keycode 174 = XF86AudioStop XF86Eject XF86AudioStop XF86Eject
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
keycode 176 = XF86AudioRewind NoSymbol XF86AudioRewind
keycode 177 = XF86Phone NoSymbol XF86Phone
keycode 178 =
keycode 179 = XF86Tools NoSymbol XF86Tools
keycode 180 = XF86HomePage NoSymbol XF86HomePage
keycode 181 = XF86Reload NoSymbol XF86Reload
keycode 182 = XF86Close NoSymbol XF86Close
keycode 183 =
keycode 184 =
keycode 185 = XF86ScrollUp NoSymbol XF86ScrollUp
keycode 186 = XF86ScrollDown NoSymbol XF86ScrollDown
keycode 187 = parenleft NoSymbol parenleft
keycode 188 = parenright NoSymbol parenright
keycode 189 = XF86New NoSymbol XF86New
keycode 190 = Redo NoSymbol Redo
keycode 191 = XF86Tools NoSymbol XF86Tools
keycode 192 = XF86Launch5 NoSymbol XF86Launch5
keycode 193 = XF86Launch6 NoSymbol XF86Launch6
keycode 194 = XF86Launch7 NoSymbol XF86Launch7
keycode 195 = XF86Launch8 NoSymbol XF86Launch8
keycode 196 = XF86Launch9 NoSymbol XF86Launch9
keycode 197 =
keycode 198 = XF86AudioMicMute NoSymbol XF86AudioMicMute
keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle
keycode 200 = XF86TouchpadOn NoSymbol XF86TouchpadOn
keycode 201 = XF86TouchpadOff NoSymbol XF86TouchpadOff
keycode 202 =
keycode 203 = Mode_switch NoSymbol Mode_switch
keycode 204 = NoSymbol Alt_L NoSymbol Alt_L
keycode 205 = NoSymbol Meta_L NoSymbol Meta_L
keycode 206 = NoSymbol Super_L NoSymbol Super_L
keycode 207 = NoSymbol Hyper_L NoSymbol Hyper_L
keycode 208 = XF86AudioPlay NoSymbol XF86AudioPlay
keycode 209 = XF86AudioPause NoSymbol XF86AudioPause
keycode 210 = XF86Launch3 NoSymbol XF86Launch3
keycode 211 = XF86Launch4 NoSymbol XF86Launch4
keycode 212 = XF86LaunchB NoSymbol XF86LaunchB
keycode 213 = XF86Suspend NoSymbol XF86Suspend
keycode 214 = XF86Close NoSymbol XF86Close
keycode 215 = XF86AudioPlay NoSymbol XF86AudioPlay
keycode 216 = XF86AudioForward NoSymbol XF86AudioForward
keycode 217 =
keycode 218 = Print NoSymbol Print
keycode 219 =
keycode 220 = XF86WebCam NoSymbol XF86WebCam
keycode 221 = XF86AudioPreset NoSymbol XF86AudioPreset
keycode 222 =
keycode 223 = XF86Mail NoSymbol XF86Mail
keycode 224 = XF86Messenger NoSymbol XF86Messenger
keycode 225 = XF86Search NoSymbol XF86Search
keycode 226 = XF86Go NoSymbol XF86Go
keycode 227 = XF86Finance NoSymbol XF86Finance
keycode 228 = XF86Game NoSymbol XF86Game
keycode 229 = XF86Shop NoSymbol XF86Shop
keycode 230 =
keycode 231 = Cancel NoSymbol Cancel
keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown
keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp
keycode 234 = XF86AudioMedia NoSymbol XF86AudioMedia
keycode 235 = XF86Display NoSymbol XF86Display
keycode 236 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff
keycode 237 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
keycode 238 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp
keycode 239 = XF86Send NoSymbol XF86Send
keycode 240 = XF86Reply NoSymbol XF86Reply
keycode 241 = XF86MailForward NoSymbol XF86MailForward
keycode 242 = XF86Save NoSymbol XF86Save
keycode 243 = XF86Documents NoSymbol XF86Documents
keycode 244 = XF86Battery NoSymbol XF86Battery
keycode 245 = XF86Bluetooth NoSymbol XF86Bluetooth
keycode 246 = XF86WLAN NoSymbol XF86WLAN
keycode 247 =
keycode 248 =
keycode 249 =
keycode 250 =
keycode 251 = XF86MonBrightnessCycle NoSymbol XF86MonBrightnessCycle
keycode 252 =
keycode 253 =
keycode 254 = XF86WWAN NoSymbol XF86WWAN
keycode 255 = XF86RFKill NoSymbol XF86RFKill

Теперь буквы «ҕ», «ү», «һ», «ө», «ҥ» и «ҋ» привязаны к клавишам [5], [6], [7], [8], [9], [0] соответственно. Для подгрузки такой раскладки нужно сделать следующее: включить якутскую раскладку через команду setxkbmap, после этого подключить модифицированную раскладку с помощью команды xmodmap us_ru_sah.map. В этом случае с Anki можно комфортно работать.

 , , , ,

czan
()

Настройка графики в NixOS

Захотелось мне странного, и я решил потыкать NixOS. Скачал минимальный образ, осуществил установку. Теперь решил настроить GUI. Сделал конфиг по вики:

{ config, pkgs, ... }:

{
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
    ];

  boot.loader.grub.enable = true;
  boot.loader.grub.version = 2;
  boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only

  # Enable the X11 windowing system.
  services.xserver.enable = true;
  services.xserver.desktopManager.mate.enable = true;
  services.xserver.displayManager.sddm.enable = true;
  
  system.stateVersion = "22.11"; # Did you read the comment?

}

Выполнил sudo nixos-rebuild test и sudo nixos-rebuild switch. Всё прошло гладко. Перезагрузился, и ожидал увидеть ГУЙ. Но не тут-то было! Никакого ГУЯ нет. Есть по-прежнему чёрный экран с приглашением ввести имя пользователя. Товарищи никсоводы, подскажите как быть? Куда копать?

 , , ,

czan
()

Драйвер для Linux for Tegra Jetson Nano MIPI CSI Xilinix

Есть самодельная плата-носитель для Jetson Nano. Плата-носитель с Xilinx. Предполагается, что на эту плату будет заведена камера, а Xilinx будет отсылать картинку через MIPI CSI на Jetson Nano. Пытаюсь сделать минимальный драйвер для приёма данных. Картинка генерируется шириной 1920, длиной 1080, формат RAW, 8 бит. Не предполагается никакого взаимодействия через I2C. Картинка генерируется сразу после включения. Я взял реализацию драйвера для IMX219 и убрал оттуда I2C. Исходник здесь. Всё это благополучно собирается и подгружается как модуль ядра. Но при попытке получить что-либо через v4l-ctl --stream-mmap ничего не выходит, а в dmesg такие ругательства:

[ 507.791721] video4linux video0: frame start syncpt timeout!0
[ 507.797999] video4linux video0: TEGRA_VI_CSI_ERROR_STATUS 0x00000000
[ 507.798020] vi 54080000.vi: TEGRA_CSI_PIXEL_PARSER_STATUS 0x00000000
[ 507.798033] vi 54080000.vi: TEGRA_CSI_CIL_STATUS 0x00000010
[ 507.798046] vi 54080000.vi: TEGRA_CSI_CILX_STATUS 0x00040041
[ 507.798171] vi 54080000.vi: cil_settingtime was autocalculated
[ 507.798186] vi 54080000.vi: csi clock settle time: 13, cil settle time: 10

Прошу подсказок в каком направлении копать.

 , , , ,

czan
()

С какой стороны подступиться к MIPI CSI?

Интересует разработка драйверов для MIPI CSI. Гуглил материалы, смотрел тексты других драйверов, искал с чего начать, чтобы хотя бы понять, что камера более-менее правдоподобно что-то шлёт, но, как-то разнообразия не очень. Наткнулся здесь на ЛОР-е на совет, что начать стоит с часов CSI-ных, но даже не представляю как это должно выглядеть. Вот, например, ситуация с COM-портом: для начала надо бы запустить терминал для COM-порта, подключиться, отправить некую команду, получить ответ. Хотя бы видно, что устройство тебе отвечает. А как быть с часами CSI? Как убедиться, что они вообще работают? Как это дело делается?

 , ,

czan
()

Странное поведение UART

Есть камера FCB-EV7520A. Ей можно управлять, в частности у меня, через /dev/ttyTHS1. Подключаюсь с помощью cutecom, настройки: 9600, 8 бит, без чётности, 1 стоп-бит. Посылаю команду CAM_VersionInq (шестнадцатеричная последовательность «81 09 00 02 FF»). А вот ответ получаю не всегда и не в том виде, какой требуется. Должна быть последовательность в десять байт и эта последовательность не всегда выдаётся. Чаще приходят последние 8-6 байт из последовательности. При этом cutecom ругается на неизвестные ошибки и на занятость устройства. Правда иногда, после нескольких переподключений, всё вроде-бы работает без нареканий. Но после перезагрузки всё опять работает через пень-колоду. Прошу мыслей по этому поводу. Что может тут происходить не так?

 ,

czan
()

Ищу фильм

Фильм номер уно, суть токова: группа людей идёт и спорит кто из них андроид, который хочет погубить их всех. Также в этой группе был человек, который всю дорогу сосал верёвочку от капюшона. Его подозревали что это он андроид потому, что он не пил спиртного. В итоге был махач между двумя девушками-андроидами.

Фильм номер дос, суть токова: за одним человеком гонялась группа других людей, главный герой из подручных материалов клепал ловушки. Одной из этих ловушек была лампочка-бомба. (Не «Один дома»)

 , ,

czan
()

CSI без I2C

Вот я ковыряюсь с драйверами для видеокамер, что подключены через MIPI CSI 2 и все они управляются через I2C. И возник вопрос: могут ли быть камеры, которые не требуют управления и просто гонят поток данных?

 ,

czan
()

Неподдерживаемая CSI камера

Играюсь с MIPI CSI камерами на девките Jetson Nano с Ubuntu. Естественно, поддерживаются не все камеры. Например, хорошо работает из коробки LI-IMX219-MIPI-FF-NANO-H90 V1.3, а вот Raspberry Pi Camera Rev 1.3 P5V04A SUNNY на матрице OmniVision не работает. Вот у меня возник вопрос: как в системе Linux можно получить информацию про P5V04A SUNNY, как она там регистрируется? Из dmesg-а что-то ничего путного вытащить не могу.

Решение здесь.

 , ,

czan
()

Из структуры sock в структуру llc_sock

Ковыряю ядро Linux. Очередные непонятки. Вот есть в ядре такой файл: /include/net/llc_conn.h , в нём есть функция static inline struct llc_sock *llc_sk(const struct sock *sk). Исходник. Сам текст функции:

static inline struct llc_sock *llc_sk(const struct sock *sk)
{
	return (struct llc_sock *)sk;
}

Насколько я понимаю, тут указатель на некую структуру sock будет переделываться на указатель на структуру llc_sock. Причём начало структуры llc_sock выглядит так:

struct llc_sock {
	/* struct sock must be the first member of llc_sock */
	struct sock	    sk;
	struct sockaddr_llc addr;		/* address sock is bound to */
...
	u32		    copied_seq;		/* head of yet unread data */
...

То есть, внутри структуры llc_sock есть структура sock. Меня интересует следующий вопрос: какое значение будет в copied_seq после подобного приведения? Насколько я могу судить, то значение copied_seq может быть любым, а struct sock sk будет являть собой struct sock sk из аргумента функции. Правильно ли это?

 ,

czan
()

af_llc.c без хедер-файла

Продолжаю ковырять внутренности ядра. Теперь такой вопрос: есть файл net/llc/af_llc.c. Я заметил, что всё что содержится в этом файле не используется в других файлах. Нет никакого хедер-файла, который бы описывал функции/процедуры из af_llc.c. Вот с какой целью это может сделано?

 ,

czan
()

Про преобразования сокетов

Копаюсь в ядре Linux и частенько натыкаюсь, например, на такое:

struct inet_connection_sock *icsk = build_icsk(test);
KUNIT_ASSERT_EQ(test, 0,
                       mptcp_token_new_connect((struct sock *)icsk));

Вопрос: как работает вот это выражение:

(struct sock *)

Это, я так понимаю, преобразование из одной структуры в другую? Но как это происходит? Где посмотреть?

 , ,

czan
()

RSS подписка на новые темы