Репетиция кондопожской группы «Позитив», 200█ год. Эх, как все было круто и мило, и отрываться можно было до утра, благо бешеный принтер еще не был настолько бешеным. Ну и Леше отдельное с кисточкой, хз в каких архивах откопавшему запись.
Category Archives: Блог
ГЕОРГИЕВСКАЯ ЧЛЕНТОЧКА
Уберите от экрана женщин, беременных детей и обязательно покажите ватникам!
Это меня так замечательно поздравили с 23 февраля. Такой вот дерьмоядреной бiмбой, способной порвать гигаватное количество пердаков!
Алсо, у нас была георгиевская туаленточка, она менее натуралистичная, но не менее разжигающая.
C# Перевод чисел между системами счисления стандартной функцией класса Convert
Да, совсем забыл выложить исходник, спасибо, что напомнили.
Перевести число в/из десятичной в 2, 8, и 16-ричную систему можно с помощью стандартной функции класса Convert
Convert.ToInt64(s, From)
s — строка, содержащая число.
From — основание системы счисления.
Обратное преобразование:
Convert.ToString(n, To)
n — число
To — основание системы счисления.
На выходе будет строка
В примере еще показал, как ограничить ввод в текстовое поле, чтоб можно было вводить только определенные символы, и добавил отображение символа по его коду (в однобайтной кодировке, для Unicode будет погода на Марсе). Числа можно вводить через пробел.

Иконка для своего приложения Windows. Стандартные размеры иконок
И как сделать ICO файл с несколькими изображениями
Спрашивали, как надо правильно делать иконку для своего Windows-приложения.
В первую очередь нужно ее нарисовать, либо найти изображение. Чем больше, тем лучше, поскольку для хорошей иконки потребуется несколько файлов разного размера.
Если изображение будет одно и маленькое, то иконка будет выглядеть некрасиво, пойдет квадратными пикселями.

То же самое касается и иконки для формы приложения, хотя на самой форме корректно будет отображаться и маленькая иконка 16×16 пикселей, при переключении по Alt+Tab уже будет заметно и некрасиво.


Рисовать, то лучше в каком-нибудь векторном редакторе, чтоб было потом проще создать несколько растровых изображений разных размеров. Мы, например, пользуемся Inkscape, он простой, бесплатный и для простых изображений вполне подойдет.
Еще момент — изображение должно, очевидно, быть квадратным.
Нарисовали, теперь нужно получить несколько изображений стандартных размеров:
— 16×16
— 32×32
— 48×48
— 256×256
Где-то читал рекомендацию, что нужен значок еще 128×128, но на практике пока не заметил, чтобы его наличие было критично.
Для Windows 7 и выше обязательно нужен значок 48×48
Обратите внимание, что размер значка рабочего стола по умолчанию в XP был 32×32, а в Windows 7 — 48×48
В значки для формы, а не для иконки экзешника, лучше не включать значок 256×256 в том случае, если приложение должно работать на XP.
В остальных случаях XP игнорирует значок 256×256, но ничего плохого при этом не происходит, а вот если такой значок используется для формы, то приложение может упасть.
Известно, что в одном файле ICO могут храниться несколько изображений разных размеров. Для сборки есть много приложений и онлайн-сервисов, но мы пользуемся простой бесплатной программкой icon sushi Копия
Пользоваться очень просто.
1. Открываем все нужные изображения
2. Выделяем их в окне программы:

3. Сохраняем иконку (File — Save as Multiple Icon)
ЗЫ. Чтоб два раза не вставать.
Кто-то просил картинки-кнопочки от XuliOrganizzer’а
Так Леша выложил картинки на Github
Текстовый редактор FOTON для DOS

Охрененная софтина была для 1989 года.
Макросы, возможность компиляции программ, не выходя из бассейна из редактора и множество передовых фишек для того времени.
А самое главное, в нем есть одна штука, которой до сей поры нет ни в одном более современном текстовом редакторе. Выделение прямоугольных блоков текста! Которые можно переносить, вставлять и т.д. Вот нет такого больше нигде и все, а надо иногда. Причем настолько надо, что периодически пользуюсь сим олдовым произведением программерского искусства. Хоть сам бери и пиши редактор с подобной функцией, блин.
UPD.
Есть, оказывается. Не знаю насчет vim и emacs, правда, но Notepad++ делает как надо. И Far (по Аlt+стрелки). А вот Студия делает, но не совсем так.


