воскресенье, 28 ноября 2010 г.
Подобие многопоточности в AutoIt
В начале был код. Хитрить не буду - код отрубания около 50 машин по сети, с использование программы из пакета pstools (вещь очень удобная и полезная). Вот для этой программы и была написана на AutoIt графическая оболочка, дабы облегчить её использование. В самой оболочке в цикле вызывалась программа psshutdown.exe с именем отключаемой машины в качестве параметра. Все бы хорошо, но следующая машина не выключалась, пока не проработает программа для предыдущей. И вот эти 50 машин выключались добрых полчаса, а то и больше. Вывод был очевиден - нужна было многопоточность. Но в AutoIt`е её нету. Вывод - пишем велосипед, её имитирующий.
Суть:
Весь пакет состоит из двух exe: первый выполняет работу, в зависимости от переданных ему параметров. Второй взвывает первый с нужными параметрами.
Простой пример: вычислить сумму от 1 до (1000000 + I), где I меняется от 1 до 10.
Runer.au3
;Прога, в которой создается "поток"
For $I = 1 To 10
ShellExecute("get.exe", $I)
Next
MsgBox(0, "Finish", "All call completed.")
Get.au3
;Тело "потока"
#NoTrayIcon
$RESULT = 1
For $I = 2 To $CmdLine[1]
$RESULT = $I + $RESULT
Next
MsgBox(0, $CmdLine[1], $RESULT)
Строем .exe для Get.au3 и запускаем Runer.au3
суббота, 18 сентября 2010 г.
Использование AutoIt
ACalc.rar
пятница, 17 сентября 2010 г.
ASM или Что делать?
пятница, 27 августа 2010 г.
Hamachi
Hamachi2
четверг, 12 августа 2010 г.
О паролях и лени
понедельник, 2 августа 2010 г.
О кодерах и кодинге
Теперь, к чему это я все веду.
1. Кодеры существа ленивые и без надсмотра менеджера ничего толком не сделают
2. Кодеры существа странные. Они в первую очередь задумываются о ядре, а уже потом в самом конце прикручивают интерфейс, чаще всего убогий. Т.е. без менеджера опять же напишут всякую охинею.
3. Кодеры существа самодовольные. Если вы попросите их написать программу, под тип калькулятора, то как ей управлять будет известно только Избранным, таким как сами кодеры (обычно 2-3 человека, тоже кодера)
4. Кодеры существа эгоистичные, очень сложно двум кодерам вести проект: где первый обзовёт переменную "countINDEX", второй гордо напишет "AUI" или что-то в этом роде
Итак, вывод: Процесс написания проекта нифига не зависит от одного кодера. То, что он напишет - процентов 50%, максимум 60% от того, что нужно на самом деле. А если и напишет, то это ещё надо и заказчику спихнуть, при этом никаких: "Э.. А вы зачем сразу две кнопки нажали? У меня это и не предусмотрено!" или "Главное вот на этом процессе чуть-чуть подождать и ничего не нажимать - идет процесс анализ данных. Ну и что, что он идет 20 минут? Зато это самый красивый метод!" и т.п.
пятница, 30 апреля 2010 г.
Оптимизация кода AutoIt
Все кто пишет на AutoIt`е жалуются на медленность кода. Ну я тоже не исключение=) Вот и решил провести маленькое исследование - какая из функций будет работать быстрее - так, которая вызывается из UDF, описанная в текущем файле или сразу код функции? До начала самого исследования думалось что по скорости они будут расположены так:
1. Сам код функции
2. Описанная в текущем файле
3. Вызываемая из UDF
Итак, для теста было создано два файла:
головной:
#include <TEST.au3>
;Немного подождём - что бы скрипт нормально загрузился и размялся перед боем
$SUM = 0
For $J = 1 To 1000
$SUM += TEST()
Next
;Здесь - для конкретного кода, а не вызывания функции
$time3 = TimerInit()
$SUM = 0
For $J = 1 To 1000
$RET = 0
For $I = 1 To 100
$RET *= $I
Next
$SUM += $RET
Next
$time3 = TimerDiff($time3)
;Здесь будем замерять время для функции вызванной из UDF
$time1 = TimerInit()
$SUM = 0
For $J = 1 To 1000
$SUM += TEST()
Next
$time1 = TimerDiff($time1)
;А здесь - для описанной ниже
$time2 = TimerInit()
$SUM = 0
For $J = 1 To 1000
$SUM += TEST2()
Next
$time2 = TimerDiff($time2)
MsgBox(0,"Результаты", "Из UDF: " & $time1 & Chr(13) & "Внутри: " & $time2 & Chr(13) & "Код: " & $time3)
Func TEST2()
$RET = 0
For $I = 1 To 100
$RET *= $I
Next
Return
EndFunc
TEST.au3 :
$RET = 0
For $I = 1 To 100
$RET *= $I
Next
Return
EndFunc
Итак, после 10 замеров получили вот такой результат:
1. Сам код функции, а не её вызов
2 и 3 Вызов из UDF и вызов их текущего файла
Причём, влияет порядок следования функций. Например если сначала замерять time1, а потом time2, то time1 будет больше. Если наоборот, т.е. сначала time2, потом time1, то time2 будет больше.
Итак, резюмирую:
- На скорость работы скрипта не влияет расположение функции - она может быть описана как в отдельном файле, так и в текущем.
- Отказ от функций и использование непосредственно кода этой функции даёт существенный прирост скорости.
среда, 28 апреля 2010 г.
Простой навигатор для консоли
Итак, менюшка уже описана, а вот и её применение. Простенький навигатор по диску с помощью меню. Может перемещаться по папкам, запускать любые файлы. Пока всё - это все лишь пример применения меню=) Но мне вещь показалась полезной при работе в консоле=)
суббота, 24 апреля 2010 г.
Меню в BAT
Те кто хоть раз писал на BAT со мной согласятся - всегда чего-нибудь не хватает. Вот мне, например там не хватает менюшки - для более наглядного общения с пользователем. Ведь рядовому пользователю вряд ли понравится читать хелп и смотреть параметры - ему гораздо привычнее нажать пару кнопок и получить результат - например, выбрать нужный пункт меню. Ну и вот, собственно для этого и была написана менюшка на BAT. Итак, как пользоваться:
call menu.bat "1 string" "2 string" "3 string" "4 string" "5 string" "6 string" "7 string" etc.
После того как пользователь выбрал пункт меню - пакетный файл вернет результат. Обратится к нему можно через переменную errorlevel.
ПРИМЕР
Создадим BAT файл следующего содержания:
@echo off
call menu.bat "ADD" "DEL" "EDIT" "HELP" "EXIT"
echo You Select: %errorlevel%
Результат его работы (копировано с консоли):
1: ADD
2: DEL
3: EDIT
4: HELP
5: EXIT
Select: 6
Error! Retry input
Select: df
Error! Retry input
Select: 4
You Select: 4
Вообщем вот так =) Сделать более красивую менюшку с управлением клавишами стрелок встроенными средствами BAT - нельзя, т.к. нельзя считать нажатие клавиши.
воскресенье, 18 апреля 2010 г.
Вводное
Ну что же, попробуем обосноваться здесь. Вот это мы уберём, облако тегов надо будет добавить, здесь почистим.. Если кратко - идёт процесс обживания блога =)
Давно надоевший вопрос - для чего создан блог? Ну надо же куда-то выкладывать все мысли, идеи о тех проектах, которыми я занимаюсь. Ага, а вот и следующий вопрос - а чем же я занимаюсь? Ну первым делом я пытаюсь программировать (ну если не лень как всегда). В основном на C# и AutoIT. Но не брезгую и другими языками. Надеюсь, что в скорое время выложу, точнее напишу статейку про BAT. Ну и так как основной уклон сейчас у меня на написание второй версии бота для одной MMORPG (только тсссс.... =) ) то и про это что-нибудь тоже попробую написать.