LINUX.ORG.RU

Сообщения Xintrea

 

Git-хук на bash дает ошибку «Неприменимый к данному устройству ioctl». На sh все в порядке

Форум — Development

Система Astra Linux 1.6

Имеется развесистый git-хук pre-commit, написанный на bash. Если сделать коммит, то в консоль вываливается три сообщения:

stty: 'стандартный ввод': Неприменимый к данному устройству ioctl
stty: 'стандартный ввод': Неприменимый к данному устройству ioctl
stty: 'стандартный ввод': Неприменимый к данному устройству ioctl

Вроде все работает, но эти сообщения нужно убрать.

Я стал разбираться, и сократил git-хук до такого состояния:
#!/bin/bash
echo "Hello pre-commit"
Но сообщения про ioctl все равно появляются.

Тогда я заменил в этом минимальном примере #!/bin/bash на #!/bin/sh, и сообщения об ошибке пропали!

И вот вопрос: скрипт хука весьма обширный, и переводить его с bash на sh - вообще не вариант. Что нужно докрутить, чтобы этих ошибок не было?


PS: Проверил то же самое на Debian 12, такой проблемы нет. Это именно Астровская проблема.

 , , , ,

Xintrea
()

const_cast - вселенная хочет, чтобы я запутался

Форум — Development

http://cppstudio.com/post/5343/

const_cast — константное приведение типов данных
Операция const_cast доступна только в C++. Константное приведение используются, чтобы константную переменную преобразовать в неконстантную. При этом, константным становится возвращаемое значение операции const_cast, а не сама переменная.

Видимо, автор должен был написать «При этом, неконстантным становится возвращаемое значение», но забыл частицу «не»?

 , ,

Xintrea
()

Как в qmake заставить перекомпилиться файл, в котором используется изменяемая DEFINE-переменная ?

Форум — Development

В корне каталога проекта имеется файл version.txt, он автоматически обновляется по определенным требованиям.

Содержимое этого файла передается в DEFINE-переменную:

# Установка qmake переменной с номером версии
SOFTWARE_VERSION = "$$cat(version.txt)"

# Проброс qmake переменной в C/C++
DEFINES += "SOFTWARE_VERSION=\"$$SOFTWARE_VERSION\""


Проблема в том, что если изменяется version.txt, то меняется и DEFINE-переменная SOFTWARE_VERSION. Однако исходные файлы проекта при этом, само собой, никак не меняются.

И проект не пересобирается, потому что изменений в проекте ведь нету. А он должен собраться с новой версией, установленной в version.txt. Причем не обязательно, чтобы пересобирался весь проект. Достаточно собрать с учетом того, что изменился один файл, в котором используется DEFINE-переменная SOFTWARE_VERSION.

Вопрос: как заставить собираться проект с новым значением, если изменился номер версии в файле version.txt?

Ограничение 1: проект большой, полная пересборка - это оверхед.

Ограничение 2: все должно конфижиться через *.pro-файл проекта, никаких дополнительных скриптов быть не должно.

 , , , ,

Xintrea
()

По следам гитарной битвы луноходов: розыск атомного кота

Форум — Talks

Аксакалы еще помнят адское действо, произошедшее на страницах ЛОРа много лет назад?

Призрак в опере? Нет проблем, обеспечим!

Практически то же самое сделал недавно товарищ Александр Пушной, только на более другом медийном уровне. При розыгрыше его гитары, ему накидали ~3000 каверов на рифф из программы Гилилео.

Вот обзор роликов (12 штук):
https://www.youtube.com/watch?v=QHQeVJqJ6m8&t=2125s

Проблема в том, что там нет ссылок на ролики победителей. А я их хочу найти. И даже нашел все, кроме номера 6:

https://webhamster.ru/mytetrashare/index/mtb0/1707837133sryjjed5a3

Проблема в том, что искать максимально сложно: YouTube ищет по названию, текстовым меткам и не более того. Да, можно искать по хештегу, но тебе вывалятся тысячи превьюшек, и среди них надо найти одно видео. Мало того, похоже, что при поиске по хештегу YouTube показывает не все ролики, ограничивается примерно тысячью, а искать надо среди трех тысяч. И поэтому YouTube на каждый запрос генерит случаный набор роликов.

В общем, предмет поиска следующий: ролик, в котором товарищ в футболке с котом играет на белой гитаре. Известно что автор - Сергей из Долгопрудного, типа у него есть группа Nuclear Cat. Кадры из ролика здесь:

https://youtu.be/QHQeVJqJ6m8?t=2922

Нужно найти ссылку на этот ролик.

PS: Линукс тут при том, что мой ролик про осциллограф для этого действа был полностью смонтирован в Linux: Audacity, Blender, OsciRender, FFmpeg, Gimp, Inkscape.

 , , ,

Xintrea
()

Не понимаю эти ваши замыкания в Go

Форум — Development

Читаю урок по анонимным функциям:

Преимуществом анонимных функций является то, что они имеют доступ к окружению, в котором они определяются. Здесь функция square определяет локальную переменную x и возвращает анонимную функцию. Анонимная функция увеличивает значение переменной x и возвращает ее квадрат. Таким образом, мы можем зафиксировать у внешней функции square состояние в виде переменной x, которое будет изменяться в анонимной функции.


Хорошо, то есть, анонимная функция будет иметь какой-то хитрый доступ к переменной x, существующей в функции square(). Надо это проверить, и вызвать square() между вызовами анонимной функции.

И что можно увидеть?

Код:

package main
import "fmt"

func square() func() int {
	var x int = 2
	fmt.Println("X variable in square function ", x)

	return func() int {
		x++
		return x * x
	}
}

func main() {
	f := square()
	fmt.Println(f())
	fmt.Println(f())

	square() // <---------- Проверка

	fmt.Println(f())
	fmt.Println(f())
}

Результат:
X variable in square function  2
9
16
X variable in square function  2
25
36

Получается, что анонимная функция не работает с переменной x, размещенной в square(). Происходит какое-то копирование переменной, и потом работа идет с этой копией. То есть, реальность для переменной x «расщепляется»: Внутри square() у нее одно значение, а при вызове анонимной функции - другое.

Как это можно понять? Как это можно уложить в голове? Как этим можно пользоваться?

 , , ,

Xintrea
()

Подключение монохромного RCA к VGA-монитору

Форум — Talks

Привет, народ!

Хочу подключить свою Микрошу к VGA-монитору. Фишка в том, что выход у Микроши низкочастотный и монохромный. То есть, не нужно разделять сигнал по цветовым каналам.

Покупал и возвращал 4 модели всяких преобразователей RCA to VGA, VIDEO to VGA и т.д. с RCA-шным входом и VGA-шным выходом. 3 из них вообще не выдавали изображение. Один преобразователь кое-какое изображение все-таки показал, но оно троилось по вертикали. Перепробовал все параметры в меню, добиться нормального изображения не смог. Тоже сдал.

Сейчас думаю, а если разделять сигнал не нужно, то можно ли просто этот сигнал навесить на один из цветовых пинов VGA-разъема и все? То есть два провода - сигнал и земля. Ну, может быть какое-то сопротивление добавить, видел что рекомендуют «нагрузить» RCA-вход сопротивлением 75 Ом. Но не говорят что имеют в виду - последовательно с сигналом поставить резистор, или сигнал завести на землю через резистор. Я в этих делах не соображаю.

Есть картинка: https://raw.github.com/xintrea/mytetra_syncro/master/base/170557880702eu9jpos...

1. Стоит ли попробовать такой конвертер «два проводка», или однозначно не будет работать?

2. А будет ли работать HD9800/GBS8200 типа такого: https://aliexpress.ru/item/1005006215879986.html?sku_id=12000036318620669&amp...
Или в нем то же самое что и в других конвертерах, и смысла его покупать нет?

 , , , , конвертор

Xintrea
()

Сделал научпоп видео «Как нарисовать звуком картинку? Дуэт гитары и осциллографа»

Форум — Science & Engineering

Пока вы доедали свое оливье, я пилил научпопное видео про визуализацию звука на осциллографе. Видео сделано в рамках акции #хочугитарупушного.

Вот само видео:
https://youtube.com/shorts/XdiwjLKXfT8?feature=share

Вот условия, если кто-то решит участвовать:
https://www.youtube.com/shorts/HlIEsIPFRhU

Не забудьте поставить царские лайки и поделитесь этим видосиком, как вы это обычно делаете. Очень бы не хотелось утонуть в тысячах заливов шортсов.

С новым годом!

(Linux тут при том, что весь монтаж сделан в Debian с помощью Blender, использовался Osci-render и Sunvox).



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

 , , , ,

Xintrea
()