Его собственная внутренняя демка:
Colors. Утилита для подбора цвета фона и текста в Windows Forms
Опять студенты приходили, на этот раз с мелким заданием, перечислить все названия цветов в Windows Forms. Заодно уж сделал из этого задания утилитку, чтобы подбирать цвет символов на фоне в Windows Forms. Довел задание, так сказать, до логического конца. В общем, кто не успел сегодня на скайп-чатик, где я всякие мелочи объяснял и делал, ходите на Гитхаб, скачивайте там. Только не забудьте хоть что-нибудь переделать, а то преподы будут ругаться.
Принцип очень простой. Все названия цветов есть в перечислении KnownColor, а в классе Enum есть метод GetNames, который позволяет получить строковый массив с именами элементов перечисления.
string[] ColorNames = Enum.GetNames(typeof(KnownColor));
Вытащить конкретное значение элемента перечисления по его имени (если оно в виде строки) можно с помощью Enum.Parse
KnownColor knownColor =
(KnownColor)Enum.Parse(typeof(KnownColor), n);
n — строковая переменная с именем.
Все остальное стандартно, заполняем в цикле GridView и красим ячейки.

Ну и в довесок в программе есть пример использования ColorDialog и получение информации о выбранном в диалоге цвете.

И элемента управления TrackBar для выбора цвета и фона по RGB.

Пользуйтесь на здоровье.
Исходник:
На Гитхабе
На Mega.NZ
Cкомпилированная программка
ЗЫ. Спасибо, Леха, огромное за наводку на GitEve, и удобно, можно всё мышей тыкать, не набивать километры команд в консоли, и идет на всех ОС. Все-таки с этим вашим гитом через консоль несколько неудобно работать, или я пока еще не привык.
Игра «Жизнь» на Turbo Pascal for DOS
От ведь блин, нашел лохматого возраста исходник игры «Жизнь». Писалось с другом на Turbo Pascal для DOS в лохматых годах, когда еще в школе учился.
Написано, конечно, криво, косо, неоптимизированно и все это жутко тормозит, особенно «редактирование» картинки. Но все равно круто, аж детство вспомнилось, когда не пил, не курил, мониторы были зеленее, компьютеры медленнее, Ельцин президент, а я хотел вступить в КПРФ.

https://youtu.be/W7VRyfoaOkg
Еще видео
Думал даже переписать сие произведение, Free Pascal вроде умеет в графику. Может и займусь, или найду еще более крутой исходник шизово-психоделических трехмерных графиков и сделаю из него заставку на Юнити, все равно давно хотел попробовать что-нибудь написать, чтоб с триде, да в голову ничего не приходило.
А гадский Ютуб почему-то пакостит в видео, во всяком случае, в эти. На локальной машине все четко видно, а публикуешь, как-то лажовенько выглядит, ерунда какая-то непонятная с ютубом.
Патчи от WannaCry, NotPetya и скрытых майнеров для Windows XP
Пришлось столкнуться, слава Ктулху не с самими вирями и майнерами, но с незаделанными дырками. Есть два пути обновить пожилую ОС, протестировать на наличие уязвимости Eternal Blue и заткнуть только ее, или сделать кумулятивное обновление.
Протестировать наличие дыры можно с помощью программы Eternal Blues. Пользоваться очень просто, вводим диапазон IP в локальной сети и жмем кнопку SCAN. Где в графе Vulnerable? указано YES, там дырка не заделана.
Заделываем
Качаем официальные патчи от MS
Устанавливаем, перезагружаемся, и проверяем результат программой Eternal Blues
Вот тут в прямом смысле слава Украине, а точнее конкретному украинцу под именем Simplix, который заботливо собрал все обновления со времен выхода SP3 в одну кучу, протестировал и выложил в одном пакете.
Скачать можно с его сайта simplix
Я поставил сразу тестовое обновление, но вы можете скачать то, которое уже полностью протестировано, хотя и тестовое вполне себе зашло. 5 машин и неделя времени, полет нормальный.
Установка детально описана на его же форуме.
Большой плюс для виндопользователей пиратской винды, если таковые найдутся :), после обновлений активация не слетает.
Eternal Blues
KB4012583 и KB4012598
UpdatePackLive-19.11.15 (если запускает пакет обновления с ключом /ie8, обновится IE до версии 8)
Подводный камень при чтении файла с помощью File.ReadAllText
Иногда проще прочитать файл, как текстовый в однобайтовой кодировке, чтобы что-нибудь там поделать с помощью стандартных string.Replace/string.Remove и т.д., иногда даже если файл не совсем текстовый, потому что таких же удобных функций для работы с массивом байт нет (или я не нашел).
Это, наверняка, адский быдлокод, но все-таки вполне альтернатива изобретению совсем уж дикого велосипеда.
А у меня речь шла о текстовых файлах, правда, неизвестно в какой кодировке, и символах, которые нужно искать/менять. Символы от кодировки не зависели, посему любой файл можно было рассматривать, как текстовый, в любой однобайтовой кодировке. Главное, в какой кодировке открыл, в той же потом и сохранить.
Так вот File.ReadAllText пытается автоматически определить кодировку файла на основе наличия меток порядка следования байтов и принудительная установка кодировки не помогает. Если в файле встретился зловредный BOM, то ReadAllText наплюет на твои указания кодировки с высокой колокольни и откроет в той, на которую ему BOM указывает, а при сохранении, соответственно, будет глюк и текст превратится в тыкву.
Беда, конечно, решается стандартно, чтением файла с помощью StreamReader и записью с помощью StreamWriter, которые себе такой самодеятельности не позволяют, но «осадочек остался».
Мухосранск. Говно. Тоскливо.
Мухосранск. Говно. Тоскливо.
Дети. Дом. Работа. Пиво.
Геморрой. Камаз. Гараж.
Десять лет водилой стаж.
Раз в пять лет с женой в кино.
Мухосранск. Тоска. Говно.
Водка. Патриот. Россия.
Шарфик красно-бело-синий.
Ящик. Киселёв на Первом.
Украина. Киев. Нервы.
Танцы. Шум. «Крымнаш». Веселье.
Утро. Санкции. Похмелье.
Цены. Доллар. Банк. Кредит.
Тёща как всегда нудит.
Снова Киселёв на Первом.
Водка. Вещмешок. Консервы.
Секс с женой как в первый раз.
Поезд. В путь. Спасать Донбасс.
Форма. Каска. Полигон.
Гумконвоем в Краснодон.
ЛНР. Блокпост. Укропы.
Первый бой. Три пули в жопе.
Страх. Обстрел. Осколок «Града».
Труп. Мешок. Рефрижератор.
Крест. Венок. Вдова. Плаксиво.
Мухосранск. Говно. Тоскливо.
Оператор наведения Дон Олесь
XuliOrganizzer. Простенький самописный органайзер на C#
Нет, оно не читается, как хули, органайзер. Но, может быть, что и подразумевается. 🙂
Это маленькая программа-органайзер для XP, 7, 8 и Vista. На 10 никто из нас ее запускать не пробовал, из за отсутствия таковой.
Что умеет:
— Собственно, напоминания по расписанию о событиях. Ну там кота покормить, или не забыть выключить самогонный аппарат, или продать славянский шкаф.

