CMD/BAT, содержит ли переменная число.

Преамбула

В BAT-файлах нет типа переменных, тип разрешается в каждом конкретном случае. Впрочем, это так в большинстве командных языков, в линуксовом bash тоже нельзя явно задать тип переменной.

При этом, процессор cmd не считает числом:

— Числа в системах счисления отличных от десятичной.
— Числа с плавающей точкой (действительные, дробные).
— Если есть лидирующие нули, например 00150 не распознается как число. Хотя с этим мы поборемся.

Числами считаются только целые числа в диапазоне -2147483648..2147483647.

Так как же проверить, число в переменной BAT/CMD-файла или нет? Будем разбираться.

Оставим числа в системах счисления, отличных от десятичной, а также дробные числа. Нормальных механизмов работы в BAT/CMD с ними нет, так что и не будем усложнять.

Решение

1. Включаем расширенный режим (копия) обработки команд. В Windows, начиная с XP SP2 он включен по умолчанию, но лучше явно прописывать для совместимости:

SetLocal EnableExtensions

2. Проверка на пустую переменную. Процессор BAT/CMD считает неинициализированную или пустую переменную пустой, и не задает ей значение 0, если она используется в качестве численной переменной. Так что изначально надо проверять, не пуста ли переменная.
В тестовом примере значение передается в параметре командной строки, его и проверим, а потом запишем значение во внутреннюю переменную скрипта:

rem test if no or void parameter (variable)
if "%~1" == "" (
	echo No arguments. Use  "%~n0%~x0  <test pattern>"
	exit /b 1
)

set INP=%~1

%~n0%~x0 — при расширенной обработке команд %~n достает из переменной, в данном случае переменной %0 имя файла, %~x расширение с точкой. %0 — переменная, содержащая путь к BAT/CMD-файлу

3. Боремся с лидирующими нолями. Данная команда их удалит:

for /f "tokens=* delims=0" %%a in ("%INP%") do set INP=%%a

4. Эта команда сохранит, например 000100, превратив его в 100, но удалит 0 или 000..., так что если переменная после операции оказалась пустой, значит она содержала 0, надо его восстановить, дабы далее избежать ошибок:

if "%INP%" == "" (
set INP=0
)

5. Число или строка. Теперь можно определить, число или строка в переменной, произведя над ней арифметическое действие не изменяющее значение, например, умножение на 1. Сделать это можно с помощью команды set /a. Остается сравнить полученный результат с оригиналом. Если результат операции не равен оригиналу, то в переменной не число, а строка, т.к. результат арифметической операции над строкой всегда будет равен 0:

rem number or not number
set /a "TINP=INP*1"
if NOT %TINP% == %INP% (
	echo Not number!
	exit /b 2
)

6. Положительное или отрицательное число. Далее остается только сравнить числа с 0 с помощью оператора IF и операций сравнения:

Операнд сравнения Описание
EQU Равно
NEQ Не равно
LSS Меньше
LEQ Меньше или равно
GTR Больше
GEQ Больше или равно

rem number type
if %INP% GEQ 0 (
	echo Positive integer
	exit /b 0
)
if %INP% LSS 0 (
	echo Negative integer
	exit /b 0
)

Скрипт целиком

На GitHub

Браузеры для Pentium II и Pentium III (под Windows XP)

В комментарии принесли проблему. Оказывается, более-менее современные браузеры, даже поддерживающие Windows XP не могут запускаться на Pentium II/III и аналогах, т.к. не могут работать без инструкций SSE2. Впрочем, там же в комментариях и решение нашлось:

Версия для Pentium II и Windows XP

Palemoon Firefox 26.5.0 IA-32 Portable

Версия для Pentium III/AthlonXP

Palemoon Firefox 26.5.0 SSE Portable

В общем, пусть тут лежит. Мало ли пригодится.

Pinball Space Cadet, легендарный Пинболл из Windows XP.

Как установить в Windows 7-10.

Преамбула

Пинболл в старых версиях винды действительно был прикольной залипалкой, но в Windows 7 он пропал, причем по довольно смешной причине. Игрушку для M$ писали какие-то сторонние инди-разработчики, и в их исходниках хренженеры M$ не смогли разобраться, во всяком случае, так гласит сетевая легенда. Но позалипать хочется, а нету.

