javascript в связке с бат-файлом: фоновый запуск

Для запуска в фоне батника можно воспользоваться следующим javascript-ом (сохраните данный код в файле с расширением *.js):

var WshShell, obj;
WshShell = WScript.CreateObject("WScript.Shell");
obj = WshShell.Run("c:\\test.bat", 0);
WshShell = null;

В методе Run укажите путь к вашему батнику, в нашем случае - c:\\test.bat. В мирных целях при решении задач по администрированию на Windows - платформах можно воспользоваться данной связкой, на рис. 1 приведен пример применения данной связки, когда с одной веб-странички интерактивно можно запускать батники.  
Рис. 1. Пример применения связки javascript - butch








Конечно, серьезно к этому относится не стоит, но может кому и сослужит доброе дело.

Функции в бат-файлах

Говорить о создании функции в бат-файле не совсем правильно, все-таки речь идет о батниках. Поэтому правильнее будет говорить об имитации. 
Для имитации функций и обращений к ним в bat-файлах можно воспользоваться такой
командой как call. Синтаксис в короткой форме выглядит следующим образом:
call [:метка [аргументы]]
Данная команда работает стеково (FILO): будучи вызванной первой в очереди вызовов в пакетном файле, извлекается последней. Как пример приведен батник, вычисляющий факториал числа.
________________
@echo off
call :factorial %1
echo %RESULT%
exit /b
rem Функция для подсчета значения факториала
rem Вход:
rem       %1 - Число, для которого необходимо подсчитать факториал
rem Выход:
rem       %RESULT% - Значение факториала
:factorial
if %1 == 0 (
    set RESULT=1
    exit /b
)
if %1 == 1 (
    set RESULT=1
    exit /b
)
set /a PARAM=%1 - 1
call :factorial %PARAM%
set /a RESULT=%1 * %RESULT%
exit /b
________________
На рисунках 1 и 2 рассмотрена работа данного скрипта и представлен подход к имитации понятия функций в butch-файлах.
Рис. 1. Работа батника, вычисляющего факториал числа
Рис. 2. Аналог функции в butch-файле
 При работе с командой call часто всплывает понятие стека (stack).

Переменные в бат-файле

Для создания переменных необходимо использовать команду set. Например.
@Echo off
Set /p ipadr1="Enter ip-adress 1:"
Set /p ipadr2="Enter ip-adress 2:"
ping %ipadr1%
ping %ipadr2%
Set ipadr1=
Set ipadr2=
pause
exit
Здесь в духе C/C++ в конце батника созданные переменные уничтожаются. Все-таки принципы необходимо соблюдать.

Циклы в бат-файле

 Здесь приведены примеры организации цикла в батнике.
________________
@echo off
rem Включение расширенной обработки команд
setlocal enabledelayedexpansion
rem Инициализация переменной i (счетчик)
set /a i=0
rem Метка условия выполнения цикла
:if
if %i% LSS 10 (
    goto count
) else (
    goto end
)
rem Функциональная метка, содержащая выполнимые команды с последующим заполнением счетчика i
:count
echo Hello world!
set /a i=i+1
goto if
rem Финишная метка
:end
echo Loop finished...
pause
exit
________________
Можно внести небольшую интерактивность, например предоставив возможность выбора условий окончания цикла
________________
@echo off
rem Включение расширенной обработки команд
setlocal enabledelayedexpansion
rem Инициализация переменной i (счетчик)
set /a i=0
set /p n=Enter border
rem Метка условия выполнения цикла
:if
if %i% LSS %n% (
    goto count
) else (
    goto end
)
rem Функциональная метка, содержащая выполнимые команды с последующим заполнением счетчика i
:count
echo Hello world!
set /a i=i+1
goto if
rem Финишная метка
:end
echo Loop finished...
pause
exit /b
________________
Циклы удобны в практических целях, например:
________________
@echo off
rem Включение расширенной обработки команд
setlocal enabledelayedexpansion
rem Инициализация переменной i (счетчик)
set /a i=0
set /p n=Enter border
rem Метка условия выполнения цикла
:if
if %i% LSS %n% (
    goto count
) else (
    goto end
)
rem Функциональная метка, содержащая выполнимые команды с последующим заполнением счетчика i
:count
set /a i=i+1
ping 191.168.0.%i% -n 1
goto if
rem Финишная метка
:end
echo Loop finished...
pause
exit /b

