Javascript: формирование csv файла

Задача: на чистом javascript сформировать и сохранить из браузера файл формата csv, адекватно открывающийся табличным редактором (например OnlyOffice)

Решение:

rows=[];
rows.push(["aa","bb"]);

let csvContent = "data:text/csv;charset=utf-8," + rows.map(e => e.join(",")).join("\n");
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "download.csv");
document.body.appendChild(link); 
link.click();

Что тут происходит: заполняется некий массив, далее создаётся ссылка в DOM, и в элемент ссылки записываются данные массива. Далее эмулируется нажатие собственно на эту ссылку.

Всплывающее окно на Битрикс «Управление сайтом»

Хм..вот плохо иногда быть самоучкой по методу научного тыка. Для некоторых вещей изобретал велосипед при наличии штатного функционала. Ранее всплывающие окна отрисовывал в стиле bootstrap, а оказывется для этого есть штатные вещи. Далее пример окна:

  popup_warning = BX.PopupWindowManager.create("popup-message", BX('element'), {
            content: 'Показания по всем радостям не записаны!',
            width: 300, 
            height: 200,
            zIndex: 100,
            closeIcon: {opacity: 1},
            titleBar: 'Внимание!',
            closeByEsc: true, 
            darkMode: false, 
            autoHide: false, 
            draggable: true, 
            resizable: true, 
            min_height: 100, 
            min_width: 100, 
            lightShadow: true, 
            overlay: {backgroundColor: 'black',opacity: 500}, 
            buttons: [
                new BX.PopupWindowButton({
                    text: 'Понятно', 
                    id: 'ok-btn', 
                    className: 'ui-btn ui-btn-success',
                    events: {
                      click: function() {
                          popup_warning.close()
                      }
                    }
                })
            ],
            events: {
               onPopupShow: function() {                                 
               },
               onPopupClose: function() {
               }
            }
        });

Подсмотрено тут

Глядя на цены на услуги на Авито

Проткнул давече колесо на самокате. Ну думаю если колеса на машинах клеят за 600р, так уж наверное с самокатом вопрос решить фигня вопрос. Открываю авито…и тут я прихудел чуток, от этих цен: от 2500 за колесо, плюс стоимость камеры от 800р. И далее сыграла у меня моя природная жадность. Купил на WB камеру за 300р, и комлект лопаточек для 176р. Пришли через день. Далее я утром попыхтел с час. Причем дольше всего тупо искал как отвинтить мотор-колесо у самоката. И всё, замена осуществлена, самокат снова в работе. Цена вопроса 476р плюс час времени.

И тут я подумал, что это отличный бизнес-план, как заработать кучу денег за летний сезон: нужно всего лишь подать объявление на то-же авито, зарядив ценник в два раза дешевле за замену камеры. Но тут меня уже обломал сам авито: сказал что в этом разделе объявления платные. Аж 263 рубля за разовое размещение. В общем так я и не стал долларовым миллионером..

1С: Отбор в списке выбора с предустановленным фильтром

Задача: в табличной части на форме документа давай выбирать пользователю только необходимые элементы справочнике при заполнении реквизита.

Решение:

В реквизите установим связь параметров выбора «Очищать» при каждой попытке выбора элемента:

На событие «При изменении» табличной части на форме добавить событие, которое формирует фильтр:

	НовыйПараметр = Новый ПараметрВыбора("Отбор.Суд", ЗначениеРеквизитаОбъекта(Объект.Суд, "ПризнакСуда"));
	НовыйМассив = Новый Массив();
	НовыйМассив.Добавить(НовыйПараметр);
	НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
	Элементы.ДанныеИскаРезультат.ПараметрыВыбора = НовыеПараметры;  

И в параметрах выбора выставим:

Используем нейросеть локально

Задача: установить нейросеть на свой ПК, и пообщаться с ней посредством python. Маленькая задачка, часть более глобальной далее (в следующих частях) — дообучить на своих данных, и сделать скрипт отвечающий на вопросы пользователей.

Статья подготовлена на основе следующих источников:

  • https://habr.com/ru/companies/bothub/articles/1019314/

Решение:

Сначала установим оболочку для нейросетей. Например я остановился (в данный момент) на https://gpt4all.io. Там есть инсталляторы для разных ОС. Я пока остановился для Windows. После установки нужно выбрать модель для скачивания, в зависимости от того какое у вас «железо». В моем случае, т.к. памяти достаточно (64ггб оперативы + 32ггб RTX 3060), я выбрал DeepSeek-R1-Distill-Qwen-14B

После загрузки модели, попробовал создать чат, и в принципе модель бодренько стала мне отвечать. Правда во время генерации ответов все ресурсы ушли в «полочку». Но ответы вполне осмысленные:

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

После этого становится доступен api через обычный http. Точки вызовов следующие:

  • http://localhost:4891/v1/models — получить список установленных моделей
  • http://localhost:4891/v1/models/ — получить настройки выбранной модели
  • http://localhost:4891/v1/completions — генерация текста
  • http://localhost:4891/v1/chat/completions — общение в режиме чата

Небольшая сноска. Наш любимый РКН, 21.03.2026 заблокировал часть адресов, среди которых под раздачу попала и установка пакетов через pip install. Я сиё обошел установкой VPN Amnezia. Далее упоминать об этом не буду, и считаю что способ установки пакетов у вас есть.

Ну а дальше простой скрипт:

import requests

# URL, куда отправляем запрос (если вы установили GPT-4All локально)
url = "http://localhost:4891/v1/chat/completions"

headers = {
    "Content-Type": "application/json",
}

data = {
    "model": "DeepSeek-R1-Distill-Qwen-14B",  # Используйте модель, которую поддерживает GPT-4All
    "messages": [{"role": "user", "content": "Сколько будет 2+2?"}],
    "max_tokens": 500,
    "temperature": 0.28
}

response = requests.post(url, headers=headers, json=data)

if response.status_code == 200:
    print(response.json())
else:
    print(response)
    print(f"Ошибка: {response.status_code}")

Результат:

Хм, пользователь спросил «Сколько будет 2+2?» на русском языке. Нужно ответить правильно и понятно.
Проверю: 2 плюс 2 равно 4.

1 2 3 305