Ну хуй с ним, посоны, я создал, точнее, выдрал из Windows XP.

Работает как в Windows 7 x86 и x64,так и в Windows 10

Скачать инсталлятор с Mega.NZ
Исходный код инсталлятора на NSIS

C#, ввод только цифр (чисел) в текстовое поле (TextBox).

Или окончательное решение цифирьного вопроса.

Преамбула

Ранее мы показывали простые способы, как обеспечить, чтобы в TextBox можно было ввести только цифры, т.е. целое число (копия), а потом расширили пример до ввода в TextBox отрицательных (копия) и дробных чисел (копия)

К сожалению, во всех этих примерах есть фатальный недостаток, текст в них все-таки вставить можно, если воспользоваться стандартным контекстным меню или комбинацией клавиш CTRL+V. На уровне простого взаимодействия с формой и контролами это перехватить невозможно, придется несколько извернуться, т.к. для перехвата события «вставить», придется перехватить сообщение Windows WM_PASTE, которое отправляется окну, или элементу управления окна при выполнении операции вставки. Для Windows, тащемта, однохуйственно, кому отправлять сообщение, форме (окну) или, например, текстовому полю. Т.к. для Windows, и текстовое поле на самом деле окно, просто дочернее, т.е. размещенное в другом окне (форме, в нашем случае). Но это я залез глубоко в бок. Нам нужно добраться до сообщений. А это можно сделать только изнутри самого контрола, но не из событий стандартных контролов, так что будем писать свой!

Постановка задачи: необходимо создать свой контрол на основе текстового поля, который позволяет вводить только числа определенного типа — целые, целые отрицательные, отрицательные и положительные/отрицательные с дробной частью.

Начало

Подключим необходимые пространства имен:

using System.Windows.Forms;
using System.ComponentModel;
using System.Globalization;

Начнем делать свой контрол, наследуемый от TextBox. Т.е. создадим новый класс:

public class InputDigitControl:TextBox
{
	//тут будет код :)
}

Для начала необходимо определить сообщения, которые будем перехватывать. Заводим в классе константы, определяющие коды нужных сообщений:

const int WM_PASTE = 0x0302; //Сообщение "Вставка" (через к.м. и комбинацию клавиш)
const int WM_CHAR = 0x0102; //Сообщение - нажатие алфавитно-цифровой клавиши

WM_CHAR будет отправлено форме системой только тогда, когда будет нажата алфавитно-цифровая клавиша, его будем перехватывать для отслеживания цифр (и прочего). Правда есть важный нюанс — WM_CHAR посылается и при нажатии комбинаций клавиш, например Ctrl+C и т.д., а также некоторых клавиш, которые не совсем подходят под понятие «алфавитно-цифровая», например BACKSPACE. Это надо будет учесть.

Анализ ввода с клавиатуры будем производить в функции PreProcessMessage(), которую переопределим. PreProcessMessage() вызывается для предварительной обработки входящих сообщений, и нужно будет вернуть true, если это сообщение было обработано.

Т.е. алгоритм действий таков — мы проверяем входящий символ на соответствие, и, либо пропускаем его дальше (возвращаем base.PreProcessMessage(ref msg) или false), либо что-то делаем с содержимым текстового поля, если символ нужен (это понадобится при вводе отрицательных и дробей) и возвращаем true. Или ничего не делаем, если символ нежелательный, и просто вызываем true. В последнем случае, символ просто не попадет в поле ввода, т.к. контрол будет думать, что он уже обработан.

Вставку, как я уже говорил выше, тоже нужно будет обработать, но, естественно, несколько иначе, это будем делать в переопределенной функции WndProc()
Под катом еще много

Исходники

Контрол

Тестовое приложение

Репозиторий

Гостья из будущего 2. Прикольная агитация КПРФ

