LINUX.ORG.RU

Избранные сообщения PhysShell

Есть ли что-то типа Grafana только на порядки легче и проще?

Форум — Talks

Есть что-нибудь для рисования графичков, индикаторов и всего такого на страничке в реалтайме, лёгкое и простое, на plain JS, без всяких сраных npm и без каких-либо зависимостей? Килобайт так на 10-20 не больше.

Или как и в случае с DASH player придётся всё самому с нуля делать, ибо вебмакаки принципиально неспособны создать что-либо маленькое, простое, быстро работающее и не сжирающее всю доступную память?

ЗЫ: Пожалуйста, не предлагайте ничего, что представляет из себя что-то отличное от одного скрипта на plain JS без каких-либо зависимостей типа jQuery и т.п.. Тем более не предлагайте что-либо с package.json в репозитории. И не предлагайте что-то, что в неминифицированном виде весит больше 10-20кб.

ЗЗЫ: Мда.. Судя по ужасу который мне тут предложили, похоже придётся самому писать.

 , , , копрофилия

Stanson
()

Три проблемы Вайланда, как фиксить?

Форум — Desktop

Гном 41

  1. Переключение раскладки происходит только со второго раза, я нажимаю shift-alt нет реакции, еще раз нажимаю происходит переключение. (при переключении на X11 все с первого раза переключается)

  2. Зависание мыши при открытие програм, например файрфокс или хром или чтото другое большое типа блендер - мышка зависает на месте на долю секунды.

  3. Буфер обмена всегда ломается буквально через пару десятков копирования(минут 5-10 активного написания текста), между программами на нативном вайландом и программами вод xWayland, что в итоге буфер обмена в xWayland перестает работать а в Wayland продолжает. (не лечиться до перезапуска сессии)

 ,

svv20624
()

Snoop Project v1.3.1A

Новости — Проприетарное ПО
Группа Проприетарное ПО

Snoop Project — это криминалистический OSINT-инструмент. Основная функциональность Snoop Project — выслеживание «nickname» в публичных данных, расширенная функциональность — различные OSINT-плагины (в т.ч. разработанные на идеях и материалах обнаруженных уязвимостей в Яндексе (при участии в программе багбаунти от Яндекса)), позволяющие работать с IP/GEO/Yandex-ом.

Snoop Project внесён в реестр отечественного ПО РФ с заявленным кодом 26.30.11.16: Программное Обеспечение, обеспечивающее выполнение установленных действий при проведении оперативно-розыскных мероприятий:: No7012 приказ 07.10.2020 No515.

Snoop Project разработан по материалам исследовательской работы в области скрапинга публичных данных (собственная БД). На данный момент Snoop выслеживает nickname по > 2200+ интернет ресурсам (Full версии) и по самым популярным ресурсам (Demo версии).

Для пользователей подготовлены готовые сборки для OS GNU/Linux и OS Windows. Из исходников Snoop собирается и для Android/Termux.

v1.3.1 (A)

  • Расширена поисковая веб-база Snoop, она включает более 2200+сайтов.

  • Добавлено в html/csv-отчёты и в CLI параметр: ‘сессия’:: обработанные данные трафика (ungzip) в целом и персонально для каждого сайта (с опцией ‘-v’ визуально в CLI; новый столбец ‘Сессия/Kb’ в csv-отчёте; ‘сессия’ в html-отчёте).

  • При превышении стандартных параметров Internet Censorship в общий вывод-CLI добавлена информация о пропуске: err БД в ‘%’.

  • Обновлён плагин Yandex_parser до v0.4 (пропуск обработки данных несуществующих username в БД Яндекса).

  • Изменены пути записи отчётов для Snoop for Windows (issues/49).

  • Обновлены права Snoop for GNU/Linux build-версий с 744 на 644 (issues/50).

  • Вместо utf-8 для csv-отчётов введён автоматический выбор кодировки (для OS Windows — 1251).

  • Вывод информации о БД Snoop опции [–list all] и в файле websites.md сортируются без учёта регистра (проще найти LOR).

  • В аргументах CLI обновлён ключ: --update y до сокращения -U y.

  • Добавлен Readme.en.

  • Продлена лицензия необновляемой Snoop EN-версии на год.

  • Обновлена документация: ‘Общее руководство Snoop Project.pdf’

  • Мелкие и незначительные улучшения в CLI.

>>> Релиз

 , ,

ne5555
()

Нестабильная работа youtube-dl

Форум — Desktop

Выкачиваю плейлист на примерно 50 видео. Одни качаются с максимальной скоростью в 10 метров, другие 50 килобайт. Проверил на сусе и винсервере. Что может быть?

Помог https://github.com/yt-dlp/yt-dlp

 ,

chenbr0
()

Удалить из строки ударение и подобное

Форум — Development

Всем здрасьте.
Взял я boost::locale для операций с Юникодом, и пока не понял - а как удалить из строки знаки ударения (хотя там может быть и другой мусор однозначно). С наскоку сделал декомпозицию с case folding’ом - не помогает:

#include <boost/locale.hpp>
#include <iostream>
#include <string>
#include <locale>
using namespace boost::locale;
using namespace std;
 
int main() {
	wstring str = L"фыва\u00b4"; // "фыва" с ударением на 'а'
	generator gen;
	locale::global(gen(""));
	wstring res = normalize(str, boost::locale::norm_nfd);
	fold_case(res);
	cout << str.size() << "  " << res.size() << endl;
}

// cout: 5 5

На стековерфлоу есть подобный вопрос, там советовали вручную парсить строку для поиска ударений, это явно странно. Как правильно?

 , , , ,

kvpfs
()

Геноцид толксов

Форум — Linux-org-ru

Снова началось, половина тем, по мерам толксов довольно безобидных, удалены.
Вроде последние несколько месяцев спокойно же сидели, и ничего страшного не произошло.
Кто наш герой, а то мне не видно без звёзд?

 ,

