Popular Tags:

Списки в flutter

07.12.2018 at 09:00

Для отображения списков в flutter используется виджет ListView. В свойство children нужно передать массив элементов списка

body: ListView(children: <Widget>[
  ListTile(title: Text('test 1')),
  ListTile(title: Text('test 2')),
  ListTile(title: Text('test 3'))
])

Выглядеть такой виджет будет вот так:

Содержимым ListView могут быть любые виджеты, не только ListTile. ListTile всего лишь подготовленный виджет, хорошо выглядящий в списке и имеющий много полезных свойств, например

ListTile(
  leading: Icon(Icons.work),
  title: Text('test 1'),
  trailing: Icon(Icons.star),
  subtitle: Text('subtitle text'),
  isThreeLine: true,
)

получится такой виджет:

Динамические списки в flutter

Чаще всего содержимое списка не известно заранее. read more

Сериализация и десериализация JSON в flutter для больших проектов

06.12.2018 at 08:14

В прошлой статье я рассказывал о получении JSON по HTTP и десериализации ответа. Парсинг JSON был сделан вручную. Такой вариант подходит для маленьких проектов, разрабатываемых в одиночку, но вызовет множество проблем в более крупном проекте.

Для крупных проектов разбор JSON лучше генерировать. Используется для этого пакет json_serializable.

В файле pubspec.yaml в секцию dependencies добавляем

json_annotation: ^2.0.0

А в секцию dev_dependencies

build_runner: ^1.0.0
json_serializable: ^2.0.0

dev_dependencies — это зависимости, которые используются в процессе разработки но не используются в production коде. read more

flutter: получение JSON по HTTP и парсинг ответа

04.12.2018 at 09:12

Для работы с http в dart нужно подключить пакет http. Для этого в файл pubspec.yaml в секцию dependencies добавляем строчку

http: ^0.12.0

После этого загружаем пакет командой

flutter packages get

В файле подключаем импорты

import 'package:http/http.dart' as http;
import 'dart:convert';

Второй импорт нужен будет для парсинга JSON из строки ответа.

Создаем класс с данными (в примере это данные пользователя)

class User {
  final int id;
  final String name;
  final String email;

  User({this.id, this.name, this.email});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      name: json['name'],
      email: json['email']
    );
  }
}

В классе User сделана фабрика для создания пользователя из JSON. read more

Шум Перлина на 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