Трансферизация данных в формате *.xls, *.xlsx, and *.xlsb в базы данных

Возможно, кто-то встречался с ошибкой вида:
 
Ошибка разбора файла: The 'Microsoft.ACE.OLEDB.12.0' provider is not registered 
on the local machine.
 
В нашем случае ошибка возникала при попытке произвести импорт данных в формате  
*.xls в базу данных Oracle.
 
Интерфейсом работы с базой данных служило веб-приложение построенное на технологии 
ASP.NET.
 
Решением проблемы был компонент AccessDatabaseEngine.exe
 
Смело устанавливайте данный компонент, не смотря на версию установленного пакета офиса. 
 
 Удачи Вам. 

Задача на сортировку на C++

Задача. На C++ реализовать ввод массива из пяти целых чисел. Вывести полученный массив. Произвести поиск минимального и максимального элементов. Провести сортировку: заменить местами только те элементы в массиве, которые лежат в диапазоне от минимального до максимального. Далее вывести полученный результат.
Решение. Реализовано на Microsoft Visual C++ 2008 Express Edition
#include <iostream>
using namespace std;

//Ввод значений в массив arr
void InputArray(int arr[])
{
cout << "Enter any 5 numbers" << endl;
for(int i = 0; i < 5; i++)
    cin >> arr[i];
}

//Вывод значений массива
void PrintArray(int arr[])
{
cout << endl;
for(int i = 0; i < 5; i++)
    cout << arr[i] <<" ";
}

//Поиск индекса минимального значения в массиве arr
int FindMin(int arr[])
{
int i_min = 0;
int min = arr[0];
for(int i = 0; i < 5; i++)
    if(arr[i] < min)
    {
        i_min = i;
        min = arr[i];
    }
return i_min;
}

//Поиск индекса максимального значения в массиве arr
int FindMax(int arr[])
{
int i_max = 0;
int max = arr[0];
for(int i = 0; i < 5; i++)
    if(arr[i] > max)
    {
        i_max = i;
        max = arr[i];
    }

return i_max;
}

//Замена местами значений в массиве arr в пределах от минимального до максимального значения
//Рассмотрены два случая
void SortArray(int a, int b, int arr[])
{
if(a < b)
{
    for (int i = a; i < b; i++)
           {
           int tmp = arr[b];
           arr[b] = arr[i];
           arr[i] = tmp;
           b--;
           }
}
if(a > b)
{
    for (int i = a; i > b; i--)
       {
       int tmp = arr[b];
       arr[b] = arr[i];
       arr[i] = tmp;
       b++;
       }
}
}

int main(){

int arr[5];

int a, b;

InputArray(arr);

PrintArray(arr);

//Искомые индексы минимального и максимального значений в массиве arr
a = FindMin(arr);
b = FindMax(arr);

SortArray(a, b, arr);

PrintArray(arr);

return 0;
}

 На выходе получаем следующее. Работает.

Пример разбора php-кода в связке с mysql

<?
function db_query($sql)
{
    $result = mysql_query($sql);
      
    while ($arr = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        $new[] = $arr;
    }
    return $new;
}

function dump($var)
{
    echo "<pre>";
    print_r($var);
    echo "</pre>";
}

$connect = mysql_connect('localhost', 'root', '')
    or die('hello!');
  
mysql_select_db ('New_db', $connect)
    or die('Hello222!');


$publisher = db_query("SELECT `title` FROM `publishers` WHERE `id` = {$_GET['publisher']}");
echo "<h1>{$publisher[0]['title']}</h1>";