K50
()

PC-MOS/386

Галерея — Скриншоты

Привет! Это черновик заметки, которая должна была быть опубликована в моём блоге. Но так как блог сейчас сломан, я решил опубликовать её здесь. Кто-то недавно жаловался, что на ЛОРе недостаточно ХАБРа? Ну вот вам пост в стиле хабра. Поехали.

PC-MOS/386 — это многопользовательская и многозадачная операционная система, совместимая с MS-DOS 5. Разрабатывалась компанией The Software Link до 1987-го года.

Операционная система использует защищенный режим 386 для изоляции виртуальных машин с приложениями MS-DOS. Поэтому большинство программ, использующих только документированные API MS-DOS, должны работать без проблем.

В 2017-м году исходный код был перелицензирован под GPL3 и выложен на гитхаб. Кроме исходников, репозиторий содержит образы официальных установочных дисков и сканы оригинальной документации в PDF. Также там была исправлена проблема в обработке даты модификации файлов, которая не давала открыть файлы, созданные после 2012-09-01.

Так что теперь можно вполне законно и не нарушив ни одной EULA запустить эту самобытную ОС в виртуалке или даже на реальном железе.

Я немного погонял её в qemu, и пока вопросов у меня больше, чем ответов. Почитать официальный мануал (довольно длинный и в плохом качестве скана) пока времени не было, так всё методом тыка.

Многозадачность

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

Командой SWITCH можно переключаться между задачами. В справке также были упомянуты хоткеи Alt + цифра для этой же цели, но у меня они не заработали.

Можно активировать TSR-программу MONITOR, после чего через Ctrl + Space можно вызывать интерактивное меню для переключения задач и создания новых.

Правда в каждой новой задаче эту команду нужно повторять заново, чтобы в этой задаче работал хоткей Ctrl + Space. Думаю, нужно команду MONITOR прописать в AUTOEXEC.BAT, чтобы она применялась автоматически.

Команды ОС

В этой ОС команды не отвечают на ключ /? и любые другие варианты справочных ключей, которые я пробовал. Вместо этого есть интерактивная справка по команде HELP. По виду и принципу работы напоминает справку из сред разработки QBasic и Turbo C. По команде HELP .КОМАНДА (с точкой перед командой) можно попасть сразу в нужный раздел справки. (А при чём тут точка, вы можете узнать, набрав HELP .DOT.)

Справочная информация довольно куцая, в основном перечисляет ключи команд. Например для команды ADDTASK не написано, что объем выделяемой памяти нужно вводить в килобайтах. Возможно, для пользователей системы тех лет это было очевидно, но всё же. Описания каких-то общих принципов, важных для понимания работы конкретно этого клона DOS, отсутствуют. Возможно, они есть в бумажном руководстве, которое я не читал.

В командной оболочке работают стрелки влево-вправо, Backspace и Delete. Клавишей Insert можно переключать режим ВСТАВКА/ЗАМЕНА, при этом меняется форма курсора. Режим ввода по умолчанию — ЗАМЕНА, что неудобно. Чтобы ВСТАВКА была по умолчанию, нужно в AUTOEXEC.BAT вписать команду INSERT.

Я также проверил все сочетания Ctrl + буква. Ожидаемо работают Ctrl + H как аналог Backspace и Ctrl + M как аналог Enter. Ctrl + C прерывает ввод текущей команды без выполнения. Остальные сочетания просто выводят на экран символы псевдографики.

Последовательное нажатие Esc + буква в командной оболочке выполняет ту же роль, что и Ctrl + буква, только еще и наводит беспорядок на экране при этом. Сочетания Alt + что угодно или Esc + что угодно, привычные миру Unix, тут , похоже, невозможны. (В других приложениях Esc работает как самостоятельный хоткей. Например в интерактивной справке закрывает текущий раздел справки.)

История команд доступна через стрелку вверх и вниз. Между сеансами история не сохраняется.

ED — простой редактор с двумя режимами: визуальным и командным. В визуальном режиме мало отличается от любого редактора любой ОС: стандартные клавиши навигации, режим вставки и замены, хоткеи на Ctrl + буква.

Переход в командный режим по Esc. Командный режим своей лаконичностью напомнил даже не редактор vi, а редактор в составе Basic из ZX Spectrum.

В справке отсутствует клавиша для перехода обратно из командного в визуальный. Разумное предположение, что это должна быть кнопка V — оправдалось. :)

Команда ACU открывает интерактивное меню с настройками системы и встроенной справкой по каждому пункту через F1. Справка пытается быть информативной, но без мануала я всё равно не разобрался во всех настройках полностью. Выбранные настройки записываются в CONFIG.SYS.

Команды MOS и MOSADM позволяют просматривать и изменять различные параметры системы. Синтаксис команд использует подкоманды аналогично как в современных программах git, docker и т.п. Помню, что MS использовала такой же подход уже в NT-based системах для команд настройки сети, а вот были ли подобные команды с подкомандами в MS-DOS, не припомню.

Проблемы

Почему-то не работают стрелки на основном блоке клавиатуры. Стрелки на блоке NumLock работают, но пользоваться ими неудобно, так как в свою очередь на этом блоке не работает Enter. Возможно, это какая-то проблема совместимости с QEMU. Нужно будет попробовать в другой виртуалке.

Позже заметил, что кроме стрелок, такая же проблема с клавишами Insert и Delete. Они работают с Num-блока и неработают с основной части клавиатуры.

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

Упомянутые ALT + цифра для переключения между задачами не работают. Или я делаю что-то не так, или опять проблема с обработкой ввода, и система не распознаёт ALT.

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

