Гора всегда рождает мышь, ибо мышь живет внутри горы.
ПАДОНКИ in da flash

Прислали абсолютно неполиткорректный мультик, аж 2004 г., созданный неким Дядей Федором с сайта udaff.com, про приключения падонка Падонок и его друга растамана Марли. Причем, по нынешним временам, мульт получился неполиткорректным с обоих сторон, что с западной (в первой серии ЛГБТ-демонстрацию давят бульдозером), что со стороны ГОРФ, бо герои постоянно употребляют РОСКОМНАДЗОР. Также имеется обкуренный колобок, а восьмая серия — не серия, а flash-игрушка, где надо в гей-клубе «КАКУНЕГРАВ» отстреливать посетителей (нечто наподобие известной «Куриной охоты»).

Вроде бы в сборнике нет 4 серии, но ее там могло и изначально не быть (была 3.1).
В общем, такой DIV-трэшачок для подростков, но мне нравится 🙂
Пересобрал оригинальные SWF-ки в EXE, так что смотреть можно в винде, где сдох или вообще не поставлен был Flash-player, который, один хрен блядиадобы удалили с сайта. Хорошо, что у меня все их продукты исключительно ворованные, ну не зря оракул местного разлива — сразу знал, что у анальных проушин воровать надо.
ПАДОНКИ in da flash (RAR: SWF + SWF EXE) с Mega.nz
ПАДОНКИ in da flash (RAR: SWF + SWF EXE) с Google.Drive
Замечательные опечатки
Комар на улице Вязов
О шмоньке Соловьеве, aka Вечерний Мудозвон и о накрутках.
Вместо преамбулы скажу сразу вывод, да Соловьева абсолютно законно выпиздил из трендов Ютуб. И абсолютно в соответствии со своими правилами. И зря Роскомнадзор запрещает аниме, т.к. им же реклама на некоторых аниме-сайтах просмотры и накручивает.
Итак, сижу я, никого не трогаю, новости на kasparov.ru читаю, вдруг вижу — Расчленинградский суд запретил аниме «Токийский взрыв» оно же «Террор в Токио» про подростков, которые сбежали от современной версии Отряда 731 и пытаются таки донести мысль, что нацисты не сдохли, и они даже есть в рядах японского правительства, и японские империалисты даже атомную бомбу втихую собрали. Так что вроде как и запрещать его не надо, все про крымнаш, антифашизм и даже деды воевале.
Сижу я, никого не трогаю, примус починяю , в смысле аниме смотрю, тут вдруг вижу вот это:

(полное разрешение)
Небольшое расследование
Оно совсем небольшое, но тем не менее. У плеера kodik.info, где он был внедрен на сайт каталога аниме, есть некая база аниме (что вообще так-то хорошо, информация должна быть свободной). Ну так вот, сайты с контентом не держат контент у себя, а подключают плеер, а плеер (точнее, хозяева плеера) показывают рекламу и аниме. А чтобы купить показ в плеере kodik, нужно потратить несколько мертвых президентов США. И, они не на хеллоуин, они на долларовых купюрах. Пока не буду говорить, как я купил рекламу у kodik.info, мы придержим. Но просьба распространить, чтоб у вечернего М. пукан подорвался. Так что Ютуб вполне норм выебал Соловьева, вечернего М. за накрутку.
Удачи вам и любви!
Пакетный конвертер (перекодировщик) текстовых файлов v 0.0.3b
Обновление пакетного конвертера текстовых файлов.
Благодарим всех, кто сообщил о багах.
+ Изменения в алгоритме поиска файлов
+ Поправлен баг с сохранением конфигурации (масок файлов)
C#, поиск файла по маске, более правильное решение.
Когда-то уже говорил (копия) что стандартная функция C# Directory.GetFiles();
неправильно ищет файлы по маске. И даже сделал на скорую руку кривофикс, но кривофикс действительно оказался именно что криво. Во-первых, срабатывал только для некоторых масок, а во-вторых, оказался чувствительным к регистру имен файлов. Делаем более прямое исправление.
Заведем вспомогательную функцию, которая будет добавлять конечный слэш (\
) к имени директории. Оно не особо надо, но пусть будет для порядка.
private static string AddSlash(string st) { if (st.EndsWith("\\")) { return st; } return st + "\\"; }
И функцию, получающую имя файла из полного пути. Конечно, можно было бы воспользоваться классом FileInfo
из System.IO
, но тут операция совсем уж простая, а FileInfo
может сгенерировать ненужный Exception
. Проще получить имя файла с помощью строковой операции:
private static string GetNameOnly(string FullName) { int LastSlash = FullName.LastIndexOf("\\"); if (LastSlash == -1) return FullName; return FullName.Substring(LastSlash + 1); }
Да, я таки решил воспользоваться нелюбимыми регекспами. Впрочем, маска файла и есть регулярное выражение, только с упрощенным синтаксисом.
1. В имени файла могут встретиться символы, считающиеся служебными в регулярном выражении (.
,^
,$
,{
,}
,[
,]
,(
,)
,+
), их необходимо экранировать, чтоб они воспринимались обработчиком регулярных выражений, как обычные, а не служебные символы.
//точка в маске файла должна быть точкой в регулярном выражении
//экранируем
Mask = Mask.Replace(".", "\\.");
//^,$,{,},[,],(,),+ в regexp служебные, в именах файла допустимые
//экранируем
Mask = Mask.Replace("^", "\\^");
Mask = Mask.Replace("$", "\\$");
Mask = Mask.Replace("{", "\\{");
Mask = Mask.Replace("}", "\\}");
Mask = Mask.Replace("[", "\\[");
Mask = Mask.Replace("[", "\\[");
Mask = Mask.Replace("(", "\\(");
Mask = Mask.Replace(")", "\\(");
Mask = Mask.Replace("+", "\\+");
2. *
— в маске файла это любой символ, или их отсутствие. В регулярном выражении этому соответствует комбинация .*
, заменяем:
Mask = Mask.Replace("*", ".*");
3. ?
в маске файла — любой существующий символ. В регулярном выражении это символ .
(точка), заменяем:
Mask = Mask.Replace("?", ".");
4. Осталось ограничить работу регулярного выражения началом и концом строки, строкой будет являться имя (маска) файла. Начало строки обозначается символом ^
, конец символом $
. Добавляем:
Mask = "^" + Mask + "$";
Функция целиком:
private static string Mask2Reg(string Mask) { //точка в маске файла должна быть точкой в регулярном выражении //экранируем Mask = Mask.Replace(".", "\\."); //^,$,{,},[,],(,),+ в regexp служебные, в именах файла допустимые //экранируем Mask = Mask.Replace("^", "\\^"); Mask = Mask.Replace("$", "\\$"); Mask = Mask.Replace("{", "\\{"); Mask = Mask.Replace("}", "\\}"); Mask = Mask.Replace("[", "\\["); Mask = Mask.Replace("[", "\\["); Mask = Mask.Replace("(", "\\("); Mask = Mask.Replace(")", "\\("); Mask = Mask.Replace("+", "\\+"); //* - любое количество любого символа, //в regexp любой символ - точка, любое количество * Mask = Mask.Replace("*", ".*"); //? - любой символ, в regexp любой символ - точка. Mask = Mask.Replace("?", "."); //добавляем начало и конец строки к имени файла. Mask = "^" + Mask + "$"; return Mask; }
В модифицированную функцию поиска передаются такие же параметры, как и в функцию Directory.GetFiles();
т.е. маска файла, путь до каталога и перечисление SearchOption
, которое может принимать два значения: SearchOption.AllDirectories
— поиск с подкаталогами и SearchOption.TopDirectoryOnly
— поиск только в текущем каталоге.
Внутри функции:
1. Преобразуем маску файла в регулярное выражение:
string MaskRegStr = Mask2Reg(sMask);
2. Добавляем слеш к пути поиска (на всякий случай):
sPath = AddSlash(sPath);
3. Заводим List<string>
, куда будем складировать отфильтрованные файлы из найденных (на то, как криво работает Directory.GetFiles()
есть ссылки в начале заметки).
List<string> FoundFiles = new List<string>();
4. Создаем обработчик регулярных выражений с опцией RegexOptions.IgnoreCase
, чтобы игнорировать регистр входной строки (в нашем случае — имени файла).
Regex MaskReg = new Regex(MaskRegStr, RegexOptions.IgnoreCase);
5. Вызываем функцию поиска из System.IO
:
string[] files = Directory.GetFiles(sPath, sMask, SO);
6. Фильтруем вывод на предмет лишних файлов (см. подробнее по ссылке в начале заметки). Фильтрация производится путем сравнения имени файла с ранее сгенерированным регулярным выражением. Если имя файла соответствует регулярке, оно добавляется в List
:
foreach (string filename in files) { if (MaskReg.IsMatch(GetNameOnly(filename))) { FoundFiles.Add(filename); } }
7. Результат возвращается в виде строкового массива:
return FoundFiles.ToArray();
Функция целиком:
public static string[] Find(string sPath, string sMask, SearchOption SO) { string MaskRegStr = Mask2Reg(sMask); sPath = AddSlash(sPath); List<string> FoundFiles = new List<string>(); Regex MaskReg = new Regex(MaskRegStr, RegexOptions.IgnoreCase); string[] files = Directory.GetFiles(sPath, sMask, SO); foreach (string filename in files) { if (MaskReg.IsMatch(GetNameOnly(filename))) { FoundFiles.Add(filename); } } return FoundFiles.ToArray(); }
Вроде бы в этот раз все предусмотрел, и глюкоопцию встроенной функции поправил, и в регулярке нигде не наебался.
Песня про НЛО.
Вспомнилась детская, почти крипи-стори. Итак, прикиньте, начало 90-х, по телеку идут 600 секунд и передача «НЛО — Необъявленный Визит» с Мягченковым. И вот, в садике я долго объяснял одногруппнику что НЛО существуют, и даже песня про них есть. Ее по радио передают.
Я даже сходил к воспитательнице и спросил, кто такая кавалер-барышня, поскольку в те годы транс было транспортным агентством, а трап — деталью от корабля, воспитательница мне рассказала историю про кавалерист-девицу, которая прикинулась парнем, чтобы пойти служить. Вот тут-то у меня все в голове окончательно сложилось, песня про НЛО:
Крутится-вертится шар голубой
Крутится-вертится над головой (НЛО же, иначе хуле ему вертеться)
Крутится-вертится, хочет упасть (приземляется)
Кавалер-барышню хочет украсть (хочет унести для исследований нетипичную девушку, которая хочет служить в армии).
Такие дела.
Обновили страницу «О блоге»
Наконец, все сфоткались. Или нашли подходящие фотографии 🙂 А то аж с 2017 года собраться не могли.
Марковые трипы.
Диклеймер №1. Автор не призывает к употреблению наркотиков в любом виде, записи были сохранены исключительно для целей научного исследования для специалистов-наркологов. Если Вы не являетесь врачом-наркологом, пожалуйста, не читайте эти тексты. Наркотики вредят вашему здоровью.
Диклеймер №2. Специально для Администрации LJ.Rossia.Org
Пост не содержит активных ссылок и скрытой рекламы, или же продакт-плейсминга. Пост создан исключительно в научных целях, сам архив с записями сохранен на другом ресурсе, поставщика описанных марок не уже существует.
Примечание: Архив защищен паролем, пароль указан в комментарии архива. Формат архива RAR5
, формат текстов TXT
. Кодировка: Windows 1251
и UTF-8
.
Политически правильный ремонт возвращается.
Раз уж речь зашла о фотках. Пока я тут отдыхаю, в нашем офисе (который нам таки с концами достался) делают ремонт. Там и до этого была политически правильная стена (копия), а теперь еще и парень, который нашего аффтара фотографировал, и Отаву (флаг Ухтинской Республики) дорисовал.

За странное сочетание цветов говном не кидайтесь, фотки были с разных фотоаппаратов, а я попытался типа панораму сделать, т.к. единым кадром вся стена в кадр не помещалась. В общем, вениаминожаба получилась 🙂
По клику по изображению — крупный вариант.
Полы ребята, кстати, классно сделали. Сняли краску и покрыли в 3 слоя паркетным лаком, и светло, и текстура дерева видна. А то в ГОРФ, как и в совке — пол особо ничем не покрасить, во всех магазинах есть три цвета — темно-поносный, поносный и светло-поносный. Так что сошлись на паркетном лаке, ибо заказывать стойкую краску для пола из Голландии я не одобрил, 8 000 с доставкой.
Покупайте наших полов!
А в руке его горит маленький фонарик…
Пока я тут отдыхаю, нежась в тепле, наш автор таки вышел с фонариком.
Ничего страшного пока не случилось, но глазки и нашивку на рабочей куртке парня мы таки закрыли.

Такие дела.
Шпионский ярлык, небольшая заметка с экспериментом.
Заметка началась с небольшой просьбы, найти сигнатуру ярлыка (shortcut) Windows, т.е. LNK-файла, а вылезло несколько интересных вещей, которые стоит оставить, как зарубку на память.
Отвечаю на поставленный вопрос. Любой файл LNK начинается с четырех байт (hex):
4C 00 00 00
Так вот, почему ярлык шпиона? Да потому что ярлык, кроме указания пути к файлу, на который он ссылается, рабочего каталога и типа окна открытого файла (программы) сохраняет странные и непонятно для чего нужные метаданные:
— исходный путь файла и его временные метки (полный путь, время доступа к целевому файлу (UTC), время создания целевого файла (UTC), время изменения целевого файла (UTC)).
— тип тома, с которого файл был открыт (съемный носитель, обычный том, виртуальный том)
— серийный номер тома (серийный номер привода)
— метка тома
— NetBIOS-имя устройства (сетевое имя компьютера)
— MAC-адрес устройства. Впрочем, MAC-адрес устанавливается по какому-то странному алгоритму, на машине с несколькими сетевыми картами оно получается несколько рандомно. Не совсем понял, как это устроено, кто знает — напишите в комментариях.
— размер целевого файла (байт) — размер файла, с которым ассоциирован ярлык
Зачем это делается, не совсем понятно.
Почитать подробнее можно по следующим ссылкам:
— Токсичные ярлыки в Windows: старый артефакт, не забытый хакерами, но частично забытый криминалистами (копия в PDF)
— Какую информацию можно получить из ярлыка? (копия в PDF)
В первой статье анализ проводился платными программами для расследования инцидентов кибербезопасности, но кое-что можно посмотреть и бесплатно, программой Windows File Analyzer, описана во второй статье, не буду повторяться, оставлю ссылки на скачивание:
— С сайта разработчика
— Копия на Mega.nz
Известно, что Office и некоторые другие программы хранят ярлыки последних сохраненных документов в специальных каталогах для того, чтобы потом показывать пользователю список открытых документов. Так вот, решил провести эксперимент — создать файл с каким-нибудь красноречивым компрометирующим именем, а потом изменить свойства ярлыка и посмотреть, что получится.
Итак, создаем пустой файл с именем, например, PutinBombaVzryvChechency.doc
и создаем ярлык. Смотрим содержимое ярлыка в шестнадцатеричном редакторе (красным выделил сигнатуру файла LNK):

Создаем файл kotik.doc
и пытаемся поменять ярлык через «Свойства ярлыка», на несуществующий файл ссылку стандартным способом сделать нельзя, потому делаем на существующий файл:

Проверяем, открывая измененный ярлык в HEX-редакторе.

Пробуем изменить ярлык программно, с помощью класса vbAccelerator.Components.Shell
, через WinAPI (копия заметки):
string lnkname = @"C:\Temp\PutinBombaVzryvChechency.doc - Ярлык.lnk";
ShellLink lnk = new ShellLink();
lnk.Open(lnkname);
lnk.Target = "X:\\NoFile.doc";
lnk.WorkingDirectory = "X:\\";
lnk.Save();

Проверяем в HEX-редакторе:

Все еще хуже.
Подробной гипотезы о том, почему оно так работает, у меня нет, но к определенным мыслям это приводит. Например, при удалении ярлыков последних документов их лучше всего удалять безопасным удалением (т.е. с полной перезаписью содержимого файла LNK). Конечно, можно разобраться в формате файла (тем более, он опубликован), но мало ли что MS добавит туда в будущем. А в целом, ситуация дискомфортная, даже если и ложечки найдутся, осадок останется, т.к. обычно мало кто обращает внимание на такую незначительную мелочь, как ярлык, а восстанавливаются (если они были удалены стандартным образом) они достаточно просто, сигнатурным поиском по диску.
Sony Vaio, поставить Windows 7 с ноля, проблемы с драйверами и видео (Intel HD Graphics 4000)
Заметка по мотивам онлайн-консультации и больше от склероза, так что скринов будет мало, а кое-где могу что-то забыть, если что — пишите в комментарии. Задача — вернуть на Sony Vaio (SVT1111Z9RS) Windows 7, которая там стояла изначально, вместо Windows 10, которую туда кто-то зачем-то запихал.
Переустановка несколько нетривиальная, так что лучше перед началом все необходимое скачать заранее.
— Дистрибутив Windows 7
— Driver Pack Solution (у товарища была полная оффлайн-версия), как минимум нужна Driver Pack Offline Network
— Кумулятивное обновление Windows 7 от Simplix
— NET Framework 4.0
— Драйвера для видеокарты (Intel HD Graphics 4000)
Копия (драйвера Intel HD Graphics 4000 + .NET Framework 4)
Поделить диск можно как угодно, сработают и Arconis и, например, System Rescue CD.
Но первый сюрприз поджидает уже тут, на машине USB 3.0, потому если устанавливать оригинальный дистрибутив с флешки, то установщик перестанет ее видеть. Потому нужно или искать дистрибутив Windows 7 с поддержкой USB 3.0, или если лень искать, то можно установить Windows 7 через установочное окружение Windows 8 (копия), товарищ сделал все еще проще, загрузился с System Rescue CD и скачал все перечисленное выше с сервера на заранее подготовленный раздел жесткого диска, и запустил установку Windows с жесткого диска из Windows PE на базе Windows 7, например, такой или такой. Естественно, на HDD копируем распакованный из ISO-образа дистрибутив, а не сам ISO.
Секунда ненависти и ворчания. Sony — откровенные гондоны, пидары и козлы. Теперь все фильмы, произведенные этими мудоебищами, буду смотреть исключительно ворованные, т.к. эти уроды убрали с официального сайта все драйвера для старых ноутбуков:
Обращаем ваше внимание, что с 1 января 2021 г. Sony больше не будет предоставлять драйверы и программное обеспечение для компьютеров Sony VAIO, поставлявшихся со следующими предустановленными операционными системами Microsoft Windows и перечислены все ОС, в т.ч. и Windows 7.
Но у нас есть Driver Pack Solution, так что:
1. Запускаем Driver Pack Solution, переключаемся в режим эксперта, убираем все, кроме драйверов для LAN и устанавливаем их.
2. Перезагружаем компьютер.
3. После перезагрузки опять запускаем Driver Pack Solution, опять переключаемся в режим эксперта и устанавливаем все остальные драйвера, кроме драйвера видеокарты. С ним лучше повременить, объясню ниже.
4. Перезагружаем компьютер.
Если прямо сейчас попытаться установить драйвер видеоадаптера, то Windows начнет ругаться на отсутствие цифровой подписи, видеодрайвер не заработает, а в диспетчере устройств у видеодрайвера будет отображаться восклицательный знак, в свойствах указана ошибка 52 "Не удается проверить цифровую подпись драйверов"
.

Вот так, только с видеоадаптером
Не знаю, с чем точно это связано, но подозреваю с тем, что в чистой Windows 7 SP1 нет нужного нового сертификата Intel, а оригинальный драйвер с сайта Sony был или более старым, чем теперешний, или с драйвером поставлялось обновление сертификата (и ведь не проверишь, горите в аду пиздоглазые анальные проушины из Sony). Вот тут и пригодится кумулятивное обновление от Simplix.
Итак, решаем проблему:
1. Устанавливаем обновление от Simplix:
1.1 В каталоге со скачанным пакетом (на момент написания заметки, файл называется UpdatePack7R2-21.1.15.exe
) создаем BAT-файл update.bat
со следующим содержимым:
UpdatePack7R2-21.1.15.exe /IE11
1.2 Запускаем update.bat
1.3 Следуем инструкциям на экране, в процессе установщик предложит перезагрузиться, перезагружаемся, дожидаемся окончания установки.
2. Устанавливаем .NET Framework 4
3. Устанавливаем видеодрайвер (с сайта Intel)
Родная ОС возвращена.
ФАНФАРЫ!
C#. Удаление значений (values) из ключа Реестра
Задача довольно простая, имеется ключ в разделе Реестра Windows, необходимо удалить оттуда все значения (values).
Реестр — иерархическая база данных, хранящая основные настройки системы и программ.
Корневой ключ (в некоторых источниках просто ключ или раздел Реестра), это один из основных ключей Реестра. Обычно присутствуют следующие:
HKEY_CLASSES_ROOT (HKCR)
— Зарегистрированные типы файлов, объекты COM и ActiveX
HKEY_CURRENT_USER (HKCU)
— Настройки текущего пользователя, в данный момент вошедшего в систему.
HKEY_LOCAL_MACHINE (HKLM)
— Общие настройки для всех пользователей данного компьютера.
HKEY_USERS (HKU)
— Профили всех пользователей данной машины.
HKEY_CURRENT_CONFIG (HKCC)
— Профили оборудования, информация о драйверах.
Подключ/Subkey (иногда Ключ, если корневой раздел называется корневым разделом или корневым ключом) Реестра — путь в Реестре, аналогичный пути к каталогу (папке) файловой системы. Обычно каждый подключ хранит или настройки для конкретного случая. Например, настройки конкретной программы или профиль конфигурации оборудования. Выглядит примерно так: Software\TestKey
(в полном виде, вместе с корневым ключом, например: HKEY_CURRENT_USER\Software\TestKey
).
Подключ может содержать как и другие подключи, так и значения (values), представляющие собой поименованные переменные, содержащие значения конкретного параметра

Обзорная статья про Реестр Windows на Википедии
Для тестирования создадим тестовый ключ, который не будет влиять на какие либо программы и компоненты ОС. Это можно сделать, как вручную, с помощью программы Regedit, так и в автоматическом режиме, с помощью reg-файла, например, такого:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\TestKey]
"value0"="text0"
"value1"="text1"
"value2"="text2"
"value3"="text3"
"value4"="text4"
"value5"="text5"
Можно создать и reg-файл для удаления тестового ключа из Реестра, если что-то пойдет не так:
Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\Software\TestKey]
1. Подключаем пространство имен Microsoft.Win32:
using Microsoft.Win32;
2. Создаем переменную с именем подключа Реестра и переменную типа RegistryKey. Этот объект и будет рулить нужной веткой Реестра:
string subkey = "Software\\TestKey";
RegistryKey key = null;
3. Любые операции с Реестром могут привести к ошибкам, потому их как и операции ввода-вывода желательно оборачивать в try..catch
:
try { //тут будет код. } catch (Exception ex) { Console.WriteLine("ERROR: " + ex.Message); }
4. Открываем (под)ключ Реестра:
key = Registry.CurrentUser.OpenSubKey(subkey, true);
Внимание! Если необходимо писать в ключ Реестра, обязательно устанавливаем второй параметр функции OpenSubKey
в true
, т.к. в противном случае, мы получим ошибку UnauthorizedAccessException: Не удалось выполнить запись в раздел реестра.

5. Получить список значений в (под)ключе можно функцией GetValueNames()
, которая выдает строковый массив с именами значений Реестра.
6. Получаем имена всех значений и в цикле удаляем их с помощью функции DeleteValue(имя_параметра);
foreach (string valname in key.GetValueNames()) { Console.WriteLine("Delete value: " + valname); key.DeleteValue(valname); }
7. Закрываем (под)ключ Реестра.
key.Close();
Все получилось:

C#, генератор файлов (нужного количества и с определенным содержимым).
Итак, требуется написать программу, которая генерирует заданное количество файлов с определенным содержимым. Содержимое задается или в качестве байтового паттерна (т.е. если программе указать 0xFF
, то файл будет заполнен указанным количеством байт со значением 0xFF
) или случайных байт. Файлам также можно задать расширение, или сделать и имя файла случайным.
Выполнена в виде консольной программы, запускаемой со следующими параметрами:
Использование: filegen.exe <количество_файлов> <размер>[K|M|G] <расширение|/R> [байтовый_паттерн|/R]
<количество_файлов> - количество файлов
<размер> - размер:
по умолчанию - байты K - килобайты M - мегабайты G - гигабайты
<расширение> - расширение файла или /R - случайное имя файла
[байтовый_паттерн] - байтовый паттерн (HEX): от 0x00 до 0xFF, по умолчанию 0x00 или /R случайные байты
1. С#, Заполнение массива одним значением. (копия)
2. C#, заполнение массива случайными числами. (копия)
3. C#, Количество цифр (разрядов) числа. (копия)
4. C#. Перевод кило- мега- и гигабайтов в байты. (копия)
C#. Перевод кило- мега- и гигабайтов в байты
Простая учебная задача, но почему-то до моего решения долюбились, в конце объясню, почему долюбились, и почему, в случае C#, это зря было.
И так, задача состоит в том, чтобы всякие кратные единицы перевести в байты (кому надо обратную задачу, либо все во все — пишите в комментарии). Для этого достаточно сделать следующую функцию, исходя из того, что 1 Кб == 1024 Б, 1 Мб = 1024 Кб, 1 Гб = 1024 Мб. В функцию добавим некую переменную-модификатор, для консольного приложения было проще сделать строковую, в ином случае, может и есть сделать отдельный Enum
для единиц, но я обошелся строковой.
Переменная-модификатор (modificator
) принимает строковые значения G
(g
), M
(m
) и K
(k
), соответственно для гига- мега- и килобайта.
Функция получается такая:
public static ulong ToBytes(ulong bytes, string modificator) { ulong Ret = 0; switch (modificator) { case "": { Ret = bytes; } break; case "K": case "k": { Ret = bytes * 1024; } break; case "M": case "m": { Ret = bytes * 1024 * 1024; } break; case "G": case "g": { Ret = bytes * 1024 * 1024 * 1024; } break; default: { throw new ArgumentException("Wrong modificator [" + modificator + "]. Set K(k), M(m), G(g)"); } } return Ret; }
Задача была очень простая, чисто учебная. Консольная программа принимает в качестве одного параметра число с единицей без пробела, т.е. команда вида program.exe 10G
, должна вывести количество байт. Надо ли Enum
городить, ну красиво было бы, но до Enum
‘ов они не добрались 🙂
В основной программе надо отрезать последний символ из параметра, проверить ли является он нужной буквой (K/M/G
) и пересчитать. Если буквы нету, а только цифры — значит оно уже сразу байты.
В функции Main()
отрезаем последний символ от первого параметра командной строки, если он K/M/G
, считаем, что все остальное число, отрезаем его, а все остальное пытаемся сконвертировать в ulong (Int64)
и передать функции ToBytes()
с отрезанным символом, как модификатором для расчета. Если нет — просто считаем, что вся строка число, пытаемся конвертировать, а функции передаем пустой модификатор.
Ошибки конвертации ловим try/catch
:
string size_s = args[1]; try { string mdf = size_s.Substring(size_s.Length - 1, 1); if ((mdf != "K") && (mdf != "k") && (mdf != "M") && (mdf != "m") && (mdf != "G") && (mdf != "g")) { mdf = ""; //in parameter only numbers or param wrong... } else // remove modificator { size_s = size_s.Substring(0, size_s.Length - 1); } BytesCount = ToBytes(Convert.ToUInt64(size_s), mdf); } catch (Exception ex) { Console.WriteLine("Wrong <size> parameter!"); Console.WriteLine(ex.Message); Console.Write("Press Enter..."); Console.ReadLine(); return 2; }
За вот эти вот конструкции:
Ret = bytes * 1024;
Ret = bytes * 1024 * 1024;
Ret = bytes * 1024 * 1024 * 1024;
Типа «ну тут числа, ты бы их сначала перемножил, результат записал , а потом на переменную помножил».
Дебилы, бля, как говорил Лавров. В интерпретируемых языках или старом Трупопоскакале под DOS, может это и какой-то рояль играет, но в C# компилятор перемножает константы до сборки экзешника, а 1024*1024*1024
для компилятора константы, во время компиляции. Т.е. процессору скормят 1073741824
. А код останется более понятен и читабелен.
Assenizator’ы — Частушки
Стридэйджеры домой не пришли, пошли на морько тусовать, я остался дома и продолжаю вас с карельской мьюзикой знакомить.
Прямая ссылка: https://youtu.be/TVObKTqZ2lc
Продолжая тему аниме

Будь я хоть негр преклонных годов, Хоть исландец, пропахший рыбой... Я б японский выучил только за то, Что на нем разговаривал Киба!
Наконец понял, почему устьподзалупинский (маськовский) суд запрещает аниме «Инуясики» (или «Инуяшики»)

Аниме, так-то про пенсионера, который в результате несчастного случая с НЛО, получает новое тело и превращается в боевого робота. Правда вместе с ним, такие же способности получает и омежка, которым в детстве был известный всем Владимир Таврический Хуйло.
Хуйло начинает валить всех направо и налево, руководствуясь принципом: «друзьям все — остальным пиздец», так что от него даже друг сваливает (это прямо предсказание, запомните этот твит). Причем валит даже не по делу, а ради удовольствия.
А Дед, он воюет со злом, пиздит гопников, выпиливает бандитов, да и охотится за Хуйлом (правда, весьма вяло).
Понятно, что такое молодежи показывать нельзя.
Попробуй этому пенсионеру повысить пенсионный возраст, скажет ведь: «То, что вы делаете, недостойно» — и развесит по фонарям и ПФ РФ, и роскрысдию и ФСО.
Тем более, уничтожил самую крутую банду нараёне, как так-то? Прямая отсылка к самой крутой банде в ГОРФ, т.е. к нашему, а не анимешному Хуйлу и его друзьям-подхуйловникам.
Ну и, естественно, японцы, того не желая, наступили на мантру пропаганды всея ГОРФ — «Деды Воевали»!
Нельзя показывать, ну никак нельзя.
ЗЫ. Гей-секс там был, но исключительно в негативной коннотации, как отношения между старшим бандитом и подчиненным. Хотя и это, наверное, задело зоновский роскомсуд, т.к. такой гей-секс в ГОРФ вполне разрешен. А его тут с негативной стороны показывают.
ЗЗЫ. Антагонист, впрочем, тоже сделал полезную вещь, хотя и в стиле роскомнадзора — перебил кучу анонов с местного двача. А потом даже исправился и помог планету спасти.
Ничего Хорошего Молотов Коктейль (Nothing Good — Molotov)
Запретили песенку на территории ГОРФ, ублюдки сраные из роскомговна. По поводу нам скидывали интервью Барта, фронтмена группы «Ничего хорошего», но оно безблагодатно проебано куда-то, тяжко иметь 40+ аккаунтов в соцсетях, и потом разобраться, где с кем переписывался.
Прямая ссылка: https://www.youtube.com/watch?v=RLV53ix4GVM