ТЕХНИЧЕСКИЕ НАУКИ
БЫТЬ ИЛИ НЕ БЫТЬ. СЦЕНАРИИ Иванова И.С.1, Бега В.Б.2
1Иванова Ирина Владимировна - кандидат педагогических наук, доцент, кафедра программного обеспечения;
2Бега Виталий Борисович - магистрант, образовательная программа: «7М06103 - Информационные технологии и роботехника», Костанайский региональный университет им. А. Байтурсынова, г. Костанай, Республика Казахстан
Аннотация: в статье раскрываются особенности работы с скриптовыми языками программирования, основные достоинства и недостатки. Даны рекомендации с примерами использования скриптов для решения различных задач. Предоставлено сравнение языков сценариев с традиционными языками программирования. Ключевые слова: скрипты, сценарии, python, c#, Java, JavaScript, cmd.
В большинстве крупных приложение требуется создавать взаимосвязи между различными программами. Для такой взаимосвязи используются скриптовые языки программирования. Скрипты — это программы, координирующие работу других программ и скриптов [1]. Скриптовые языки программирования ориентированы на повышения скорости разработки. Также скрипты используются для выполнения однотипной работы, которую выполняя вручную потребовалось бы много времени. К скриптовым языкам программирования относятся такие языки как Python, Ruby, JavaScript, Perl, GML, MEL, GDScript.
Достоинство скриптовых языков в простоте создания взаимосвязей между программами [2]. Для создания взаимосвязей между скриптами рассмотрим простой пример программы, в котором скрипт из команд cmd.exe объединит работу скриптов написанных на python и ruby. В примере игровой персонаж получает урон и исцеляется. Получение урона и лечения буду реализованы в разных скриптах, функция написана на языке python будет наносить урон нашему персонажу, а скрипт на ruby будет исцеляться героя на 50%. Урон. f1.py
from sys import argv import random
def main(): script, health = argv health = int(health)
health -= random.randrange(1, health + 1) print(health)
if_name_== "_main_":
main()
Лечение. f2.rb def main
health = ARGV[0].to_i health = health + (health * 0.5) puts health
end
main
Основной скрипт. scr.bat
@ECHO OFF CHCP 65001
ECHO Количество здоровья: SET /P health=
FOR /F "delims=" %%i IN ('python.exe f1.py %health%') DO SET health=%%i ECHO Количество здоровья после нанесения урона: %health% FOR /F "delims=" %%i IN ('ruby f2.rb %health%') DO SET health=%%i ECHO Количество здоровья после исцеления: %health%
ser. bat
Active code page: 65ЭЭ1
Количество здоровья:
200
Количество здоровья после нанесения урона: 159 Количество здоровья после исцеления: 238.5
Рис. 1. Результат «склеивания» скриптов
Как правило скриптовые языки не компилируются, а интерпретируются, но конечно же бывают исключения. Интерпретаторы, к примеру таких скриптовых языков как Perl и Python позволяют запущенному скрипту редактировать свой же файл. Так в следующих примерах на python и perl скрипт вносит изменения в свой же файл и после перезапуска выполняется уже обновленный. Пример на python f = open("exp.py", "a") cmd = input() f.write('\n' + cmd) f.close()
#-------NEW CODE------
1 f = open("exp. py", ' ■a")
2 cmd = input()
3 f.write(1\n 1 + cmd)
4 f. closeQ
5
6 #-------NFW COD F------
7 print('Hello, World,
S print(1 New line 1)
pytlhon exp.py print("Hello, World!") python exp.py print("New line') Hello, World!
Рис. 2. Редактирования скрипта на python
Рис. 3. Редактирования скрипта на perl
TestPerl.pl use feature "say";
my $file = 'TestPerl.pl'; my $cmd = <STDIN>;
open $fh, '»', $file or die "$_"; print $fh $cmd; close $fh or die "$_"; say '-—NEW LINE-—';
Существует возможность реализации редактирования или отладка скрипта прям в процессе выполнения программы и получение результатов с обновленными расчетами, не выходя и не перезапуская программу. В следующем примера написанном на C# скрипт python возможно редактировать, когда программа запущена и сразу получать результат изменений [3].
Health:1вв Damage:-35 Healing:32,5
Health:97,5
----------------s
Health:IBB
Damage:© w
Healing:0 11
Health:100
Health:100 Damage:400 Healing:74Б0В
Health:7Б000
Health:100 Damage:-2 Healing:49
Health:147
Рис. 4. Результат редактирования и выполнение скрипта python
using System;
using System.IO;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
namespace ConsoleTestPythonScript
{
class Program {
static ScriptEngine engine; static ScriptScope scope; static dynamic fDamage; static dynamic fHealing;
static void Main(string[] args) {
engine = Python.CreateEngine(); scope = engine.CreateScope();
if (File.Exists("scr.py")) {
while (true) {
Console.Clear();
engine.ExecuteFile("scr.py", scope); fDamage = scope.GetVariable("Damage"); fHealing = scope.GetVariable("Healing");
xmport random
Hdef Damage (health):
health = float(health)
health -= random.randrange(lj int(health) + 1) return health
E] def Healing(health):
health = float(health) health += (health * 6.5) return healthl
float health = 100.0f; Console. WriteLine("Health:" + health); float resD = (float)fDamage(health); Console.WriteLine("Damage:" + (resD - health)); health = resD;
float resH = (float)fHealing(resD); Console.WriteLine("Healing:" + (resH - resD)); health = resH;
Console.WriteLine("\nHealth" + health); Console.ReadKey();
}
}
}
}
}
scr.py
import random
def Damage(health):
health = float(health)
health -= random.randrange(1, int(health) + 1)
return health
def Healing(health): health = float(health) health += (health * 0.5) return health
Скриптовые языки поддерживаются на разных платформах. Для того чтобы добавить в проект Android Studio обработку скриптов python можно уставить Chaquopy Python SDK for Android [4]. Chaquopy содержит API который позволяет без труда работать с кодом Python или Katlin. Мы можем перенести любой скрипт python и отредактировать его если нужно. Это преимущество над библиотеками. Если библиотеку отредактировать подключённую к проекту нельзя, то скрипты позволяют вносить изменения в свой код. Еще один плюс для библиотеки нужна документация что бы знать, как ей пользоваться, в скриптовых языках из-за открытого исходного кода можно разобраться самостоятельно.
Для следующего примера взять скрипт scr.py и добавлен в проект Android Studio без изменений.
Рис. 5. Результат выполнения скрипта python на android
public void OnClick(View v) {
String value = health.getText().toString(); float _health = Float.parseFloat(value);
PyObject resObj = pscr.callAttr("Damage", _health); float resDamage = Float.parseFloat(resObj.toString()); resDamage -= _health;
_health = Float.parseFloat(resObj.toString());
resObj = pscr.callAttr("Healing", _health);
float resHealing = Float.parseFloat(resObj.toString());
resHealing -= _health;
_health = Float.parseFloat(resObj.toString()); data.setText("Damage: " + resDamage + "\nHealing: " + resHealing); health.setText(String.valueOf(_health));
}
Существуют такие языки, которые сложно поломать. Интерпретаторы таких языков выполняют команды, ломающие традиционные языки программирования. Это может сильно усложнить отладку особенно если язык не имеет хороший EDI, а для скриптовых языков их не много.
Один из таких примеров, который может доставить много хлопот — это работа с классами в JavaScript. Index.html <html>
<head></head> <body>
<h1>Player</h1> <script>
class Player { constructor(name) { this.name = name;
}
}
player = new Player("Adam"); player.health = 200.0; player.damage = 10.0; player.healing = 50.0; document.write("Name: " + player.name, "<br>Health: ", player.health, "<br>Damage: ", player.damage, "<br>Healing: ", player.healing + "<br>");
document.write("Error! " + player.mame); player.mame = "John";
document.write("<br>Name! " + player.name); </script> </body> </html>
Результат:
Player
Name: Health: Damage: Healing: Error!
Name! Adam
Adam 200 10 50
undefined
В данном примере если ошибиться с именем переменной и присвоить ей значение, то она автоматические будет создана. В примере меняется значение переменной объекта name, но допущена опечатка и присвоено значение переменной mame. В результате значение name не изменилось и ошибок никаких нет, что приведет к получению неверных данных и усложняет поиск решение данной проблемы.
Скриптовые языки широко используются в разработках игр. Так, к примеру в игровом движке Godot используется скриптовый язык программирования GDScript похожий на python, а в Game Maker Studio скриптовый язык GML (Game Maker Language) имеющий частичное сходство с такими языками как JavaScript, Pascal и С++. Скриптовые языки программирования используются в различных программах для работы с 2D и 3D графикой и звуком. В Autodesk Maya добавлены два скриптовых языка MEL (Maya Embedded Language) и Python. Для Adobe Photoshop скрипты можно писать на JavaScript.
На официальном сайте Adobe существует страница, где можно скачать документацию по написанию скриптов на AppleScript, JavaScript и VBScript для разных версий Adobe Photoshop [5]. Пример скрипта, который может сохранять слои в отдельные png изображения:
testsave.js
(function main()
{
var layers = app.activeDocument.layers;
for (i = 0; i < layers.length; i++) layers[i].visible = false;
for (i = 0; i < layers.length;i++) {
layers[i].visible = true; onSavePNG(layers [i]. name); layers[i].visible = false;
}
for (i = 0; i < layers.length; i++) layers[i].visible = true; })();
function onSavePNG(name) {
var doc = app.activeDocument;
var file = new File(doc.path + '/save_layers/' + name + '.png'); var opts = new PNGSaveOptions(); opts.quality = 10; doc.saveAs(file, opts, true);
}
it,., > savejn, v 0
y *
group_test.png
Layer O.png
Layer 1. png
Channels Paths Layers History
QKind - в a t п в •
Pass Through - Opacity! 1ЛО% v
Lcck: H / ф Ц fi Fl: 1M% ~
О "P tistjed
О Ь griup_t==t
fr □ » ■ a a
tebt_text,png
Рис. 6. Результат выполнения скрипта для Adobe Photoshop
Таким образом были разобраны ряд ключевых моментов работы с скриптовыми языками программирования такие как: основные плюсы использования; применение; комбинирование работы нескольких скриптовых языков; рассмотрены примеры подключения скриптового языка к проектам Visual Studio и Java в Android Studio; пример работы скрипта для Adobe Photoshop. Из всего изложенного можно сделать вывод, что данная использование скриптовых языков предоставляет множество возможностей, одни из них мобильность, простота, кроссплатформенность, широкий спектр применения и разнообразие скриптовых языков, скорость написания скриптов.
Список литературы
1. Орлов С.А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения. СПб.: Питер, 2013. 688 с.
2. Столяров А.В. Программирование: Введение в профессию. Том 1: Азы программирования. М.: МАКС Пресс, 2016. 464 с.
3. FoordM.J. IronPython in Action / C. Muirhead. Printed in the United States of America, 2009. 494 p.
4. Chaquopy Python SDK for Android. [Электронный ресурс]. Режим доступа: https://chaquo.com/chaquopy/doc/current/index.html/ (дата обращения: 19.03.2021).
5. ADOBE PHOTOSHOP SCRIPTING. [Электронный ресурс], 2021. Режим доступа: https://www.adobe.com/devnet/photoshop/scripting.html/ (дата обращения: 20.03.2021).
ФОРМИРОВАНИЕ РАДИОСИГНАЛОВ С ИСПОЛЬЗОВАНИЕМ ПРЕОБРАЗОВАНИЯ ЧАСТОТЫ С ОДНОЙ БОКОВОЙ
ПОЛОСОЙ Бойсунов Б.П.1, Короткова Л.А.2
1Бойсунов Ботир Пулат угли - студент;
2Короткова Лариса Александровна - старший преподаватель, кафедра радиотехнических устройств и систем, Ташкентский государственный технический университет им. Ислама Каримова, г. Ташкент, Республика Узбекистан
В настоящее время в цифровых радиосистемах передачи информации на сверхвысоких частотах достаточно широко применяется формирование рабочих сигналов однократным аналоговым преобразованием частоты с одной боковой полосой с помощью квадратурного модулятора [1, 2]. При этом квадратурные составляющие относительно низкочастотного сигнала цифровой части системы передачи информации преобразуются в аналоговый вид и поступают на соответствующие входы преобразователя частоты в составе квадратурного модулятора и гетеродина. Такой подход по сравнению с многократным повышающим аналоговым преобразованием частоты с фильтрацией или умножением частоты обычно имеет существенные преимущества по экономическим и массогабаритным показателям, и по качеству передаваемого сигнала [1]. Данный метод преобразования частоты подходит для формирования практически любых радиосигналов из сигналов цифровой промежуточной частоты, многоканальных радиосигналов, радиосигналов с OFDM, а также для непосредственной модуляции несущей такими видами цифровой модуляции, как однополосная, частотная и фазовая манипуляции, КАМ [1, 2].
Однако несовершенство аналогового квадратурного модулятора приводит при однополосном преобразовании частоты к высокому уровню внеполосного сигнала обусловленного остатком второй боковой полосы, обычно на уровне -30...- 40 дБ относительно полезного сигнала. Это приводит к взаимному влиянию каналов передачи информации и ухудшению качества принимаемых радиосигналов. При этом выполнение приемлемой дополнительно фильтрации остатка второй боковой полосы на выходе квадратурного модулятора не всегда возможно, в частности из-за малой расстройки по частоте относительно передаваемого полезного сигнала [1].
Рассмотрим улучшенный метод преобразования частоты с одной боковой полосой с эффективным подавлением внеполосного излучения, с использованием предварительной цифровой обработки квадратурных модулирующих колебаний.