Advancend Grapher

Преамбула

Мелкому другу срочно понадобилась программа, создающая графики по формулам, а Excel не подошел, бо до сих пор не умеет рисовать нормальные синусоиды, если задать интервал, например, от -10 до +10. Во всяком случае, препод сказал, что его графики из Excel не устраивают. А курсовая на носу у парня.

Слава Великим Древним и Ктулху лично, я компьютерный Плюшкин, и моего препода тоже не устраивали графики из Майкрософт Пуксель. Так что откопал такую вот программу.

Что умеет

+ Строить графики по формулам с нужным шагом и интервалом.
+ На одной координатной оси можно размещать несколько графиков
+ Импортировать результат в BMP/GIF
+ Дофига всякого-разного, что никогда не надо было, но вдруг кому-то понадобится (графики в полярных координатах, какие-то производные и прочий страшный матан). Мы электрики — нам красиво синусоиду нарисовать хватает (тьфу-тьфу-тьфу, как бы не сглазить).

Простейшее построение графика

Заходим в меню: Построение —> Добавить график

Попадаем в окошко построения:

Вбиваем формулу, выбираем основные параметры графика (цвет, толщина линии и т.д.).

Переключаемся на вкладку Доп. свойства:

Вбиваем диапазон и/или параметры построения (количество шагов, максимальный разрыв между значениями).

График можно отредактировать. Для этого нужно нажать F4 или перейти в меню Построение —> Список графиков:

Нужный график можно удалить, нажав по графику в окне Список графиков правой кнопкой мыши, и выбрав пункт Удал. из контекстного меню, либо отредактировать его (поменять формулу, цвет, прочие параметры) дважды кликнув мышью по соответствующей строке.

Сохранение

Программа сохраняет данные в своем собственном бинарном формате. Не расковыривал его.

testgraph.agr

Экспорт

Программа может экспортировать изображение в формат BMP или GIF, а поскольку, внутри программа таки растровая, размер экспортируемого изображения может быть любой. Пример:

Скачать оригинальный BMP (1024×768)

На картинке представлена демонстрация возможностей. Три графика:

+ sin(x)^2 — красный
+ -sin(x)^2 — фиолетовый
+ (sin (x^2)^2)*10 — серый

Совместимость

Windows 98 SE — Windows 10 (Windows 11 не подтверждена)

Лицензия

Бесплатно для граждан ГОРФ. Для активации бесплатности нужно в установщике выбрать русский язык и подтвердить дополнение к лицензии. Не ломал, ибо само работает.

Скачать

Advancend Grapher 1.5 build 3 с MEGA.NZ (SFX ZIP Wrapper+Original Installer)

DIV с прокруткой

Все-таки пост от склероза.

Некоторые движки (LJ/LJR) такой код режут, но в самописном движке или WordPress должно работать.

Для чего

Чтобы текст, заключенный, например в теги <pre></pre> не порвал дизайн страницы, его можно положить в div с прокруткой.

Без div’а это будет выглядеть так:


[2] [3]

А с div’ом вот так

HTML-код

Если текст изначально размещается внутри div’а, заданного, например, шаблоном, то можно воспользоваться масштабированием с процентами:

<div style="max-width: 100%; max-height: 100%; overflow: auto;">

В других случаях размер можно задать пикселями:

<div style="max-width: 700px; max-height: 1000px; overflow: auto;">

NSIS: поиск и завершение (kill) внешнего процесса.

Делается с помощью плагина nsProcess.

Установка плагина

1. Качаем архив
2. Распаковываем содержимое архива по соответствующим каталогам NSIS

NsProcess.zip\Example --> C:\Program Files (x86)\NSIS\Examples\nsProcess
NsProcess.zip\Include --> C:\Program Files (x86)\NSIS\Include\
NsProcess.zip\Plugin\nsProcess.dll --> C:\Program Files (x86)\NSIS\Plugins\x86-ansi\nsProcess.dll
NsProcess.zip\Plugin\nsProcessW.dll --> C:\Program Files (x86)\NSIS\Plugins\x86-unicode\nsProcess.dll

