LINUX.ORG.RU

Избранные сообщения nionio35

Сайты на древних технологиях - Во имя бобра!

Форум — Web-development

LOR славится своими специалистами по самым шизанутым вопросам. И вот у меня их есть.

Короче, современный веб - это звездец. Сайты жрут дохера ресурсов, бесконечные прокрутки, оптимизированный под мобилу размер текста итд.

У всего этого много разных причин, но одна из них - а потому что современные веб-технологии это позволяют.

Что же касается негативных эффектов у этой ситуации, то есть один, о котором задумываются редко. Чем сложнее веб - тем сложнее создать и поддерживать под него веб-браузер. Соответственно, рынок браузеров поделён между буквально несколькими крупными игроками: Хром Идж Фокс Сафари, а остальные браузеры в рамках статпогрешности. И это не есть хорошо.

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

Короче идея такая чтобы сайты были на примитивных технологиях. Но не ради прикола или ностальгии, а так сказать с практическими целями: А) Чтобы работало на медленном коннекте (не везде в мире интернет быстрый, да и приколы со всякими замедлениями итп никто не отменял), Б) Чтобы не жрало ресурсы (опять же, не у всех в мире компы мощные, и ситуации в экономике тоже бывают разными: сегодня у тебя типа блокчейн крипта нейронки, а завтра ты в землянке с аналогом IBM PC XT из веток), В) Чтобы работало не только в крутых мейнстримовых брозуерах, но и в стареньких или доморощенных.

Я бы запилил, но у меня лапки. Может оно уже есть?

 , , ,

jsx_
()

gpu.cpp — библиотека для вычислений на GPU

Новости — Разработка
Группа Разработка

gpu.cpp — лёгкая переносимая библиотека для вычислений на графических сопроцессорах. Для работы требуется только компилятор C++, поддерживающий стандарт С++17 (разработчики почему-то настаивают на clang), и сама библиотека. Заявляется работа на любых устройствах, поддерживающих Vulkan, Metal, или DirectX.

( читать дальше... )

>>> Подробности

 ,

Ygor
()

Как прокинуть директорию в Qemu?

Форум — Linux-install

Я хочу запустить qemu так, чтобы там стал доступен stage3 без скачивания изнутри из интернета.

Для этого я запускаю машину как-то так:

qemu-system-x86_64 -enable-kvm -smp 10 -m 16G  -display gtk -vga virtio \
    -drive file=./disk.qcow2,if=virtio \
    -fsdev local,id=fsdev0,path=./stage3,security_model=mapped \
    -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=stage3 \
    -netdev bridge,br=bridge0,id=net1 \
    -device virtio-net-pci,netdev=net1 \
    -cdrom admincd-amd64.iso \
    -boot d

# readlink admincd-amd64.iso 
/srv/iso/gentoo/admincd-amd64-20240324T164906Z.iso

Архив stage3 распаковал командой tar xf в директорию ./stage3

Проблема в том, что когда загрузка выполняется, там внутри

zgrep "9P" /proc/config.gz
# CONFIG_NET_9P is not set

В общем, при монтировании командой

mount -t virtiofs stage3 /mnt/stage3

dmesg говорит

virtio-fs: tag <stage3> not found

Правильно ли я понимаю, что дистроделы не учли такой вариант и не собрали как следует ядро, для работы в виртуалках?
Есть ли .iso-файл специально для установки в виртуалки?

 , virtiofs

Shushundr
()

Протестировал easy-diffusion

Галерея — Скриншоты

Easy-diffusion — это локальная программа, которая генерирует изображения посредством нейросетей. Для запуска необходимо скачать репозитарий с гитхаба — https://github.com/easydiffusion/easydiffusion — и запустить ./start.sh в директории репозитария. Далее установщик позаботится обо всем остальном и скачает все зависимости. В требованиях для запуска необходима карта Nvidia или AMD. Поддерживаются CUDA и ROCM соотвественно. Также поддерживается рендер изображений и на процессоре.

