Локальный DNS и программирование на классическом китайском

Выпуск № 45 ·

Проекты на C

  1. smartdns

    Локальный DNS-сервер. Помогает ускорить доступ к сайтам и решает другие задачи. Схема архитектуры приведена ниже:

    smartdns
  2. xmake

    Лёгкий кроссплатформенный инструмент автоматической сборки на Lua. Собирает проекты на основных платформах, прежде всего решая проблему кроссплатформенной сборки C/C++, и поддерживает совместную компиляцию с другими языками. Конфигурация проекта проста и понятна даже новичкам.

    add_requires("libuv master", "ffmpeg", "zlib 1.20.*", "tbox >1.6.1")
    target("test")
        set_kind("shared")
        add_files("src/*.c")
        add_packages("libuv", "ffmpeg", "tbox", "zlib")
    xmake

Проекты на C#

  1. Blog.Core

    Учебный курс и практический проект по созданию приложения с раздельными клиентской и серверной частями на ASP.NET Core и Vue с нуля. Материал начинается с основ .NET Core, изложен полно и последовательно; пригодится как начинающим, так и тем, у кого уже есть опыт.

    Blog.Core
  2. Terminal.Gui

    Библиотека для терминального интерфейса на .NET с поддержкой Windows и Linux/Unix. Упрощает создание графических интерфейсов в терминале, в том числе с управлением мышью.

    Terminal.Gui

Проекты на C++

  1. pikiwidb

    Корпоративный сервис хранения данных Redis с открытым кодом, постоянным хранением и ёмкостью в сотни гигабайт. Совместим с большинством интерфейсов Redis и помогает обойти нехватку памяти при больших объёмах данных. Как и Redis, поддерживает основное и резервное хранилище через команду slaveof, а также полную и частичную синхронизацию.

  2. ThreadPool

    Простая реализация пула потоков на C++11 менее чем в 100 строк кода. Пример:

    // create thread pool with 4 worker threads
    ThreadPool pool(4);
    
    // enqueue and store future
    auto result = pool.enqueue([](int answer) { return answer; }, 42);
    
    // get result from future
    std::cout << result.get() << std::endl;
  3. xournalpp

    Приложение для заметок и рукописных пометок в PDF на Linux, Windows и macOS. Подойдёт тем, кто любит выделять фрагменты и делать заметки при чтении. Скачать.

    xournalpp

Проекты на Go

  1. gf

    Производительный многофункциональный веб-фреймворк на Go. Особенности:

    • Модульная архитектура со слабой связностью.
    • Множество готовых к использованию модулей.
    • Простота использования и сопровождения.
    • Подробная документация и примеры.
    • Полная поддержка китайского языка в локализации.
    • И другие возможности.
    gf
  2. gods

    Простая в использовании библиотека структур данных и алгоритмов для Go, готовая к работе без дополнительной настройки. Пример кода:

    type Stack interface {
        Push(value interface{})
        Pop() (value interface{}, ok bool)
        Peek() (value interface{}, ok bool)
    
        containers.Container
        // Empty() bool
        // Size() int
        // Clear()
        // Values() []interface{}
    }
  3. goproxy

    Прокси для установки модулей Go. Помогает, когда загрузка зависимостей проекта завершается ошибкой.

    goproxy
  4. gowp

    Производительный асинхронный пул задач для Go. Простой интерфейс, возврат ошибок и приём новых задач независимо от длины очереди. Подходит для ограничения числа одновременных обращений и параллельного выполнения. Пример кода:

    package main
    
    import (
        "fmt"
        "time"
    
        "github.com/xxjwxc/gowp/workpool"
    )
    
    func main() {
        wp := workpool.New(10)             //设置最大线程数
        for i := 0; i < 20; i++ { //开启20个请求
            ii := i
            wp.Do(func() error {
                for j := 0; j < 10; j++ { //每次打印0-10的值
                    time.Sleep(1 * time.Second)
                }
                return nil
            })
        }
    
        wp.Wait()
        fmt.Println("down")
    }
  5. pg_flame

    Инструмент анализа производительности PostgreSQL. Представляет результаты EXPLAIN ANALYZE в виде пламенной диаграммы.

    pg_flame

Проекты на Java

  1. SnowJena

    Распределённый фреймворк ограничения частоты запросов без блокировок на основе алгоритма корзины токенов. Предлагает простой API, готов к использованию, поддерживает отказоустойчивое понижение функциональности, динамическую настройку правил и визуальный мониторинг. Пример кода:

    public class AppTest {
        Logger logger = LoggerFactory.getLogger(getClass());
        /**
         * 本地限流
         */
        @Test
        public void test1() {
            // 1.配置规则
            RateLimiterRule rateLimiterRule = new RateLimiterRuleBuilder()
                    .setLimit(1)
                    .setPeriod(1)
                    .setUnit(TimeUnit.SECONDS) //每秒令牌数为1
                    .build();
            // 2.工厂模式生产限流器
            RateLimiter limiter = RateLimiterFactory.of(rateLimiterRule);
            // 3.使用
            while (true) {
                if (limiter.tryAcquire()) {
                    logger.info("ok");
                }
            }
        }
    }
    SnowJena