Пример

Начало:

Unicode true
!include LogicLib.nsh

Name "KillProcessExample"
OutFile "KillProcessExample.exe"
ShowInstDetails show
RequestExecutionLevel User

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

!macro PrintProcError ErrCode

Код разлапистый, потому на PasteBin: !macro PrintProcError ErrCode

Код внутри секции:

1. Запускаем тестовую программу (calc.exe, которая обычно есть в любой винде и лежит она обычно в $SYSDIR, т.е. в C:\Windows\System32\) и ждем 500 миллисекунд:

DetailPrint "Start calc.exe..."
Exec "$SYSDIR\calc.exe"
Sleep 500

2. Спрашиваем у пользователя, будем ли убивать процесс. Если нет — идем на завершение:

MessageBox MB_YESNO|MB_ICONQUESTION "Kill process calc.exe?" IDYES 0 IDNO "EndProg"

3. Ищем процесс(ы) по имени экзешника:

DetailPrint "Find process calc.exe..."
nsProcess::_FindProcess "calc.exe"

Да, можно хоть 10 калькуляторов назапускать.

4. Вытаскиваем из стека результат функции _FindProcess:

Pop $R0

5. Выводим на псевдоконсоль расшифровку кодов возврата:

!insertmacro PrintProcError $R0

6. Если код возврата = 0, значит, процесс найден, пытаемся его убить, выводим расшифровку кодов возврата, и опять подождем 500 миллисекунд:

${If} $R0 = 0
	DetailPrint "Process calc.exe found. Kill it..."
	nsProcess::_KillProcess "calc.exe"
	!insertmacro PrintProcError $R0
	Sleep 500
${EndIf}

Вывод на экран

Исходник примера

На GitHub

Источники

Официальная справка плагина (на буржуйском)
Перевод от Leha Silent (копия)

Тест div’а с прокруткой

Проценты:

После прочтения 126 заголовков, созданных генератором новостей, сбежавший из зоопарка кенгуру лишил гражданства, ограбил, изнасиловал, утопил, расстрелял, распял, сжег, сварил и съел председателя ЦИК В. Чурова 
Предвкушающий встречу с В.И. Новодворской патриарх Кирилл усыновил уличенного в педофилии главного государственного санитарного врача Г. Онищенко 
Внося законопроект о запрете пропаганды гомосексуализма среди пенсионеров, телеведущий Дмитрий Киселев унижал честь и достоинство своего телохранителя 
Вскоре после принятия иудаизма бендеровец Яценюк внес в Думу законопроект о запрете усыновления американцами внебрачных детей о. Всеволода Чаплина 
После празднования своего дня рождения в кафе "Четыре курицы" уссурийский тигр жег покрышки и поливал "коктейлем Молотова" министра обороны Шойгу 
Измученный острым приступом хронического бармазита покойный президент Венесуэлы Уго Чавес пообещал не в вводить войска в биолога Ричарда Докинза 
В городе на Неве в ходе празднования Дня пограничника бендеровец Тягнибок объявил народным мэром Пекина оппозиционера Алексея Навального 
Углубившись в чтение последнего послания В.В. Путина, Сильвио Берлускони бросил "коктейль Молотова" в окно директора ЦРУ Дэвида Петрэуса 
Выступая на заседании Совета безопасности ООН, пляшущий в голом виде Никита Джигурда продемонстрировал мировому сообществу трусы начальника СКП А. Бастрыкина 
После прочтения 126 заголовков, созданных генератором новостей, лидер Антимиайдана Залдостанов намекнул на отношения Ирины Родниной и своего брата

Пиксели:

После прочтения 126 заголовков, созданных генератором новостей, сбежавший из зоопарка кенгуру лишил гражданства, ограбил, изнасиловал, утопил, расстрелял, распял, сжег, сварил и съел председателя ЦИК В. Чурова 
Предвкушающий встречу с В.И. Новодворской патриарх Кирилл усыновил уличенного в педофилии главного государственного санитарного врача Г. Онищенко 
Внося законопроект о запрете пропаганды гомосексуализма среди пенсионеров, телеведущий Дмитрий Киселев унижал честь и достоинство своего телохранителя 
Вскоре после принятия иудаизма бендеровец Яценюк внес в Думу законопроект о запрете усыновления американцами внебрачных детей о. Всеволода Чаплина 
После празднования своего дня рождения в кафе "Четыре курицы" уссурийский тигр жег покрышки и поливал "коктейлем Молотова" министра обороны Шойгу 
Измученный острым приступом хронического бармазита покойный президент Венесуэлы Уго Чавес пообещал не в вводить войска в биолога Ричарда Докинза 
В городе на Неве в ходе празднования Дня пограничника бендеровец Тягнибок объявил народным мэром Пекина оппозиционера Алексея Навального 
Углубившись в чтение последнего послания В.В. Путина, Сильвио Берлускони бросил "коктейль Молотова" в окно директора ЦРУ Дэвида Петрэуса 
Выступая на заседании Совета безопасности ООН, пляшущий в голом виде Никита Джигурда продемонстрировал мировому сообществу трусы начальника СКП А. Бастрыкина 
После прочтения 126 заголовков, созданных генератором новостей, лидер Антимиайдана Залдостанов намекнул на отношения Ирины Родниной и своего брата

Плагин NsProcess

Ссылки

Версия 1.5:
nsProcess.zip (25 KB)

Версия 1.6 (поддержка NSIS UNICODE от brainsucker, переименуйте библиотеку nsProcessW.dll):
nsProcess.zip (14 KB)
— Зеркало: nsProcess_1_6.7z

Обсуждение:
На форуме

Описание

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

— Поиск процесса по имени.
— Завершение всех процессов с указанным именем (все найденные экземпляры).
— Закрытие всех процессов с указанным именем. Сначала происходит попытка закрыть все окна процессов, ожидание 3 секунд для завершения процессов. Если процесс(ы) все еще активны, используйте функцию _CloseProcess.
— Имя процесса нечувствительно к регистру
— Поддерживаемые ОС: Win95/98/ME/NT/2000/XP/Win7
— Поиск процессов других пользователей при запуске с правами администратора или при переключении на другого пользователя.
— Маленький размер плагина (4 Кб)
— Поддержка Unicode (просто переименуйте nsProcessW.dll в nsProcess.dll)

Пример использования

!include "LogicLib.nsh"
 
  Section ""
    StrCpy $1 "YOURAPP.exe"
 
    nsProcess::_FindProcess "$1"
    Pop $R0
    ${If} $R0 = 0
      nsProcess::_KillProcess "$1"
      Pop $R0
 
      Sleep 500
    ${EndIf}
 
  SectionEnd

Обычно _FindProcess возвращает:

0 если процесс найден
603 если процесс(ы) не найдены

// Коды возврата:
  // 0 = успех
  // 601 = Нет разрешения на завершение процесса
  // 602 = Не все процессы завершились успешно
  // 603 = Процесс в данный момент не запущен
  // 604 = Невозможно определить тип ОС
  // 605 = ОС не поддерживается
  // 606 = Невозможно загрузить NTDLL.DLL
  // 607 = Не удалось получить адрес процедуры из NTDLL.DLL
  // 608 = ошибка NtQuerySystemInformation
  // 609 = Невозможно загрузить KERNEL32.DLL
  // 610 = Не удалось получить адрес процедуры из KERNEL32.DLL
  // 611 = Ошибка CreateToolhelp32Snapshot

Благодарности

Ravi Kochhar (исходная функция FIND_PROC_BY_NAME на основе его кода)
iceman_k (Find Process By Name) и DITMan (KillProcDLL Manual).

Перевел Leha Silent специально для tolik-punkoff.com

Источник