Предстоящих выборов псто о няшной агитации КПРФ. КПРФ, конечно, мертвый зомби-динозавр, на последних выборах пытавшийся продвинуть Лукашенко 2.0., Грудинина, а уж крокодил Гена это вообще свистец… Но, иногда, каким-то чертом кто-то в партии находит годных креативщиков, не нового Маяковского, конечно, но тоже неплохо.

Вот, например, агитация к выборам 200-какого-то года. Замечательно сделано, хоть и наивно.

Скачать ролик с Mega.NZ (SWF+EXE)

Чудесно

Говорите, давно искусства не было, нате вам!

Чем больше разглядываешь, тем криповее. И Лавкрафт русалку спаивает. Вот откуда он сюжеты брал 🙂

И Медуза, надень очки и свали — это не твоя литературная вселенная!

Картинка честно (С)пизжена неизвестно откуда.

Maiyahi aka Numa Numa aka O-Zone — Dragostea Din Tei

Во! Нашел ту самую «флэшку с котиками», от которой куча народа фанатела году в 200?, как и от песни, этой самой O-Zone — Dragostea Din Tei, играла же буквально из каждого утюга

Тогда не очень понимал, ще воно всіх так затягивает, а вот же, уже 5 раз пересматриваю. Горшочек, не вари (хотя вари, вари). Там явно какой-то меметический агент, похоже надо позвонить в [ДАННЫЕ УДАЛЕНЫ]. Не, никуда звонить не надо, просто нажми на реплей.

Скачать с Mega.nz (SWF+EXE)

C#, перехват вывода консольной программы в реальном времени из собственного приложения.

Преамбула.

Итак, необходимо перехватить в реальном времени вывод консольной программы, которая запущена собственным приложением в фоновом режиме, например, как это делает GUI Openvpn для Windows.

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

Замечу только, что для вывода перехваченных сообщений использовал немного модифицированный ListView (копия)


Главное окно основной программы

Консольные тестовые приложения и командные файлы.

Теперь надо подготовить несколько приложений для теста, одно будет консольное приложение на C#, которое генерирует случайное число, выводит его на консоль, ожидает 250 мс, и так повторяет в бесконечном цикле:

Бинарник testapp.exe
Исходный код

И несколько вариантов BAT-файлов, реализующий тот же функционал, только время ожидания составляет 1 секунду.

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

Еще одна вводная

1. В более современных версиях .NET можно использовать оператор async, но я решил обойтись без него, т.к. все возможности для перехвата данных с консоли были еще в .NET Framework 2.0. были, а слова такого не было. Как в анекдоте про Вовочку.
2. Запускать вызываемую консольную программу следует в отдельном потоке, с которым мы будем общаться как обычно — с помощью событий. Иначе чуда не получится — все будет висеть и не работать.

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

Основной класс.

Создадим новый класс, например Runner:

public class Runner

Выше класса добавляем публичный делегат (он нам потом для события понадобится)

public delegate void LogMessage(string Data);

Подключаем нужные пространства имен:

using System.Threading;
using System.Diagnostics;

Внутри класса заводим публичное свойство, определяющее путь к процессу:

public string ProcessPath { get; set; }

Заводим событие, которое будем генерировать при перехвате сообщения с консоли.

public event LogMessage LogSend;

И приватные переменные типов ProcessStartInfo, Process, для управления вызываемым процессом и типа Thread, для управления потоком, в котором будет запущен дочерний процесс.

private ProcessStartInfo Info = null;
private Process Proc = null;
private Thread t = null;

В конструкторе инициализируем переменную Info:

public Runner(string processpath)
{
    ProcessPath = processpath; //устанавливаем значение свойства ProcessPath
    Info = new ProcessStartInfo(ProcessPath);
    Info.RedirectStandardError = true; //перехват STDERR
    Info.RedirectStandardOutput = true; //перехват STDOUT
    Info.UseShellExecute = false; //иначе перехват работать не будет, см. MSDN
    Info.CreateNoWindow = true; //не запускать процесс в новом окне
                                //это скроет консоль запускаемой программы
}

Примечание: Присвоение свойству ShellExecute значения false позволяет перенаправлять потоки ввода, вывода и ошибки.

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

В функции StartProcess() непосредственно выполняем запуск процесса и перехват.

