macOS в Docker и локальная отладка GitHub Actions

Выпуск № 60 ·

Проекты на C

  1. rtty

    Открытый инструмент для входа в терминал Linux через веб-интерфейс. Написан на C и вместе с зависимостями занимает менее 100 КБ, поэтому подходит для встраиваемых устройств на Linux. Веб-панель позволяет удобно обслуживать такие устройства удалённо.

    rtty
  2. si78c

    Консольная игра «Космические захватчики», написанная на C.

    si78c

Проекты на C#

  1. nopCommerce

    Бесплатная open-source платформа интернет-магазина на ASP.NET. Проект развивается с 2008 года профессиональной командой и предлагает полный набор функций для электронной коммерции. Поддерживает Windows, Linux и macOS, а также готовое развёртывание через Docker.

    nopCommerce
  2. osu

    Бесплатная open-source ритм-игра для нескольких платформ. В такт музыке игрок нажимает на круги, ведёт курсор по траекториям и вращает элементы. В 2007 году игра работала только на Windows, а со временем получила версии для Linux, macOS, iOS и Android. Проект продолжает активно развиваться — можно скачать игру и попробовать самостоятельно.

    osu

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

  1. jwEngine

    Лёгкий кроссплатформенный веб-фреймворк с поддержкой C++ и Lua. Работает с протоколами TCP, KCP, WebSocket и HTTP. В основе лежит асинхронный ввод-вывод libuv, который повышает производительность и избавляет от накладных расходов на переключение контекста между потоками: сетевая и прикладная части работают в одном главном цикле событий. Поддержка Lua ускоряет разработку; фреймворк подходит для небольших игр. Пример кода:

    event_init()
    
    server = NetServer:new()
    server.on_accept = function(conn)
    end
    
    server.on_close = function(conn)
    end
    
    server.on_msg = function(conn, msgtype, pack)
    end
    
    server:listen("127.0.0.1", 3001, false)
    
    event_run()
  2. Serial-Studio

    Настольный инструмент визуализации данных на C++. Работает на нескольких платформах; ниже показаны результат и порядок действий.

    Serial-Studio

Проекты на Go

  1. act

    Инструмент для локальной отладки сценариев GitHub Actions. GitHub Actions автоматизирует процессы в репозиториях и предоставляет бесплатные вычислительные ресурсы, с которыми легко настроить CI/CD и другие полезные процессы. Обычно при написании сценария его приходится отправлять в удалённый репозиторий и ждать выполнения, поскольку локально проверить сценарий и увидеть результат нельзя. act решает эту проблему и позволяет легко отлаживать GitHub Actions на своём компьютере.

    act
  2. dns

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

    package main
    
    import (
        "github.com/miekg/dns"
        "net"
        "os"
        "log"
        "fmt"
    )
    
    func main() {
        config, _ := dns.ClientConfigFromFile("/etc/resolv.conf")
        c := new(dns.Client)
    
        m := new(dns.Msg)
        m.SetQuestion(dns.Fqdn(os.Args[1]), dns.TypeMX)
        m.RecursionDesired = true
    
        r, _, err := c.Exchange(m, net.JoinHostPort(config.Servers[0], config.Port))
        if r == nil {
            log.Fatalf("*** error: %s\n", err.Error())
        }
    
        if r.Rcode != dns.RcodeSuccess {
                log.Fatalf(" *** invalid answer name %s after MX query for %s\n", os.Args[1], os.Args[1])
        }
        // Stuff must be in the answer section
        for _, a := range r.Answer {
                fmt.Printf("%v\n", a)
        }
    }
  3. pretty

    Open-source библиотека для красивого форматирования данных в Go через Printf. Пример кода:

    package main
    
    import (
        "fmt"
    
        "github.com/kr/pretty"
    )
    
    func main() {
        type myType struct {
            a, b int
        }
        var x = []myType{{1, 2}, {3, 4}, {5, 6}}
        fmt.Printf("%# v", pretty.Formatter(x))
    }
    
    Output:
    []pretty_test.myType{
        {a:1, b:2},
        {a:3, b:4},
        {a:5, b:6},
    }

Проекты на Java

  1. QNotified

    Open-source модуль Xposed, который расширяет возможности QQ — китайского мессенджера для Android. Xposed представляет собой фреймворк перехвата вызовов в Android, позволяющий изменять поведение системы и приложений. После установки QNotified в настройках QQ появляется пункт для включения «суперрежима». Возможности:

    • Сохранение отозванных сообщений.
    • Уведомления об удалении из друзей.
    • Блокировка уведомлений с упоминанием всех участников и о групповых денежных подарках.
    • Массовый отзыв сообщений.
    • И многое другое.
    QNotified

