Поиск по этому блогу

среда, 14 февраля 2024 г.

Генератор идентификаторов и наименований

Иногда возникает задача придумать какое-то удобочитаемое ничего не значащее название. Например, имя для базы данных. Чтобы не тратить лишние калории, написал такую функцию.


Код:
Функция СгенерироватьИдентификатор(Знач ТребуемаяДлина, Знач Начало, Знач МаксСогласныхПодряд, Знач МаксГласныхПодряд) //ТребуемаяДлина = 8; // какой длины должен быть идентификатор //Начало = "vidu"; // с каких символов должен начинаться идентификатор (может быть пустая строка) //МаксСогласныхПодряд = 2; // сколько согласных букв подряд допустимо в идентификаторе //МаксГласныхПодряд = 1; // сколько гласных букв подряд допустимо в идентификаторе Согласные = "bcdfghjklmnpqrstvwxz"; Гласные = "aeiouy"; КолвоСогласных = СтрДлина(Согласные); КолвоГласных = СтрДлина(Гласные); ГСЧ = Новый ГенераторСлучайныхЧисел; Стр = Начало; КолвоСогласныхПодряд = 0; КолвоГласныхПодряд = 0; Если НЕ ПустаяСтрока(Стр) Тогда // посчитаем сколько уже согласных подряд в конце заданной строки Поз = СтрДлина(Стр); Пока Поз > 0 И СтрНайти(Согласные, Сред(Стр, Поз, 1)) > 0 Цикл КолвоСогласныхПодряд = КолвоСогласныхПодряд + 1; Поз = Поз - 1; КонецЦикла; // посчитаем сколько уже гласных подряд в конце заданной строки Если КолвоСогласныхПодряд = 0 Тогда Поз = СтрДлина(Стр); Пока Поз > 0 И СтрНайти(Гласные, Сред(Стр, Поз, 1)) > 0 Цикл КолвоГласныхПодряд = КолвоГласныхПодряд + 1; Поз = Поз - 1; КонецЦикла; КонецЕсли; ТребуемаяДлина = ТребуемаяДлина - СтрДлина(Стр); КонецЕсли; Для Сч = 1 По ТребуемаяДлина Цикл СледующаяГласная = Ложь; Если КолвоСогласныхПодряд >= МаксСогласныхПодряд Тогда // следующая буква должна быть гласной СледующаяГласная = Истина; ИначеЕсли КолвоГласныхПодряд >= МаксГласныхПодряд Тогда // следующая буква должна быть согласной СледующаяГласная = Ложь; Иначе // следующая может быть как гласной, так и согласной - выбираем 50/50 СледующаяГласная = (ГСЧ.СлучайноеЧисло(1, 100) > 50); КонецЕсли; Если СледующаяГласная Тогда Стр = Стр + Сред(Гласные, ГСЧ.СлучайноеЧисло(1, КолвоГласных), 1); КолвоСогласныхПодряд = 0; КолвоГласныхПодряд = КолвоГласныхПодряд + 1; Иначе Стр = Стр + Сред(Согласные, ГСЧ.СлучайноеЧисло(1, КолвоСогласных), 1); КолвоСогласныхПодряд = КолвоСогласныхПодряд + 1; КолвоГласныхПодряд = 0; КонецЕсли; КонецЦикла; Возврат Стр; КонецФункции

пятница, 28 апреля 2023 г.

Некоторые ошибки 1С и способы их устранения

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


Неожиданная ошибка в работе архиватора: some_file.zip - C:\Users\user1c\AppData\Local\Temp\some_file.zip".

Платформа8.3.21.1622 (x64), серверная
ПериодАпрель 2023
ПричинаНеизвестна
ДополнительноПример кода, который падает по ошибке:
&НаСервере
Процедура Команда1НаСервере()

    ВремФайл = ПолучитьИмяВременногоФайла("zip");

    ЗаписьЗИП = Новый ЗаписьZipФайла(ВремФайл);
    ЗаписьЗИП.Добавить("<имя-файла-на-сервере>");
    ЗаписьЗИП.Записать();

    ЧтениеЗИП = Новый ЧтениеZipФайла(ВремФайл);
    ЧтениеЗИП.ИзвлечьВсе("<имя-каталога-на-сервере>");
УдалитьФайлы(ВремФайл); КонецПроцедуры
РешениеПерезапуск сервера приложений/кластера (рестарт сервиса ragent.exe)


Неклассифицированная ошибка работы с хранилищем конфигурации. По причине: Ошибочный порядок записи XML.

Платформа8.3.21.1622 (x64), серверная
ПериодМарт 2023
ПричинаНедостаточно места на диске, где расположено хранилище и/или каталог временных файлов.
ДополнительноОшибка возникала при попытке подключить тестовую базу к существующему хранилищу конфигурации.
РешениеОсвободить место на диске, где расположено хранилище и/или каталог временных файлов.