try
{
    Proc = Process.Start(Info);
}
catch (Exception ex)
{
    LogSend("INTERNAL ERROR: "+ex.Message);
    return;
}

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

Для перехвата создаем цикл, в котором вызываем Process.StandardOutput.ReadLine(), пока результат не будет равен null.

StandardOutput.ReadLine() будет ждать, пока программа не выведет на консоль строку, и тогда вернет ее, или же вернет null, когда программа завершится.

string ConOut = "";

do
{
    ConOut = Proc.StandardOutput.ReadLine();
    if (ConOut != null)
    {
        LogSend(ConOut);
    }                

} while (ConOut != null);

Поскольку запуск этой функции вызовет «зависание», если запустить ее в основном потоке, то вызывать ее нужно в отдельном:

public void Start()
{
    t = new Thread(StartProcess);
    t.Start();
}

Ну и функция для остановки вызванного процесса:

public void Stop()
{
    if (Proc != null)
    {
        Proc.Kill();
        Proc = null;
    }

    if (t != null)
    {
        t.Abort();
        t = null;
    }
}

Основная форма

В коде основной формы создаем объект Runner, регистрируем обработчик событий, запускаем перехват, не забывая про останов по нажатию нужной кнопки:

Runner runner = null;
//...
private void btnStart_Click(object sender, EventArgs e)
{
    runner = new Runner(txtPath.Text);
    runner.LogSend += new LogMessage(runner_LogSend);            
    runner.Start();
}

private void btnStop_Click(object sender, EventArgs e)
{
    if (runner != null)
    {
        runner.Stop();
    }
}

В обработчике события отправляем данные в нужный элемент управления, не забывая про Invoke:

void runner_LogSend(string Data)
{
    Invoke((MethodInvoker)delegate
    {
        lvConsole.Items.Add(Data);
        lvConsole.EnsureVisible(lvConsole.Items.Count - 1);
    });
}

Результат

Перехват вывода из BAT-файла

Исходники

На GitHub

BAT/CMD. Задержка (тайм-аут), пауза, аналог команды sleep Linux в DOS/Windows

Преамбула

Почему-то Вовчик Воротов еще со времен DOS не мог в командный процессор добавить встроенную команду sleep <секунд>, которая обеспечивает паузу в скрипте BAT/CMD, как это делается в том же bash. Но есть насколько решений.

Использование утилиты CHOICE.

Совместимость: командные процессоры, начиная с DOS 6.00, включая все версии Windows.

Утилита CHOICE.EXE изначально предназначена для запроса ответа пользователя (Да/нет), например, вызов команды

choice /M "Request Text"

где,
"Request Text" — текст вопроса

отобразит в консоли следующее:

Request Text [Y,N]?

Пользователь должен будет нажать клавишу Y или N, код возврата можно будет отследить в BAT-скрипте в переменной %ERRORLEVEL%, Y1 N2.

Однако, можно сделать из команды CHOICE задержку в скрипте, используя следующий синтаксис:

choice /T [секунд] /D [любой_символ] >nul

где,
/T [секунд] — включить задержку на [секунд] секунд.
/D [любой_символ] — ответ по умолчанию (без него не будет работать параметр /T).
>nul — отправить вывод сообщения команды в >nul, дабы не загрязнять вывод скрипта.

Например:

choice /T 1 /D y >nul

установит задержку в одну секунду.

+ Максимально совместимая команда, начиная с DOS 6.00.
— Не является встроенной командой, может отсутствовать в сборках Windows/DOS или образах Windows PE/загрузочных образах DOS
— Команда может спровоцировать зависание скрипта на неопределенный срок, если скрипт был вызван в определенных условиях, когда командный процессор cmd.exe был вызван иным приложением Windows, выполняющим перехват STDOUT консоли.

Справка по команде

Команда TIMEOUT

Совместимость: Windows 7 и выше.

Синтаксис:

timeout /T [секунд]
или
timeout [секунд]

где,
[секунд] — время в секундах.