$arr1 = db_query('SELECT * FROM `publishers` WHERE 1');
echo '<table border = "1">';
foreach ($arr1 as $value)
{
    echo "<tr><td>{$value['id']}</td><td>{$value['title']}</td></tr>";
}
echo '</table>';

$arr1 = db_query('SELECT * FROM `publishers` WHERE `id` > 2');

echo '<select>';
echo '<option value=0>..</option>';

foreach ($arr1 as $value)
{
    echo "<option value={$value['id']}>{$value['title']}</option>";
}

echo '</select>';

?>

Странная любовь

Как же я люблю посещать книжный магазин, для меня это особое место. Вокруг тысяча книг, куча различной информации. Можно сколь угодно читать. Кладезь знаний. Люблю, когда люди занимаются таким интимным делом как чтение. По-сути своей они совершают интеллектуальный акт. Люблю, когда люди говорят умно и красиво. Для меня это - "кайф". Жизненный цейтнот не всегда дает время для чтения книг. Было бы здорово организовать свой книжный магазин, но не просто магазин, а книжное кафе, чтобы можно было спокойно посидеть, попить чаю, кофе, почитать, полистать, обсудить. И все это погрузить в некую уютную атмосферу. Я был бы рад такому кафе.

Батник для замены строк в конфигурационных или текстовых файлах

Иногда требуется быстро производить замену в различных конфигурационных файлах или в обычных текстовых файлах (*.txt). 
В этом может помочь следующий bat-файл:

 










В данном примере в файле test.txt символы "abc" заменяются на "123", причем замена идет по всему файлу.
Для удобства данный батник лучше располагать непосредственно в директории файла, внеся поправку:
cd C:\Folder1\Folder2\...\*.txt




Мечта бульдога

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

Bat код в помощь



Пример "батничка", позволяющего отслеживать работоспособность моего критического сетевого узла, в нашем случае - 10.73.147.254.
Алгоритм отображен на рисунке.
Есть одна фишка, чтобы запустить данный "батник" в фоне используйте планировщик заданий. Причем не назначайте ему время выполнения, а запускайте вручную. Проверено лично.
Не забудьте запустить службу сообщений - messendger. Это нужно для "выплевывания" сообщений от программки.
Есть еще одно удобство - с момента запуска ведется лог - LanReg.txt в директории C:\




Использование условий в bat-файлах

Любая команда в "батнике" возвращает значение через errorlevel:
1 - команда завершена успешно,
2 - команда завершена с ошибкой.
Используя метки можно прибегать к построению условий, например таких:

if not errorlevel 1 goto _соответствующая_метка

Либо как направляющая в метках:

goto _соответствующая_метка%errorlevel%

Небольшой примерчик:

choice /c kl
goto answer%errorlevel%
:answer1
echo Pressed button k
goto end
:answer2
echo Pressed button l
:end
echo Ready

Как организовать таймер в bat-файле

timer ping 127.0.0.1 -n t
t - задаваемое значение в sec.
Работает при любых условиях.

Гармония цвета. На основе работы по веб-дизайну Ю.А.Сырых.

Ахроматические оттенки сочетаются с любым хроматическим (кроме желтого), если разбавить основной хроматический цвет белым или черным, то получим к месту четвертый цвет.

Монохромная гармония.

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

В дальнейшем будет использоваться монохромное изображение круга – радуга, поделенная на 12 цветовых сегментов и свернутая в круг.

Аналоговая гармония.

Выбирается один цвет, а в компанию к нему – два окружающих, или два последующих, или два предыдущих (три оттенка, идущих друг за другом). Если мало цветов, то в дополнение – ахроматические цвета, а также приглушить или увеличить яркость.




Комплементарная гармония.

Цвета, расположенные друг напротив друга на цветовом круге (комплементарные пары), с учетом – один из них должен быть приглушенным. Дополнение: основной цвет осветляется или наоборот – делают темнее.




