Пора перестать ждать неожиданных подарков от жизни, а самому делать жизнь.
Жопа кота

Блог геморроя

Я устал создавать куча заметок и забывать пароли от них. Для этого я создал этот микроблог. Буду писать то что не плохо было бы помнить.

Скачать Шрифт Брайеля TTF

Шрифт Брайеля можно использовать для автоматического перевода из обычного текста в шрифт Брайеля прямо в текстовом редакторе Word или ему подобным. Для этого выделите текст и выберете среди Шрифтов Kanischev_Braille. Не поддерживает математические символы.
Скачать
Post Scriptum
Более подробная информация по математическим символам в шрифте Брайеля тут

Windows не подключаеться к WebDav

Тебя посетил геморрой ты не как не можешь подключиться к WebDav серверу.
Может быть используешь не стандартный порт.
Или нету SSL.
А подключение сетевого диска или выдает ошибку, или без конечный ввод логина и пароля.
Знай решения геморроя близко.

Пуск - Выполнить - regedit
В редакторе идем в директорию
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
Ищем там параметр BasicAuthLevel
Меняем его на 2

Перезагружаем ПК и геморрой проходит.

 Нет комментариев    127   3 мес   error   Webdav   windows

Windows 11 переключение раскладки

Если ты несчастный пользователь виндовс 11 и переключаешь раскладку через alt+shift
И тебя задрало что постоянно появляется две раскладки UK USA итого их становиться три
UK USA RU и ты суммарно написал «Войну и мир» думаю что сменил раскладку.
А все советы на сайте микрософта сводятся к смене клавиш.
Знай твой геморрой почти окончен.
На хабре есть статья на этот счет
В двух словах есть программа которая лечит этот геморрой вот
PS если назначите переключение в программе alt+shift сменить в ос windows клавиши переключение раскладки допустим на ctrl + shift

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

Хотел найти рабочий пример запуска прогресс бара в модальном окне, попадались все какие-то не рабочие примеры. Назрел геморрой. По этому оставлю этот код тут:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ModalProgressBarExample extends JFrame {
    private JProgressBar progressBar;
    private JButton startButton;
    private JDialog dialog;
    private Timer timer;

    public ModalProgressBarExample() {
        setTitle("Modal Progress Bar Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 200);
        setLocationRelativeTo(null);

        progressBar = new JProgressBar();
        startButton = new JButton("Start");

        startButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Runnable show = () -> {
                    showProgressBar();
                };
                SwingUtilities.invokeLater(show);
                Runnable r = () -> {
                    startProgressBar();
                };
                r.run();
            }
        });

        JPanel panel = new JPanel();
        panel.add(startButton);

        add(panel, BorderLayout.CENTER);
    }

    private void showProgressBar() {
        dialog = new JDialog(this, "Progress", true);
        dialog.setLayout(new FlowLayout());
        dialog.setSize(200, 100);
        dialog.setLocationRelativeTo(null);

        progressBar = new JProgressBar(0, 100);
        progressBar.setValue(0);
        progressBar.setStringPainted(true);

        dialog.add(progressBar);
        dialog.setVisible(true);
    }

    private void startProgressBar() {
        timer = new Timer(100, new ActionListener() {
            int value = 0;

            @Override
            public void actionPerformed(ActionEvent e) {
                value++;
                progressBar.setValue(value);
                System.out.println(value);
                if (value == 100) {
                    timer.stop();
                    dialog.dispose();
                }
            }
        });

        timer.start();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ModalProgressBarExample().setVisible(true);
            }
        });
    }
}

И геморрой проходит.

Последний TalkBack+5.0.7 для Android 4.1 +

Появился геморрой в том что надо ставить самый свежий TalkBack на Android
Google Play увы на них уже не работает. По этому APK Выкладываю тут
Скачать TalkBack+5.0.7 APK
Еще есть легенда что Google play проходит авторизацию с последней версией GMS. Что входит в GMS?
Google Mobile Services (GMS) — это набор программного обеспечения, в который входят YouTube, Google Play, «Google Карты» и ряд других сервисов компании.
Последняя версия для Android 4.1
Скачать com.google.android.gms_22.31.12
И геморрой не много проходит.