Для генерации изображения необходимо указать следующие параметры:

  1. промпт — набор слов, указывающий что конкретно необходимо сгенерировать, обязательно;
  2. отрицательный промпт — набор слов, указывающий что *не надо* генерировать; опционально, но с ним получается контролировать более точно;
  3. seed — значение, отвечающее за уникальность изображений; можно ввести вручную или выбрать автоматическую генерацию;
  4. число изображений, по умолчанию 1;
  5. модель, отвечает за стиль изображения: реалистичный. мультяшный и так далее; обязательна; обычно у модели есть одно или несколько ключевых слов для указания в промпте;
  6. лора, содержит в себе набор для генерации одного или нескольких изображений. Необязательна, но с ней можно быстрее получить нужный результат;
  7. Sampler — способ обработки;
  8. Guidance Scale — параметр, который контролирует, насколько процесс генерации изображения следует текстовой подсказке;
  9. количество шагов, собственно, указывает, сколько шагов будет уходить на генерацию изображения; больше число шагов — изображение получается более качественным, меньше — менее качественным;
  10. VAE — в основном, используется для увеличения насыщенности и яркости изображения, но иногда меняет стиль изображения;
  11. размер изображения. Обычно модель заточена под определенный размер и если размер изображения будет слишком сильно отличаться, то то и результат будет отличаться. Если размер изображения будет сильно меньше, то результатом будет нечитабельная мазня. Если не слишком сильно, то может сгенерировать только часть изображения. В случае увеличением размера изображения слишком сильно, могут появиться различные различные артефакты при генерация, например дополнительные руки и ноги. Кроме того, вырастет потребление видеопамяти;
  12. Clip Skip. Не совсем понимаю, что значит этот параметр; обычно в описании лоры указывается, надо его использовать или нет.

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

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

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

У лоры могут быть ключевые слова или слово. Может не быть. Всё зависит от конкретной лоры.

У меня алгоритм для генерации изображения обычно такой:

  1. беру модель;
  2. беру лору;
  3. беру промпт;
  4. беру отрицательный промпт;
  5. беру seed. Обычно из примера лоры, если в примере нет, то беру из какого-то другого рандомного примера;
  6. прогоняю это все для генерации через несколько моделей по одному изображению;
  7. выбираю изображение с той модели, которая мне больше всего понравилась;
  8. генерирую 100 изображений с этой моделью, лорой, промптом, сидом и отрицательным промптом;
  9. из этих 100 изображений выбираю одно подходящее.

Конкретно здесь у меня изображение со следующими настройками:

Seed: 2851093873
Dimensions: 512x768
Sampler: euler_a
Inference Steps: 30
Guidance Scale: 7
Model: bs_1500
Clip Skip: yes
Prompt: sketch, black souls, bs, masterpiece, high quality, blpioneer, 1boy, cowboy shot, covered eyes, shadow on eyes, brown hair, long blue winter coat, white scarf, outdoors, park, evening, walking, winter, hands in pockets, side view,
Lora Model: blpioneer, add_detail
Lora Strength: 0.8,0.5

>>> Просмотр (1920x1080, 841 Kb)

 , ,

vbcnthfkmnth123
()

Посоветуйте гайд по java

Форум — Development

Требования: годно, опенсорсно, чтоб я мог по нему обучить человека типа «женщина». Прямо вот чтоб «сразу в банк» не надо, скорее это для автоматизации тестирования.

 , ,

salozar
()

Не могу поморгать диодом из C

Форум — Development

Хочу поморгать диодом без библиотек. В целом сетап описан тут. Процессор STM32F030F4P6. Диод подключен, насколько я могу судить, к ноге PA4.

На текущий момент конфигурация такая:

Makefile:

CC = arm-none-eabi-gcc
AS = arm-none-eabi-as
LD = arm-none-eabi-ld
CFLAGS = -mthumb -mcpu=cortex-m0 -O0

.PHONY: all flash

all: app.bin

crt.o: crt.s

app.elf: linker.ld crt.o blink.o
	$(LD) -T linker.ld -o app.elf crt.o blink.o