пятница, 4 февраля 2022 г.

Как ограничить доступ к "взрослым" сайтам на телефоне ребёнка (для Android 9+)

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

Для этого заходим в Настройки / Сеть и Интернет / Дополнительно / Персональный DNS-сервер, ставим переключатель в положение "Имя хоста поставщика персонального DNS-сервера", указываем адрес family.cloudflare-dns.com и сохраняем настройку:


Теперь при попытке зайти на взрослый сайт будет выдаваться сообщение "Не удается получить доступ к сайту".

Если Вам чем-то не нравится сервис от Cloudflare, вот тут есть список других DNS-провайдеров: https://kb.adguard.com/ru/general/dns-providers. Подходят только те провайдеры, которые предоставляет доступ к DNS-over-TLS. 

К сожалению, достаточно популярный отечественный сервис Яндекс.DNS  доступ к DNS-over-TLS пока что не предоставляет. Поэтому, несмотря на наличие у них "Семейного" режима, использовать его для данного способа не получится. И хотя есть возможность настроить "Семейный" режим от Яндекс.DNS для сетей WiFi (либо включив его на роутере, либо настроив DNS вручную на телефоне), но только работать он будет лишь для конкретных настроенных WiFi-сетей, а мобильный интернет вообще никак не будет ограничен. В то же время описанный здесь метод настройки через "Персональный DNS-сервер" работает и для WiFi (для всех сетей), и для мобильного интернета.

Впрочем, и этот метод имеет как минимум один существенный недостаток - ребёнок может самостоятельно залезть в настройки и отключить "Персональный DNS-сервер". Поэтому тщательно следите за тем, чтобы эта статья не попалась ему/ей на глаза!


P.S. Кстати, подобная настройка может быть полезна и на телефонах у взрослых, т.к. помимо "клубничных" сайтов благодаря ей также блокируются сайты, через которые нехорошие люди-редиски распространяют вирусы и трояны.
P.P.S. Если вам нужна только блокировка сайтов, распространяющих вредоносное программное обеспечение, а доступ к взрослому контенту хочется оставить, то можно использовать другой адрес для "Персонального DNS-сервера" - security.cloudflare-dns.com









вторник, 4 января 2022 г.

Пропал звук после обновления на Fedora 35

Решил обновиться до Fedora 35.
Сижу, смотрю как обновляется, отвёрткой в ухе ковыряюсь.

Вдруг что-то щёлкнуло.
Загрузил обновлённую операционку, а там звук пропал!
Реальная история вымышленного читателя моего блога