Jar to exe

Сегодня речь пойдёт о десктоп программах написанных на java и их распространении. Со временем я столкнулся с проблемой — программы, которые я хочу показать знакомым не запускаются на их компьютере из-за отсутствия Java. Рассказывать о том как установить Java и запустить jar сборку — то ещё удовольствие. Особенно для пользователей Windows, которые привыкли запускать приложения двойным кликом.

В своё время я практиковал «exe» сборки собранные через Launch4j, но это не избавляло от необходимости установки Java. А рассказ знакомым про переменные среды и передачу аргументов заставлял их отказываться от идеи посмотреть мою программу.

Итак, ближе к делу, начиная с Java 9 появился славный инструмент jlink, который позволяет создать пользовательскую среду исполнения с минимальным количеством модулей. То есть свою Java с блек-джеком и распутными женщинами, которой мы будем передавать свой jar.

Для пользователя это будет выглядеть как «exe» файл и пара папок. И ни каких дополнительных установок делать не нужно. Ниже мы напишем самую простую программу на Java Swing (так как он встроен в Java), соберем Jar. Сделаем образ среды исполнения и «exe» файл. Даже со своим не скучным значком.

Программа и сборка jar:

Итак, создадим простое окно с надписью внутри Hello world . Откроем Ide, там создадим простой java проект, назову его SwingExempl.

Пример 1

Внутри напишем код для создания окна. Вот его листинг

import javax.swing.*;

public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {//Приложение Swing запускается в отдельном потоке событий. Это он:
@Override
public void run() {
JFrame frame = new JFrame("SwingExempl");//Создаём окно и задаём ему название:
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// Это для того, чтобы при нажатии на «x» окно закрывалось.
frame.setSize(300,100);//тут его размер
JPanel panel = new JPanel();// Это панель для окна
panel.add(new JLabel("Hello world"));// В панель вставляем надпись
frame.add(panel);//Вставляем в окно панель
frame.setVisible(true);//Делаем всё видимым
}
});
}

Тут я написал комментарий к коду, что-то писать дополнительно не имеет смысла.
Теперь нам надо создать Jar архив с помощью IntelliJ IDEA, это не сложно. Для этого перейдём File — Project Structure — Artifacts

Там нажмём кнопку «+», где выберем jar, а там вкладку From modules with dependencies...

Пример 2

В появившемся окне следует указать Main класс и нажать кнопку ок

Пример 3

Теперь можно собрать наш Jar, для этого выберем пункт Build — Build artifacts ...

Пример 4

В появившемся окне выбрать SwingExampl.jar — Build

Пример 5

Теперь всё в папке out/artifacts/SwingExempl_jar/ появился наш архив SwingExempl.jar.
Его можно запустить двойным кликом и убедиться, что программа работает.

Пример 5

Зависимости и среда исполнения:

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

В папке с нашим jar архивом вызовем терминал, где наберём команду

jdeps.exe -s SwingExempl.jar

В моем случае на скриншоте путь до утилиты jdeps указан абсолютный, так как в переменных средах у меня нет jdeps. У меня jdk 20 и утилита jdeps находится там.

Пример 7

В нашем случае утилита вывела всего две зависимости:

SwingExempl.jar -> java.base
SwingExempl.jar -> java.desktop

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

Зная наши зависимости,
Посмотреть все изображения
собираем среду исполнения утилитой jlink

jlink.exe —no-header-files —no-man-pages —compress=2 —strip-debug —add-modules java.base,java.desktop,jdk.accessibility —output ваш_путь\out\artifacts\SwingExempl_jar\out3

Кстати, папка out3 не должна существовать, иначе утилита выдаст ошибку. То есть она создаст папку сама. В итоге у нас появляется директория out3, в которой есть папка bin, а там наша java.exe

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

Настало время её проверить, для этого запустим наш jar из той java, которую мы собрали. Команда будет такой:

ваш_путь\out\artifacts\SwingExempl_jar\out3\bin\java.exe -jar SwingExempl.jar

Пример 8

Мы запускаем программу не от java, которая у нас в переменных средах Path, а от java.exe, которую мы собрали.\

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

Осталось создать в ней папку jar в директории ваш_путь\out\artifacts\SwingExempl_jar\out3\ и в неё засунуть наш SwingExempl.jar и уже можно передавать программу так. Так как той java, которую мы создали, хватит для запуска программы. Но мы хотим «exe». Придётся немного попрограммировать на «С» и поставить mingw.

Делаем «exe», пишем на «С»:

Для начала нам нужно скачать компилятор mingw Я распаковал его в корень C:/, получилось как-то так:

Пример 9

Потом прописал его в «переменных средах» — «системных переменных» — «Переменная Path» там создадим ещё одну переменную с путём в папку bin C:\MinGW64\bin

Пример 10

Теперь проверим наш компилятор, для этого вводим в терминале:

gcc --version

Если вы видите что-то в духе названия и версии, то все хорошо. В противном случае поищите статьи про установку mingw

Пример 11

Теперь настало время создать «exe» файл. Для этого я создам в директории ваш_путь\out\artifacts\SwingExempl_jar\ папку ccfolder

Пример 12

В неё положу значок моего будущего «exe» файла. Это будет кружка с кофе. Значок должен быть в формате ICO, у меня он будет называться Java.ico. Тут же я создам файл с названием resources.rc
В него с помощью блокнота запишу:

001 ICON "Java.ico"

Как то так:

Пример 13

Сохраняем данные и потом компилируем файл с помощью утилиты windres.exe Команда будет выглядеть так:

ваш_путь\out\artifacts\SwingExempl_jar\ccfolder> windres —use-temp-file resources.rc resources.o

В результате будет создан файл resources.o в той же папке.
Теперь напишем маленькую программку на «С», в которой мы будем запускать нашу программу jar\SwingExempl.jar. Для этого создадим файл runjar.c, а внутри напишем следующее... Листинг ниже.

#include <stdio.h>
#include <process.h>

int main (int argc, char *argv[], char **penv) {
_execl("bin\\javaw.exe", "bin\\javaw.exe", "-jar", "jar\\SwingExempl.jar", NULL);
return 0;
}

Получится как то так:

Пример 14

Теперь заключительный момент, создадим «exe» файл сразу в папке out3 с нашим дистрибутивом. Он будет всего лишь запускать наш jar в пользовательской среде. Для этого введём команду:

ваш_путь\out\artifacts\SwingExempl_jar\ccfolder> gcc -Wall -O3 -mwindows -o ваш_путь\out\artifacts\SwingExempl_jar\out3\SwingExempl.exe runjar.c resources.o

После этого файл SwingExempl.exe должен появиться в папке out3, в той же папке в директории jar должен лежать наш SwingExempl.jar . На этом всё. Двойным кликом по SwingExempl.exe запускается наша простая программа. Структура каталога out3 выглядит так:

Пример 15

Теперь можно переименовать папку out3 как вам угодно, заархивировать и передавать её друзьям с windows , программа будет запускаться без установки jdk или jre. Правда вес нашей программы вырос многократно. Сама jar весит 2кб., а папка со средой и нашим архивом около 50мб. Но это маленькая плата за то, что нам не надо рассказывать как установить java .

PS: Методика взята из книги JavaFX в подлиннике (Николай Прохоренок). Исправлены опечатки, несколько переработан материал.

 Нет комментариев    89   5 мес   exe   Jar   java

Регулировка громкости звука midi в Java

Регулировка звука MIDI файлов JAVA я устал искать информацию вот краткая выжимка. Звук можно регулировать но не сильно не знаю почему значение 0 игнорируется.

И так
Sequencer это само устройства которое воспроизводит миди у него есть славные методы start и stop, беда в том что он не умеет регулировать звук