app.bin: app.elf
	arm-none-eabi-objcopy -O binary $< $@

flash: app.bin
	st-flash --reset write $< 0x8000000

crt.s:

.cpu cortex-m3
.thumb

.word 0x20005000
.word _reset
.thumb_func
_reset:
  bl blink
  b .

linker.ld:

MEMORY {
  FLASH(rx): ORIGIN = 0x08000000, LENGTH = 16K
  RAM (xrw): ORIGIN = 0x20000000, LENGTH = 4K
}

blink.c:

#include <stdint.h>

const uint32_t RCC_BASE = 0x40021000;
const uint32_t GPIOA_BASE = 0x48000000;
const uint32_t RCC_AHBENR_OFFSET = 0x14;
const uint8_t RCC_AHBENR_IOPAEN_BIT = 17;
const uint32_t GPIOx_MODER_OFFSET = 0x00;
const uint8_t GPIOx_MODER_MODE4_BIT_OFFSET = 8;
const uint32_t GPIOx_ODR_OFFSET = 0x14;
const uint8_t GPIOx_ODR_OD4_BIT = 4;

void bit_clear(uint32_t address, uint8_t bit);
void bit_set(uint32_t address, uint8_t bit);
void bit_toggle(uint32_t address, uint8_t bit);

void blink(void) {
  bit_set(RCC_BASE + RCC_AHBENR_OFFSET, RCC_AHBENR_IOPAEN_BIT);
  bit_set(GPIOA_BASE + GPIOx_MODER_OFFSET, GPIOx_MODER_MODE4_BIT_OFFSET);
  bit_set(GPIOA_BASE + GPIOx_ODR_OFFSET, GPIOx_ODR_OD4_BIT);
  volatile uint32_t counter = 0;
  while (1) {
    if (counter % 0x10000 == 0) {
      bit_toggle(GPIOA_BASE + GPIOx_ODR_OFFSET, GPIOx_ODR_OD4_BIT);
    }
    counter++;
  }
}

void bit_clear(uint32_t address, uint8_t bit) {
  uint32_t mask = 1 << bit;
  volatile uint32_t *ptr = (uint32_t *) address;
  *ptr &= ~mask;
}

void bit_set(uint32_t address, uint8_t bit) {
  uint32_t mask = 1 << bit;
  volatile uint32_t *ptr = (uint32_t *) address;
  *ptr |= mask;
}

void bit_toggle(uint32_t address, uint8_t bit) {
  uint32_t mask = 1 << bit;
  volatile uint32_t *ptr = (uint32_t *) address;
  *ptr ^= mask;
}

Адреса брал из RM0360:

2.2.2 Memory map and register boundary addresses

AHB2 0x4800 0000 - 0x4800 03FF GPIOA
AHB1 0x4002 1000 - 0x4002 13FF RCC

7.4.6
Reset and clock control (RCC)
AHB peripheral clock enable register (RCC_AHBENR)
Address offset: 0x14
Bit 17: IOPAEN: I/O port A clock enable

8.4.1
GPIO port mode register (GPIOx_MODER)
Address offset:0x00
Bits 9:8 Port configuration bits
01: General purpose output mode

8.4.6
GPIO port output data register (GPIOx_ODR)
Address offset: 0x14
Bit 4: Port output databit

Насколько я понял из чтения документации:

  1. Нужно настроить регистр RCC_AHBENR и включить I/O port A.
  2. Нужно настроить регистр GPIOx_MODER и включить output mode для PA4.
  3. Для включения/выключения диода нужно менять бит GPIOx_ODR.

Возможно код на C неправильный, я его знаю плохо, пытался писать максимально просто.

На CubeMX пример с HAL копипастил, он работает, диод моргает. Ниже приведу на всякий случай:

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2023 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_4);
	HAL_Delay(100);
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}

/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);

  /*Configure GPIO pin : PA4 */
  GPIO_InitStruct.Pin = GPIO_PIN_4;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

Но я в нём ничего не понимаю, хотелось бы попроще.

 , ,

