Posts Tagged ‘ C#

Среднеквадратичное приближение функций

Добрый день, читатель. Сегодня я решил написать об одном методе из моей лабораторной по вычислительному практикуму (и заодно получить инвайт на Хабрахабр). С исходным кодом (на C#), блэкджеком и плюшками.

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

Посмотреть статью можно на Хабрахабре.

Автозамена ключей Nod32 (запись #4)

Как я уже писал в предыдущей статье, я переписал программу для обновления ключей Nod32 на C#.

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

Итак, индексный файл у меня содержит последний ключ и отдающий этот ключ код:

<?php

$avUserName = "EAV-54794372";
$avPassword = "0 214 224 233 229 240 207 242 57 100 77 173 128 200 44 117 154 49 94 188";
$avExpiried = "2017-02-20";

echo "OK\n".$avUserName."\n".$avPassword."\n".$avExpiried;

?>

И есть файл add.php, в котором содержится код, модифицирующий индексный файл:

<?php

$avUserName = AddSlashes($_POST["username"]);
$avPassword = AddSlashes($_POST["password"]);
$avExpiried = AddSlashes($_POST["expiried"]);

$file = @fopen("index.php", "w");
fwrite($file, "<?php\n\n");
fwrite($file, "\$avUserName = \"".$avUserName."\";\n");
fwrite($file, "\$avPassword = \"".$avPassword."\";\n");
fwrite($file, "\$avExpiried = \"".$avExpiried."\";\n\n");
fwrite($file, "echo \"OK\\n\".\$avUserName.\"\\n\".\$avPassword.\"\\n\".\$avExpiried;\n\n?>");
fclose($file);

?>

В обычном режиме программа просто берет ключ и устанавливает в систему. В случае двойного клика по номеру ключа программа обращается к файлу add.php и передает ему текущие значения ключа на компе, с которого она запущена. Вот собственно и все. Проще, пожалуй, некуда.

Скачать исходный код программы можно здесь.

Обещал C#? Будет C#

Добрый день. Помните программу для автозамены ключей Nod32? Если нет, посмотрите на 2 поста назад.

Освежили знания? Итак, я переписал ее на C# (заодно изменив и серверную часть). В конце статьи я приложу архив с программой и серверным скриптом. А сейчас хочу рассказать о некоторых тонкостях.

Я уже не помню, делал ли отдельный поток в версии на Delphi, но кажется, что нет. А в новой версии на C# сделал. Создал класс Checker, которому при создании передаются адрес для запроса к серверу, старый ключ и пароль к этому ключу. Таймер, который проверяет наличие новых ключей создает поток таким вот образом:

Checker checker = new Checker(server, username, password);
Thread thread = new Thread(new ThreadStart(checker.Check));
thread.Start();

Ну и собственно весь прикол потока.

Далее немаловажный момент. Я сейчас использую Windows 7 x64. И 4 часа я убил на выяснение того, почему же вся ветка реестра HKEY_LOCAL_MACHINE у меня в программе не читается, пока не оказалось, что 32-битные приложения не могут работать с ней напрямую. Собрав 64-битную версию, я получил то, чего хотел — возможность чтения/записи информации из ветки реестра, в которой НОД хранит информацию о ключе:

RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Profiles\@My profile", true);
username = (string)regKey.GetValue("Username");

Для автозагрузки проги:

regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
if (regKey != null)
{
  regKey.SetValue("AVActive", Application.ExecutablePath);
}

Ну вот вроде и все с тонкостями. Ниже можно скачать исходники.

Скачать архив

P.S. В этой версии нет необходимости вручную добавлять ключи в базу. Когда серверный скрипт видит, что программа запущена не в первый раз и ключа, который она использует, отсутствует в базе, скрипт добавляет этот ключ в базу и в течение трех часов этот ключ оказывается установленным на все компьютеры, использующие программу.