Проекты на JavaScript

  1. formily

    Производительное решение для сложных корпоративных форм. Возможности:

    • Распределённый рендеринг полей снижает нагрузку на React.
    • Поддержка компонентов Ant Design и Fusion Next.
    • Плавный переход между разметкой JSX и подходом на основе JSON Schema.
    • Отдельное управление побочными эффектами, включая сложную связанную проверку полей.
    • Поддержка разных вариантов сложной компоновки форм.
    formily
  2. hoppscotch

    Бесплатный инструмент с открытым кодом для отладки API на Node.js: удобный интерфейс помогает быстрее находить проблемы и повышать эффективность разработки. Знакомым с Postman назначение проекта будет понятно сразу.

    hoppscotch
  3. rc-bullets

    React-компонент для экранных комментариев, построенный с помощью CSS3 Animation. Демонстрация. Возможности:

    • Управление комментариями: пауза, скрытие, очистка экрана.
    • Настройка скорости, числа повторов, задержки показа и типа анимации.
    import React, { useEffect, useState } from 'react';
    import BulletScreen, { StyledBullet } from 'rc-bullets';
    
    const headUrl='https://zerosoul.github.io/rc-bullets/assets/img/heads/girl.jpg';
    export default function Demo() {
      // 弹幕屏幕
      const [screen, setScreen] = useState(null);
      // 弹幕内容
      const [bullet, setBullet] = useState('');
      useEffect(() => {
        // 给页面中某个元素初始化弹幕屏幕,一般为一个大区块
        let s = new BulletScreen('.screen');
        // or
        // let s=new BulletScreen(document.querySelector('.screen));
        setScreen(s);
      }, []);
      // 弹幕内容输入事件处理
      const handleChange = ({ target: { value } }) => {
        setBullet(value);
      };
      // 发送弹幕
      const handleSend = () => {
        if (bullet) {
          // push 纯文本
          screen.push(bullet);
          // or 使用 StyledBullet
    
          screen.push(
            <StyledBullet
              head={headUrl}
              msg={bullet}
            />
          );
          // or 还可以这样使用,效果等同使用 StyledBullet 组件
          screen.push({msg:bullet,head:headUrl,color:"#eee" bgColor:"rgba(2,2,2,.3)"})
        }
      };
      return (
        <main>
          <div className="screen" style={{ width: '100vw', height: '80vh' }}></div>
          <input value={bullet} onChange={handleChange} />
          <button onClick={handleSend}>发送</button>
        </main>
      );
    }
    rc-bullets
  4. react-loading

    Лёгкая библиотека анимированных компонентов React, готовых к использованию и поддерживающих загрузку по мере необходимости. Пример кода:

    import React from 'react';
    import { DisappearedLoading } from 'react-loadingg';
    const Container = () => <DisappearedLoading ></DisappearedLoading>;
    export default Container;  
    react-loading
  5. react-text-loop

    React-компонент для циклической смены текста.

    react-text-loop

Проекты на Kotlin

  1. SketchyComponent

    Библиотека компонентов для Android в стиле рисунка от руки. Содержит базовые фигуры и иконки, которые удобно настраивать под свои задачи. После ранее представленной библиотеки рисованных диаграмм — такой же подход к компонентам Android. Пример кода:

    // 1. 创建 Sketchy 图形
    val skSquareDrawable = SkSquareDrawable().apply {
        // 2. 设置属性
        fillColor = resources.getColor(android.R.color.holo_orange_dark)
    }
    // 3. 给 View 设置背景
    text.background = skSquareDrawable
    SketchyComponent

Проекты на Python

  1. memory_profiler

    Инструмент анализа использования памяти программами на Python. Пример кода:

    # 采用装饰器的方式引用,不影响现有代码
    @profile
    def my_func():
        a = [1] * (10 ** 6)
        b = [2] * (2 * 10 ** 7)
        del b
        return a
    
    if __name__ == '__main__':
        my_func()
    
    # 运行命令:python -m memory_profiler example.py
    # 输出:
    Line #    Mem usage  Increment   Line Contents
    ==============================================
         3                           @profile
         4      5.97 MB    0.00 MB   def my_func():
         5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
         6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
         7     13.61 MB -152.59 MB       del b
         8     13.61 MB    0.00 MB       return a
  2. mitmproxy

    Инструмент перехвата сетевого трафика на Python. Показывает результаты в консоли и веб-интерфейсе; как библиотека Python позволяет перехватывать и изменять запросы и ответы. Ниже показан консольный интерфейс с управлением в стиле vim.

    mitmproxy
  3. PySimpleGUI

    Библиотека для создания GUI на Python с удобным интерфейсом поверх tkinter, Qt, Remi и WxPython. Ниже приведены пример кода и результат работы:

    import PySimpleGUI as sg
    
    sg.theme('DarkAmber')   # 设置主题颜色
    # 界面内包含的东西
    layout = [  [sg.Text('Some text on Row 1')],
                [sg.Text('Enter something on Row 2'), sg.InputText()],
                [sg.Button('Ok'), sg.Button('Cancel')] ]
    
    # 创建窗口
    window = sg.Window('Window Title', layout)
    # 监听事件
    while True:
        event, values = window.read()
        if event in (None, 'Cancel'):   # 用户点击取消按钮事件
            break
        print('You entered ', values[0])
    
    window.close()
    PySimpleGUI
  4. PythonPlantsVsZombies

    Игра «Растения против зомби», написанная на Python. Хороший пример для изучения разработки небольших игр на Python. Порядок запуска:

    1. 需要 Python 3
    2. 安装依赖库:pip install pygame
    3. python main.py
    PythonPlantsVsZombies