Еще одна проблема — не столько даже проблема системы, сколько особенность эпохи. Ни одно из приложений системы не уводит процессор в сон между прерываниями даже когда ничего делать не нужно. (Уж хотя бы COMMAND.COM мог бы это делать по умолчанию.) Из-за этого одно ядро постоянно нагружено на 100%, и мой ноутбук показывает температуру 82 градуса. И поэтому все эксперименты с PC-MOS сопровождаются отчётливым звуком П-Ш-Ш-Ш-Ш из вентиляционной решетки.

Что дальше

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

Учитывая, что GEM 3.13 теперь тоже опенсорсный, можно попробовать запустить на ней GUI.

Где-то мне попадалась подборка утилит наподобие grep для MS-DOS, которую было бы неплохо добавить.

Еще один интересный вопрос — установка на один раздел с FreeDOS в разные каталоги с возможностью выбора операционной системы при старте. (FreeDOS с большим уровнем совместимости с софтом или PS-MOS с меньшим уровнем совместимости, зато многозадачная.)

 , , ,

wandrien
()

Отлаживаю кодогенератор

Форум — Development

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

По семантике ЯП Си-подобный, по синтаксису больше похож на что-то из линейки Паскаль/Модула/Оберон.

За основу брал Context Хохлова, но перепилил практически все сорцы.

Компилятор многопроходный. Сначала строится синтаксическое дерево. Потом на нём выполняются некоторые простые оптимизации. Потом запускается бэкэнд. (Другой подход применён, например, в tcc, где программа компилируется за один проход — ради скорости компиляции.)

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

word Not(word P)
	switch Node[P].ID of
	case iOR:   Node[P].ID = iAND; Not(Node[P].pLeft); Not(Node[P].pRight);
	case iAND:  Node[P].ID = iOR;  Not(Node[P].pLeft); Not(Node[P].pRight);
	case iXOR:  Node[P].ID = iEQV;
	case iEQV:  Node[P].ID = iXOR;
	case iLT:   Node[P].ID = iGE;
	case iLE:   Node[P].ID = iGT;
	case iEQ:   Node[P].ID = iNE;
	case iNE:   Node[P].ID = iEQ;
	case iGE:   Node[P].ID = iLT;
	case iGT:   Node[P].ID = iLE;
	default:
		word P2 = Peek();
		Node[P2].ID    = iNOT;
		Node[P2].pLeft = P;
		return P2;
	end:switch

	return P;
end

Бэкэнд не строит промежуточного представления, на котором можно было бы гонять умные алгоритмы, соответственно 90% оптимизаций, описанных в «Книге дракона» невозможны. Пока я пытаюсь выжать максимум из компиляции на основе синтаксического дерева.

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

Хочу показать, чего удалось добиться с этим подходом на примере компиляции арифметических выражений:

Оптимизация умножения на константу при помощи add, shl и lea. Пример умножения на 15 при помощи lea:

        mov     EAX,  dword [EBP-24]
        lea     EAX,  [EAX*2+EAX]
        lea     EAX,  [EAX*4+EAX]
        push    EAX
        call    @10013

Компиляция выражения put_word(v100 * 18 + v1 * 27);:

        mov     EAX,  dword [EBP-24]
        lea     EAX,  [EAX*8+EAX]
        add     EAX,  EAX
        mov     EBX,  dword [EBP-8]
        lea     EBX,  [EBX*2+EBX]
        lea     EBX,  [EBX*8+EBX]
        add     EAX,  EBX
        push    EAX
        call    @10013

Здесь умножения заменены более оптимальными инструкциями и разумно распределены регистры.

Компиляция выражения word v500 = v2 * v100 + v3 * v100;:

        mov     EAX,  dword [EBP-12]
        mul     dword [EBP-24]
        push    EAX
        mov     EAX,  dword [EBP-16]
        mul     dword [EBP-24]
        pop     EBX
        add     EAX,  EBX
        mov     dword [EBP-32], EAX

Более оптимальным кодом был бы вариант:

        mov     EAX,  dword [EBP-12]
        mul     dword [EBP-24]
        mov     EBX, EAX
        mov     EAX,  dword [EBP-16]
        mul     dword [EBP-24]
        add     EAX,  EBX
        mov     dword [EBP-32], EAX

Но компилятору в текущей реализации недоступна информация, потребуется ли EBX при вычислении второго слагаемого. Поэтому он сохраняет EAX на стек и затем восстанавливает оттуда значение в EBX уже после того как второе слагаемое вычислено.

Компиляция выражения put_word(v500 - v100 * v5);:

        mov     EAX,  dword [EBP-24]
        mul     dword [EBP-20]
        mov     EBX,  dword [EBP-32]
        xchg    EAX,  EBX
        sub     EAX,  EBX
        push    EAX
        call    @10013

Компилятор требует от выражения результат во вполне определённом регистре. Поэтому столкнувшись с тем, что операнды оказались в обратном порядке, он вынужден вставлять лишний xchg. Ситуацию можно решить, если разрешить выражению в ряде случаев свободно выбирать регистр для результата. Тогда код был бы таким:

        mov     EAX,  dword [EBP-24]
        mul     dword [EBP-20]
        mov     EBX,  dword [EBP-32]
        sub     EBX,  EAX
        push    EBX
        call    @10013

Компиляция выражения put_word((v500 * 2 + v2) + (v200 & v1) + (v200 - 100) * 10 - 100 - v200 - v100);:

        mov     EAX,  dword [EBP-32]
        add     EAX,  EAX
        add     EAX,  dword [EBP-12]
        mov     EBX,  dword [EBP-28]
        and     EBX,  dword [EBP-8]
        add     EAX,  EBX
        mov     EBX,  dword [EBP-28]
        sub     EBX,  100
        lea     EBX,  [EBX*4+EBX]
        add     EBX,  EBX
        add     EAX,  EBX
        sub     EAX,  100
        sub     EAX,  dword [EBP-28]
        sub     EAX,  dword [EBP-24]
        push    EAX
        call    @10013

