3 Ответы
Данная статья содержит в себе ссылки на различные инструменты (самостоятельные, кроссплатформенные или аналоги из других ОС) для получения информации об оборудовании и его тестирования.

Статья будет корректироваться и дополняться по мере нахождения новых инструментов.

Инструменты, помеченные как [CLI], не имеют графического интерфейса. Некоторые инструменты подходят под несколько категорий - в таком случае они не будут дублироваться в каждой.

Реализация некоторых инструментов есть в составе окружений рабочего стола.

Процессор
  • CPU-X - аналог CPU-Z для Windows. Умеет отображать подробную информацию о процессоре (модель, частота, кэши, напряжение, наборы инструкций), оперативной памяти, материнской плате, видеокарте.
  • GtkStressTesting - набор функций примерно такой же, что и у CPU-X. Поддерживает стресс-тест процессора и оперативной памяти.
  • hardinfo - получение информации об оборудовании и набор различных бенчмарков
  • [CLI] Geekbench - бенчмаркинг процессора

Хранилище (жёсткие диски, SSD, флешки)
  • [CLI] hdparm - программа для настройки параметров жёстких дисков. Умеет измерять скорость чтения и записи.
  • KDiskMark - аналог CrystalDiskMark для Windows. Проверка скорости.
  • GSmartControl - получение SMART накопителей
  • [CLI] badblocks - проверка секторов жёсткого диска

Сеть
  • [CLI] speedtest-cli - тестирование скорости интернета через Speedtest из терминала
  • LinSSID - получение информации об окружающих точках Wi-Fi (список точек, уровень сигнала, построение графика каналов)

Видеокарта
  • GpuTest  - набор приложений для стресс-тестирования видеокарты и бенчмаркинга. Включает в себя знаменитый фурри-пончик. Использует OpenGL.
  • glmark2 - бенчмаркинг OpenGL
  • vkmark - бенчмаркинг Vulkan
  • UNIGINE Benchmarks - набор бенчмарков от UNIGINE
  • LuxMark - бенчмаркинг OpenCL
2 Ответы
Как известно, ZFS не может быть уменьшена, но это не значит что ничего нельзя сделать.
Это краткий мануал, здесь не будет расписано что какая команда делает, документация к каждой команде идёт в комплекте с FreeBSD.



Структура диска:

Код:
# gpart show -p
=>      40  234441568    ada0  GPT  (112G)
        40    131072  ada0p1  efi  (64M)
    131112      1024  ada0p2  freebsd-boot  (512K)
    132136  234309472  ada0p3  freebsd-zfs  (112G)

Различия с исходным HDD на 500G только в размере ada0p3.



Грузимся в Live USB/CD/DVD FreeBSD (на которой заранее размечен дополнительный раздел в UFS2+SU: da0s4).

Код:
zpool import -R /mnt freebsd0
mkdir -p /tmp/backup
mount /dev/da0s4 /tmp/backup
zfs snap -r freebsd0@MOVE
// Если есть возможность воткнуть сразу два диска, то send|recv и dd можно совместить. В этом случае не понадобится временный раздел.
Код:
zfs send -Lwp freebsd0@MOVE >/tmp/backup/freebsd0.zfs
dd if=/dev/ada0p1 of=/tmp/backup/ada0p1.efi.img bs=8m
dd if=/dev/ada0p2 of=/tmp/backup/ada0p2.gptboot.img bs=512k
sync;sync;sync;reboot

Меняем диски…

Код:
gpart create -s gpt ada0
gpart add -t efi -s 64m -a 4k -l efiboot0 -i 1 ada0
gpart add -t freebsd-boot -s 512k -l gptboot0 -i 2 ada0
gpart add -t freebsd-zfs -l freebsd0 -i 3 ada0
zpool create -O compress=lz4 -O atime=off -m none -o failmode=continue -O utf8only=on freebsd0 /dev/gpt/freebsd0
mkdir -p /tmp/backup
mount /dev/da0s4 /tmp/backup
dd of=/dev/ada0p1 if=/tmp/backup/ada0p1.efi.img bs=8m
dd of=/dev/ada0p2 if=/tmp/backup/ada0p2.gptboot.img bs=512k
zfs recv -e freebsd0 </tmp/backup/freebsd0.zfs
zfs rename ... # перемещаем ВСЕ датасеты из freebsd0/freebsd0/* в freebsd0/*
zfs destroy freebsd0/freebsd0
zpool set bootfs=freebsd0/ROOT/13.1R freebsd0
gpart bootcode -b /boot/pmbr ada0
sync;sync;sync;reboot

Первая загрузка может быть с проблемами по ряду причин, ещё одна перезагрузка после полной загрузки ставит всё на свои места.
1 Ответы
8 сентября в сообществе BSD было принято решение включить ссылку на depenguin.me, которая описывает, способ установки BSD с использованием среды аварийной загрузки.

