Зеркало для docker

Альтернативное зеркало для docker

"https://dockerhub.timeweb.cloud/"

В файл etc/docker/daemon.json добавляем:

"registry-mirrors": [
    "https://mirror.gcr.io/",
    "https://dockerhub.timeweb.cloud/"
  ]

Чтобы сохранить образы в собственный репозиторий можно воспользоваться:

docker pull ubuntu:20.04
docker tag ubuntu:20.04 my-registry/ubuntu:20.04
docker push my-registry/ubuntu:20.04

В этом примере показана возможность сохранить образ ubuntu:20.04 в собственном репозитории

Synology AntiVirus Essential

С начало СВО обновление данного антивируса на серверах Synology стало запрещено. Ниже описан один из способов (работает на 30.07.2023)

На сервере выполняем команду:

sudo vi /volume1/@appstore/AntiVirus/engine/clamav/etc/freshclam.conf

Вставляем последней строку:

PrivateMirror http://40.65.182.21/clamav

Список зеркал есть на GitHub по ссылке ниже.

Обновление от 26.05.2024

Самый простой способ это перейти в каталог /volume1/@appstore/AntiVirus/engine/clamav/etc/ и выполнить:

wget https://raw.githubusercontent.com/wirgen/syno-clamav-mirrors/main/patch.sh
chmod +x patch.sh
sudo ./patch.sh

Подробнее на:

  • https://creepybear.ru/synology-nas/synology-antivirus-essential-obnovlenie-bazy-antivirusa — инструкция
  • https://github.com/stdevPavelmc/mailad/issues/147 — список зеркал
  • https://github.com/wirgen/syno-clamav-mirrors?tab=readme-ov-file — список зеркал (от 27.03.2024)
  • https://neoserver.ru/help/osnovnie-komandi-redaktora-vi-vim — команды для редактора vi
  • https://clamav-mirror.ru/

Запуск Cisco Anyconnect на ОС Linux

Примечание: настройка приложения выполнялось на операционной системе Linux Mint 21.1 со следующими характеристиками:

  • ОЗУ — 2048Gb
  • CPU — 4 виртуальных ядра i5-4570 3.20GHz
  • HDD — 32Gb
  • Сеть — NAT

Предварительно все обновления на ОС были установлены, виртуальная машина была перезагружена.

Шаг 1.

Загружаем сертификат безопасности (PFX) на виртуальную машину (его должен передать заказчик):

Файл в формате PFX
Читать далее «Запуск Cisco Anyconnect на ОС Linux»

Руководство для начинающих по кодированию данных

Сделайте так, чтобы ваша машина лучше понимала данные

фотоПатрик ЛинденбергнаUnsplash

В этом цифровом мирекодирование»- это мощное слово, его применение и присутствие распространены во всех аспектах. В целом,кодированиеэто процесс преобразования данных из одной формы в другую требуемую форму. Один из лучших примеров кодирования относится к эпохе, предшествовавшей появлению Интернета, — использованию азбуки Морзе, которая представляла собой схему кодирования символов, которая кодирует текстовые символы в виде стандартизированных последовательностей двух разных длительностей сигнала, называемых точками и тире или точками и тире.

Мир данных также использует кодирование для шифрования, передачи данных и т. Д. Чтобы машина понимала тенденции и близость данных, необходимо, чтобы данные были числовыми. Почти весь алгоритм ML требует данных в числовой форме. В этой истории мы рассмотрим методы кодирования, которые необходимы компьютеру для интерпретации данных (точнее, категориальных данных) и извлечения из них уроков.

Читать далее «Руководство для начинающих по кодированию данных»

SWIFT: создание второго потока

var workItem: DispatchWorkItem? = nil

...

override func viewDidAppear(_ animated: Bool) {
   super.viewDidAppear(animated)
        
   let indicator = activityIndicator()
   indicator.startAnimating()
        
   workItem = DispatchWorkItem {
            // долгая команда

   DispatchQueue.main.async {
       indicator.stopAnimating()
       indicator.hidesWhenStopped = true
       }
   }
   DispatchQueue.global(qos: .utility).async(execute: workItem!)
}

...

override func viewDidDisappear(_ animated: Bool) {
    if let workItem = workItem {
        workItem.cancel()
        self.workItem = nil
    }
}

JavaScript для глубокого обучения TensorFlow.js

Данная статья является кратким изложением книги «JavaScript для глубокого обучения: TensorFlow.js»

Простой пример машинного обучения для «линейных» данных:

const trainData = {
    sizeMB: [0.080, 9.000, 0.001, 0.100, 8.000,
        5.000, 0.100, 6.000, 0.050, 0.500,
        0.002, 2.000, 0.005, 10.00, 0.010,
        7.000, 6.000, 5.000, 1.000, 1.000],
    timeSec: [0.135, 0.739, 0.067, 0.126, 0.646,
        0.435, 0.069, 0.497, 0.068, 0.116,
        0.070, 0.289, 0.076, 0.744, 0.083,
        0.560, 0.480, 0.399, 0.153, 0.149]
};

const testData = {
    sizeMB: [5.000, 0.200, 0.001, 9.000, 0.002,
        0.020, 0.008, 4.000, 0.001, 1.000,
        0.005, 0.080, 0.800, 0.200, 0.050,
        7.000, 0.005, 0.002, 8.000, 0.008],
    timeSec: [0.425, 0.098, 0.052, 0.686, 0.066,
        0.078, 0.070, 0.375, 0.058, 0.136,
        0.052, 0.063, 0.183, 0.087, 0.066,
        0.558, 0.066, 0.068, 0.610, 0.057]
};

const trainTensors = {
    sizeMB: tf.tensor2d(trainData.sizeMB, [20, 1]),
    timeSec: tf.tensor2d(trainData.timeSec, [20, 1]),
};

const testTensors = {
    sizeMB: tf.tensor2d(testData.sizeMB, [20, 1]),
    timeSec: tf.tensor2d(testData.timeSec, [20, 1]),
};

const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [1], units: 1}));
model.compile({optimizer: 'sgd', loss: 'meanAbsoluteError'});

(async function() {
    await model.fit(trainTensors.sizeMB, trainTensors.timeSec, { epochs: 200 });
    model.evaluate(testTensors.sizeMB, testTensors.timeSec).print();

    model.predict(tf.tensor2d([[7.8]])).print();
})();

Скачать книгу можно с ресурса https://1drv.ms/b/s!AnBjlQFDvsITgqFSIHj1pfyIoIcfGg?e=qdLYsi