Python3 и ALSA = Python int too Large to fit into C Long

Форум — Development

Привет, народ.

Пытаюсь запустить Open Source программу Nano-Basket (настройка MIDI контроллера).

Однако, на строке:

self.event = alsaseq.SeqEvent(alsaseq.SEQ_EVENT_SYSEX)

получаю вот такую ошибку:
Traceback (most recent call last):
  File "/home/daniel/configs/Nano-Basket/./nano_basket_main.py", line 33, in <module>
    Midi_Device = NanoKontrolAlsaMidiComm()
  File "/home/daniel/configs/Nano-Basket/nano_basket_backend.py", line 269, in __init__
    self.event = alsaseq.SeqEvent(alsaseq.SEQ_EVENT_SYSEX)
OverflowError: Python int too large to convert to C long

При добавлении отладочного вывода:
print( "alsaseq.SEQ_EVENT_SYSEX: "+str( int(alsaseq.SEQ_EVENT_SYSEX) ) )

Вижу следующее значение:

alsaseq.SEQ_EVENT_SYSEX: 315701287920557015231746469374140126848057806069433848520996442474077896118040280446827322192982778036935991159410458088858621034602855901831822090957249542454035237858266532406423746184667355646341406675495075296391155014596564577965062354643694753177171515765177344558231920888521336526729754327947612995730269459443629344404521191593403054625932096029258892212307592584049828939880259535763835214469305539836356735613249869911228799956675651622554103861445770814010219159244073507745648250000703350024591332758344364473173395846008868365451882145158578760695509550271688630463095098506898511291039425221333233770177236986045725391119505595248036570982953411623711955801825920921027729570846982511715262600778524621353825145851496489531652828983288054163031843801030412392727901417489077610047264934408166150555940608201872856407413511206173359083516070311558391028193972003488720183479039068178427806738027344778747038954436492511107004297589672250208699482162966403307666332800689253877198682790903233244322329549194860352982466072296480580866480878732354410609338974360551261336806132939982418266558599954613684533679936688065640543177104082203941847816956336839338

Значение несколько великовато как мне кажется.

Как можно исправить данную ошибку?

Страница с ошибкой тут: https://github.com/royvegard/Nano-Basket/issues/11

 , , ,

Xintrea
()

Можно ли управлять с MIDI-контроллера функциями на Yamaha-PSR Exxx?

Форум — Multimedia

Привет, народ.

В синтезаторе Yamaha PSR-E473 имеется настройка значений для различных функций инструмента.

Например, функция 009 - это функция M.Reverb - глубина реверберации для основного тембра, допустимые значения от 0 до 127.

Вопрос 1: если я куплю MIDI-контроллер типа LAudio EasyControl, возьму ноутбук, втыкну в него Yamaha и LAudio, то будет возможность настроить так, чтобы энкодеры на LAudio влияли на значения функций Yamaha? Как примерно это надо делать? Через DAW или есть более легковестные способы?

Вопрос 2: а можно ли сделать то же самое, но без ноутбука, через какой-нибудь MIDI конвертор/концентратор?

 , , , ,

Xintrea
()

А подскажите живой форум клавишников

Форум — Talks

Имею несколько вопросов по клавишам (имеются в виду музыкальные инструменты).

Нашел только два полуживых форума, с дикой кривой вёрсткой, на которых отвечают спустя пару-тройку дней:

http://sintezator-online.ru/forum/igraem-na-sintezatore

http://www.musicforums.ru/klavishnik/

А вы знаете нормальные русскоязычные форумы клавишников?

 , ,

Xintrea
()

Российский центр компетенций по импортозамещению отказался инвестировать в два проекта на базе Java

Новости — Java
Группа Java

По информации из Центра компетенций по импортозамещению в сфере информационно-коммуникационных технологий (директор ЦКИТ — Илья Массух), из дорожной карты «Новое общесистемное ПО», работы по которой финансируются государством, исключены два проекта, связанных с языком Java:

  • Исключен проект «Доверенный репозитарий Java компонент», который компания «Бизнес коммуникации» должна была делать в интересах Центробанка. Стоимость проекта оценивается в 97 млн руб. В результате его реализации должна была появиться доверенная среда разработки и исполнения Java SE на базе проекта с открытым исходным кодом OpenJDK.
  • Исключен проект сервера приложений Java Libercat. Данный проект базируется на Apache Tomcat, поставляется в формате веб-сервера (TomCat) и сервера приложений в спецификации Jacarta EE (TomEE+). Его должна была реализовать компания «Белсофт» под торговой маркой AxiomJDK. Стоимость реализации проекта — 80 млн руб.