Возможны напоминания как в виде всплывающих подсказок в трее, так и в отдельном окне, повтор напоминаний через заданное время, звуковое оповещение.
Имеется возможность активировать/деактивировать задание-напоминание, есть контроль просроченных заданий и возможность немедленного выполнения таковых при старте программы.

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

— Текстовые заметки

Для заметок есть «корзина», т.е. случайно удаленную заметку можно восстановить.
Все данные хранятся в XML, в настройках можно посмотреть путь к файлу.
Писал в основном Леша, изредка виртуально пиная всех вокруг, и в основном для меня, потому что я давно хотел удовлетворяющий меня органайзер с напоминаниями, а в сети не было такого, который бы меня устраивал.
Распространяется свободно, как обычно, по лицензии Хекса.
Исходники:
Красотища
https://www.youtube.com/watch?v=lrx2Xa8X8h0
Теперь у меня появился третий любимый рекламный ролик. Первые два это «Вентиляторный завод» и реклама CISCO, где кошка, которая выпила все молоко.
C#. Windows Forms. Режим замены текста по нажатию клавиши Insert в TextBox.
То есть, задача сделать, чтоб было как в нормальном текстовом редакторе, нажимаем Ins, и символы перед курсором заменяются на введенные с клавиатуры. Нажимаем еще раз и символы вставляются как обычно.
Элемент управления TextBox почему-то из коробки это не поддерживает, поддерживает MaskedTextBox, но и стандартный TextBox вполне можно допилить. Не знаю, почему на первых строках в поисковике какой-то ужас со StringBuilder‘ами и чуть ли не вызовом WINAPI, хотя все гораздо проще.
Заводим в форме логическую переменную, которая будет отвечать за то, какой режим ввода сейчас true — замена, false — обычная вставка.
bool InsertMode = false;
В обработчик события KeyUp помещаем код, который будет менять флаг, если был нажата клавиша Insert:
private void txtTest_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Insert)
{
InsertMode = !InsertMode;
}
}
В обработчике KeyPress код следующий
private void txtTest_KeyPress(object sender, KeyPressEventArgs e)
{
//Вытаскиваю объект, который вызвал событие,
//чтоб можно было подключить несколько TextBox'ов
TextBox tb = (TextBox)sender;
//если включен соотв. режим, курсор не в конце текста
//и не нажата какая-либо управляющая клавиша
//заменим символ перед курсором
if (InsertMode && tb.SelectionStart < tb.TextLength
&& !Char.IsControl(e.KeyChar))
{
//выделяем 1 символ перед курсором
//область выделения автоматически заменится
//символом, введенным с клавиатуры
tb.SelectionLength = 1;
//если выделен символ перевода строки, значит это конец строки
//в multiline TextBox,
if (tb.SelectedText == "\r" || tb.SelectedText == "\n")
tb.SelectionLength = 0; //не надо ничего
//заменять, убираем выделение
}
}
Вот. Комментарев больше кода 🙂
Можно сделать замену текста по кругу, т.е., когда дошли до последнего возможного символа, начинаем заменять с первого. Может пригодиться, если строка какая-то небольшая, например две цифры секунд, какой-нибудь код, почтовый индекс и т.д.
Надо всего лишь модифицировать первое условие, чтоб исключить проверку на длину строки и добавить проверку на TextBox.MaxLength
if (InsertMode && !Char.IsControl(e.KeyChar))
{
//замена по кругу
if (tb.SelectionStart == tb.MaxLength) tb.SelectionStart = 0;
// [...]
}
Достигли последнего возможного символа, перескочили в начало текстового поля.
C# Windows Forms. Изменение размеров формы без заголовка
Форму с FormBorderStyle None можно сделать такую, чтобы пользователь мог менять и ее размеры мышью, как у обычной формы:
Код под катом
Получаются такие вот симпатичные формочки:

Код на PasteBin
Проект
Неологизм от Гундяева
C# Windows Forms. Перетаскивание формы без границ. Перетаскивание формы не за заголовок.
Т.е. такой формы, у которой FormBorderStyle установлен в None
Вариант 1, это прописать в обработчике MouseDown вот такой код:
base.Capture = false;
Message m = Message.Create(base.Handle, 0xa1, new IntPtr(2), IntPtr.Zero);
this.WndProc(ref m);
Вариант простой, форма будет перетаскиваться, как обычная форма, только за любую ее точку, а не за заголовок.
Вариант №2 вот такой:
Код под катом
Форма также перетаскивается за любую точку формы, но, нужно несколько обработчиков событий, при перетаскивании форма будет перерисовываться вся, а не как обычно, когда появляется только рамка перетаскивания, и к тому же форма чуть-чуть дернется в начале перетаскивания, после нажатия левой кнопки мыши. Но если надо, чтоб во время перетаскивания она вся перерисовывалась, то вариант использовать второй способ.
Понабежало студентов
Со своими заданиями на C#, заочники, ко всему прочему. И хрен бы с ним с уровнем знаний, кто-то умеет форму нарисовать сам, уже хорошо, кто-то знает, что такое форма (хотя бы для выпечки пирожных), кто-то умеет водить большой железный корабль и стрелять из… ну чем там корабЕль стреляет. У кого-то своя фирма по вебдезигну и наружной рекламе (такие обычно не приходят, им есть, кому на работе делать, или они сами умеют).
Страшнее студентов-заочников могут быть только преподаватели, которые им попадаются, и по закону подлости, самому, э-э-э… отстающему студенту, вот-вот, водителю корабЕля, достался самый въедливый препод. «Мало того, что говорящий, но и совсем непьющий препод, хрен знает с какой планеты», у которого ко всему прочему требование, чтоб все комментарии были на английском. Русофобия! Ну вот куда товарищ полковник… Правильно, товарищ полковник ему в прошлом году сам сдавал.
Первое задание было ничего, написать кодер/декодер из BASE64 и обратно. Ну вот как-то так
А второе, написать «менеджер паролей» с базой в XML, умеющий импортировать пароли и заметки к ним из произвольных текстовых файлов типа:
Иван Иванов
ivanov@example.org
13/01/1979
vatnik1931
Марья Иванова
ivanova@example.org
31/02/1989
vatnica1945
В общем, как-то сделал, но криво, точно знаю про то, что если где-то забыть галку в импорте, то функция импорта ничего не увидит, но есть кнопка предпросмотра перед добавлением в базу, так что галку можно поставить.
Кораблеводитель потерял исходники. Вот пусть они теперь тебе тут лежат на видном месте, чтоб по ночам не звонил.
Другие не вздумайте этим изделием пользоваться в целях всамделишного хранения настоящих паролей.
А вискарь, кстати, приехал поездом в косту из гламурманска, Леха его забрал и привез, но я пока не пробовал, меня покрысла грыза уличная и доктор пока запретил алкашку, как несовместимую с антибиотиками.
Перекодировщик в/из BASE64
Исходники типа «менеджера паролей»
«Итак мы представляем самый первый наш альбом!»
Неугомонная задница Леша, когда не охотится и не бухает, вечно что-нибудь да придумает. На этот раз он решил, что нам пора запулить в сеть аж целый мужыкальный альбом. Когда-то давно мы ставили ему условие, что никаких альбомов и прям такого выкладывания в сеть, пока пять треков не запишем. Я, как обычно, в душе не имел, что есть их пять и даже с бонусом. И зарегаться он уже успел, и страничку нашей «команды» создать. В общем, жаль нет ружья, в смысле если у мальчика в руках нет ружья, то…
В общем, «записано профессиональными программистами». Обложку заставили рисовать меня, с наказом, чтоб «Любители теории заговора задумались. О своей безопасности».