+ К Windows 7 Вовчик Воротов таки озаботился командой, позволяющей делать стандартную задержку в BAT-скриптах.
— Нет в более ранних версиях Windows и DOS
— Если BAT-файл запущен в приложении, перехватывающем STDOUT (консольный вывод), могут случиться необоснованные глюки.
— Не является встроенной командой, может отсутствовать в сборках Windows или образах Windows PE

Пример:

timeout /T 1 >nul

Справка по команде

Команда WAITFOR

Совместимость: Windows 7 Professional и выше.

Вообще эта команда предназначена для другого, она отправляет или ожидает системного сообщения. Примерно того же, чем являются системные сообщения в Linux, например SIGTERM и SIGKILL, хотя и весьма условно — в Windows они устроены несколько по-другому. Если программе указать заведомо несуществующее системное сообщение и время ожидания — программа сработает как пауза в BAT/CMD скрипте:

waitfor /T [время] [сообщение(строка)] 1>nul 2>nul

где,

/T [время][время] время ожидания, секунд.
[сообщение(строка)] — можно использовать любую случайную строку, не совпадающую с известными системными сообщениями.
1>nul — перенаправление стандартного потока вывода (STDOUT) в устройство nul.
2>nul — перенаправление стандартного потока ошибок (STDERR) в устройство nul.
Два последних переопределения используются для того, чтобы не замусоривать вывод скрипта.

Пример (скрипт будет ожидать 1 секунду):

waitfor /T 1 zhzhz 1>nul 2>nul

+ Не вызывает зависаний при перехвате консольного вывода скрипта внешним приложением
— Нет в более ранних версиях Windows/DOS
— Не является встроенной командой, может отсутствовать в сборках Windows или образах Windows PE

Справка по команде

Нестандартное использование команды ping

Совместимость: DOS, с установленными программами поддержки сети, все версии Windows

ping на locallhost можно использовать, как команду для задержки в BAT-файле. Хотя, этот способ не рекомендуется использовать, т.к. время задержки может отличаться в зависимости от количества отправленных пакетов, «железа» компьютера или версии ОС.

Пример:

ping -n 3 127.0.0.1 >nul

127.0.0.1 — IP-адрес localhost

-n 3, т.е. 3 пакета отправленные на localhost дают примерное время ожидания в 1 секунду на Windows 7, на ноутбуке HP Pavilion

+ Есть во всех версиях Windows/DOS где есть стандартная поддержка сети от MS
+ При перехвате STDOUT не глючит
— Время задержки определяется весьма приблизительно.

Внешние утилиты

Самостоятельных реализаций sleep/timeout написана вагон и маленькая тележка. Например, одну из них можно скачать на GitHub:

sleep (console application)

Запуск:

sleep <секунд>

Пример:

sleep 1 >nul

+ Сбоев не обнаружено
+ Совместимость: Все версии Windows x86/x64
+ Имеются исходники, можно пересобрать под DOS при наличии компилятора Freepascal.
— Внешняя нестандартная утилита, придется таскать вместе с BAT/CMD файлом.

Впрочем, таких утилит много, все имеют свои плюсы и минусы. Выбирайте под конкретную задачу нужный вам способ.

CMD/BAT, генерация случайных чисел.

Применимо к линейке ОС Windows NT, начиная, как минимум с Windows 2000, x86 и x64 версий[прим. ред.]

Командный процессор Windows (CMD) содержит встроенную переменную %RANDOM%, которую можно использовать для генерации случайных чисел.

%RANDOM% генерирует случайное целое число от 0 до 32767 (включительно).

echo %RANDOM%

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

Например, можно сгенерировать случайные числа в диапазоне от 1 до 500:

@ECHO OFF
SET /a _rand=(%RANDOM%*500/32768)+1
ECHO Random number: %_rand%

Если попытаться сгенерировать случайные числа больше чем 32767, то это приведет к проблемам, хотя с виду все будет работать. Например, если в вышеприведенном коде заменить 500 на 65536, то это приведет к генерации последовательности «случайных» чисел, которая будет состоять только из нечетных чисел.

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

Например, если вы генерируете числа в диапазоне от 1 до 100 то в среднем:

— При генерации 10 чисел, примерно 6% будут дублироваться
— При генерации 100 чисел, этот процент вырастет до 63, т.е. 63% сгенерированных чисел будут дубликатами, т.е. совпадать с одним или несколькими из остальных 99 чисел.
— Если сгенерировать 1000 чисел, почти все будут дублироваться, т.к. есть только 100 возможных значений.

Случайные и псевдослучайные числа

Псевдослучайная последовательность не является истинно случайной и определяется небольшим набором начальных условий.

В случае %RANDOM%, начальное значение зависит от текущего времени (системного таймера), когда произошел запуск экземпляра командного процессора. Это может создать проблему, когда проходит примерно одно и то же время перед обращением к переменной %RANDOM% и запуском самого скрипта, одновременно со стартом экземпляра командного процессора. Возвращаемое число будет находиться в небольшом предсказуемом диапазоне.

В качестве примера создайте файл numbers.cmd, содержащий следующий код:

@Echo off
Echo %RANDOM%

И запустите его следующим образом:

cmd /c numbers.cmd
cmd /c numbers.cmd
cmd /c numbers.cmd
...

Раймонд Чен из MSFT подробно описывает, почему %RANDOM% в cmd.exe не такой уж случайный.

Йоханнес Баагё опубликовал сравнение лучших алгоритмов генерации случайных чисел на javascript. Самый быстрый из них — Alea(), копия которого представлена по ссылкам ниже или в источнике.

Эта реализация имеет ряд преимуществ: можно генерировать числа большие, чем позволяет %RANDOM%, можно быстро сгенерировать много чисел, можно создавать псевдослучайные последовательности, т.е., результаты станут повторяемы, если вы вызовете скрипт с указанием одного и того же начального числа, т.е сами зададите начальные условия.

Впрочем, не стоит использовать эти «случайные числа» для чего-то серьезного, в винде так и нет нормального штатного генератора случайных чисел, и изначально не было. В худшем случае стоит пользоваться библиотеками криптопровайдера, в лучшем — аппаратным генератором. (прим. ред.)

Скрипт random.js на PasteBin
Источник

Перевел Серёга «PTZSnake jr.» Неклюев
Специально для Tolik-punkoff.com
Редактор: Leha Silent

Все права идут нахуй.

Секта хоккеистов, бандеровцы и кот.

Вместе с одногруппником убегали от гопников в районе круглосуточного магазина и дома культуры, и магазин, и ДК и одногрупник существуют в реале. Гопники тоже. Нас от гопников отбил симпатичный высокий блондин лет 17-ти, примерно.

Блондин потом стал нам жаловаться, мол папа мудак, несет какую-то хуйню, заставляет его заниматься хоккеем, хотя ему этот хоккей нахуй не вперся. Я ответил, чтоб он сам думал, и послал нахуй токсичного родителя, и мы с одногруппником пошли домой.

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

Ну у них там и накопано было! Какие-то подземные тоннели, целое ледовое поле для хоккея, двери в несколько раздевалок для хоккеистов (в одной из я заметил того самого парня, сына главы секты).

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

Тут этот батя как-то резко смягчился, сказал, «ты нам подходишь, умный парень» и предложил сходить на их собрание, ну как предложил — добровольно-принудительно, впрочем, я пошел и мне даже стало интересно, что за хрень тут творится, и как они без ведома мэрии тут всего понастроили.

Пока шли до зала собраний, я услышал какой-то шум сверху:

— Что это?
— Не беспокойся, это бандеровцы заседают, но они входа к нам не найдут.

Собрание проходило в каком-то совдеповском актовом зале, везде стояли медсестры в белых халатах, куча народа уже заняли места и попивали жидкость, похожую на разбавленный кисель. Меня подозвала медсестра, спросила, новенький ли я, и после утвердительного ответа, усадила меня на стул, перетянула руку жгутом и въебала укол непонятной красной хрени, которая выглядела как кортексифан из сериала Грань (Fringe). Причем медсестра утверждала, что тут все натуральное, это не наркотик, а смесь трав разработанная лидером хоккейной секты.