В ссылке описана процедура установки FreeBSD-13.1 на выделенный сервер из спасательной среды Linux. (rescue environment)
1 Ответы
Пока писал предыдущую статью понял, что несколько раз упомянул в ней такую штуку, как «сложность алгоритма». Спустя пару ночей пришел к выводу, что оно тянет на отдельную статью... В общем, так и получилось.

Как и в прошлый раз, чтобы не копировать тексты, вкратце расскажу, о чем там речь.

Сначала рассмотрена теория, что такое эта самая сложность алгоритма и для чего она нужна. Если вкратце — это время. Абстрактное время выполнения алгоритма. Зависит оно от реализации этого алгоритма (ну и от железа, на котором выполняется, но в силу абстрактности это можно опустить).

Обозначается она большой буквой О и может принимать разные значения. Например:
  • O(n) — линейное время;
  • O(log n) — логарифмическое время;
  • O(n * log n) — линейное, помноженное на логарифмическое для каждой итерации;
  • O(n2) — линейное в квадрате;
  • O(n!) — факториальное, стремящееся к бесконечности.


Далее практическая часть, в рамках которой я допилил в предыдущую программу функцию простого поиска по массиву перебором:

Код:
func simpleSearch(array *[]int, lookingFor int) (int, bool) {
    count := 0
    start := time.Now()
    for value := range *array {
        count++
        if value == lookingFor {
            duration := time.Since(start)
            fmt.Print("Simple search time: ")
            fmt.Println(duration)
                        fmt.Println("Steps: " + strconv.Itoa(count))
            return value, true
        }
    }
    duration := time.Since(start)
    fmt.Print("Simple search time: ")
    fmt.Println(duration)
        fmt.Println("Steps: " + strconv.Itoa(count))

    return 0, false
}

Также я прикрутил к функциям счетчик времени выполнения каждой из них и потестировал. Результаты тестов на входных массивах различной длины были сведены в наглядную табличку, показывающую, что при переступании порога в 1000 элементов бинарный поиск начинает резко вырываться вперед, а на больших размерах массивов разница по времени составляет более 600 раз.

Сама табличка:

[Изображение: Screenshot_20220905_210402.png]
За подробностями и болтологией прошу сюда. Ну и как всегда рад любым комментам.
Нет ответов
Выпущены релизы безопасности matrix-js-sdk и matrix-react-sdk, чтобы исправить пару уязвимостей высокой степени серьезности (зарезервированных как CVE-2022-36059 для matrix-js-sdk и CVE-2022-36060 для matrix-react-sdk).

Затронуты клиенты, которые зависят от затронутых библиотек, такие как Element Web/Desktop и Cinny. Релизы затронутых клиентов появятся в ближайшее время. Пользователям этих клиентов рекомендуется выполнить обновление при первой же возможности.

Уязвимости дают злоумышленнику, с которым вы делите комнату, возможность провести атаку типа «отказ в обслуживании» против уязвимых клиентов, заставляя его не показывать все комнаты или пространства пользователя и/или вызывая незначительные временные повреждения.

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

Обратите внимание, что, хотя уязвимость, насколько нам известно, никогда не использовалась злонамеренно, в результате непреднамеренного публичного тестирования некоторые люди пострадали от этой ошибки. Если вы пострадали, вам может потребоваться очистить кеш и перезагрузить клиент Matrix, чтобы изменения вступили в силу.

Авторы благодарят Вэла Лоренца, который обнаружил уязвимость и сообщил о ней на выходных.

Новость на LOR

 >> Подробности
Нет ответов
В обновлении эмулятора Playstation 4 и 5 KyTy от 21.10.2022 впервые заработали сэмплы SDK от PS5. До этого разработчик демонстрировал работу игры Worms W.M.D от PS4. В будущем будет тестирование игр от PS5.

13 Ответы
Цитата:По данным Коммерсанта, уже к 12 декабря в России разработают специальную систему для анализа фото, видео и текстов в Сети на предмет нарушения российских законов.

Называться она будет «Окулус», а в её основу ляжет технология нейросетей. На данный момент стоимость проекта составляет 57,7 млн рублей — именно такую сумму Роскомнадзор выделил компании ООО «Эксикьюшн Эр Ди Си».

Судя по технической документации, «Окулус» сможет в режиме реального времени анализировать изображения и видео, а также переписки в чатах и материалы каналов мессенджеров, URL-адреса и прочие данные. Она будет выявлять в них запрещенную информацию.

Там же можно найти информацию о том, что «мощность» системы должна составить 200 тыс изображений в сутки. Таким образом, ежесекундно она будет анализировать два кадра или картинки.

Источник.
66 Ответы
FreeBSD 13.1-RELEASE-p0 (планирую собрать -STABLE ветку).

