Popular Tags:

Шум Перлина на C#

09.06.2018 at 11:39

Шум Перлина — алгоритм генерации текстур, который придумал Кен Перлин в 1983 году. Позже он улучшил свой алгоритм, который теперь так и называется — улучшенный шум Перлина.
Особенность такой генерации в том, что шум Перлина генерирует случайные числа для любой точки пространства, но случайные значения отличаются незначительно для точек, находящихся недалеко друг от друга. read more

Работа с изображениями в .Net Core

07.06.2018 at 10:58

Главная проблема в обработке изображений на C# под линуксом — отсутствие System.Drawing. В качестве альтернативы есть несколько сторонних библиотек, сегодня рассмотрим одну из них — ImageSharp.

Для начала работы нужно подключить два пакета: SixLabors.ImageSharp и SixLabors.ImageSharp.Drawing. Актуальная на момент написания статьи версия — 1.0.0-beta0004.

Теперь подключаем необходимые пространства имен и можно начинать работать

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Drawing;
using SixLabors.Shapes;

Создаем изображение нужного нам размера

var image = new Image<Rgba32> (500, 500);

Все изменения изображения происходят с помощью метода Mutate

image.Mutate (ctx => ctx.Fill(Rgba32.White));

ctx здесь — объект, реализующий интерфейс IImageProcessingContext, который позволяет обрабатывать изображение и имеет fluent интерфейс. read more

Реализация градиентного спуска на C#

26.02.2018 at 12:36

\(\)

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

Графически это можно представить так:

Формула каждой итерации градиентного спуска
$$\begin{align*}& \theta_j := \theta_j — \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) — y^{(i)}) \cdot x_j^{(i)} \; & \text{for j := 0…n}\end{align*}$$

Критерий сходимости

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

Как написать telegram бота на C#

26.11.2017 at 21:03

Первое, что нужно сделать — это зарегистрировать своего бота и получить токен для доступа к API. Сделать это очень просто с помощью официального бота @botfather.

Бота создали, токен получили, можно писать код. Сначала нужно добавить враппер telegram api.

dotnet add package Telegram.Bot

Создадим инстанс клиента апи и получим имя нашего бота

TelegramBotClient botClient = new TelegramBotClient("<token>");
var me = botClient.GetMeAsync().Result;
Console.WriteLine(me.Username);

Особенность ботов в телеграмме: они не могут писать первыми. read more

Чтение RSS на C#

21.11.2017 at 21:45

Для чтения RSS на C# есть несколько способов. Традиционный — классы из пространства имен System.ServiceModel.Syndication.
Другим способ является использование библиотеки CodeHollow.FeedReader. Плюсы этой библиотеки:

  • работает под .Net Core, а значит можно использовать на линуксе. В том числе и на любом VPS.
  • умеет искать на странице ссылки на RSS фиды

При чтении RSS нужно определять, какие записи новые, а какие нет. read more

Простой бэкенд для игры

20.11.2017 at 08:43

Часто при разработке игры требуется сделать серверную часть. Сегодня я покажу как просто и быстро можно это сделать на примере хранения таблицы рекордов.
Использовать буду .net core 2.0 потому, что с одной стороны это позволяет писать на C#, с другой код можно запустить на любой дешевой виртуалке.

В качестве фреймворка я буду использовать NancyFx. read more

Полезности №2

13.11.2017 at 18:00

Human eye viewing data on virtual screen — Biometrics concept

Изменение дефолтной версии node в nvm

nvm alias default v6.9.1

apt-get install без необходимости вводить подтверждение

apt-get install package-name --yes

универсальный вариант:

yes | apt-get install package-name

yes — это утилита, которая бесконечно выводит y

Запуск дартиума так, чтобы после ошибки не терялось содержимое консоли

--enable-logging --v=1 --checked

Флаг —checked здесь не обязателен, но очень полезен для отладки Dart кода read more

Программное создание приватного прокси

31.10.2017 at 08:09

Я уже рассказывал о том, как можно создать приватный прокси. У таких прокси только один существенный недостаток — необходимость ручных действий. Так что я решил этот процесс автоматизировть.
К счастью Digital Ocean предоставляет удобное API для управления дроплетами.

Создание SSH ключей

Для подключения к виртуалке и настройки прокси сервера потребуются SSH ключи. read more

Создание приватного прокси

16.10.2017 at 13:58

Часто прокси нужен на 10-15 минут или нужно передать через прокси конфеденциальные данные. В таких ситуациях желательно иметь свой личный прокси. Покупать так называемые «приватные» прокси я не рекомендую потому что это кот в мешке и вы никогда не узнаете скольким людям продали тот же прокси. Я в таких случаях быстро создаю прокси на VPS а после использования удаляю. read more

Использование proxy в selenium

14.10.2017 at 10:15

Я уже писал о парсинге сайтов с помощью библиотеки selenium. Иногда бывает нужно использовать прокси при парсинге. Сделать это не трудно:

var proxy = new Proxy();
proxy.HttpProxy = "<ip>:<port>";
var options = new ChromeOptions();
options.Proxy = proxy;
IWebDriver driver = new ChromeDriver(options);

для socks прокси с логином и паролем настройка будет выглядеть так:

var proxy = new Proxy();
proxy.SocksProxy = "<ip>:<port>";
proxy.SocksUserName = "<login>";
proxy.SocksPassword = "<password>";
var options = new ChromeOptions();
options.Proxy = proxy;
IWebDriver driver = new ChromeDriver(options);

Самое главное: никогда не передавайте через прокси важные данные, если это не ваш прокси! read more