Пример компиляции ветвлений для блока switch (табличная реализация switch пока отсутствует) :

        mov     EAX,  dword [@@DATA+EAX+7177840]
        sub     EAX, 0xD
        je      @11097
        sub     EAX, 0x3
        je      @11098
        sub     EAX, 0xFFFFFFFE
        je      @11099
        dec     EAX
        je      @11100
        sub     EAX, 0x5
        je      @11101
        dec     EAX
        je      @11102
        dec     EAX
        je      @11103
        dec     EAX
        je      @11104
        dec     EAX
        je      @11105
        dec     EAX
        je      @11106
        jmp     @11107

Пример переиспользования значения константы в регистре вместо загрузки другой константы:

	word v0 = 0;
	word v1 = 1;
	word v2 = 2;
	word v3 = 3;
	word v5 = 5;
	word v100 = 100;
	word v200 = 200;
        xor     EAX,  EAX
        mov     dword [EBP-4], EAX
        inc     EAX
        mov     dword [EBP-8], EAX
        inc     EAX
        mov     dword [EBP-12], EAX
        inc     EAX
        mov     dword [EBP-16], EAX
        mov     EAX,  5
        mov     dword [EBP-20], EAX
        mov     EAX,  100
        mov     dword [EBP-24], EAX
        add     EAX,  EAX
        mov     dword [EBP-28], EAX

Сам компилятор полностью работоспособен, запускается в 32-разрядном режиме под виндой и линуксом и, в принципе, легко может быть портирован на другие ОС. Написан на самом себе (self-hosted) и частично обвешан тестами. Далее в планах научить его генерировать код для какой-нибудь другой системы команд. ARM, MIPS, RISC-V… что-то из этого.

Задавайте ваши вопросы.

 , ,

wandrien
()

Устают глаза в Linux

Форум — Desktop

Здравствуйте, Форумчане. Долго откладывал проблему, более не могу. Поиски решения сей проблемы в одиночку - безрезультатны. Имею бюджетный, купленный в 2019 монитор от LG 23.8" MK430H-B. Посиживая в дуалбуте, стал замечать быстрое зрительное утомление в линукс дистрибутивах. Чего ранее не наблюдалось со старым TN Samsung 18.5" 2010го. Настройка шрифтов, подбор не дефолтного разрешения и частоты тоже ничего не дали. Единственные DE, где глазам легче - Cinnamon (X11, с радугой на шрифтах) и Gnome (X11/Wayland). Неужели с композитором связано?

Вантузы: 7,8.1,10,11 не напрягают глаза. (Сижу по 8-10ч.) С линухом проблемы через час-два. Нарастающее - болят глаза, вокруг них, виски. С глазами у офтальмолога не идеально, но все же. Слабый астигматизм в правом глазу, сильное пересыхание.

HW: i3 3240 RAM: 8/4GB HDD GPU: HD2500 (VGA подключение)

EDID пишет 22", при реальных 24". С включенным UEFI и Secureboot не считывает разрешения с EDID. (max. 1024x768)

Так же проверял на другом железе, неделю, с HDMI GTX 950, E5450. Монитор напрягает глаза только в никсе.

Куда копать? Картинка в Gnome и Корице не идеальна, глаза тоже устают.

 , ,

StatusX88
()

Ошибка при установке драйверов WIFI на Debian

Форум — General

Я пытаюсь установить драйвер на WIFI адаптер который подключенный по usb, но при устаговке вылазит эта ошибка:

make[1]: выход из каталога «/usr/src/linux-headers-4.19.0-13-amd64» make: *** [Makefile:1893: modules] Ошибка 2 ################################################## Compile make driver error: 2 Please check error Mesg ##################################################

Перелазил много сайтов и форумов но исправить не смог

Можете помочь устранить ее?

 

HGRT
()

Wifi в debian

Форум — General

Установил дебиан. По этому гайду установил нужный мне драйвер на вайфай : git clone *****://github.com/art567/mt7601usta.git - (вместо ***** https) cd mt7601usta/src make sudo make install sudo mkdir -p /etc/Wireless/RT2870STA/ sudo cp RT2870STA.dat /etc/Wireless/RT2870STA/ sudo modprobe mt7601Usta Все выполнилось без ошибок. Перезагрузил пк, а вайфая иконки нет. Показывает только проводное соединение. Wlan0 нет в ifconfig. Что делать?

 , ,

Benj2000
()

Говорили что Перл старый, ни на что не способный язык. Проверим?(часть 2)

Форум — Development

Задание на сейчас. найти максимальное вхождение одного слова в другое в СЛОВАРЕ - смотри ниже!!!

Перл - со словарём не справился;

Для C++ . - У меня перебирает весь словарь за 17 секунд;

Для JS - Около минуты. Говорили что Перл старый, ни на что не способный язык. Проверим?(часть 2) (комментарий);

Всё. Пока ничего другого, полностью рабочего нет.

Не нужно писать решение для единичных слов. Нужно - решение для словаря.

Возьмём список русских существительных, например отсюда: https://github.com/Harrix/Russian-Nouns/releases/download/v2.0/russian_nouns_v2.0.zip

Нужно найти максимальное вхождение одного слова в другое. Полные вхождения слов - не допускаются - это вроде было ясно и понятно всем. — Это задание. Это!!!


Самое простое и наглядное решение в составлении слов это:

/(\w+) \1/

Так-как даже я уже ничего не могу найти в первой части:

Говорили что Перл старый, ни на что не способный язык. Проверим?

Предлагаю собрать сюда наиболее значимые решения из 1 части.

Итак:

В начале, мы просто делали из

шлакоблок + окунь = шлакоблокунь