Судя по всему доблестные федоро-дистро-строители решили заменить пш-ш-шило на пш-ш-мыло PulseAudio на PipeWire. Не знаю у кого как, у меня оно не завелось. Но спасибо федорянам - они не только подложили свинью, но и рассказали как её убрать (см. https://fedoraproject.org/wiki/Changes/DefaultPipeWire):

$ sudo dnf swap --allowerasing pipewire-pulseaudio pulseaudio 

Ну а чтобы вернуть обратно настройки профиля по умолчанию для PulseAudio (если вы его настраивали через /etc/pulse/default.pa):

$ sudo cp /etc/pulse/default.pa.rpmsave /etc/pulse/default.pa

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

 

пятница, 25 июня 2021 г.

Отладка запросов в 1С: удобное заполнение текста и параметров запроса в Консоли Запросов через "Заполнить из XML"

Случайно тут наткнулся на интересную возможность штатной Консоли Запросов по отладке запросов. Правда, работает только с БСП.

В отладчике останавливаемся на интересующем нас запросе, вызываем диалог "Вычислить выражение (Shift + F9)", вставляем в поле "Выражение" следующую строку:

ОбщегоНазначения.ЗапросВСтрокуXML(Запрос)
или
ОбщегоНазначения.ЗначениеВСтрокуXML(Новый Структура("Текст, Параметры", Запрос.Текст, Запрос.Параметры))


Затем нажимаем "Рассчитать", копируем в буфер обмена полученное "Значение", закрываем диалог "Вычислить выражение", нажимаем "Продолжить отладку (F5)".

Теперь переходим в режим "Предприятие", открываем Консоль Запросов, вставляем скопированный текст в поле "Текст запроса", нажимаем "Ещё", выбираем пункт меню "Заполнить из XML":


И... получаем заполненный текст запроса и параметры (!!!):




понедельник, 12 октября 2020 г.

Send to SD card - сохранение на карту памяти из меню "Поделиться" в приложении для Android

Когда в приложении для Android открываешь меню "Поделиться", то там можно увидеть всё что угодно - и "Bluetooth", и "Сообщения", и "Обмен с окружением" и какой-то "Android Beam", но по умолчанию отсутствует самый логичный пункт - "Сохранить на карту памяти". Почему разработчики Android его не добавили я не знаю, но хорошо, что у нас есть F-Droid, в котором выложено приложение, исправляющее этот недочёт. Это приложение называется "Send to SD card":

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



пятница, 17 апреля 2020 г.

Назначения профиля по умолчанию для PulseAudio

Начиная с какого-то момента (возможно, после перехода на очередной релиз), у меня в моём Linux Fedora перестал работать звук.
После каждой загрузки системы приходилось запускать pavucontrol, переходить на вкладку Конфигурация, и вместо выбранного по умолчанию профиля "Цифровой стерео (IEC958) выход" перевыбирать "Аналоговый стерео выход":
 

Разумеется, в какой-то момент мне это надоело, и я начал искать способ, как сделать так, чтобы профиль "Аналоговый стерео выход" устанавливался при загрузке системы автоматически. Простого способа, такого например, как кнопка "Установить по умолчанию" для профиля в том же самом pavucontrol-е, я не нашёл (что и понятно, это же Linux!), поэтому пришлось немного поразбираться с настройками PulseAudio.
Всё оказалось не так страшно. Даже совсем нестрашно. Но какое-то время на поиск решения всё же пришлось потратить. Надеюсь, что теперь кому-то смогу это время сэкономить.

Итак, в моём случае решение сводилось к правке файла /etc/pulse/default.pa. В самом конце я добавил:
set-card-profile alsa_card.pci-0000_00_1b.0 output:analog-stereo
set-sink-port alsa_output.pci-0000_00_1b.0.analog-stereo analog-output-lineout

И всё заработало!
После перезагрузки устанавливался нужный профиль и выбирался нужный порт для вывода звука - линейный выход.

Значения параметров для этих команд в вашем случае могут быть другие. Их можно посмотреть с помощью "pacmd list-cards" (вывод команды сокращён для удобства чтения; значения интересующих нас параметров выделены красным цветом):
$ pacmd list-cards
1 card(s) available.
    index: 0
 name: <alsa_card.pci-0000_00_1b.0>
 driver: <module-alsa-card.c>
 owner module: 6
 properties:
  alsa.card = "0"
  alsa.card_name = "HDA Intel"
  ...
 profiles:
  input:analog-stereo: Аналоговый стерео вход (priority 65, available: no)
  output:analog-stereo: Аналоговый стерео выход (priority 6500, available: no)
  output:analog-stereo+input:analog-stereo: Аналоговый стерео дуплекс (priority 6565, available: no)
  output:analog-surround-21: Аналоговый объёмный 2.1 выход (priority 1300, available: no)
  ...
  output:iec958-stereo: Цифровой стерео (IEC958) выход (priority 5500, available: unknown)
  output:iec958-stereo+input:analog-stereo: Цифровой стерео (IEC958) выход + Аналоговый стерео вход (priority 5565, available: no)
  off: Выключено (priority 0, available: unknown)
 active profile: <output:analog-stereo>
 sinks:
  alsa_output.pci-0000_00_1b.0.analog-stereo/#6: Встроенное аудио Аналоговый стерео
 sources:
  alsa_output.pci-0000_00_1b.0.analog-stereo.monitor/#6: Monitor of Встроенное аудио Аналоговый стерео
 ports:
  analog-input-front-mic: Фронтальный микрофон (priority 8500, latency offset 0 usec, available: no)
   properties:
    device.icon_name = "audio-input-microphone"
  ...
    
  analog-output-lineout: Линейный выход (priority 9000, latency offset 0 usec, available: no)
   properties:
    
  analog-output-headphones: Наушники (priority 9900, latency offset 0 usec, available: no)
   properties:
    device.icon_name = "audio-headphones"
  iec958-stereo-output: Цифровой выход (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)
   properties:
Для команды set-card-profile нас интересуют:
  • Имя звуковой карты. В моём случае это "alsa_card.pci-0000_00_1b.0".
  • Имя профиля. В моём случае это "output:analog-stereo".
Для команды set-sink-port нас интересует:
  • Имя sink-а. В моём случае это "alsa_output.pci-0000_00_1b.0.analog-stereo".
  • Имя порта. В моём случае это "analog-output-lineout". Если бы я захотел, чтобы по умолчанию звук выводился на наушники, то в качестве имени порта я бы указал "analog-output-headphones".

Перед тем, как изменять файл /etc/pulse/default.pa нужно:
  1. Сделать его резервную копию. Во-первых, потому что нужно всегда делать резервные копии файлов настроек перед их редактированием, а во-вторых, потому что если в этом файле накосячить, то PulseAudio вообще не запустится.
  2. Проверить правильность ваших параметров, запустив предварительно подготовленные команды через pacmd в терминале. Например:
  3. $ pacmd set-card-profile alsa_card.pci-0000_00_1b.0 output:analog-stereo
    $ pacmd set-sink-port alsa_output.pci-0000_00_1b.0.analog-stereo analog-output-lineout