В основном использую Firefox, scrot, Telegram Desktop, Alacritty, feh, xcompmgr, CWM, xidle & xlock, catgirl, vi(m), tmux, aria2, mpv, mpg123, GIMP, LibreOffice, игрушечки через Wine, сериальчики на телевизор через HDMI.

Ранее в системе присутствовал /etc/src.conf для убирания "лишнего", но, как я понял, лишнее убрать всегда успеется, а нужное добавить - не всегда получится.

Запускаю окружение прямо xinit из консоли, DM #ненужон, DE #тоже.

По OpenBSD не особо скучаю, но симпатично их ПО.

BSD-шники всех версий, объединяйтесь!
Эскизы(ов)
   
3 Ответы
Недавно совершенно случайно приобрел в магазине книжку «Время UNIX» Брайана Кернигана. 

[Изображение: Brajan_Kernigan__Vremya_UNIX._A_History_...emoir.jpeg]

Книга захватывает, несмотря на свой небольшой размер. Написана очень классно, переносит тебя куда-то в те далекие 70е и ранее годы, когда только начинался UNIX (и не только), когда не было всех этих современных мощностей и тонн фреймворков, когда быть программистом означало понимать, как работает эта ваша шайтан-коробка, которую называют персональным компьютером. Когда запилить новую микросхему можно было просто на коленке, а на следующий день получить готовый отлитый экземпляр. Когда новый язык программирования или какую-то мега полезную утилитку (LEX, grep и остальные) мог создать чуть ли не на коленке один человек за несколько недель усиленного кодинга. И накрывает какой-то ностальгической тоской от осознания того, что такого уже не будет.

Обратил внимание на разницу в подходах к работе. Меня приятно удивило описание их процесса работы в Bell Labs, где можно было делать все, что угодно, и делать это хорошо. То есть реально человек мог сам выбрать себе занятие и в свое удовольствие пилить свой проект, получая при этом зарплату, не выслушивая тонн говна от начальства про сроки, ненужность оптимизаций и так далее. Именно так, кстати, и появился UNIX, как наколенный проект одного из сотрудником компании. И, к слову, получать нормальную зарплату, позволяющую жить, а не существовать (будете читать если, обратите внимание на пару строк про описание полетов на обед).

Вспоминаю годы своей работы в нашенском научно исследовательском институте, который, по идее, должен был бы выполнять схожие задачи с Bell Labs тех лет — исследовать что-то новое — и вижу совершенно другой подход. У нас основной задачей было распилить бабло, спущенное сверху, потратив на это как можно меньше... всего — и сил, и денег, и ресурсов, и времени. Оптимизация — да ну его нахрен. Сделать хорошо — да пошло оно, покупать еще лист стали, вон там валяется ржавый кусок толщиной 10мм. И вот так было во всем. Когда я читал про подход к работе в компании, где разработали UNIX, и сравнив его с нашенским в моем НИИ, я сразу осознал ту пропасть между нами, и понял, почему «там» все так круто, а мы не смогли ничего за те же прошедшие уже 50 лет.

В общем, советую прочитать всем, кто так или иначе имеет взаимоотношения с UNIX в любом из его проявлений (да и не только, ибо первым все же был именно UNIX). Книга реально огонь!
10 Ответы
Я наконец закончил первую статью из своего планируемого цикла статей для погромистов и не только. 

В ней я подробно разобрал, что такое «бинарный поиск» и как оно работает — с картинками, блок-схемами и так далее, а также написал пример его реализации на Golang.

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


[Изображение: binary_poisk_block-scheme.png]
А его полная реализация на Go так:

Код:
package main

import (
    "fmt"
    "strconv"
)

func main() {
    var elems, lookingFor int

    fmt.Print("Number of elements? ")
    fmt.Scan(&elems)

    var array = make([]int, elems)

    fmt.Print("Generated array: ")
    for i := 0; i < elems; i++ {
        array[i] = i
        fmt.Print(strconv.Itoa(i) + " ")
    }
    fmt.Println()

    fmt.Println("What are we looking for:")
    fmt.Scan(&lookingFor)

    var assumption, result = binarySearch(&array, lookingFor)
    if result {
        fmt.Println("Found: " + strconv.Itoa(assumption))
    } else {
        fmt.Println("Nothing found!")
    }
}

func binarySearch(array *[]int, lookingFor int) (int, bool) {
    fmt.Println("Looking for...")
    var mid, assumption int

    min := 0
    high := len(*array) - 1

    for min <= high {
        mid = (min + high) / 2
        assumption = mid
        if assumption == lookingFor {
            return assumption, true
        }
        if assumption > lookingFor {
            high = mid - 1
        } else {
            min = mid + 1
        }
    }
    return 0, false
}

В статье подробно рассмотрен принцип действия этого алгоритма и обоснована его необходимость как такового. За подробностями добро пожаловать на страничку статьи на моем блоге. Комментариям и прочему буду рад и там, и тут.