Проекты на JavaScript

  1. ChatUI

    Open-source набор UI-компонентов для диалоговых интерфейсов. Помогает быстро создавать удобные интерфейсы общения с ботами. Возможности:

    • Лучшие практики: проверенные подходы к диалоговым интерфейсам из опыта сервиса AliMe компании Alibaba.
    • TypeScript: проект написан на TypeScript и содержит полные определения типов.
    • Адаптивность: интерфейс хорошо выглядит на мобильных устройствах и компьютерах.
    • Темы: гибкая настройка стилей под визуальные требования продукта и бренда.
    • Интернационализация: поддержка нескольких языков и локализации.
    import Chat, { Bubble, useMessages } from '@chatui/core';
    import '@chatui/core/dist/index.css';
    
    const App = () => {
      const { messages, appendMsg, setTyping } = useMessages([]);
    
      function handleSend(type, val) {
        if (type === 'text' && val.trim()) {
          appendMsg({
            type: 'text',
            content: { text: val },
            position: 'right',
          });
    
          setTyping(true);
    
          setTimeout(() => {
            appendMsg({
              type: 'text',
              content: { text: 'Bala bala' },
            });
          }, 1000);
        }
      }
    
      function renderMessageContent(msg) {
        const { content } = msg;
        return <Bubble content={content.text} ></Bubble>;
      }
    
      return (
        <Chat
          navbar={{ title: '智能助理' }}
          messages={messages}
          renderMessageContent={renderMessageContent}
          onSend={handleSend}
        ></Chat>
      );
    };
    ChatUI
  2. cool-admin-midway

    Система управления правами доступа для административных панелей на Node.js и Midway.js. Бесплатный open-source проект ускоряет разработку CRUD-функций и поддерживает несколько удобных способов развёртывания, включая Serverless и Docker. Подходит как для изучения разработки административных панелей, так и для быстрого создания готовых решений.

    cool-admin-midway
  3. edex-ui

    Эффектная кроссплатформенная консольная утилита на Electron. Предлагает терминал в голливудском стиле с красивой анимацией запуска и выразительными звуковыми эффектами, а также наглядно показывает структуру файлов, ресурсы системы и сведения о сети.

    edex-ui
  4. joplin

    Бесплатное open-source приложение для заметок с поддержкой Markdown. Позволяет удобно вести списки дел и управлять большим количеством заметок. Импортирует заметки из Evernote и файлы Markdown, доступно для Windows, macOS, Linux, Android и iOS. Работает без подключения к интернету и умеет синхронизировать заметки через выбранное пользователем облачное хранилище для бесшовной работы на разных устройствах.

    joplin
  5. MarioHTML

    Браузерная игра про Марио, написанная на TypeScript. Играть онлайн.

    MarioHTML
  6. semaphore

    Привлекательный веб-интерфейс для Ansible. Если штатный интерфейс Ansible кажется устаревшим, попробуйте этот проект.

    semaphore

Проекты на PHP

  1. dompdf

    PHP-библиотека для преобразования HTML в PDF. Пример кода:

    // reference the Dompdf namespace
    use Dompdf\Dompdf;
    
    // instantiate and use the dompdf class
    $dompdf = new Dompdf();
    $dompdf->loadHtml('hello world');
    
    // (Optional) Setup the paper size and orientation
    $dompdf->setPaper('A4', 'landscape');
    
    // Render the HTML as PDF
    $dompdf->render();
    
    // Output the generated PDF to Browser
    $dompdf->stream();
  2. PHPMailer

    Вероятно, самая популярная open-source PHP-библиотека для отправки электронной почты. Она используется во многих известных PHP-проектах, включая WordPress и Yii, и покрывает практически любые задачи отправки писем. Пример показывает, насколько просто с ней работать:

    <?php
    //Import PHPMailer classes into the global namespace
    //These must be at the top of your script, not inside a function
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;
    
    //Load Composer's autoloader
    require 'vendor/autoload.php';
    
    //Instantiation and passing `true` enables exceptions
    $mail = new PHPMailer(true);
    
    try {
        //Server settings
        $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output
        $mail->isSMTP();                                            //Send using SMTP
        $mail->Host       = 'smtp.example.com';                     //Set the SMTP server to send through
        $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
        $mail->Username   = 'user@example.com';                     //SMTP username
        $mail->Password   = 'secret';                               //SMTP password
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
        $mail->Port       = 587;                                    //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
    
        //Recipients
        $mail->setFrom('from@example.com', 'Mailer');
        $mail->addAddress('joe@example.net', 'Joe User');     //Add a recipient
        $mail->addAddress('ellen@example.com');               //Name is optional
        $mail->addReplyTo('info@example.com', 'Information');
        $mail->addCC('cc@example.com');
        $mail->addBCC('bcc@example.com');
    
        //Attachments
        $mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments
        $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name
    
        //Content
        $mail->isHTML(true);                                  //Set email format to HTML
        $mail->Subject = 'Here is the subject';
        $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
        $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    
        $mail->send();
        echo 'Message has been sent';
    } catch (Exception $e) {
        echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
    }
  3. video_spider

    Инструмент для скачивания видео без водяных знаков. Получает адрес ролика и возвращает прямую ссылку на исходное видео без водяного знака. Сейчас поддерживает 15 видеоплатформ; доступна онлайн-версия.

    video_spider

