# Программирование | Max Wiki Site

# Полезные библиотеки

На странице собрана информация о различных Java-библиотеках

## Json

- Библиотека от Google Gson
  . UserGuide
  .

## Прочее

- Ожидание разных событий awaitility (https://github.com/awaitility/awaitility)
  . Документация
  .
- disruptor
  - быстрый кольцевой буфер.

### Генераторы данных

- Java-faker (https://github.com/DiUS/java-faker)
  - генерация всяких случайных данных разных типов. JavaDocs
  .
- Data Faker
  - ещё один генератор, но активно развивается. GitHub
  .

## Работа с географическими и навигационными данными

- geotools.org
  . Документация
  .

## REST

- Unirest-Java
  . GitHub
  .
- Retrofit
  . GitHub
  .

## Асинхронное программирование

- VERT.X
  - реактивные приложения в JVM. Используются события, вроде. Статья на Хабре
  .

# Полезные функции

## Преобразование числа в IP-адрес

    new System.Net.IPAddress(36546)).ToString();

## Преобразование IP-адреса в число в прямом порядке (BE)

    {
        byte[] ipNums = ip.Split('.').Select(s => byte.Parse(s)).ToArray();
        uint res = 0;

        res = res + ipNums[0] << 8;
        res = res + ipNums[1] << 8;
        res = res + ipNums[2] << 8;
        res = res + ipNums[3];
        return res;
    }

# Полезные функции

## Перехват Ctrl+C

Информация взята из блога Mat Ryer
.

    func main() {
        ctx := context.Background()

        // trap Ctrl#C and call cancel on the context
        ctx, cancel := context.WithCancel(ctx)
        c := make(chan os.Signal, 1)
        signal.Notify(c, os.Interrupt)
        defer func() {
            signal.Stop(c)
            cancel()
        }()
        go func() {
            select {
            case <-c:
                cancel()
            case <-ctx.Done():
            }
        }()

        doSomethingAwesome(ctx)
    }

### Более простой вариант

    func main() {
        c := make(chan os.Signal, 1)
        signal.Notify(c, os.Interrupt)
    // Wait for Ctrl#C
        <-c
    }

## Как правильно реализовать Singletone

Вариант взят отсюда singleton-pattern-in-go
.

gdoc_arrow_right_alt

# Полезные библиотеки

## Работа с базой

- Dapper

## Работа с SSH

- SSH.NET
  . Некоторые примеры
  .

# Полезные библиотеки

## Конфигурация и всё такое

- viper
  Чтение и сохранение конфигурации в различных форматах.
- Работа с командной строкой: создание флагов командной строки в POSIX формате, автоматическая генерация “как использовать”
  .
- Kingpin
  - ещё одна реализация работы с флагами. Godoc
  .
- Flaggy
  . Также работа с командной, возможность создания подкоманд. Godoc
  .
- Go-Config
  . Позволяет собирать конфигурацию из различных источников (файлы, командная строка и т.д.). Godoc
  . Описание в блоге
  .
- Gonfig
  - позволяет читать конфигурацию из json и переменных окружения.
- Venom
  . Также позволяет конфигурировать из различных источников. GoDoc
  .
- Реализация формата HOCON
  configuration
  . GoDoc
  .
- Yaml
  - работа с YAML от Canonical
  . API
  . Blog
  .
- promptui
  - позволяет запрашивать у пользователя информацию в процессе работает. Интегрируется, например с cobra
  и другими подобными библиотеками. GoDoc
  .
- cli
  - ещё одна библиотека для расширения флагов командной строки. GoDoc
  .
- koanf
  - позиционируется как более легковесный конкурент viper
  .

## Логгирование

- Библиотека от Google Glog
  . Документация
  .
- Библиотека от juju Loggo
  . Документация
  .
- Библиотека от Uber Zap
  . Документация
  .
- Logrus
  . Наверное наиболее популярный. Используется в Docker. API
  .
- Вроде как самая маленькая библиотека go-logging
  . API
  .
- zerolog
  - логирование в формате json. GoDoc
  . Также может логировать в нормальном виде.
- go-spew
  - красивый вывод в консоль данных для отладки. GoDoc
  .
- httpretty
  - удобное логирование в консоль http запросов как на сервере, так и на клиенте. GoDoc
  .
- zlog
  - логер позволяет скрывать чувствительную информацию из логирования. GoDoc
  .
- Log
  - простенький логер с подсветкой вывода от создателей Bubble Tea
  . GoDoc
  .

## UI

### Пользовательский интерфейс в терминале

Отличная статья
с обзором разных библиотек для написания text-based GUI.

gdoc_arrow_right_alt

# Полезная информация по git

## Общая информация

Официальная книга
по Git.

Как содержать репозиторий в чистоте

Ещё полезная статья на Habrahabr
.

## Как удалять ветки

Локальные:

gdoc_arrow_right_alt

# C#

Заметки по .NET

## Вызов асинхронного метода из синхронного

    var task = Task.Run(async () => await MyAsyncFunction())
    task.Wait();
    var asyncFunctionResult = task.Result;

# Kotlin

## Информация по Kotlin

Официальный сайт
.

- Добавление поддержки Kotlin в gradle
- kotlinlang.ru
  - сайт, посвящённый Kotlin на-русском.

# Java

Информация о Java, примеры использования и библиотеки

## JVM

- Liberica
  - сборка openjdk от BellSoft. Принимают участие в развитии openjdk и вообще всячески лицензированы oracle.
- GraalVM
  - позволяет запускать не только java, но и JavaScript, Python, Ruby, R, C, C++.
- AdoptOpenJDK
  - ещё одна сборка openjdk. Также есть реализация Openj9 вирутальной машины.

## Быстрая памятка по настройке логирования в Java

Для добавления логирования в проект надо добавить следующие зависимости:

gdoc_arrow_right_alt

# Internationalization (i18n) и Localization (l10n) в Go

Информация взята отсюда

Альтернативный пакет (https://github.com/nicksnyder/go-i18n)
.

## Internationalization (i18n)

Для форматирования вывода информации в национальном формате (например, чисел) используются следующие пакеты:

- golang.org/x/text/language
- golang.org/x/text/message

По-умолчанию, они не установлены. Необходимо их скачать:

    go get -u golang.org/x/text/language
    go get -u golang.org/x/text/message

Для вывода информации на основании языка используется тип `message.Printer`. Используется он следующий образом:

gdoc_arrow_right_alt