Sequence это последовательность миди данных в него мы пихаем наш миди файл а его засовываем в Sequencer, Sequence тоже не умеет менять звук.

Звук умеет менять синтезатор Synthesizer как достать синтизатор из сквенсера я не понял по этому я решил делать новый синтезатор и подключать его к сквенсору. И так как код изобилует try cath приведу его тут так

Sequencer sequencer = MidiSystem.getSequencer();
sequencer.open();

Получаем и открываем сквенсер

InputStream resource = Main.class.getResourceAsStream("Test.mid");

получаем инпутстрим на наш миди файл, у меня это написано так, потому что я собираю все Jar.

Sequence sequence = MidiSystem.getSequence(resource);

Засовываем инпутстрим куда вставлена миди в  sequence

Получим синтезатор и откроем его

Synthesizer synthesizer = MidiSystem.getSynthesizer();
synthesizer.open();

Теперь возьмем передатчик сквенсера изменим ему приемник на приемник синтезатора

sequencer.getTransmitter().setReceiver(synthesizer.getReceiver());

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

sequencer.setSequence(sequence)

Теперь получим каналы нашего синтезатора

MidiChannel[] channels = synthesizer.getChannels();

Поменяем на нем громкость в цикле на 60, в спеке говориться что диапазон значений от 0 до 120 и что за звук отвечает 7 канал

int volume = 60;
for (int i = 0; i < channels.length; i++) {
     channels[i].controlChange(7, volume);
}

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

full code

Sequencer sequencer = MidiSystem.getSequencer();
sequencer.open();
InputStream resource = Main.class.getResourceAsStream("Test.mid");
Sequence sequence = MidiSystem.getSequence(resource);
Synthesizer synthesizer = MidiSystem.getSynthesizer();
synthesizer.open();
sequencer.getTransmitter().setReceiver(synthesizer.getReceiver());
sequencer.setSequence(sequence)
MidiChannel[] channels = synthesizer.getChannels();
int volume = 60;
for (int i = 0; i < channels.length; i++) {
     channels[i].controlChange(7, volume);
}
sequencer.start();

Запуск Java приложений в Linux (Gnome) с поддержкой screen reader Orca

И так если вы пишите ГУИ на Джава и хотите сделать ваше приложение доступным в Линукс.
Но скринридер его не читает знай пришел конец твоему геморрою.
Проверь версию орки на момент написания статьи это была версия 45 стабильная 46 в альфе

dpkg -s orca | grep Version

Если версия новая нужно установить атк враперр командой

sudo apt-get install -y libatk-wrapper-java

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

-Djavax.accessibility.assistive_technologies=org.GNOME.Accessibility.AtkWrapper

То есть запуск файл test.jar будет таким

java -jar -Djavax.accessibility.assistive_technologies=org.GNOME.Accessibility.AtkWrapper test.jar

И геморрой проходит

Программы для людей с ОВЗ по зрению

И так мне уже не один раз приходиться ставить подобный софт на старые компы.
Что бы не искать по миллион раз решил все сохранить тут.
Софт для ретро компов 32 бита для людей с овз по зрению включает
FirefoxPortable_37
Jaws_10.0.1154
NVDA
http://swap.my-gemorr.ru:3670/share/Xy2skh8p

Скачиваем видео с ВК

Если вы столкнулись с геморроем и не знаете как скачать видео с вк.
Собственно в двух словах расскажу как это сделать
Качаем программу тут
Устанавливаем программу.
В программе выделяем вкладку «Захват ссылок»
Там в пустом месте жмем правую кнопку мыши и выбираем вкладку
Добавить новые ссылки

Потом добавляем ссылку на видео (нужна просто ткнуть в вк на изображение с видео и выбрать пункт скопировать ссылку на видео ) и путь сохранения и жмем кнопку продолжить.
Потом видео появиться в таблице. Выделяем его. Проверяем путь. Если все ок жмем на стрелку в левом верхнем углу.
Тада загрузка началась
После окончание , заходим в папку, которое указали для сохранение, находим там видео.
И геморрой проходит!
Ранее Ctrl + ↓