На разных языках. Там есть решения. Затем все стали зачем то уменьшать количество строк и символов - победил Перл - но это вообще не интересно.

Теперь, самое главное:

Говорили что Перл старый, ни на что не способный язык. Проверим?

Здесь все согласились что Перл хороший и годный язык, но С++ всё равно быстрее. В связи с этим, было предложено:

Говорили что Перл старый, ни на что не способный язык. Проверим?


Возьмём список русских существительных, например отсюда: https://github.com/Harrix/Russian-Nouns/releases/download/v2.0/russian_nouns_v2.0.zip На основе этого списка создадим новый, со всеми новыми сочетаниями, где перекрываются не менее 3 букв. Тут даже секундомером можно замерять. У меня на моем стареньком ноуте ушло несколько минут и сгенерировалось почти 40 Мбайт из одного. У Вас есть код на Перле и C++. Можете сравнить время. Так как здесь тоже работа со строками, то у Перла есть шанс.

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

Тут ведь уже говорили - что основное время программы - это ввод и вывод. То есть в задании нужно сделать как можно меньше выводов.

Единственное что мне приходит в голову - найти максимальное вхождение одного слова в другое. —!!! Это и стало основным и новым заданием. !!!—


Эти все задачи были решены для Перл и С++

Для Перл. 3 варианта решения. Но ни одно не берёт весь словарь:

#!/usr/bin/perl

use utf8;
use open qw(:std :utf8); 

$t = time();

$| = 1;
open D, 'russian_nouns.txt';

for(0..3000) {
  $vv=<D>;
  $vv =~ s/\s+$//;
  @d = (@d, $vv);
  }

close D;
@d2 = @d;


for $v (@d){
    ++$ii; if (++$j>99){
    $t2 = time()-$t;
    print $ii." прошло $t2 секунд. $sov1 $str\n"; $j=0;}

  for $v2 (@d2) {&resh3 ()}
  
M1:  
  }
  
sub resh3 {
  
  $lv = length $v;
  $lv2 = length $v2;

  if($lv>$lv2) {
  
    for($i=$lv2; $i>1; $i--) {
      $c = substr ($v, -$i,);
      $c2 = substr ($v2, 0, $i);
      if (($c eq $c2) and ($c ne $v2) and ($c ne $v)){
          $sov = length $c;
          if ($sov>$sov1){$sov1=$sov; $str="$c = $v-$v2"}
          }
        
  
      }

  
  }
  else {
    
        for($i=$lv; $i>1; $i--) {
      $c = substr ($v2, -$i,);
      $c2 = substr ($v, 0, $i);
      if (($c eq $c2) and ($c ne $v2) and ($c ne $v)){
          $sov = length $c;
          if ($sov>$sov1){$sov1=$sov; $str="$c = $v-$v2"}
          }
        
  
      }
    
    
    
    }
  
  
}
  