Сплит-комплементарная гармония.
К выбранному основному цвету, берутся два соседних противоположному. Гармония становится менее агрессивной и не такой бескомпромиссной. Можно изменить яркость или насыщенность оттенков, выделить цвет по яркости, приглушив остальные.

Триадная гармония.

Сочетание цветов, расположенных по углам равностороннего треугольника, помещенного в центр цветового круга. Вращение даст различные сочетания.






Тетрадная гармония.

Выбор цветов зависит от фигуры, вписанной в цветовой круг: квадрат или прямоугольник. Отсюда два метода выбора цветов: метод квадрата и метод прямоугольника. В итоге получаем аж четыре цвета, можно два из них слегка приглушить, а остальные один-два взять в качестве основных.




Аналого-комплементарная гармония.

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



Фон и текст.
Для фона можно использовать один из выбранных цветов с большой яркостью, так, чтобы он стал бледным, но все же не белым.
Для текста – какой-нибудь цвет из основных, но приглушенный по насыщенности и темный, почти черный.
За счет этого: 1) «тонируется» область фона и теста в цвете сайта; 2) есть мнение, для
продолжительного чтения лучше немного снизить контраст между фоном и тестом.

Полезные правила.

Правило 1-ое. Низ сайта не должен быть визуально тяжелее, чем верх: насыщенные или темные цвета располагаются вверху, а книзу слегка приглушаются. Или же красим все равномерно, главное, чтобы низ не был темнее и насыщеннее.
Правило 2-ое. Чем крупнее объект, тем меньше требуется дополнительное подчеркивание цветом. И наоборот – «мелочь» легче увидеть, если она достаточно насыщенна. Тоже самое касается мелких пиксельных пиктограмм, стрелочек и т.п.
Правило единообразия оформления. Единообразие оформления – это когда группа элементов, связанных друг с другом, оформляется одинаково или похоже.
Правило повторяемости элементов. Ни один элемент на странице не должен быть случайным. Вводя в композицию цвет, вы просто обязаны повторить его где-либо еще. Причем, в достаточных количествах, чтобы он был заметен.

Ряд замечаний.

Цвет – носитель информации. Он неотрывен от таких понятий как культурные особенности наций, даже каждой личности в отдельности, государственные флаги, социальные группы и так далее.
Поэтому выбор цветов – важная составляющая дизайна сайта.
От себя добавлю, что ко всему надо подходить скептически: основное – Ваше личное видение.

Свободное программное обеспечение

Ричард Столлман, основатель движения свободного программного обеспечения - GNU. Всеобщая благодарность за данное движение. Он дал нам альтернативу в области программного обеспечения, с которым можно ознакомиться: всем известный веб-сайт - sourceforge.net, один из самых больших в мире для разработчиков свободного программного обеспечения.

Прожить за 1 доллар

Все знают, что в интернете сегодня можно встретить все, что угодно. Так же можно найти и ответы на все парадоксальные вопросы.
Джеффри из США задался вопросом - можно ли прожить на 1 доллар в день. Далее последовал эксперимент - ровно 100 дней питаться на тот самый доллар. Который удался. Накопленный опыт он выложил в своем блоге - grocerycouponguide.com. Об этом можно узнать более подробно в разделе Rambler "Сайты дня".

Вот вывод, который сделал Джеффри - часто люди покупают еды гораздо больше, чем им нужно на самом деле. Полезно подметить и то, что в ходе эксперимента он отслеживал за всеми возможностями сэкономить: акции, купоны скидок и подобное. А ведь многие люди это недооценивают.

MIT Open Course Ware

MIT - massachusetts institute of technology. Unlocking knowledge, enpowering minds. Open course ware. Слабо ли пройти курсы обучения, разумеется дистанционно, в этом престижном заведении? Думаю, что надо попробовать, тем более что так можно подтянуть знание английского языка.