vbr
()

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

Форум — Desktop

Всем привет.

Миграция с офтопика на Debian11 LXQT проходит не так гладко как хотелось бы. Фаервол в винде сделан так, что я могу запретить там вообще все соединения. И входящие, и исходящие. А потом разрешить сетевую активность только для конкретных приложений. Например, для браузера или cli. И винда сама будет решать каким протоколам/портам/адресам давать исходящий доступ в сеть.

А на онтопике я до сих пор не поняла, как такое повторить. Запретила все соединения через nftables.conf для обеих chain-ов input и ouput:

type filter hook input priority 0; policy drop;
type filter hook output priority 0; policy drop;

Это сработало и трафик в обе стороны запрещён. После этого я пыталась найти какие то rules, чтобы разрешить трафик не на портах или IP адресах, а конкретному приложению: Firefox. И не нашла.

В качестве workaround поставила OpenSnitch. При запуске Firefox я разрешаю OpenSnitch-у пускать трафик от/к firefox. OpenSnitch отображает это временное правило у себя в GUI. Но Firefox доступа в сеть не имеет.

Я думала, что OpenSnitch сам на лету пропишет нужные rules в nftables. Но, очевидно, этого не происходит.

В итоге я не понимаю, можно ли вообще повторить в Debian то, что я делала в винде за пару кликов. И если, можно, то как? Памагите, плиз.

 , , ,

Shelly
()

Slackware. Использование нескольких версий gcc

Форум — Development

Для сборки из исходников нужны разные версии gcc. Подскажите, как-то можно установить несколько версий gcc в один дистрибутив, что бы они не конфликтовали между собой? И можно ли сделать так, что бы запускаемая программа сама выбирала нужную версию gcc?

 ,

RodoSlav
()

YOSYS и ПЛИС от GOWIN

Форум — Development

Здравствуйте. Приобрел недавно платку TangNano9k с ПЛИС от фирмы GOWIN. Захотелось что-нибудь на нее навериложить, тем более она поддерживается опенсорсным YOSYS. По традиции, начал с моргания светодиодом. Все получилось, и синтез и прошивка, все просто работает, однако, захотелось чего-то посложнее светодиода, например вывод изображения через HDMI, который уже распаян на плате. Собственно вопрос: как в YOSYS использовать специализированные блоки ПЛИС, например PLL, который необходим для HDMI?

 ,

Rupricht
()

Посоветуй-тред FPGA dev-board

Форум — Development

Давно бредю идеей сделать самопальный лептоп/терминал, но с тем особым финтом ушами, что вместо CPU у него будет FPGA. Хочу в частносити баловаться на нём самопальными forth-процессорами, но так чтобы и с клавиатурой и с монитором, а если ещё удасться запихнуть в корпус старого лептопа – будет вообще сказка.

Под это дело ищу fpga борд, на котором, как минимум и достаточно должно быть:

  • сам FPGA, и очень желательно под open source toolchain (особый плюс – работающий на маке) – Lattice?
  • какое-то кол-во RAM
  • USB-Serial подключение (это вроде есть у всех)
  • USB-Host для подключения клавиатуры, хотя конечно можно и PS/2 на коленке мутить
  • Video выход – тут тоже вопросы или просто VGA или выход под голую LCD матрицу

В теме FPGA я не в зуб ногой. Надеюсь на коллективный разум.

Из того что я пока нашёл:

  • iCEBreaker FPGA – выглядит заманчиво своей минимальностью, но надо обвешиывать и расширений не так много
  • ICEStick – ещё минимальнее, но кроме RS232 там ничего такого больше нет…

Порылся ещё на Aliexpress, нашёл какой-то Tang Nano 9K FPGA … но с китайцами связываться как-то стрёмно.