Проекты на Ruby

  1. pghero

    Сервис мониторинга производительности PostgreSQL. Помогает разобраться, как работает база данных.

    pghero

Искусственный интеллект

  1. AIDungeon

    Текстовая игра про подземелье на основе машинного обучения. Проект показывает, как применить машинное обучение при создании игры; простой и понятный код подойдёт для подробного изучения энтузиастам ИИ.

    AIDungeon
  2. face_recognition

    Простая в освоении и использовании библиотека распознавания лиц. Построена на технологии глубокого обучения dlib и достигает точности 99,38% в тесте Labeled Faces in the Wild для распознавания лиц. В комплекте есть консольная утилита для распознавания лиц на изображениях в заданной папке, подробная документация и примеры применения. Библиотека работает и на Raspberry Pi, не требуя мощного оборудования, поэтому новичкам удобно знакомиться с распознаванием лиц и машинным обучением. Пример кода:

    # 定位图片中的所有人脸:
    import face_recognition
    image = face_recognition.load_image_file("your_file.jpg")
    face_locations = face_recognition.face_locations(image)
    
    # 识别人脸关键点,包括眼睛、鼻子、嘴和下巴
    import face_recognition
    image = face_recognition.load_image_file("your_file.jpg")
    face_landmarks_list = face_recognition.face_landmarks(image)
    face_recognition
  3. SSD-Pytorch

    Полный проект для обнаружения объектов с простой и понятной структурой и комментариями на китайском языке. Подойдёт новичкам для обучения, как образец задачи обнаружения объектов и как основа для собственной реализации. Пример кода:

    # 实例化模型:模型的具体各种参数在 Config 文件中进行配置
    net = SSD(cfg)
    # 将模型移动到 GPU 上,cfg.DEVICE.MAINDEVICE 定义了模型所使用的主 GPU
    # 模型的参数更新会在主 GPU 上进行
    net.to(cfg.DEVICE.MAINDEVICE)
    
    # 初始化训练器:训练器参数已通过 cfg 进行配置;也可传入参数进行配置(但不建议)
    trainer = Trainer(cfg, max_iter=None, batch_size=None, 
                      train_devices=None, model_save_step=None, 
                      model_save_root=None, vis = None, vis_step=None)
    # 训练器开始:在数据集上训练模型
    trainer(net, train_dataset)

Прочее

  1. clean-code-javascript

    «Чистый код на JavaScript» (Clean Code JavaScript) — рекомендации по улучшению кода JS, собранные на основе многолетнего опыта автора «Чистого кода». Это именно рекомендации, а не строгие правила. Перевод на китайский.

  2. pytest-chinese-doc

    Перевод официальной документации фреймворка автоматизированного тестирования pytest версии 5.1.3 на китайский язык. Помимо перевода здесь есть:

    • Больше примеров: код в каталоге docs разбит по главам и по возможности охватывает каждую тему.
    • Дополнительные материалы: ссылки на изученные автором источники и прочитанный исходный код, отражающие ход его работы и размышлений.
  3. short_url

    Сервис коротких ссылок на Elixir с настраиваемыми короткими кодами. Новички могут изучить исходники и разбор принципов работы, чтобы разобраться в создании сервиса коротких ссылок и попробовать разработку веб-сервиса на Elixir. Попробовать онлайн.

    short_url
  4. wenyan

    Язык программирования с синтаксисом классического китайского языка. Программы на нём компилируются в JavaScript, Python или Ruby. Необычный способ попробовать программировать на классическом китайском. Попробовать онлайн.

    wenyan

Открытые книги

  1. front-end-handbook-2019

    «Справочник фронтенд-разработчика 2019» (Front-End Developer Handbook 2019) — руководство по практике фронтенд-разработки для читателей с любым уровнем подготовки. Рассказывает, как изучать фронтенд и какими инструментами пользоваться в 2019 году. Читать онлайн.

  2. machine-learning-systems-design

    Небольшая книга о проектировании систем машинного обучения с упражнениями.