Проекты на Python

  1. Airtest

    Кроссплатформенный фреймворк автоматизации UI мобильных приложений. Находит элементы с помощью распознавания изображений и позволяет удобно тестировать приложения или автоматизировать действия в играх, иногда вообще без кода.

    Airtest
  2. ArchiveBox

    Платформа для архивирования сайтов на Python. Автоматически сохраняет веб-страницы в разных форматах — HTML, PDF, изображения и другие — как статические материалы для локального хранения и управления. Подходит для создания зеркал и архивов сайтов, а также для чтения без подключения к интернету.

    ArchiveBox
  3. lux

    Open-source Python-библиотека для исследования данных. Предназначена для исследовательского анализа данных: интерфейс визуализации и работы в Jupyter вместе с многочисленными источниками данных и мощными средствами обработки pandas упрощает анализ и помогает нагляднее увидеть скрытые в данных закономерности.

    lux
  4. qutebrowser

    Браузер на PyQt5 с управлением в стиле Vim. Поддерживает Linux, Windows и macOS: можно сначала установить и попробовать его, а затем изучить исходный код, чтобы разобраться в разработке браузеров на Python.

    qutebrowser

Проекты на Swift

  1. flappy-fly-bird

    Игра Flappy Bird, написанная на Swift.

    flappy-fly-bird
  2. Hue

    Многофункциональная библиотека для работы с цветом. Упрощает разработку интерфейсов для iOS: позволяет быстро задавать цвета и прозрачность, создавать градиенты и перекрашивать изображения. Вместо громоздкого штатного RGBA API в Swift многие операции Hue выполняются одной строкой. Пример кода:

    // 设置 16 进制颜色
    let white = UIColor(hex: "#ffffff")
    let black = UIColor(hex: "#000000")
    
    // 设置 alpha
    let colorWithAlpha = myColor.alpha(0.75)
    
    // 设置渐变
    let gradient = [UIColor.blackColor(), UIColor.orangeColor()].gradient()
    
    let secondGradient = [UIColor.blackColor(), UIColor.orangeColor()].gradient { gradient in
      gradient.locations = [0.25, 1.0]
      return gradient
    }

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

  1. best-of-ml-python

    Подборка качественных open-source библиотек для машинного обучения на Python. Проект рассчитывает рейтинг каждого включённого решения по нескольким показателям и регулярно обновляется.

    best-of-ml-python
  2. fawkes

    Open-source инструмент для защиты личных фотографий с помощью ИИ. Проект команды SAND Lab Чикагского университета слегка изменяет пиксели изображения. Человек почти не замечает разницы, но система распознавания лиц воспринимает обработанную фотографию совершенно иначе, что помогает защитить приватность.

    fawkes
  3. Paddle

    Open-source фреймворк глубокого обучения от Baidu. Удобное промышленное решение поддерживает масштабное обучение с сотнями миллиардов признаков, триллионами параметров и сотнями узлов. Разработчики также предоставляют бесплатные вычислительные ресурсы для обучения и экспериментов. Активное сообщество и подробные руководства делают фреймворк удобным для новичков.

    Paddle
  4. tinygrad

    Компактный open-source фреймворк глубокого обучения. В нём менее 1 000 строк кода, поэтому он достаточно прост для изучения, но при этом поддерживает обучение и инференс глубоких моделей. Пример кода:

    from tinygrad.tensor import Tensor
    import tinygrad.optim as optim
    
    class TinyBobNet:
      def __init__(self):
        self.l1 = Tensor.uniform(784, 128)
        self.l2 = Tensor.uniform(128, 10)
    
      def forward(self, x):
        return x.dot(self.l1).relu().dot(self.l2).logsoftmax()
    
    model = TinyBobNet()
    optim = optim.SGD([model.l1, model.l2], lr=0.001)
    
    # ... and complete like pytorch, with (x,y) data
    
    out = model.forward(x)
    loss = out.mul(y).mean()
    optim.zero_grad()
    loss.backward()
    optim.step()
    tinygrad

Прочее

  1. azuredatastudio

    Open-source настольный инструмент Microsoft для управления базами данных. Поддерживает SQL Server, Azure SQL DB и SQL DW. Установщик для Windows занимает менее 100 МБ; также доступны версии для macOS и Linux. Бесплатное приложение пригодится разработчикам, которые работают с одной из этих баз данных.

    azuredatastudio
  2. cats-of-jasnah

    Браузерная игра для детей примерно трёх лет. Ребёнок считает на картинке кошек, подходящих под условие, например синих; вопрос звучит голосом, а после правильного ответа открывается следующий уровень. Игра развивает восприятие цветов, навыки счёта и понимание английской речи на слух. Играть онлайн.

    cats-of-jasnah
  3. Docker-OSX

    Проект для запуска macOS в Docker. Всего две команды позволяют быстро запустить операционную систему macOS:

    # 拉镜像
    docker pull sickcodes/docker-osx:latest
    
    # 运行
    docker run -it \
        --device /dev/kvm \
        -p 50922:10022 \
        -v /tmp/.X11-unix:/tmp/.X11-unix \
        -e "DISPLAY=${DISPLAY:-:0.0}" \
        sickcodes/docker-osx:latest
    Docker-OSX
  4. what-happens-when

    Подробное объяснение того, что происходит после ввода google.com в адресной строке браузера и нажатия Enter. Доступен перевод на китайский.