sub resh1 {  
    $r=''; $l='';
    for(split(//,$v2)){
      $r .= $_;
      if ($v =~ /$r$/) {$l=$r}  
      }
    #print "$v-$l-$v2\n" if length $l>4 and $v ne $l;
    
    if ($l and ($l ne $v2) and ($l ne $v)){
    $sov = length $l;
    if ($sov>$sov1){$sov1=$sov; $str="$l - $v-$v2"}
}
}


sub resh2 {
  
    if($v ne $v2) {
    $_ = "$v $v2";
    /([^ ]*?)([^ ]*) \2/;
    
    if ($2 and ($2 ne $v2) and ($2 ne $v)){
    $sov = length $2;
    if ($sov>$sov1){$sov1=$sov; $str="$2 - $_"}

}
  }}
  

Для C++ . У меня перебирает весь словарь за 17 секунд.:

#include <iostream>
#include <fstream>
#include <ctime>
#include <string>
#include <vector>
using namespace std;

void check_combine(string &res, size_t &len, const string &s1, const string &s2)
{
    len = 0;
    for(auto &ch: s1)
    {
        if(len == s2.size())
        {
            break;
        }
        if(ch == s2.at(len))
        {
            len += 1;
        }
        else
        {
            len = 0;
        }
    }
    if(!len)
    {
        res = "";
    }
    else
    {
        string s3  {s2};
        s3.erase(0, len);
        res = s1;
        res += s3;
    }
}

void getlines(vector<string> &lines, fstream & f)
{
    string str;
    while(getline(f, str))
    {
        lines.push_back(str);
    }
}

int main()
{
    fstream inFile;
    inFile.open ("russian_nouns.txt", std::fstream::in);
    vector<string> lines;
    getlines(lines, inFile);
    size_t maxLen  {0};
    size_t rusMaxLen  {0};
    string maxRes  {""};
    time_t startTime = time(nullptr);
    size_t counter  {0};
    for(auto &s1: lines)
    {
        for(auto &s2: lines)
        {
            counter += 1;
            if(s1 == s2)
            {
                continue;
            }
            if(s1.size() < maxLen)
            {
                continue;
            }
            if(s2.size() < maxLen)
            {
                continue;
            }
            size_t len  {0};
            string res;
            check_combine(res, len, s1, s2);
            if(res == s1)
            {
                continue;
            }
            if(res == s2)
            {
                continue;
            }
            if(len > maxLen)
            {
                maxLen = len;
                rusMaxLen = maxLen / 2;
                time_t delta = time(nullptr) - startTime;
                string deltaStr  {s2};
                deltaStr.erase(len);
                maxRes = deltaStr + " - " + s1 + '-' + s2;
                cout << counter << "\t прошло: " << delta << " секунд, длина: ";
                cout << rusMaxLen << ", " << maxRes << '\n';
            }
        }
    }
    cout << "\n\nРезультат: " << rusMaxLen << ", " << maxRes << '\n';
    time_t delta = time(nullptr) - startTime;
    cout << "Полное время переборов: " << delta;
    inFile.close();
    return 0;
}


Ниже - не решения текущей задачи! Не решения. Ниже - просто выборка всех решений, на всех языках с прежней темы.

Блин. Как же сложно с людьми с недостаточным образованием. Я вот уже 6 раз написал - и всё равно будут писать про Шлокоблококунь.

php:

➜ php i.php "папа + папаха"
папаха%                                                                                                                                                                   ➜ php i.php "шлакоблок + окунь"
шлакоблокунь%                                                                                                                                                              
➜ cat i.php
<?php
for ($i = 1; $i <= mb_strlen(trim(explode('+', $argv[1])[0])) && $i <= mb_strlen(trim(explode('+',$argv[1])[1])); $i++)
    if (mb_substr(trim(explode('+', $argv[1])[0]), mb_strlen(trim(explode('+',$argv[1])[0])) - $i) === mb_substr(trim(explode('+',$argv[1])[1]), 0, $i)) 
        $j = $i;
echo (isset($j)) ?  trim(explode('+',$argv[1])[0]). mb_substr(trim(explode('+',$argv[1])[1]), $j) : 'error';

Говорили что Перл старый, ни на что не способный язык. Проверим? (комментарий)

 , ,

kompospec
()

До конца года состоится выход российских смартфонов на ОС Sailfish

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

Компания «Открытая мобильная платформа» (ОМП) договорилась о создании трёх версий смартфонов на операционной системе Sailfish. В этом году в продажу поступят устройства от Oysters и Jolla под управлением Sailfish Mobile OS RUS, а также промышленный смартфон «Ермак ОМП» для корпоративных пользователей и госсектора.

«Ермак ОМП» будет работать на 2-ядерном процессоре Qualcomm Snapdragon MSM 8960 с 1 Гб оперативной и 8 Гб встроенной памяти, ёмкостью аккумулятора 3450 мАч, дисплеем 4,5”.

Кроме того, ОМП подала заявку на включение своей мобильной операционной системы Sailfish Mobile OS RUS в реестр отечественного программного обеспечения.

На сайте omprussia.ru доступны изображения всех трёх смартфонов.

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

 ,

MozillaFirefox
()

Минцифры объявило тендер на создание комплекса связи для чиновников почти на 500 млн ₽

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

Минцифры планирует создать суперприложение для чиновников: уже объявлен тендер почти на 500 млн ₽ на разработку новых автоматизированных рабочих мест (АРМ).

В состав комплекса, рассчитанного на 100 тыс. АРМ, войдут мессенджер, средства для видео-конференц-связи, почта, облачное хранилище и другие инструменты, необходимые в работе госслужащих.

Собеседник «Ъ», знакомый с планами цифровой трансформации госорганов, говорит, что сейчас более 54 % ведомств пользуется программным обеспечением Microsoft Exchange Server, но «из-за санкций государство уходит от иностранных решений в сторону решений на открытом коде или отечественных технологий».

Важно, что акцент в техзадании к тендеру сделан на использовании отечественных программ и идет переход к сервисной модели использования ПО, считает председатель совета директоров «Базальт СПО» (разработчик отечественной операционной системы на базе открытого кода) Алексей Смирнов.

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

 ,

anonymous
()

Утилита для создания MitM-точек доступа: wifiphisher

Новости — Безопасность
Группа Безопасность

Для Kali Linux разработана утилита, позволяющая удобно создавать точки доступа для перехвата пароля от Wi-Fi.

Возможности:

  • Отключение (deauthentication) клиентов от настоящей точки доступа.
  • Настройка беспроводного сетевого адаптера в режим точки доступа, копирующий имя и адрес атакуемой точки доступа.
  • Настройка NAT, DHCP-сервер.
  • Улавливающий веб-сервер (captive portal) со страницей для социальной инженерии, замаскированной под страницу обновления прошивки точки доступа.
  • Интерактивный текстовый интерфейс для оператора.

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

 , , ,

vi0
()

INFO: task <task>:<id> blocked for more than 120 seconds. Часть 2.

Форум — Admin

Продолжение марлезонского балета.

В общем, решено было записать gentoo livecd и прогнать самописным тестом:

#!/bin/bash

while true; do
echo "$(date -R | awk '{print $2,$3,$5}')   Test CPU, HDD (dd + urandom, 128M, 256M, 512M, 1G)" >> /mnt/debian/var/log/testserver.log
`dd if=/dev/urandom of=/mnt/debian/tmp/testfile128M.img bs=1k count=131072 2>/dev/null; echo "$(date -R | awk '{print $2,$3,$5}')   Test dd 128M finished" >> /mnt/debian/var/log/testserver.log` &
`dd if=/dev/urandom of=/mnt/debian/tmp/testfile256M.img bs=1k count=262144 2>/dev/null; echo "$(date -R | awk '{print $2,$3,$5}')   Test dd 256M finished" >> /mnt/debian/var/log/testserver.log` &
`dd if=/dev/urandom of=/mnt/debian/tmp/testfile512M.img bs=1k count=524288 2>/dev/null; echo "$(date -R | awk '{print $2,$3,$5}')   Test dd 512M finished" >> /mnt/debian/var/log/testserver.log` &
`dd if=/dev/urandom of=/mnt/debian/tmp/testfile1G.img bs=1k count=1048576 2>/dev/null; echo "$(date -R | awk '{print $2,$3,$5}')   Test dd 1G finished" >> /mnt/debian/var/log/testserver.log`
rm -rf /mnt/debian/tmp/testfile*
echo "$(date -R | awk '{print $2,$3,$5}')   Test CPU, HDD (dd, urandom) finished" >> /mnt/debian/var/log/testserver.log
sleep 60
echo "$(date -R | awk '{print $2,$3,$5}')   Test memory (copy in tmpfs)" >> /mnt/debian/var/log/testserver.log
cp /mnt/debian/root/iso-* /mem/
echo "$(date -R | awk '{print $2,$3,$5}')   Test memory: copying files finished" >> /mnt/debian/var/log/testserver.log
sleep 120
echo "$(date -R | awk '{print $2,$3,$5}')   Test memory: finished. Copying files not deleted" >> /mnt/debian/var/log/testserver.log
echo "$(date -R | awk '{print $2,$3,$5}')   Test HDD (dd + /dev/zero, 10G)" >> /mnt/debian/var/log/testserver.log
dd if=/dev/zero of=/mnt/debian/tmp/testfile10G.img bs=1k count=10485760 2>/dev/null
echo "$(date -R | awk '{print $2,$3,$5}')   Test HDD (dd + /dev/zero, 10G), finished" >> /mnt/debian/var/log/testserver.log
rm -rf /mnt/debian/tmp/testfile*
rm -rf /mem/iso-*
sleep 120
done

До этого я трижды прогонял этот тест (на Debiane, который был установлен на этом рейде), и дважды сервак вис после «Test dd 512M finished».

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

...
Jan 23 12:26:26 livecd kernel: EXT4-fs (cciss!c0d0p1): mounted filesystem with ordered data mode. Opts: (null)
Jan 23 12:27:14 livecd dhcpcd[24180]: enp3s1f1: broadcasting for a lease
Jan 23 12:27:15 livecd dhcpcd[24180]: enp3s1f0: broadcasting for a lease
...

Спустя 2,5 суток, упс!

...
Jan 25 20:24:47 livecd kernel: INFO: task jbd2/cciss!c0d0:24327 blocked for more than 120 seconds.
Jan 25 20:24:47 livecd kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Jan 25 20:24:47 livecd kernel: jbd2/cciss!c0d0 D f6788000     0 24327      2 0x00000000
Jan 25 20:24:47 livecd kernel: f3c23b10 00000046 1b54d000 f6788000 f6c59770 0a646588 00024a73 c155ef80
Jan 25 20:24:47 livecd kernel: c155ef80 c14d2140 f6febcd8 c1045fb5 f6febce8 f6febce8 00000202 00000202
Jan 25 20:24:47 livecd kernel: c10591d9 3b4d88fb 00000007 0a6476d8 00024a73 f6febcc8 0266a950 c14d2140
Jan 25 20:24:47 livecd kernel: Call Trace:
Jan 25 20:24:47 livecd kernel: [<c1045fb5>] ? ktime_get_ts+0x41/0xc6
Jan 25 20:24:47 livecd kernel: [<c10591d9>] ? delayacct_end+0x8d/0x95
Jan 25 20:24:47 livecd kernel: [<c10a24e6>] ? __wait_on_buffer+0x1a/0x1a
Jan 25 20:24:47 livecd kernel: [<c1045fb5>] ? ktime_get_ts+0x41/0xc6
Jan 25 20:24:47 livecd kernel: [<c10a24e6>] ? __wait_on_buffer+0x1a/0x1a
Jan 25 20:24:47 livecd kernel: [<c1398533>] ? io_schedule+0x6e/0xa2
Jan 25 20:24:47 livecd kernel: [<c10a24eb>] ? sleep_on_buffer+0x5/0x8
Jan 25 20:24:47 livecd kernel: [<c1397150>] ? __wait_on_bit+0x2d/0x58
Jan 25 20:24:47 livecd kernel: [<c13971d6>] ? out_of_line_wait_on_bit+0x5b/0x63
Jan 25 20:24:47 livecd kernel: [<c10a24e6>] ? __wait_on_buffer+0x1a/0x1a
Jan 25 20:24:47 livecd kernel: [<c1036f3a>] ? autoremove_wake_function+0x29/0x29
Jan 25 20:24:47 livecd kernel: [<c10a24e4>] ? __wait_on_buffer+0x18/0x1a
Jan 25 20:24:47 livecd kernel: [<c113739a>] ? jbd2_journal_commit_transaction+0xaa5/0x1077
Jan 25 20:24:47 livecd kernel: [<c113971c>] ? kjournald2+0xa3/0x1ac
Jan 25 20:24:47 livecd kernel: [<c113971c>] ? kjournald2+0xa3/0x1ac
Jan 25 20:24:47 livecd kernel: [<c1036f11>] ? abort_exclusive_wait+0x63/0x63
Jan 25 20:24:47 livecd kernel: [<c1139679>] ? commit_timeout+0x5/0x5
Jan 25 20:24:47 livecd kernel: [<c103686b>] ? kthread+0x8d/0x92
Jan 25 20:24:47 livecd kernel: [<c13997bb>] ? ret_from_kernel_thread+0x1b/0x30
Jan 25 20:24:47 livecd kernel: [<c10367de>] ? __kthread_parkme+0x50/0x50
...

Вот лог при попытке писать процессом test.sh:

...
Jan 25 20:26:47 livecd kernel: INFO: task test.sh:28913 blocked for more than 120 seconds.
Jan 25 20:26:47 livecd kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Jan 25 20:26:47 livecd kernel: test.sh         D 00000001     0 28913  24246 0x00000000
Jan 25 20:26:47 livecd kernel: f654bb10 00000086 ffffffff 00000001 f6c59030 c78d2438 c3ef4358 c155ef80
Jan 25 20:26:47 livecd kernel: c155ef80 f6a0b6a0 db44c588 db44c5c0 00001000 f533f780 f685f320 f31e9000
Jan 25 20:26:47 livecd kernel: c10a4620 00001000 00000001 f7548760 c155ef80 00000246 00000246 c1036e16
Jan 25 20:26:47 livecd kernel: Call Trace:
Jan 25 20:26:47 livecd kernel: [<c10a4620>] ? __getblk+0x23/0x283
Jan 25 20:26:47 livecd kernel: [<c1036e16>] ? prepare_to_wait+0x57/0x5f
Jan 25 20:26:47 livecd kernel: [<c11361d4>] ? do_get_write_access+0x1ae/0x346
Jan 25 20:26:47 livecd kernel: [<c1036f3a>] ? autoremove_wake_function+0x29/0x29
Jan 25 20:26:47 livecd kernel: [<c113644f>] ? jbd2_journal_get_write_access+0x18/0x26
Jan 25 20:26:47 livecd kernel: [<c111eb42>] ? __ext4_journal_get_write_access+0x3b/0x4e
Jan 25 20:26:47 livecd kernel: [<c11086a0>] ? ext4_reserve_inode_write+0x2c/0x5f
Jan 25 20:26:47 livecd kernel: [<c11086f2>] ? ext4_mark_inode_dirty+0x1f/0x14f
Jan 25 20:26:47 livecd kernel: [<c110aeba>] ? ext4_dirty_inode+0x2c/0x42
Jan 25 20:26:47 livecd kernel: [<c109df06>] ? __mark_inode_dirty+0x1e/0x185
Jan 25 20:26:47 livecd kernel: [<c1095d8b>] ? update_time+0x81/0x8a
Jan 25 20:26:47 livecd kernel: [<c1095e05>] ? file_update_time+0x71/0x8a
Jan 25 20:26:47 livecd kernel: [<c1063364>] ? __generic_file_aio_write+0x239/0x3a0
Jan 25 20:26:47 livecd kernel: [<c106351f>] ? generic_file_aio_write+0x54/0x9a
Jan 25 20:26:47 livecd kernel: [<c1103089>] ? ext4_file_write+0x3ec/0x413
Jan 25 20:26:47 livecd kernel: [<c108d348>] ? link_path_walk+0x57/0x675
Jan 25 20:26:47 livecd kernel: [<c1075289>] ? do_wp_page+0x2b6/0x641
Jan 25 20:26:47 livecd kernel: [<c108f884>] ? path_openat.isra.57+0x9c/0x33a
Jan 25 20:26:47 livecd kernel: [<c1076c32>] ? handle_pte_fault+0x5f6/0x633
Jan 25 20:26:47 livecd kernel: [<c108574d>] ? do_sync_write+0x61/0x88
Jan 25 20:26:47 livecd kernel: [<c10856ec>] ? do_sync_readv_writev+0x8d/0x8d
Jan 25 20:26:47 livecd kernel: [<c1085fa6>] ? vfs_write+0x9d/0x13d
Jan 25 20:26:47 livecd kernel: [<c10862ad>] ? SyS_write+0x3f/0x6c
Jan 25 20:26:47 livecd kernel: [<c1398ff8>] ? syscall_call+0x7/0xb
...

Итого: баг проявляется на разных винтах, т.е. это не проблема бэдов. Получается гайка контроллеру/материнке?

Решено обновлением прошивки

leg0las
()

Накатал статью по своему скромному опыту войн с потоками

Форум — Development

По следам треда: Python Shared Objects

Поскольку в прошлом треде все рискнувшие пройти по ссылке заснули на половине статьи, то я решил написать статью в 3 раза короче про совсем общие принципы, лишь отдаленно относящиеся к PSO:

https://habr.com/en/post/587750/ — Многозадачность и многопоточность — распространенные заблуждения и недопонимания

 , , ,

byko3y
()

Изготовление плат в домашних условиях

Форум — Science & Engineering

Посоветуйте технологию для изготовления плат в домашних условиях. Платы будут содержать тонкие дорожки 0.2 мм и два слоя. Бюджет не больше 200к. Особых требований к скорости изготовления или цене платы нет.

Как я понял, есть два основных подхода - ЛУТ и фоторезист. Пока присматриваюсь к фоторезисту - основной плюс - он реализуется фотополимерным принтером, ничего особо мастерить не надо, приклеил плёнку, засветил принтером с нужной схемой и пошёл травить-лудить. Про ЛУТ читал, вроде самый популярный способ, но уйма нюансов - какой принтер (не каждый подходит), какая бумага, утюг или ламинатор, как отчищать бумагу, пока с этим всем разберёшься, ум за разум зайдёт.

Про то, что умные люди заказывают в крупных предприятиях или в Китае я в курсе, тема не про это.

 ,

Legioner
()

Жесткий диск с smr записью, странная запись данных.

Форум — General

Имеется 2 wd20ezaz с черепичной записью оба отформатированы в ntfs с разметкой gpt (телевизор линуксовые системы не видит). Диски покупались именно для использования на тв (иногда Минт и 10-ка). На ноуте с Минтом стоит qbittorrent и включена опция резервирования места под файлы.

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

Причём эти «тормоза» происходят не с каждым файлом (прим. сериал весом 65 гб. писался без остановок и тпд. Другой же файл весом 20 гб. записался на 150 мб. и диск ушёл «в себя» и пока что-то не сделал запись не продолжилась).

И ещё, диски новые (ранее не были записаны), но при проверке в 10-ке программой дефрагментации некоторые файлы нормально записаны (без отдельных фрагментов), а некоторые записаны разбитыми на фрагменты.

Опыта пользования дисками с smr ранее не было, поэтому как точно должно быть не знаю. Если кто сталкивался, подскажите…

 , , ,

Sergey_Reshetov
()

кривого железа тред

Форум — Linux-hardware

Предлагаю в этой теме делиться информацией о правильности работы своего железа, а именно

dmesg | grep fail
dmesg | grep error

При этом указываем модель материнки, если это ноут, то его модель. Еще было бы неплохо указывать параметры ядра, если вы ставили там что-то специфичное, чтобы побороть проблемы с acpi.

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

 , ,

smilessss
()