Tracklist:
1. Censorship is banned [Цензура запрещается] 02:04
2. Creepy flies to Donetsk [Крипота летит в Донецк] 02:32
3. Raspil 4 You Mr. Put In 03:07
4. Fire of urban Code 05:14
5. Burn the summons! [Invisible battle & Feuer frei rmx] 01:58
6. DJ HB4K & PMVS, Hex and Co — [Bonus track] Day Of Win [DJ HB4G special remix for Hex]
Скачивание, естественно, бесплатное. Лично мне целиком нравятся только первая и последняя тема, которая бонусная, остальные нравятся меньше.
PC-speaker в Linux, или как сделать beep из консоли встроенным динамиком ПК
Еще со времен DOS можно было свистеть, гудеть и пикать встроенным динамиком компьютера, и даже симфонии играть. Сейчас это особо не нужно, ибо везде звуковые карты, динамики и прочая мультимедия. Но иногда PC-speaker нужная и полезная вещь, способная сигнализировать о чем либо, например, о разрыве соединения с Интернетом на домашнем сервере, к которому не подключен монитор, или о том, что торрент докачался. Да и вообще, способов, как можно применить спикер — множество. Даже симфонии можно играть.
Зачастую, PC-speaker в линуксе отключен, точнее, не загружен модуль ядра, который им управляет. Обычно это модуль pcspkr, хотя, в некоторых источниках написано, что может быть и другой модуль snd-pcsp. У меня оказался первый.
Проверить, загружен ли соответствующий модуль ядра можно командами
lsmod |grep pcspkr и lsmod |grep snd-pcsp соответственно.
Если команда ничего не выдала, то модуль не загружен.
Если выдала что-то похожее, значит, модуль загружен:
>lsmod |grep pcspkr pcspkr 1448 0
Если модуль не загружен, нужно попробовать его загрузить:
modprobe pcspkr
или
modprobe snd-pcsp
Если команда не выдала ошибки, модуль загружен. Можно проверить с помощью команды lsmod. Если случилась ошибка, то печально. Модуль, скорее всего, придется собирать. Ну, или не так печально, а даже наоборот — модуль встроен в ядро, и PC-speaker по умолчанию включен. Попробуйте простой beep.
Для простого beep достаточно отправить на консоль символ с кодом 007, ASCII-символ BEL
echo -ne '\007'
Способ может не сработать из SSH-терминала, либо из терминала X. Терминал SSH «булькнет» не на удаленном компьютере, а на локальном, а X-server может перенаправить beep на колонки, вместо PC-speaker’a
Простые звуки и даже целые мелодии можно играть на спикере утилитой beep.
На рабочей машине она уже была в комплекте ОС, на Ubuntu ее можно установить командой apt-get install beep, а в Slackware она ставится через Sbopkg
Проект имеется на Github, можно собрать и из исходников
Примеры вызова:
beep
Без параметров издаст стандартный beep
beep -f 500 -l 1000
Выдаст звук частотой 500 Гц, продолжительностью 1 секунду (1000 миллисекунд)
Пример скрипта, играющего тему Die Gedanken Sind Frei из ролика в начале заметки.
Больше мелодий и ссылок на готовые скрипты Копия
How do I make my pc speaker beep. Еще больше про то, как можно пискнуть спикером.
Beep Music Demo или мелодии на PC-Speaker
С помощью утилиты beep под Linux
Прямая ссылка
Скачать скрипты
Прямая ссылка
Скачать скрипты
Прямая ссылка
Скачать скрипты
Прямая ссылка
Скачать скрипты