Знаю ещё про DE10-Nano и под него есть уже большое кол-во готовых процессоров (https://github.com/MiSTer-devel), но как-то 500€ под праздное баловство тоже немного жаба давит. Бюджет желательно до 100€.

TL;DR: Xilinx vs Altera vs Lattice vs (other?)

verilog vs vhdl?

Может уже что-то есть более-менее готовое под мои хотелки?

И просто пинок в правильную сторону.

 ,

beastie
()

Slackware Linux 15.0

Новости — Slackware
Группа Slackware

Патрик Фолькердинг (Patrick J. Volkerding) объявил о выпуске Slackware Linux 15.0, первой стабильной версии проекта с июля 2016 года.

Новая версия старейшего из сохранившихся дистрибутивов Linux содержит ряд новых функций, таких как PAM, elogind (заменил ConsoleKit2), PipeWire и Wayland.

Кроме того, в отличие от большинства других дистрибутивов, Slackware продолжает поддерживать 32-битную архитектуру x86.

Мы очень рады объявить о выпуске новой стабильной версии Slackware 15.0. Было слишком много изменений, чтобы даже начать описывать их здесь, но для нашей преданной пользовательской базы достаточно сказать, что вы найдете вещи современными, но при этом знакомыми.

  • Мы остановились на ядре Linux 5.15.19 (часть серии ядер 5.15.x, которая будет получать долгосрочную поддержку от разработчиков ядра).
  • Вы также получите обновлённый рабочий стол, включая KDE Plasma 25th Anniversary Edition с поддержкой сеансов Wayland.
  • Мы приняли PAM (наконец-то), поскольку необходимые проекты более не поддерживают работу с /etc/shadow напрямую.
  • Мы добавили поддержку PipeWire в качестве альтернативы PulseAudio и сессии Wayland в дополнение к X11.
  • А переход на elogin решает проблемы с ПО, которое полагается на новейшие стандарты XDG.

Скачать: slackware64-15.0-install-dvd.iso (3605 МБ), slackware-15.0-install-dvd.iso (3736 МБ).

>>> Полное объявление о выпуске

>>> Официальный сайт

>>> Подробности (distrowatch)

 ,

anonymous
()

Бубен, чтобы задабривать технологических Богов

Галерея — Рабочие места

Как Джедаи собирают себе световой меч, так и ИТшники (не только админы, но и разрабы с инженерами) должны следовать древним традициям! Налицо тенденция забвения древних традиций, и сегодня чаще помнят о корнях только бородатые стареющие олды... на днях я решил немного исправить статистику по этим делам, и таки забацал этот Артефакт. Получилось не сразу, Боги приняли моё жертвоприношение со второй попытки. На таинство было пожертвовано:

- лицушный DVD Microsoft Windows 8.1 Pro x64;

- лицушный DVD Astra Linux CE Орёл x64;

- 24 дискеты стандарта 3.5 дюйма с сертификатами и цифровыми подписями (нужны только металлические ступицы, которые будут образовывать двойные музыкальные колокольчики);

- 12 болтов М4 на 30 мм (на фото 45 мм из первой попытки, такие будут слишком длинные);

- 36 гаек с фланцем (для фиксации болтов к дискам);

- 12 стандартных гаек (регулировка хода колокольчиков, потому что они там расположены внахлёст);

- 48 шайб.

Вроде задобрил, вроде получилось). Все гайки слегка прокапал моментальным прозрачным клеем - разобрать можно, но само точно не открутится. Для ровного сверления отверстий использовал бумажный шаблон, который наклеивал на водорастворимый клей. Полминуты под струёй воды, и диск чистый.

Как оно работает? Линь лечит компы, вдохновляет кодера на аккуратный и читабельный код, повышает настроение, очищает печень пользователя от шлаков, уводит «всяких сущностей в виде гномиков»(С) и творит прочие крайне сомнительные чудеса. Винда - отпугивает злых духов, насылает порчу на супостатов, помогает добыть огонь (когда задница бомбить начинает). Подойдёт даже новичкам, тут достаточно постучать в нужную сторону ладонью. Продвинутые знают как использовать всю мощь Артефакта, годится в качестве метательного орудия (оно тяжёленькое). Rinaldus, готово;).

>>> Просмотр (3270x5100, 2783 Kb)

 , , , ,

NeTC
()