От укола мне стало реально больно (дальше расскажу почему). А потом началась лекция, где батя хоккеиста втирал хуйню про личностный рост, саморазвитие и преданность компании, в духе инфоцыган. Кстати, легкую эйфорию я тоже испытывал. И если боль я объясню ниже, то как объяснить виртуальный наркотик, я хз. А мне стало тяжело дышать, и мне подали напиток, тот самый разбавленный кисель, мне с него стало легче, но я подумал, что пора валить и тихо съебал, как-то умудрившись найти лестницу наверх.

Далее не помню, походу я к бандеровцам побежал.

Дальше бегаю по лестницам, за мной бегал батя хоккеиста с криками «Предатель, убью», изо всех щелей валит дым, из окон разбитых (бегаем уже не в подвале) тоже валит дым, где-то кого-то пиздят, меня в окно выбрасывает какой-то пацан, я планирую на землю, просыпаюсь. Бандеровцы разгромили хоккейную секту.

Вы спросите, а кот, кот где же?

А кот был в реальности, сначала ему ебнуло в кошачий мозг кусать меня за руку в районе локтевого сгиба, что мозг во сне отобразил, как укол, а потом эта тварь мне на грудь забралась, почти на шею, что и вызвало приступ удушья во сне, совместно с апноэ.

Самое прикольное с научной точки зрения, как реальность происходящего с телом влияет на сюжет сна. Ученых на эту проблему нет :((

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

Британские ученые, вы где?

CMD/BAT Переопределение (redirect) STDERR (стандартного потока вывода ошибок) куда-нибудь.

Ну, например, в файл или в nul.

Не знал, что в Windows работает линуксовый синтаксис:

someprogramm.exe parameters 1>nul 2>nul

Или так:

someprogramm.exe parameters >nul 2>nul

1> или > — стандартный поток вывода (STDOUT)
2> — стандартный поток вывода ошибок (STDERR)

Причем, если бы в грозу не вырубило интернет, хрен бы узнал. Никогда не надо было, а тут понадобилось. Психанул и написал как в Линуксе, ВНЕЗАПНО, сработало.

Вовчик Воротов даже куски синтаксиса у никсоидов тырил?

C#, тайм-аут (sleep) в консольной программе.

Проще всего это сделать с помощью остановки потока (thread):

System.Threading.Thread.Sleep(время_в_миллисекундах);

Например:

System.Threading.Thread.Sleep(250);

остановит выполнение основного потока программы (если поток один, соответственно, программу) на 250 миллисекунд:

static void Main(string[] args)
        {
            
           //какой-то код

            System.Threading.Thread.Sleep(250);
            
            //какой-то код
			
        }

БрокаЦентр Live@DDT Part #2

Tracklist:

00:00 — Охотник (cover КиШ)
03:02 — Подруга (вроде как на стихи Есенина, или это уже Антоша вдохновлялся)
06:44 — Rebels
10:22 — Бои без правил
14:50 — Все по-другому (оно там почти два раза, Антоша забыл текст на середине песни :))
19:42 — Стихи Кота или Глока, я хз. И вообще пошла всякая хрень, вроде как бухие перепевки Пилота непонятно кем, вроде Котом 🙂

Прямая ссылка: https://youtu.be/g5tJ75W3FTw

Скачать трек с Mega.nz

C#, получение списка дисков, доступных в системе, и некоторых их параметров

Заметка от склероза.

Делается с помощью функции DriveInfo[] Drives = DriveInfo.GetDrives(); из пространства имен System.IO.

Ссылки

DriveInfo.GetDrives() на MSDN
Класс DriveInfo на MSDN
Пример кода на PasteBin

БрокаЦентр Live@DDT Part #1

Прямая ссылка: https://www.youtube.com/watch?v=xH_gR-Elidg

Tracklist:
00:00 — Молодость
04:08 — Пьяница (на стихи С. Есенина)
07:24 — Настёна
10:49 — Красно-чёрная
15:02 — Конопля
18:24 — Сыпь, гармоника (на стихи С. Есенина)
21:58 — Рожь (немного ватная песня по нынешним временам 🙂

Скачать трек с Mega.nz (MP3)
На SoundCloud

ЗЫ. Мише Вербицкому должен понравиться первый трек 🙂 Пусть потом отпишется на ЛЖР, если будет время послушать.