Корутины для WeChat и диагностика HTTP-запросов

Выпуск № 8 ·

Проекты на C#

  1. Newtonsoft.Json

    Библиотека с открытым кодом для сериализации и десериализации JSON на платформе .NET. Пример кода:

    public class Account
    {
        public string Email { get; set; }
        public bool Active { get; set; }
        public DateTime CreatedDate { get; set; }
        public IList<string> Roles { get; set; }
    }
    
    Account account = new Account
    {
         Email = "james@example.com",
         Active = true,
         CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, ateTimeKind.Utc),
         Roles = new List<string>
         {
             "User",
             "Admin"
        }
    };
    
    string json = JsonConvert.SerializeObject(account, Formatting.Indented);
    // {
    //   "Email": "james@example.com",
    //   "Active": true,
    //   "CreatedDate": "2013-01-20T00:00:00Z",
    //   "Roles": [
    //     "User",
    //     "Admin"
    //   ]
    // }
    
    Console.WriteLine(json);

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

  1. libco

    Открытая библиотека корутин для C/C++ от Tencent, которую массово использует серверная часть WeChat. С 2013 года она стабильно работает на десятках тысяч серверов WeChat.

    • Позволяет без вмешательства в бизнес-логику перевести многопроцессные и многопоточные службы на корутины, увеличив число одновременных задач в сотни раз
    • Поддерживает CGI-фреймворк для простой разработки веб-сервисов
    • Поддерживает распространённые сторонние библиотеки, включая gethostbyname, mysqlclient и ssl
    • Предлагает режим общего стека, с которым один сервер легко обслуживает десять миллионов соединений
    • Предоставляет простой и полноценный интерфейс для работы с корутинами:
    • — Интерфейс устроен по образцу pthread: для создания и возобновления корутин достаточно понятных функций co_create и co_resume
    • — Локальные переменные корутин на основе __thread и семафор co_signal для обмена данными между корутинами
    • — Реализация лямбда-функций на уровне языка позволяет вместе с корутинами создавать и запускать фоновые асинхронные задачи прямо по месту
    • — Компактный сетевой фреймворк на основе epoll/kqueue и производительный таймер на основе колеса времени

Проекты на Go

  1. kcptun

    Возможно, самый быстрый в мире инструмент передачи данных по UDP. Поддерживает macOS, Linux, Windows, FreeBSD, ARM, Raspberry Pi и OpenWrt.

    kcptun

Проекты на Java

  1. AndroidUtilCode

    Незаменимая коллекция утилит для Android-разработчиков. Описание на китайском.

  2. DanmakuFlameMaster

    Открытый Android-движок бегущих комментариев от Bilibili (китайский видеохостинг) — DanmakuFlameMaster. Возможности:

    • Производительная отрисовка несколькими способами: View, SurfaceView и TextureView
    • Разбор XML-формата комментариев Bilibili
    • Точное воспроизведение и отрисовка обычных комментариев
    • Поддержка особых комментариев mode7
    • Оптимизация для многоядерных устройств и эффективное предварительное кеширование
    • Переключение разных эффектов отображения в реальном времени
    • Отображение комментариев в реальном времени
    • Поддержка многострочных и движущихся комментариев
    • Поддержка пользовательских шрифтов
    • Настройка различных параметров комментариев
    • Несколько способов блокировки комментариев

Проекты на JavaScript

  1. atrament

    Миниатюрная JavaScript-библиотека для рисования. Онлайн-демонстрация.

    atrament
  2. incubator-weex

    Кроссплатформенный фронтенд-фреймворк для мобильных приложений. Есть подробная документация на китайском.

Проекты на Python

  1. httpstat

    httpstat улучшает представление результатов curl и делает их понятнее. Утилита не имеет зависимостей, совместима с Python 3 и состоит всего из трёхсот с небольшим строк. Кроме того, она показывает длительность каждого этапа HTTP-запроса, как на иллюстрации ниже.

    httpstat
  2. PyMySQL

    Библиотека для MySQL, полностью написанная на Python. Благодаря этому она работает на любой платформе с интерпретатором Python: CPython, PyPy или IronPython. По производительности и способу использования почти не отличается от MySQLdb, зато PyMySQL устанавливается предельно просто — pip install PyMySQL. Пример использования PyMySQL:

    # 下面为例子需要的数据库的建表语句
    CREATE TABLE `users` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `email` varchar(255) COLLATE utf8_bin NOT NULL,
        `password` varchar(255) COLLATE utf8_bin NOT NULL,
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
    AUTO_INCREMENT=1 ;
    # -*- coding: utf-8 -*-
    import pymysql.cursors
    
    # 连接数据库
    connection = pymysql.connect(host='localhost',
                                 user='user',
                                 password='passwd',
                                 db='db',
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)
    
    try:
        with connection.cursor() as cursor:
            # 创建一个新的纪录(record)
            sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
            cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
    
        # 连接不会自动提交,所以你想下面要调用 commit 方法,存储对数据库的改动
        connection.commit()
    
        with connection.cursor() as cursor:
            sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
            cursor.execute(sql, ('webmaster@python.org',))
    
            # 获取一条的纪录(record)
            result = cursor.fetchone()
            print(result)  # 结果输出:{'password': 'very-secret', 'id': 1}
    finally:
        connection.close()  # 操作完数据库一要记得调用 close 方法,关闭连接
  3. reddit

    Исходный код сайта reddit.com. На примере проекта можно изучить применение Python в крупных системах, структуру проекта, стиль кода и практические приёмы языка. Руководство по установке.

    reddit

Проекты на Ruby

  1. discourse

    Форум на Ruby, полностью бесплатный и с открытым кодом.

    discourse

Прочее

  1. How-To-Ask-Questions-The-Smart-Way

    Руководство «Как правильно задавать вопросы»: хороший вопрос — ключ к решению проблемы.

  2. jstraining

    Учебные материалы Жуань Ифэна для подготовки fullstack-разработчиков.

  3. macOS-Security-and-Privacy-Guide

    Руководство по безопасности и конфиденциальности в macOS. Есть перевод на китайский.

  4. PTVS

    Расширение для разработки на Python в Visual Studio.

  5. styleguide

    Руководство команды фронтенд-разработки Baidu по стилю документации и исходного кода.

  6. the-swift-programming-language-in-chinese

    Перевод на китайский официального руководства Apple «Язык программирования Swift» (The Swift Programming Language).