Причина исключения данных проектов из дорожной карты — отказ от бюджетного финансирования. По мнению экспертов, программные продукты для стека Java Enterprise Edition (Java EE) в настоящее время являются довольно устаревшей технологией. С другой стороны, эксперты соглашаются, что вышеперечисленные продукты имеет многомиллионную аудиторию в изначальных СПО-проектах. Для пользователей нет смысла переходить на новый продукт, к которому не сформировано доверие, особенно учитывая тот факт, что на рынке существует множество альтернативных СПО-решений.

Отказ от реализации обоих проектов на базе Java поможет сэкономить 177 млн руб.

>>> Подробности

 , ,

Xintrea
()

Определить программу-лупер под Android по видео

Форум — General

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

https://www.youtube.com/watch?v=pdBw5c0G5DM

Автор видео говорит, что приложение называется Looper.

Я не могу его найти в AppStore.

Можете определить по экрану что это за приложение? Как правильно называется? Cсылка в AppStore какая?

 , , ,

Xintrea
()

Правильная расшифровка int (*a)[2] = new int[n][2];

Форум — Development

Имеется определение:

int (*a)[2] = new int[n][2];

И есть два варианта его понимания:

1. Создается переменная-указатель на 2 массива из значений типа int, что может рассматриваться и как указатель на массив из двух элементов типа int (так как общий размер массива одинаковый)

2. Запись int (*a)[2] представляет указатель на массив из двух элементов типа int.

Какой вариант однозначно правильный?

 , ,

Xintrea
()

Где прописывается запуск Qt Creator?

Форум — Development

Сегодня менял HDD, переехал на новый, все скопировал через dd, но произошло странное...

В системе был вручную установлен Qt 5.12.6 из официального инсталлятора с qt.io. Все было установлено в каталог /opt/qt_5_12_6. Там же и эта версия и лежит, никуда ничего не перемещалось. В этом наборе имеется Qt Creator 4.10.2.

Так вот, еще сегодня утром, если в меню DE тыкнуть Старт - Разработка - Qt Creator, то запускался Qt Creator 4.10.2.

А после замены HDD, если тыкнуть в меню тот же пункт, то откроется Qt Creator 4.6.2. Это старый Creator, который был давно еще установлен из официального репозитария дистрибутива вместе с Qt 5.11.0. Эти версии тоже как были когда-то установлены, так и стоят, никто ничего на диске не трогал.

В пункте меню используется команда:

qtcreator %F

Вопрос: почему изменился запускаемый Qt Creator? Как вернуть запуск Qt Creator 4.10.2 из /opt/qt_5_12_6 ?

 , ,

Xintrea
()

Миграции в условиях паранойи - полная проверка структуры таблиц

Форум — Development

Привет, народ.

Требуется тут сделать нестандарную самописную подсистему миграции в БД PostgreSQL 9.6 с учетом параноидальности начальства.

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

Теперь рассмотрим параноидальный сценарий:

Предполагается, что в любой момент может появиться «тайный криворукий вредитель», который что-то сделает с таблицами в БД. С самими БД он ничего не сделает (не спрашивайте почему, никто этого не знает), а вот с таблицами - сделает. Поменяет тип столбца, переименует столбец или вовсе удалит, уберет индекс или еще что-то эдакое. Или вообще удалит таблицу.

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

Вопрос 1: как автоматически «вычислять» структуру таблиц, сформировавшуюся за все миграции, чтобы иметь возможность ее проверить?

Вопрос 2: как непосредственно проверить структуру таблиц на соответствие «вычисленной» на предыдущем шаге структуре?

Есть ли готовые SQL-команды или подходы для таких действий?

Используемые инструменты: C++, Qt. Никаких этих ваших яв, питонов, пхп и сторонних библиотек быть не должно.

PS: Я не прикалываюсь, я все это спрашиваю абсолютно серьезно.

 , , , ,

Xintrea
()

Свежая задачка с Yandex Backend Tour 2023 - «Опытная команда»

Форум — Talks

Эта тема создается для тех, кто завтра еще будет иметь возможность порешать задачки с Yandex Backend Tour 2023.

