Ну как завешивать, уже загруженная страница работает, а вот на другую не перейти вкладка частично висит.
А какой хороший был плагин… Это какой-то позор 🙁
Ну как завешивать, уже загруженная страница работает, а вот на другую не перейти вкладка частично висит.
А какой хороший был плагин… Это какой-то позор 🙁
Сон (Windows Vista и выше) или Ждущий режим (Windows XP) — временное завершение работы ОС без выгрузки оперативной памяти в файл и закрытия приложений, т.е. ОС приостанавливает активную работу, снижает нагрузку на процессор, «гасит» ненужную периферию (монитор, жесткие диски, и даже останавливает вентиляторы, один фиг нагрузка на процессор минимальна). Выход из этого режима и возвращение к работе происходит по нажатию клавиш клавиатуры или кнопки питания на системном блоке ATX (они все сейчас ATX), или по прерыванию от мыши (можно изменить в настройках) или модема (у кого есть аналоговый модем? :)) .
Минусы этого режима:
— При отключении питания все несохраненные данные пропадут, т.к. фактически произойдет отключение питания у работающей машины, просто со сниженным до минимума энергопотреблением.
— При использовании внешних средств полного шифрования ОС, например, таких, как VeraCrypt и TrueCrypt, компьютер останется незащищенным до конца.
Плюсы:
+ Быстрый переход и выход из данного режима
+ Экономия места на системном диске, т.к. ОС не нужно держать на диске файл, размер которого равен размеру оперативной памяти, собственно, для выгрузки в него содержимого оперативной памяти.
Гибернация (Windows Vista и выше) или Сон (Windows XP) — завершение работы ОС и компьютера с предварительной выгрузкой оперативной памяти в файл hiberfil.sys
с последующим полным отключением питания ПК. При повторном включении, ОС загружает содержимое файла hiberfil.sys
обратно в оперативную память и продолжает работу.
Минусы:
— Требуется дополнительное место на диске.
— Если злоумышленнику удастся получить доступ к hiberfil.sys
, то возможна атака даже на систему, защищенную TrueCrypt и VeraCrypt (вроде как не всех версий). Пример атаки (копия)
— Более долгое время для перехода в рабочее состояние, по сравнению с режимом сна.
Плюсы:
+ В случае отключения электропитания в режиме гибернации, данные не потеряются.
+ Если системный диск зашифрован TrueCrypt/VeraCrypt потребуется ввод пароля
Гибридный спящий режим (присутствует, начиная с Windows Vista, включен по умолчанию) — сочетание первого и второго режима, электропитание компьютера не отключается полностью, а «гасится» только ненужная периферия, при этом оперативная память сбрасывается в hiberfil.sys
. Восстанавливает информацию из оперативной памяти, если во время спящего режима возник сбой питания (да, работает, я проверил). Сочетает плюсы и минусы предыдущих режимов.
Если «Сон» по умолчанию присутствует в меню «Завершение работы», то пункт «Гибернация» приходится включать вручную.
1. Проверяем, включен ли режим гибернации (или гибридный спящий режим), для этого открываем диск C:
и смотрим, присутствует ли в корне диска файл hiberfil.sys
. Файл является скрытым, потому включаем отображение скрытых файлов (ну или смотрим через Far Manager, например).
Если файла нет, как на иллюстрации, значит, режим гибернации полностью отключен. Если файл есть, переходим к пункту 5.
2. Запускаем командную строку от имени администратора (Пуск —> Все программы —> Стандартные)
3. Выполняем команду:
powercfg /h on
4. Перезагружаем компьютер.
Файл hiberfil.sys
появился.
Если необходимо полностью отключить режим гибернации и гибридный спящий режим, а также удалить файл hiberfil.sys
:
1. Нужно запустить командную строку в режиме администратора.
2. В командной строке ввести команду:
powercfg /h off
3. Параноики могут после этого запустить очистку свободного места на диске в любой программе безопасного удаления файлов, например, в Eraser’е.
Наиболее частая причина состоит в том, что этому может мешать какая-то программа:
— Просто зависшее приложение.
— Программа, производящая активные действия с файловой системой (архиватор, архивирующий/разархивирующий файлы, файловый менеджер, копирующий файл).
— Программы, способные запретить переход в спящий режим/режим гибернации: будильники, таймеры, торрент-клиенты, «качалки», и даже некоторые вирусы и скрытые майнеры.
Иными словами, как можно сбросить пароль Windows 7, если доступ к рабочему столу есть, а старый пароль неизвестен. Это можно в каком-нибудь зловредном скрипте использовать, но у меня цели были мирные — товарищ купил ноутбук б/у, который ему отдали, не сообщив пароль от учетной записи пользователя, а я ВНЕЗАПНО, зашел в Панель управления и увидел, что на учетку установлен пароль. По-хорошему бы вообще винду надо было переустановить, но сделал пока так. Повезло, что машина не ушла в гибернацию или в сон, и не выключилась, иначе пришлось бы ебаться с загрузочной флэшкой, выкачивать какой-нибудь ломатель паролей.
Внимание! Способ не сработает, если доступа к десктопу нет, и если запись Администратора тоже запаролена, и вы не знаете пароля и от нее.
1. Запускаем командную строку от имени Администратора (Пуск —> Все программы —> Командная строка, кликаем по ярлыку правой кнопкой мыши и выбираем Запуск от имени администратора)
2. В командной строке вводим:
net user <username> <new_password>
,
где:
<username>
— имя пользователя
<new_password>
— новый пароль
Например:
net user paulzovatel 666999
Имя пользователя не чувствительно к регистру символов, а пароль чувствителен.
Доконала меня окончательно реклама внаютубе, т.к. ютуб окончательно охамел и стал вставлять рекламу по полчаса, причем рекламу каких-то лохотронов: «Я был печальный лох, но потом мой друг дал мне 100$ и доступ к уникальной программе заработка. Я трачу час в день и теперь у меня личный вертолет, замок на личном острове, а еще я отдал кредиты и ипотеку». В общем откровенный развод.
Нашел я плагин, который рекламу душил и при этом не ломал автопереключение и прочие плюшки, однако, после очередного обновления гуглевского поделия реклама вернулась. Переустановка плагина, установка других плагинов не помогла, наконец, я нашел небольшую инструкцию, которая, впрочем, в изначальном виде так же не сработала, пришлось допиливать. Вот моя версия.
1. На всякий случай копируем профиль Chrome, чтоб если что, можно было все вернуть.
В Windows 7 и выше он обычно здесь:
C:\Users\<username>\AppData\Local\Google\Chrome\User Data\Default
А в Linux здесь:
/home/<username>/.config/google-chrome/default
<username> меняем на свое имя пользователя.
2. Удаляем плагины блокировщики рекламы.
3. Перезапускаем браузер.
4. В адресной строке Chrome набираем: chrome://apps/
5. Теперь надо удалить приложение YouTube, т.к. основной глюк связан именно с ним: вся проблема содержится в новом коде Web Request, внедрённом разработчиками Google в браузер. Он позволяет браузеру рассматривать приложения YouTube и Spotify как расширения браузера, на которые не распространяется действие блокировщиков рекламы.
6. Перезапускаем браузер.
7. Ставим плагин uBlockOrigin
8. Ставим плагин Блокировка рекламы для Youtube Неизвестно почему, но в паре они работают лучше.
9. Перезапускаем браузер.
ФАНФАРЫ!
Если при следующем обновлении реклама появится вновь, то следует посмотреть, не появилось ли опять приложение Youtube и переустановить плагины, т.е. снести, перезапустить браузер, установить их обратно и вновь перезапустить браузер.
У самого свободного блогосервиса Рунета lj.rossia.org
(там даже негров можно называть неграми, а Путина — Хуйлом) опять проблемы, случился сбой DNS и у них отвалился домен. Расскажу, как поправить
1. Отключаем антивирус.
2. Идем в папку C:\Windows\System32\drivers\etc\
3. Открываем в Блокноте (откроете в Ворде, чуда не получится) файл hosts
4. Дописываем в конец файла строчку:
192.155.89.253 lj.rossia.org
Вносим строчку
192.155.89.253 lj.rossia.org
в файл /etc/hosts
Такие дела.
Пример выводит на экран KeyEventArgs
для KeyUp
и KeyDown
и KeyPressEventArgs
для KeyPress
.
Задолбало меня считать сумму внесения платежей с комиссией, через терминалы (или с международными переводами, один хрен, там с комиссией), так что запряг друга $EG’у, чтоб он разобрался в вопросе и допилил эту функцию в калькулятор пропорций. Он, ВНЕЗАПНО, допилил:
Формула
var paymentWithCommission = payment / (1 - 100 / proc);
где:
payment
— необходимая сумма платежа
proc
— процент комиссии
Установщик
Бинарник без установки (ZIP)
О, нашел еще один офигенный старый мультик, «Гимн программистов и другие приключения Пухлого», он тоже был флэшевский. Так что я его обэкзешил, как было описано тут (копия)
Прислал мне тут товарищ письмо, что не может просмотреть старые мультики во Flash, я думал, что смогу их довольно быстро переконвертировать, но у меня тоже прямо сразу не получилось, т.к. в системе не оказалось соответствующего плеера/плагинов (просто забыл их поставить при установке).
Немного истории. Flash в свое время был практически революционной технологией — на маленькой (даже модемной) скорости прямо в браузере можно было смотреть 2D-мультфильмы или играть в мини-игры. Впрочем, на Flash писались и весьма неплохие проекты типа Punk’s Not Dead (копия), которые работали и в оффлайне. Вообще для простой мини-игры или мультика достаточно было скачать SWF-файл и запускать его в оффлайне с помощью специального плеера от Adobe, разработчика Flash.
Были даже целые сайты и полутекстовые онлайн-RPG, основанные на Flash. Например, когда я учился в универе, то залипал в Бойцовский Клуб
Сама технология Flash сочетала векторную графику, которая не зависит от разрешения, т.е. она может масштабироваться, и простой C-подобный язык программирования Actionscript, который позволял управлять объектами в мультфильме или игре. Порог вхождения во Flash был очень низким, что позволяло рисовать мультики или писать приложения кому угодно. К сожалению, формат был закрытым, и никто не сделал опенсорсную реализацию.
31 декабря индусско-ниггерские обезьяны из компании Adobeblya полностью прекратили мало того, что обновления, так еще и стерли последнюю версию кодека/плеера со своих официальных сайтов. Но все (пока) можно исправить, сейчас расскажу как.
Дело в том, что можно было объединить файл SWF
с самим плеером, т.е. к файлу SWF
прикреплялся модуль EXE
и его можно было запускать без плеера, как приложение Windows, плеер был встроен, примерно как самораспаковывающийся архив. Этим и воспользуемся.
Это, кстати, даже имелось как возможность при разработке во Flash, как опция, предоставленная Adobe, собрать ролик в SWF
или EXE
.
1. Нам понадобится программа Flash Builder (ссылки в конце заметки). Скачиваем, распаковываем, устанавливаем, запускаем.
2. В верхней части окна напротив поля SWF file нажимаем кнопку Browse (1) и выбираем нужный SWF
-файл.
3. Остальные опции (Icon File и Splash Screen File) можно пропустить.
4. В нижнем списке (3) выбираем режим окна Flash-приложения:
— Полный экран (Full Screen)
— Окно без заголовка (Window without title bar)
— Окно с заголовком (Window with title bar)
— Окно с заголовком и кнопкой масштабирования окна (Window with title bar and Maximize Button)
— Окно без рамки (Window without Border). Выглядит также, как и на полный экран, только в окне, так что без картинки 🙂
Рекомендую выбирать режим «Окно с заголовком и кнопкой масштабирования окна (Window with title bar and Maximize Button)«, т.к. он самый удобный. На полный экран ролик может стать незакрываемым, а с кнопкой масштабирования у пользователя останется возможность развернуть ролик на весь экран.
Также рекомендую изменить фон ролика (2) c Transparent Background (прозрачный фон) или Transparent Background with text fix (прозрачный фон с исправлением текста) на Solid Background (непрозрачный фон) и выбрать кнопкой рядом с выпадающим списком (2) цвет из палитры.
Прозрачный фон не дает возможность изменить вид окна (доступен только Full Screen), да и выглядит эта прозрачность довольно противно.
Обычно для роликов следует выбирать черный или белый фон, но иногда приходится экспериментировать. Например, для Padonki in da flash (копия) лучше всего подошел серый фон.
Flash Builder 1.40 с официального сайта
Flash Builder 1.40, копия на Mega.NZ
Вместо преамбулы скажу сразу вывод, да Соловьева абсолютно законно выпиздил из трендов Ютуб. И абсолютно в соответствии со своими правилами. И зря Роскомнадзор запрещает аниме, т.к. им же реклама на некоторых аниме-сайтах просмотры и накручивает.
Итак, сижу я, никого не трогаю, новости на kasparov.ru читаю, вдруг вижу — Расчленинградский суд запретил аниме «Токийский взрыв» оно же «Террор в Токио» про подростков, которые сбежали от современной версии Отряда 731 и пытаются таки донести мысль, что нацисты не сдохли, и они даже есть в рядах японского правительства, и японские империалисты даже атомную бомбу втихую собрали. Так что вроде как и запрещать его не надо, все про крымнаш, антифашизм и даже деды воевале.
Сижу я, никого не трогаю, примус починяю , в смысле аниме смотрю, тут вдруг вижу вот это:
Небольшое расследование
Оно совсем небольшое, но тем не менее. У плеера kodik.info, где он был внедрен на сайт каталога аниме, есть некая база аниме (что вообще так-то хорошо, информация должна быть свободной). Ну так вот, сайты с контентом не держат контент у себя, а подключают плеер, а плеер (точнее, хозяева плеера) показывают рекламу и аниме. А чтобы купить показ в плеере kodik, нужно потратить несколько мертвых президентов США. И, они не на хеллоуин, они на долларовых купюрах. Пока не буду говорить, как я купил рекламу у kodik.info, мы придержим. Но просьба распространить, чтоб у вечернего М. пукан подорвался. Так что Ютуб вполне норм выебал Соловьева, вечернего М. за накрутку.
Удачи вам и любви!
Обновление пакетного конвертера текстовых файлов.
Благодарим всех, кто сообщил о багах.
+ Изменения в алгоритме поиска файлов
+ Поправлен баг с сохранением конфигурации (масок файлов)
Когда-то уже говорил (копия) что стандартная функция 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(); }
Вроде бы в этот раз все предусмотрел, и глюкоопцию встроенной функции поправил, и в регулярке нигде не наебался.
Заметка началась с небольшой просьбы, найти сигнатуру ярлыка (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 (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)
Родная ОС возвращена.
ФАНФАРЫ!
Задача довольно простая, имеется ключ в разделе Реестра 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();
Все получилось:
Итак, требуется написать программу, которая генерирует заданное количество файлов с определенным содержимым. Содержимое задается или в качестве байтового паттерна (т.е. если программе указать 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#, это зря было.
И так, задача состоит в том, чтобы всякие кратные единицы перевести в байты (кому надо обратную задачу, либо все во все — пишите в комментарии). Для этого достаточно сделать следующую функцию, исходя из того, что 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
. А код останется более понятен и читабелен.
Здесь (копия) я показал довольно неоптимальный способ решения данной задачи, но его можно оптимизировать с помощью стандартных функций. Напомню суть задачи: даны числа, скажем, от 1
до 1000
, необходимо вывести их на экран или в файл последовательно, добавив лидирующие ноли, исходя из максимального числа. Если максимум 1000
, то числа должны быть выведены так:
0001
0002
0003
...
0100
0101
0102
...
1000
Если максимум 100
, то:
001
002
...
099
100
Как и в предыдущей версии решения, понадобится задать максимальное число (в тестовых примерах опять же, зададим его статически), например:
int maxnum = 150;
И опять же, понадобится функция, вычисляющая количество цифр (разрядов) числа (копия). Например, такая:
static int CountDigitsRec(int n) { n = (int)Math.Abs(n); if (n <= 9) { return 1; } else { return CountDigitsRec(n / 10) + 1; } }
C# автоматически умеет форматировать строки, используя специальные паттерны описания формата, задаваемые в виде строки. Основные паттерны перечислены в таблице ниже:
C / c | Задает формат денежной единицы, указывает количество десятичных разрядов после запятой |
D / d | Целочисленный формат, указывает минимальное количество цифр |
E / e | Экспоненциальное представление числа, указывает количество десятичных разрядов после запятой |
F / f | Формат дробных чисел с фиксированной точкой, указывает количество десятичных разрядов после запятой |
G / g | Задает более короткий из двух форматов: F или E |
N / n | Также задает формат дробных чисел с фиксированной точкой, определяет количество разрядов после запятой |
P / p | Задает отображения знака процентов рядом с число, указывает количество десятичных разрядов после запятой |
X / x | Шестнадцатеричный формат числа |
Для форматирования строки, содержащей целое число, необходимо использовать паттерн d
.
Отформатировать строку можно сразу во время вывода на консоль, функцией Console.Write()
/Console.WriteLine()
:
int num = 125
Console.Write ("0:d4", num) //вывод: 0125
или
int num = 25
Console.Write ("0:d4", num) //вывод: 0025
Пример:
static void Main(string[] args) { int maxnum = 150; string FormatPattern = "{0:d" + CountDigitsRec(maxnum).ToString() + "}"; for (int i = 0; i <= maxnum; i++) { Console.WriteLine(FormatPattern, i); } Console.WriteLine("Press Enter..."); Console.ReadLine(); }
Функция String.Format()
может сделать аналогичную операцию, но отличается тем, что вывод функции можно сохранить в строковую переменную и использовать далее, а не просто вывести на консоль.
Пример:
static void Main(string[] args) { int maxnum = 1150; string FormatPattern = "{0:d" + CountDigitsRec(maxnum).ToString() + "}"; string TempFile = Path.GetTempFileName(); string Result = ""; List<string> WriteList = new List<string>(); for (int i = 0; i <= maxnum; i++) { Result = String.Format(FormatPattern,i); Console.WriteLine(Result); WriteList.Add(Result); } File.WriteAllLines(TempFile, WriteList.ToArray()); Console.WriteLine("Test file: " + TempFile); Console.WriteLine("Press Enter..."); Console.ReadLine(); }
В цикле результат работы функции String.Format()
возвращается в переменную Result, значение которой выводится на консоль и сохраняется в List<string> WriteList
для дальнейшей записи в файл.
Примечание: в источнике есть еще варианты форматирования строк, ознакомьтесь.
В локальной сети
Стоит старинный комп,
Закрыт весь доступ,
Пароль висит большой на нем.
Сказать я пытался
Троянов нет на компе,
Но тут же раздался,
Ужасный голос в винде
Голос в Винде…
[Визг свиньи Касперского]
Мне больно видеть Интернет,
Скорей бы отключить вас всех.
Я очень много много лет
Мечтаю о крутом компе
Мне слишком тесно на XP
И я мечтаю об одном,
Скорей пароль свой поломать,
Проникнуть в какдый каждый комп!
Будь проклят каждый комп!
Был вирус в БИОС,
Крутой и жутко злой
Админ не понял
Как комп спасти от заразы той.
Админы не стали
Тогда харддиск форматить
Пароли поставив, решили пива попить,
И забухали…
Мне больно видеть Интернет,
Скорей бы отключить вас всех.
Я очень много много лет
Мечтаю о крутом компе
Мне слишком тесно на XP
И я мечтаю об одном,
Скорей пароль свой поломать,
Проникнуть в какдый каждый комп!
Будь проклят каждый комп!
И это место стороной
Обходит нетский люд,
И антивирусы твердят —
Там вирусы живут!
Задача опять же учебная, но может пригодиться и в реальной программе. Итак, нам даны числа, скажем, от 1
до 1000
, необходимо вывести их на экран или в файл последовательно, добавив лидирующие ноли, исходя из максимального числа. Если максимум 1000
, то числа должны быть выведены так:
0001
0002
0003
...
0100
0101
0102
...
1000
Если максимум 100
, то:
001
002
...
099
100
Нам понадобится максимальное число, в тестовом примере мы его жестко зададим:
int maxnumber = 1998;
Далее, понадобится получить количество цифр числа. Это мы уже делали, причем разными способами (копия), выбираем подходящий.
Создаем отдельный класс (в примере AddLZ
) и добавляем туда функцию:
public static int CountDigitsRec(int n) { n = (int)Math.Abs(n); if (n <= 9) { return 1; } else { return CountDigitsRec(n / 10) + 1; } }
В основной программе получаем количество цифр числа:
int maxdigits = AddLZ.CountDigitsRec(maxnumber);
Далее в цикле перебираем все числа, и скармливаем их функции, которая будет добавлять лидирующие ноли (AddLZ.AddLeaderZeroString(maxdigits, i)
);
for (int i = 0; i <= maxnumber ; i++) { string Result = AddLZ.AddLeaderZeroString(maxdigits, i); //... }
На вход функции подается два параметра — максимальное количество цифр и текущее число.
Получаем строковое представление текущего числа:
string scurnum = ((int)Math.Abs(curnum)).ToString();
Получаем длину строки из лидирующих нолей, которая должна быть равна количеству цифр максимального числа, минус длина (количество цифр) текущего числа. Оно получено выше.
int LenLZ = maxnum - scurnum.Length;
Далее, надо сформировать строку нужной длины из одного символа ('0'
) (копия):
StringBuilder sb = new StringBuilder(maxnum); for (int i = 0; i < LenLZ; i++) { sb.Append('0'); }
Далее добавляем строковое представление текущего числа:
sb.Append(scurnum);
И возвращаем значение:
return sb.ToString();
public static string AddLeaderZeroString(int maxnum, int curnum) { string scurnum = ((int)Math.Abs(curnum)).ToString(); int LenLZ = maxnum - scurnum.Length; StringBuilder sb = new StringBuilder(maxnum); for (int i = 0; i < LenLZ; i++) { sb.Append('0'); } sb.Append(scurnum); return sb.ToString(); }