Условие задачи «Опытная команда» я не разглашаю (покажу ее после 23:59 19.11.2023), но хочу написать что имели в виду авторы. У меня плохо с пониманием других людей, а когда решение нужно делать на время, когнитивные функции напрочь отключаются.

Так вот, когда вы будете пытаться понять, почему в разборе примера авторы написали вот это:

----- 8< -----

В момент времени T=2 к команде присоединяется Victor. Опытность Ivan и Anton теперь равна 1, опытность Victor равна 0. Разность между суммарной опытностью оставшихся членов команды и опытностью самого опытного члена команды равна (1+0)−1=0. Добавляем к ответу Anton 0

----- 8< -----


То возможно вас наведет на правильную мысль следующее объяснение:


----- 8< -----

Ребята из Яндекса не написали в условии задачи, как определяется самый опытный. Зато написали в формате вывода: «Если членов команды с максимальной опытностью несколько, нужно вывести того, чье имя лексикографически минимально».

За этой фразой, видимо, скрывается мысль, что этот принцип используется не только при выводе. Видимо, подразумевалось, что данный принцип надо использовать и в других местах программы. (Для меня это не очевидно).

Поэтому я, наивный, и не понял, что когда считается опытность самого опытного члена, то если получается более одного члена с одинаково высоким опытом, то надо выбрать лексикографически самого опытного, и суммарный опыт посчитать без этого человека.

Другими словами, нужно учитывать что «лексикографический выбор» надо делать не только при выборе, какого кандидата показать в результирующей строке. Но и это же нужно делать и в основном коде, когда считается опытность команды. И значение этого человека не включать в суммарный опыт команды.

----- 8< -----


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

PS: Задача даже не на алгоритмы, а просто на корректное написание простого кода, который парсит входные данные по некоторым правилам.

PPS: И да, я не прошел.

 ,

Xintrea
()

Как настроить в VSCode нестандартный запуск Python-скрипта? А чтобы дебаг работал?

Форум — Development

Есть специальная команда для запуска python-скрипта:

cat file.txt | python3 sample.py

1. Как сделать так, чтобы она запускалась по Ctrl+F5 вместо стандартного запуска скрипта?

2. А как сделать, чтобы и дебаг запускался с такой же командой?

VSCode v. 1.81.1, плагин - стандартный Python IntelliSence (Pylance) от Microsoft v.2023.14.0.

 , , , ,

Xintrea
()

Как в Python написать цикл с постусловием?

Форум — Development

Классический цикл for(инит; действие при каждой итерации; условие продолжения) в C/C++ - это, по-сути цикл с пост-условием.

А как написать for-цикл с пост-условием в Python? Если пользоваться range(), то range() «запекает» перебираемые значения при старте цикла.

А нужно, чтобы цикл бежал не до фиксированного значения, а до того, пока будет выполняться условие. Как это сделать?

Только через while-цикл и никак иначе?

Я пробовал через for и генератор с условием, наложенным на range, но не получается:

for i in ( x for x in range(0, len(s)) if x<(len(s)-maxLen)) ):
Так тоже в процессе работы цикла количество итераций не уменьшается.

 , ,

Xintrea
()

Как в Google/Yandex найти страницу, на которой упоминается заданная ссылка?

Форум — General

Google все время пытается проиндексировать страницы, которых нет на сайте webhamster.ru ужо несколько лет как.

Вот примеры таких ссылок:

http://webhamster.ru/mytetrashare/index/mtb131/1490546683q10675zpp6
https://webhamster.ru/mytetrashare/index/mtb176/14982150565oqhyblndu
https://webhamster.ru/mytetrashare/index/mtb189/1490267599a1aqopr8ha

То есть, где-то, или на самом webhamster.ru или на каких-то других сайтах эти ссылки существуют.

Вопрос: какой запрос надо дать в Google или в Yandex чтобы найти в Интернете страницы, которые содержат вышеперечисленные линки?

 , , ,

Xintrea
()

Миграции: как в самой таблице хранить номер версии структуры таблицы?

Форум — Development

Для создания наколеночной системы миграции таблиц в PostgreSQL нужно мне где-то хранить номер версии структуры таблицы.

Существует ли способ где-то сохранить номер версии структуры таблицы в самой таблице?

То есть, не создавать в БД специальную таблицу, в которой будут храниться имена таблиц и их текущие версии структуры, а хранить номер версии в какой-то сопровождающей таблицу информации?

 , , , ,

Xintrea
()

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