Среда программирования Algorithm Builder — GetChip.net
Если две предыдущие программы я рекомендовал как оптимальный вариант для начала работы с электроникой вообще и микроконтроллерами в частности, то эта программа лишь мое личное предпочтение и честно говоря, для повторения конструкций с этого ресурса она Вам не понадобится. Но не упомянуть приятную во всех отношениях программу я не могу.
Данная статья лишь ознакомительный обзор программы, на которой будет написано большинство проектов этого блога и не в коей мере не должна рассматриваться как реклама или рекомендация к использованию этой среды программирования.
Автор программы Геннадий Громов.
Сайт программы www.algrom.net
Итак что имеет Algorithm Builder в своем арсенале?
Полный цикл разработки. Algorithm Builder предназначен для производства полного цикла разработки начиная от ввода алгоритма, включая процесс отладки и заканчивая программированием кристалла.
Algorithm Builder довольно нетрадиционная программа в плане языка программирования. Автор немного лукавит, называя программу Построителем Алгоритмов. На самом деле, алгоритма, в привычном понимании этого слова, нет. Есть ассемблер, завернутый в красивую обертку визуального программирования. Правильнее было бы назвать программу – визуальный ассемблер или построитель ассемблера. А раз это ассемблер то Вы получите на выходе максимально эффективный код.
Работа с переменными и константами организована гениально просто. Инициализация производиться в отдельном окне в виде таблицы – освобождая алгоритм от лишних записей. В буквальном смысле слова все разложено по полочкам. Удобно иметь в любой момент под рукой перечень всех переменных и констант.
Настройщик периферии. Algorithm Builder имеет удобный настройщик периферии (таймеры, UART, ADC, SPI и т.д.) позволяющий, не читая даташитов, просто выбрать необходимые параметры работы устройства в окне настройки. В этом же окне Билдер честно покажет набор инструкций, обеспечивающих эти параметры.
Переходы осуществляются в программе очень наглядно – вектором. Если нужно перейти по условию в какую либо точку программы – просто проведите вектор в эту точку. Это освобождает программу от бесчисленных имен меток, которые в классическом ассемблере являются неизбежным балластом. Переходы по именованным меткам так же возможны.
Внутрисхемное программирование кристалла. При использовании внутрисхемного программатора микроконтроллер подключается к COM порту компьютера через несложный адаптер (три диода и несколько резисторов).Также есть вариант USB подключения. Программатор ведет подсчет числа перепрограммирований кристалла, сохраняя счетчик непосредственно в кристалле. Процесс программирования кристалла очень прост — в два «тыка».
Мониторная отладка на кристалле. Algorithm Builder обеспечивает мониторную отладку на кристалле (On Chip debug) которая позволяет наблюдать содержимое реального кристалла в заданной точке останова.
Так почему такая хорошая программа так малоизвестна?
Первая причина — программа до 2010 года была платной. Бесплатная демоверсия имела полную функциональность, но ограничивала код откомпилированной программы до 2 килобайт. В 2010 году автор программы сделал новогодний подарок – версия 5.43 вышла свободной от ограничений.
Жаль, конечно – программа действительно интересна.
Выводы:
Ассемблерщики при переходе на Algorithm Builder будут писать кипятком, так как они будут иметь все тот же ассемблер, но управляться им станет на порядок легче и наглядней. Одно плохо – придется распрощаться с наработанными библиотеками и писать новые.
Сишникам однозначно Билдер не понравится, так как придется опускаться до уровня ассемблера, а какому сишнику понравится возюкаться с регистрами.
В общем, конечно, выводы получились неоднозначные. Думайте сами… 🙂
Программа имеет мануал, написанный в форме обучающей статьи. В мануале рассмотрено создание простого проекта – вольтметра, даны схемы программаторов COM и USB. Скачать версию без ограничений можно здесь
AB544.exe (207926 Загрузок)
Кому интересно посмотреть мануал, а устанавливать программу лениво – вот выкладываю его отдельно
manual.pdf (207738 Загрузок)Программа активно развивается, поэтому смотрите свежие версии на сайте программы www.algrom.net. Кроме того, там же есть небольшая подборка библиотек.
P.S. Программа портативная. Тесть после установки папку с программой скидываем на флешку и работаем с нее.
(Visited 25 512 times, 1 visits today)
Основы работы в Algorithm Builder
Очень часто на радиолюбительских форумах я встречал горячие споры об эффективности написания программ для микроконтроллеров. Суть споров – на каком языке писать? С одной стороны приверженцы языков высокого уровня (Си, Паскаль, Баском и пр.), с другой, конечно же, писатели на ассемблере. Как всегда истина где-то посредине, и моё твёрдое мнение таково – ассемблер нужно знать обязательно, так как, не зная его, невозможно понять внутреннюю архитектуру микроконтроллера, суть происходящих процессов. А вот на чём писать – каждый выбирает для себя сам, и это исходит, прежде всего, из поставленной задачи. В этой статье я вкратце опишу процесс написания программы на ассемблере, используя графическую среду для разработки программного обеспечения для микроконтроллеров с архитектурой AVR фирмы ATMEL под названием Algorithm Builder. Разработала эту софтину группа российских товарищей под руководством небезызвестного Геннадия Громова, за что ему честь и хвала, а также наше эмбеддерское спасибо. Мнений об Algorithm Builder (далее по тексту AB) в инернете великое множество: от восторженных воплей до холодных порицаний. Лично мне AB очень нравится – процесс написания кода до предела ясный и вся программа очень наглядно смотрится, хотя это утверждение относиться к написанию небольших программ, до 1 – 2 –х килобайт. Повторюсь – это моё личное мнение. Программа в AB – это обычная программа на ассемблере, но мнемоники в ней заменяются на графические элементы, а векторные переходы (условные, безусловные, возврат из подпрограммы и пр.) – на визуальные связи (просто стрелки). Таким образом, разработка кода сводится к размещению на плоскости графических элементов и установлению между ними векторных связей из условных и безусловных переходов. Ну, это всё преамбула, переходим к практике. Заходим на страницу AB и качаем установочный файл. Отмечу, что с недавнего времени все ограничения в размере кода сняты (раньше размер разрабатываемой программы в свободной версии AB ограничивался 2к). Устанавливаем программу обычным образом на свой компьютер. Открываем главное окно.
Ничего особенного или свехоригинального: те же «Файл», «Отображение», «Редактировать» и пр. Кликните по значку «?» – здесь есть мануал по работе с AB, и, если Вы собираетесь работать в этой среде, то сразу распечатайте себе сей документ и внимательно прочитайте – написано всё до предела ясно. ?так, начинаем креатив. Для того, чтобы не создавать очередной «Hello, world», я решил совместить приятное с полезным. Часто в автомобильных поездках приходится сталкиваться с проблемой подзарядки мобильников или нетбука. Да ещё и мобильники у меня, жены и детей все разные (ну у каждого же свой вкус:)). Поэтому, чем плодить массу различных DC-DC адаптеров под каждое зарядное устройство, лучше сделать универсальный инвертор DC(12 В) – AC(220 В) и использовать штатные зарядные устройства. В качестве «сердца» инвертора я применил завалявшийся невесть где ATtiny15. На рисунке представлена схема устройства:
Контроллер формирует меандр 50 Гц и поочерёдно подаёт его в каждое плечо двухтактного усилителя мощности, выполненного на полевых транзисторах. Нагрузкой усилителя служит первичная обмотка обыкновенного советского накального трансформатора серии ТН – в данной конструкции он служит повышающим трансформатором. Трансформатор может быть любой, хоть самодельный, с двумя обмотками по 12 В, или одной 24 В с отводом посредине, с допустимым током, рассчитанным под Вашу нагрузку. В цепи затворов полевиков введены конденсаторы, которые обеспечивают быстрое их открытие. В 220-ти вольтовой обмотке трансформатора добавлен конденсатор, который шунтирует высокочастотную составляющую, возникающую в результате переходных процессов в индуктивности обмотки и резистор, разряжающий этот конденсатор. Цепь питания микроконтроллера стандартна до безобразия. В общем, мне кажется, по схеме вопросов быть не должно. Возвращаемся к софту. В главном окне AB щёлкаем «Файл» — «Новый». Создаём новый файл, сохраняем его под каким-нибудь именем (лучше латиницей) в заранее созданную папку – всё стандартно, как в любом редакторе. На открывшемся поле наблюдаем следующее: по умолчанию создался элемент «V» (вершина блока) и под ней пустая операция NOP. Затем щёлкаем «Опции» — «Опции проекта» и выбираем тип кристалла, тактовую частоту и др.
После этого производим непосредственно ввод кода. Небольшое отступление… Я не буду рассказывать здесь назначение элементов AB и порядок их редактирования. Любители, работавшие с микроконтроллерами и знающие их хоть немного, разберутся сами, используя вышеуказанный манул… После набора моя программа имеет следующий вид. ?меться два блока операторов, начинающиеся элементом «V» — «Вершина блока» и озаглавленные соответственно RESET и Timer_0_Overflow. То есть наборы операндов обработчиков прерываний, сброса и переполнения таймера 0. Записи типа «$FF -> DDRB» добавляются кнопкой «F» — элемент «Поле» и вводятся с помощью клавиатуры. Знак стрелки «->» — левая верхняя клавиша клавиатуры «ё» (под ESC). Серые прямоугольники, подписанные элементами периферии, добавляются с помощью кнопки «S» — элемент «Настройщик управляющих регистров». В нём (Настройщике) простой отметкой необходимых галочек настраивается работа соответствующего модуля периферии, а справа отображается элементарные операции, которые при этом выполняются. Вертикальная линия, куда упирается вектор безусловного перехода, — это метка, создаётся с помощью кнопки «L» — элемент «Метка». Стрелки переходов – кнопка «J» — элемент «Переход». Ещё есть кнопка «C» — «Условный переход» и кнопка «T» — «Текст», но в своём примере я их не использовал. Подведя курсор к любой строке можно наблюдать всплывающее окно, в котором указаны наборы элементарных операндов и описание используемых регистров. Откомпилируем проект, нажав кнопку «Компилировать». Если всё сделано правильно, вылезет окно с результатами компиляции.
Ещё AB имеет встроенный симулятор и программатор. Симулятор (кстати, удобнейшая штука!) запускается кнопкой «Запуск с симулятором». В режиме симулятора кнопкой «Открыть» можно пооткрывать различные окна, отображающие всю периферию: регистры, ОЗУ, таймеры и пр., и наблюдать изменения в регистрах и ячейках памяти.
Симулировать можно пошагово, с заходом в функции и без такового, а также выполнять до точки останова и до выделенного. В общем, всё как и в большинстве подобных программ. Записать код в кристалл можно используя встроенный программатор. Для этого нужно собрать простейший адаптер для COM-порта, состоящий из трёх диодов и семи резисторов. А можно прошить, используя любой имеющийся у Вас в наличии программатор, ведь после компиляции в папке проекта пропишется hex-файл. Пару слов о самой программе.
RESET (После сброса) — Стек инициализировать не нужно, т.к. в семействе ATtiny1x он аппаратный. 1) Переводим порт В на выход. 2) Корректируем рабочую частоту микроконтроллера записью числа в регистр OSCCAL. (Значение этого числа удобно определять с помощью программатора AVRISP mkII. Коннектимся в AVRStudio и на соответствующей вкладке считываем это значение.) 3) Записываем в счётный регистр таймера 0 начальное значение счёта, чтобы переполнение происходило через 10 мс (одна полуволна). 4) В порт В записываем начальное значение (единицы на паре управляющих одним из полевиков выходах). 5) Настраиваем и запускаем таймер 0 с коэффициентом деления 64. 6) Разрешаем прерывание таймера 0 при переполнении. 7) Разрешаем прерывания контроллера. 8)Пустой бесконечный цикл в ожидании прерывания таймера 0.
Timer_0_Overflow (переполнение таймера 0). 1) Переключаем управляющий сигнал с одного входа полевика на другой, посредством операции ?СКЛЮЧАЕЩЕЕ ?Л?. 2) Обновляем начальное значение счёта таймера 0. 3) Выходим из функции обработчика прерывания.
Сборка описанного инвертора подтвердила его полную работоспособность. Для подтверждения вышеуказанного были одновременно заряжены два мобильных телефона. В этом режиме при напряжении АКБ 13,6 В, напряжение на выходе было 215 В при токах 800 мА и 40 мА соответственно. Таким образом КПД составил около 80 %, что вполне неплохо. Пусть Вас не пугает, что вместо синусоиды на выходе имеем меандр. Абсолютное большинство современных зарядок импульсные, а им всё равно – синус или меандр. Да и другие, неиндуктивные нагрузки, можно запитывать меандром. В своём случае я применил в качестве выходного ТН-36 220/50. Он рассчитан на ток 1,2 А в накальных обмотках. Для моей задачи вполне достаточно. Если поставить ТН-61, то можно получить на выходе до 120 Вт, но силовые транзисторы, возможно, придётся поставить на радиаторы. Также по своему усмотрению можно добавить индикаторы наличия 12 В на входе и 220 В на выходе (на схеме я их не показал). Кроме того, возможно применение 400-герцовых трансформаторов (в этом случае уменьшатся габариты устройства), т.к 50-ти герцовые трансформаторы в 400-герцовой сети работают нормально, а вот наоборот не получится. Фото готового устройства пока не выкладываю, т.к. не нашёл подходящий корпус.
Вывод: с помощью простейшего микроконтроллера можно сделать такое полезное устройство, написав при этом 33 слова кода.
UPLOAD за 19.02.2013г. Наш коллега Дмитрий не зажлобился 🙂 и поделился тестовой библиотекой для работы с ЖК? на АБ. Принимайте, товарищи и задавайте ему вопросы.
Простейшая программа для AVR — Меандр — занимательная электроника
Первое, что хочется сделать после сборки программатора это помигать светодиодиком. В этой статье я подробно опишу, как написать такую простенькую программку и расскажу как она работает.
Для начала я познакомлю Вас со средой программирования Algorithm Builder, которая на мой взгляд очень удобна для написания программ на языке ассемблер. Скачать её можно на сайте автора. Она полностью бесплатна. Далее установите её и после того, как установили, откройте её и появится вот такое окно:
Эта программа является хорошей графической средой программирования на ассемблере. В отличии от классического ассемблера здесь пишется не сам код программы на ассемблере, а рисуется алгоритм работы этой программы, а компилятор при компиляции сам составит и скомпилирует код. Инструкций по работе с программой давать не буду – основы работы с ней описаны в родном руководстве на русском языке. Для того, чтобы открыть руководство по программе нужно нажать на знак вопроса, который находится на верху программы и нажать на пункт “manual.pdf”. В руководстве всё отлично расписано и даже есть пример вольтметра.
Теперь перейдем к нашей программке, которая будет мигать светодиодом. Для начала разберём алгоритм работы программы. Для того, чтобы помигать светодиодом нужно его подключить к какому-либо порту ввода-вывода микроконтроллера. Что же такое порты ввода-вывода? Порты ввода-вывода (далее порты в/в) это выводы микроконтроллера, состоянием которых можно управлять из программы, прошитой в мк. Они могут быть в трёх состояниях:
- Высокий уровень – логическая единица (это состояние вывода, при котором порт в/в подключён напряжению питания, то есть на этом выводе уровень напряжения, равный напряжению питания)
- Низкий уровень – логический ноль ( в этом состоянии порт в/в подключён напрямую к земле (минусу питания) и напряжение на нём равно 0 Вольт)
- Высокоомное HI-Z состояние (в этом состоянии ножка не подключена ни к чему т.е на ней не 0 и не 1)
Эти порты есть у каждого микроконтроллера AVR и почти все выводы контроллера (кроме земли и питания) могут работать в режиме порта в/в. А теперь откроем даташит на микроконтроллер, и посмотрим где же у него располагаются эти сами порты в/в. Для примера будем использовать микроконтроллер ATmega16. Итак, заходи на atmel.com, находим даташит на ATmega16 и открываем его. Далее идём на вторую страницу документа и видим там распиновку микроконтроллера в разных корпусах. Нас интересует распиновка контроллера в DIP корпусе. Вот она:
Видите выводы PD1,2,3 PC1,2,3, и т.д.? Вот это и есть порты в/в. Например, PC0 расшифровывается как Port C 0. Как видно, у данного микроконтроллера 4 порта в/в и каждый из них имеет по 8 выводов, значит всего в нашем распоряжении 32 ножки.
Теперь раздерём как эти выводы настраиваются и как с ними работать. Порты в/в можно настроить на вход или на выход. Делается это установкой соответствующих бит в регистре DDR (Data Direction Register – регистр направления порта в/в). Для каждого порта есть свой регистр DDR. Именуются они так: в начале идёт префикс DDR, а после него имя порта. Например, для порта A регистр будет называться DDRA. Также есть ещё регистры PORT и PIN, но о них позже. Регистр состоит из 8-ми бит, которые соответствуют ножке, например, бит 0 в регистре DDRA будет определять направление вывода PA0. Если записать в этот бит 1, то вывод PA1 будет портом вывода т.е. выходом, а если записать 0 – входом.
Итак, создадим уже наконец новый проект в Algorithm Builder и настроим вывод PA0 в режим выхода. Для этого, как я и говорил нужно записать в 0 бит регистра DDRA единицу. Для начала настроим наш проект. Заходим в опции проекта и указываем микроконтроллер и тактовую частоту в герцах (в нашем случае это 8000000 Гц = 8 мГц):
Нажимаем применить и начинаем рисовать алгоритм. Как я уже говорил нужно в бит 0 регистра DDRA записать 1. Делается это вот так:
Чёрточка, которая находится наверху – это вершина блока с алгоритмом (элемент Vertex). Разберём команду, которую я написал. DDRA.0 означает, что мы записываем в регистр DDRA, бит 0, а 1 -> — записываем единицу. Проще говоря, записываем единицу в 0 бит регистра DDRA.
Порт на выход мы настроили, теперь нужно записать в него единичку, тем самым зажечь светодиод. Чтобы записать единицу в порт, нужно записать единицу в регистр PORT. Именуется он также, как и DDR т.е. порту А соответствует регистр PORTA. Запишем в 0 бит порта A единичку:
Скомпилируем программу, нажав в верхнем меню Программа -> Компилировать. Если в нашем алгоритме нет ошибок, программа скомпилируется и вылезет вот такое окошко:
Как видно, программа занимает в памяти контроллера 2 слова. 1 слово – это 2 байта, значит наша программа занимает 4 байта. Теперь при помощи программатора загрузим нашу прогу в мк и подключим светодиод к порту A0 через резистор, сопротивлением 330 ом. Светодиод будет непрерывно гореть.
Далее давайте заставим светодиод не просто гореть, а мигать! Для этого нужно добавить ещё пару строк кода. Итак, продолжим. Чтобы потушить светодиод, нужно подать 0 на вывод PA0. Это делается точно также, как и запись единицы, но записываем мы 0:
Если сейчас скомпилить программу и зашить её в контроллер, то светодиод то мигать будет, но с бешеной скоростью, поэтому нам будет казаться, что он горит. Для того, чтобы снизить скорость мигания, нужно ввести какую-либо задержку между подачей 0 и 1. Проще всего реализовать её так: мы загружаем в три рабочих регистра (кстати, забыл упомянуть, что рабочие регистры – это, можно сказать, ячейки, в которые можно загрузить переменные. Это могут быть какие-нибудь числа или же буквы. В AVR есть 32 8-и разрядных регистра, значит в каждый из них можно загрузить по одному байту т.е. число от 0 до 255 или одну букву) r16, r17, r18 числа, а потом вычитаем их оттуда. Пока не появится 0, как только в регистре появится 0, переходим к разорению следующего регистра 🙂 и т.д., пока не опустошим все. Суть этой задержки в том, чтобы занять процессор бесполезной работой и потратить на это время. Для этой задержки мы создадим подпрограмму, которую можно будет вызывать между записью 1 и 0 в порт, а не прописывать каждый раз. Для этого сначала нужно инициализировать стек – ОЗУ. О стеке и о подпрограммах я расскажу позже, а сейчас напишем нашу подпрограмму:
Подпрограмма Delay – это и есть наша задержка. r16– означает, что мы вычитаем 1 из регистра 16, а стрелочки и -= означает, что если результат не равен нулю мы переходим по метке. Стрелочка указывает на метку. Это называется условный переход т.е. переход при каком-то условии. А теперь разберём основную программу. Между подачей 1 и 0 я написал Delay, это означает, что в этом месте мы подключаем нашу подпрограмму. А стрелочка – это безусловный переход, то есть переход произойдёт вне зависимости от чего-либо. Если сейчас прошить эту программу в мк, то светодиод опят-же будет лишь гореть т.к. мы ещё не инициализировали стек. Стек можно инициализировать с помощью настройщика. Для этого нажимаем на эту кнопочку:
Далее в появившемся меню выбираем “Stack Pointer (SP) и появится вот такое окно:
Ставим галочку и нажимаем ОК. Теперь в начале программы появится такой блок:
Это так называемый блок настройки периферии. Таким-же образом можно настроить и другую периферию, например, АЦП.
Всё компилируем программу и светодиод замигает! Кстати, о зашивке программы. После компиляции в папке с проектом появятся ещё 2 файла: один из них называется также, как и сам проект, а ко второму добавлено _EE. Первый файл нужно прошивать во flash память микроконтроллера, а второй не трогать вовсе.
Удачи Вам в прошивке!
Скачать архив с проектом.
C++ Builder — Обучалка C++Builder
Бурное развитие информационных технологий, без которых немыслимо современное человечество, привело к созданию систем программирования обеспечивающих быструю разработку приложений для самой распространенной операционной системы Windows. К таким системам программирования относятся Visual Basic, Delphi, C++Builder. Системы быстрой разработки основываются на технологии визуального проектирования и событийного программирования. Программирование в подобных системах сводится в основном к наглядному строительству приложения из готовых компонентов, которые содержит сама среда и к написанию функций обработки тех или иных событий, на которые способна реагировать Windows. У программиста высвобождается масса времени из-за того, что среда автоматически генерирует большую часть программного кода. Это время можно употребить на творчество в логике программы – следовательно, сделать приложение более полезным и интересным.
Предлагаемое учебное пособие поможет новичку уверенно сделать первые шаги в визуальном объектно-ориентированном программировании в среде C++Builder. Английское Builder означает – строитель, созидатель. На протяжении всех уроков обучение построено на основе практических примеров по созданию приложений для Windows. В пособии предлагаются простые алгоритмы, требующие написания минимального программного кода, дабы не оттолкнуть начинающего.
В конце сайта в довесок открыл разделы по Visual Basic, Delphi, Android Studio и Sketchware. Сейчас работаю над разделами WeDo_2.0 и Arduino.
В.М. Коробицин
Урок 1 Знакомство со средой программирования Borland C++ Builder. Компоненты: форма, поле вывода текста, образ, электронная кнопка и их свойства. Событие и функция обработки события. Компиляция проекта
Урок 2 Мультимедийное приложение. Компонент проигрыватель мультимедиа и его свойства
Урок 3 Простейший графический редактор. Реакция приложения на различные кнопки мыши. Построение системы меню
Урок 4 Программа для просмотра изображений
Урок 5 Простейшие приемы построения анимации. Компонент таймер и его свойства
Урок 6 Извлечение из компьютера системного времени и даты. Назначение клавиш. Экранная заставка для Windows
Урок 7 Построение многооконных приложений для Windows. Календарь. Генератор звуковых волн
Урок 8 Приложение с окном произвольной формы. Обнаружение некоторых характеристик компьютера
Урок 9 Создание, запись, чтение и печать текстовых файлов. Компонент: поле редактирования текста Memo
Урок 10 Случайные числа. Создание и обработка одномерных массивов
Урок 11 Многомерные массивы и их обработка. Компонент: поле ввода-редактирования строки символов Edit. Квадратная матрица и закономерности расположения ее элементов
Урок 12 Генератор квадратных уравнений. Калькулятор квадратных уравнений
Урок 13 Вычисление определенного интеграла методом прямоугольников и методом трапеций
Урок 14 Магические числа. Ряд Фибоначчи
Урок 15 Работа со строками. Англо-русский и русско-английский словарь
Справочник
Кладовка
Просьба позвонить или написать автору сайта на вацап по номеру +79230391839 постоянных посетителей сайта из приведенных ниже регионов. Выборка сделана для посетителей которые побывали на сайте более десяти раз.
Россия → Нижегородская область → Нижний Новгород
Россия → Ярославская область → Ярославль
Россия → Ростовская область → Батайск
Россия → Калужская область → Обнинск
Россия → Новосибирская область → Новосибирск
Россия → Краснодарский край → Новороссийск
Россия → Липецкая область → Липецк
Россия → Свердловская область → Екатеринбург
Россия → Алтайский край → Барнаул
Россия → Амурская область → Благовещенск
Россия → Санкт-Петербург и Ленинградская область → Санкт-Петербург
Россия → Москва и Московская область → Химки
Россия → Москва и Московская область → Мытищи
Россия → Москва и Московская область → Москвa
Россия → Москва и Московская область → Кубинка
Россия → Москва и Московская область → Балашиха
Россия → Москва и Московская область → Фрязино
Россия → Москва и Московская область → Краснознаменск
Россия → Москва и Московская область → Одинцово
Россия → Москва и Московская область → Клин
Россия → Тверская область → Тверь
Россия → Республика Башкортостан → Уфа
Россия → Тверская область → Кимры
Россия → Республика Татарстан → Казань
Россия → Нижегородская область
Россия → Рязанская область → Рязань
Россия → Республика Тыва → Кызыл
Россия → Ханты-Мансийский автономный округ — Югра → Сургут
Россия → Республика Татарстан → Нижнекамск
Россия → Костромская область → Кострома
Россия → Брянская область → Брянск
Россия → Кемеровская область (Кузбасс) → Кемерово
Россия → Белгородская область → Белгород
Россия → Ростовская область → Таганрог
Россия → Хабаровский край → Хабаровск
Россия → Удмуртская Республика → Ижевск
Россия → Ростовская область → Батайск
Россия → Курская область → Курск
Россия → Тульская область → Тула
Россия → Республика Татарстан → Набережные Челны
Россия → Краснодарский край → Краснодар
Россия → Пензенская область → Пенза
Россия → Псковская область → Псков
Россия → Вологодская область → Вологда
Россия → Калининградская область → Калининград
Россия → Воронежская область → Воронеж
Россия → Пермский край → Пермь
Россия → Омская область → Омск
Россия → Челябинская область → Челябинск
Россия → Челябинская область → Озёрск
Россия → Забайкальский край → Чита
Россия → Иркутская область → Иркутск
Россия → Саратовская область → Саратов
Россия → Самарская область → Самара
Россия → Ульяновская область → Ульяновск
Россия → Ставропольский край → Пятигорск
Россия → Ростовская область → Ростов-на-Дону
Россия → Кабардино-Балкарская Республика → Нальчик
Россия → Республика Дагестан → Дербент
Россия → Воронежская область → Воронеж
Россия → Томская область → Томск
Россия → Орловская область → Орёл
Россия → Республика Саха (Якутия) → Якутск
США → Штат Огайо
США → Штат Айдахо
США → Округ Колумбия → Вашингтон
США → Штат Невада → Лас-Вегас
США → Штат Джорджия → Атланта
США → Штат Оклахома
США → Штат Огайо → Колумбус
США → Штат Нью-Джерси → Клифтон
США → Штат Нью-Йорк → Нью-Йорк
США → Штат Невада → Невада
США → Штат Вирджиния → Ашберн
США → Штат Флорида → Оранж Парк
США → Штат Флорида → Сарасота
США → Штат Флорида → Пенсакола
США → Штат Нью-Джерси → Трентон
США → Штат Миннесота → Фэрибо
США → Штат Калифорния → Фримонт
США → Штат Айова → Каунсил Блаффс
США → Штат Нью-Йорк → Буффало
США → Штат Оклахома → Винита
США → Штат Орегон → Даллс
США → Штат Нью-Джерси
Беларусь → Витебская область → Витебск
Беларусь → Брестская область → Брест
Беларусь → Минская область → Минск
Беларусь → Могилёвская область → Могилёв
Беларусь → Гомельская область
Беларусь → Гомельская область → Гомель
Казахстан → Мангистауская область → Актау
Казахстан → Акмолинская область → Кокшетау
Казахстан → Костанайская область → Костанай
Казахстан → Алматинская область → Алматы
Казахстан → Акмолинская область → Нур-Султан
Казахстан → Кызылординская область → Кызылорда
Германия → Берлин
Германия → Гессен
Германия → Гессен → Идштайн
Германия → Гессен → Франкфурт-на-Майне
Германия → Баден-Вюртемберг → Штутгарт
Германия → Северный Рейн → Вестфалия
Германия → Северный Рейн-Вестфалия → Варендорф
Германия → Баден-Вюртемберг → Карлсруэ
Германия → Саар → Саарлуис
Германия → Гессен → Ной-Изенбург
Германия → Нижняя Саксония → Бад-Бевензен
Германия → Шлезвиг-Гольштейн → Киль
Германия → Свободный и ганзейский город Гамбург
Германия → Нижняя Саксония → Ганновер
Германия → Нижняя Саксония → Пайне
Германия → Баден-Вюртемберг → Мангейм
Германия → Свободное государство Саксония
Германия → Нижняя Саксония → Вольфсбург
Германия → Вольный ганзейский город Бремен → Бремен
Германия → Рейнланд-Пфальц
Германия → Нижняя Саксония → Эдевехт
Германия → Нижняя Саксония
Германия → Нижняя Саксония → Лангенхаген
Германия → Нижняя Саксония → Гёттинген
Украина → Харьковская область → Харьков
Украина → Донецкая область → Славянск
Украина → Донецкая область → Енакиево
Украина → Львовская область → Львов
Украина → Донецкая область → Донецк
Украина → Донецкая область → Бахмут
Украина → Черновицкая область → Новоселица
Украина → Днепропетровская область → Никополь
Украина → Киевская область → Киев
Украина → Тернопольская область → Тернополь
Украина → Луганская область → Луганск
Украина → Винницкая область → Винница
Украина → Одесская область → Одесса
Украина → Черновицкая область → Черновцы
Украина → Сумская область → Конотоп
Украина → Ивано-Франковская область → Надворная
Украина → Донецкая область → Енакиево
Украина → Донецкая область → Краматорск
Украина → Запорожская область → Запорожье
Украина → Николаевская область → Николаев
Украина → Житомирская область → Новоград-Волынский
Таджикистан → Душанбе
Узбекистан → Ташкент
Молдова → Левобережье Днестра → Тирасполь
Грузия → Тбилиси
Киргизия → Бишкек
Латвия → Рига
Литва → Вильнюсский уезд → Вильнюс
Турция → Провинция Анталья → Аланья
Эстония → Харьюмаа
Алжир
Швеция
Швеция → Лен Стокгольм
Финляндия → Уусимаа → Хельсинки
Финляндия → Уусимаа
Финляндия → Пирканмаа → Тампере
Нидерланды → Северная Голландия → Амстердам
Нидерланды → Провинция Гронинген
Чехия → Прага
Чехия → Южноморавский край → Брно
Чехия → Южноморавский край → Моравски-Крумлов
Сингапур → Сингапур
Польша → Мазовецкое воеводство → Варшава
Польша → Нижнесилезское воеводство → Легница
Польша → Великопольское воеводство → Познань
Польша → Подкарпатское воеводство → Ярослав
Польша → Малопольское воеводство → Тарнув
Польша → Силезское воеводство → Катовице
Польша → Мазовецкое воеводство → Радом
Польша → Куявско-Поморское воеводство → Быдгощ
Польша → Нижнесилезское воеводство → Вроцлав
Болгария → Шуменская область → Шумен
Япония → Префектура Айти → Цусима
Греция → Центральная Македония → Салоники
Греция → Фессалия → Ларисса
Греция → Крит → Ираклион
Швейцария → Кантон Цюрих
Швейцария → Кантон Женева → Женева
Швейцария → Кантон Цюрих → Винтертур
Словакия → Нитранский край
Турция → Провинция Стамбул → Стамбул
Китай → Хайнань
Китай → Пекин
Китай → Ляонин → Фусинь
Китай → Тяньцзинь
Китай → Шанхай
Бангладеш → Область Раджшахи → Ишварди
Вьетнам → Ханой
Испания → Каталония
Испания → Андалусия
Великобритания → Лондон
Великобритания → Графство Суррей
Великобритания → Графство Дорсет → Борнмут
Ирландия → Графство Дублин → Дублин
Венесуэла → Штат Боливар → Пуэрто-Ордас
Канада → Провинция Квебек
Канада → Провинция Онтарио → Гамильтон
Канада → Провинция Онтарио → Торонто
Канада → Провинция Квебек → Лонгёй
Франция → Приморские Альпы → Антиб
Франция → Париж
Франция → Буш-дю-Рон → Марсель
Франция → Верхний Рейн → Мюлуз
Израиль → Тель-Авивский АО → Тель-Авив
Израиль → Центральный АО → Нетания
Венгрия → Зала → Залаэгерсег
Сингапур → Сингапур
Австралия → Новый Южный Уэльс → Сидней
Австралия → Австралийская столичная территория → Канберра
Италия → Пьемонт → Турин
Италия → Кампания → Неаполь
Текстуры. Урок 13 курса «Введение в Blender»
Текстуры в Blender позволяют делать материалы более реалистичными, более похожими на вещества, из которых состоят объекты реального мира. Кроме того, с их помощью можно накладывать готовые изображения на поверхности, создавать рельефные карты и др.
В случае mesh-объектов текстура применяется как бы поверх материала. Здесь нельзя использовать текстуру, не привязав к объекту материал. С другой стороны, с материалом может быть связано несколько текстур. Каждая из них окажет свой эффект на совокупный результат.
Настройки текстур в Blender еще многообразнее, чем материалов. Для более полного освещения этой темы требуется отдельный курс. В данном уроке рассматриваются некоторые моменты работы с текстурами.
В Blender 2.80 работа с текстурами, также как с материалами, претерпела изменения. Текстуры теперь нельзя просто создать и применить к объекту через вкладку Texture редактора Properties. Придется освоить работу еще как минимум в одном редакторе Blender. Это будет Shader Editor – редактор шейдеров.
Разобьем область 3D Viewport по вертикали на две части и в одну загрузим Shader Editor.
В этом редакторе масштабирование, перемещение (при зажатых шифте и колесе мыши) работают также как в 3D Viewport.
Если объекту добавлен материал, то у него уже будут две ноды. Настройки основной, в данном случае Principled BSDF, дублируются на вкладке материалов, если не выключать там кнопку Use Nodes.
У нод есть сокеты – маленькие точки по бокам. Через них происходит соединение нод. Так одна нода оказывает влияние на какое-то свойство другой. Если мы хотим добавить текстуру, нам нужна нода с текстурой. Добавить ее можно через меню заголовка Add → Texture → … . Также работает Shift + A.
Добавим Brick Texture и соединим ноду со свойством Base Color основной ноды. Мы как бы заменяем цвет на текстуру. Чтобы увидеть эффект в 3D Viewport, не забываем в нем переключиться на затенение Rendered (Z → 8).
У ноды Brick Texture много настроек, которые позволяют гибко менять текстуру. Однако здесь нельзя сделать так, чтобы кирпичи были со всех сторон куба.
Для этого нужно добавить еще одну ноду – Add → Input → Texture Coordinate. В данном случае соединим ее сокет UV с сокетом Vector в Brick Texture.
Рассмотрим ноду Image Texture – наложение на поверхность собственной картинки.
Исходно в ноде Image Texture есть кнопки New и Open. С помощью последней загружается готовое изображение. После этого заголовок Image Texture меняется на имя файла.
Если мы просто соединим ноды Image Texture и Texture Coordinate, то скорее всего получим различные эффекты оборачивания объекта картинкой. В этом случае можно вообще обойтись без Texture Coordinate.
Если же мы хотим как-то позиционировать изображение на гранях, повторить его, то между Texture Coordinate и Image Texture добавляется нода Mapping (картирование, отображение), с помощью настроек которой изображение подгоняется под грани объекта. Например, чем больше значение полей Scale, тем мельче будет картинка, и тем чаще она будет повторена. Location перемещает картинку по грани, что позволяет совместить ее края с краями грани или выравнять по центру.
Курс с инструкционными картами к части практических работ:
android-приложение, pdf-версия
Flutter уроки
От идеи до приложения
Данный ресурс посвящен разработке мобильных приложений с помощью Flutter SDK.
Flutter SDK – бесплатное кроссплатформенное средство от Google с открытым исходным кодом для быстрой разработки мобильных приложений для iOS и Android.
С появлением Flutter реализовать свои идеи в виде мобильного приложения стало как никогда просто и доступно.
В наших уроках Вы узнаете про Flutter:
– с чего начать мобильную разработку;
– особенности реализации алгоритмов и структур;
– подходы и методы для решения задач.
Начните сейчас изучать Flutter
- Урок 1. Flutter первое приложение Hello
WorldСодержание урока:
1. Создание нового проекта в Android Studio
2. Главная функция main()
3. Функция runApp()
4. Иерархия виджетов
5. Свой «виджет» класс MyBody и горячая перезагрузка
6. Установка и использование пакета url_launcher (открытие ссылок в браузере) - Урок 2. StatelessWidget и StatefulWidgetВсе собственные классы-виджеты рекомендуется создавать от двух основных: StatelessWidget и StatefulWidget.
Отдельные части интерфейса удобно объединять в отдельные виджеты, созданные от этих двух суперклассов, но какой из них использовать – мы рассмотрим в этом уроке. - Урок 3.
ListView бесконечный прокручиваемый списокВиджет-класс ListView позволяет создавать конечные и бесконечные списки виджетов и делает их прокручиваемыми, если они не помещаются на экране или в отведенной для них области.
Под бесконечным списком мы будем понимать список элементов, который пополняется по мере необходимости, в нашем уроке – когда существующие элементы уже отображены. В мобильных приложениях такие списки повсюду: новостные ленты, списки сообщений, фотогалереи и т.п. - Урок 4. Форма ввода, проверка правильного вводаГлавным контейнером для формы является виджет-класс Form, он позволяет объединить в себе поля ввода. Обращаясь к состоянию формы FormState, можно проверить корректное заполнение полей, сбросить значения по умолчанию и сохранить значения.
- Урок 5. Навигация
и маршрутизация в приложении, class NavigatorРедкое приложение может обойтись одним окном или одной страницей.
Во Flutter и то и другое – виджеты. Для переключения между окнами или виджетами нужно использовать Navigator. - Урок 6. Асинхронные методы async и awaitПрограммируя на Flutter невозможно избежать использования асинхронных методов, таких как чтение данных из сети интернет, файлов и баз данных. Работа таких методов выводится в отдельные потоки и не нарушает работы основного потока программы: вычисление и отображение интерфейса. Одним словом, функции которые выполняются относительно долго — должны быть асинхронными.
- Урок 7. HTTP и HTTPS, сетевые запросы в Dart и FlutterДля обмена данными между клиентом и сервером в основном используется http протокол или его расширение https для безопасной передачи данных. В Dart есть одноименный пакет http, подключается он в файле зависимостей и метаданных pubspec.yaml
- Создание мобильных игр при помощи Flutter и Flame для начинающихЗачем создавать свою мобильную игру? Многие люди согласятся, что игры — весьма увлекательное программное обеспечение, в котором можно открыть для себя множество новых миров и реальностей, в которых можно проживать целые жизни. Много зависит от игрового процесса, который может быть как линейным и простым, так и сложным, включающим в себя 3D модели, реалистичную физику движений, графику, генерацию окружающего мира и сюжетные линии, зависящие от выбора игрока. Некоторые из нас же хотят пойти дальше и создать собственные игры, и, если вы один из них, то эта статья станет весьма полезна для вас. Основное внимание в ней будет уделено концепции, а не созданию законченной или готовой к выпуску игры.
- Создание казуальной 2D игры. Пошаговая инструкция при помощи Flame и Flutter (часть 1 из 5)Вы когда-нибудь задумывались о разработке видеоигр? Если да, то вы пришли по адресу! Эта статья расскажет и покажет, как создать свою собственную 2D мобильную игру. Эта статья — продолжение предыдущей, которая является введением в разработку игр для разработчиков любой степени продвинутости. В этой же части мы будем создавать игру в стиле «убить крота». Она будет называться Langaw (на сленге это означает дом мухи), и ее задача будет состоять в том, чтобы убить как можно больше мух, прежде чем они доберутся до кучки мусора. Игрок будет контролировать игру простыми нажатиями (не мухобойкой 🙂). Пока что мы не будем использовать какие-либо изображения или графику, и наши мухи будут просто зелеными квадратиками. При нажатии на нее, муха станет красной и опустится в нижнюю часть экрана.
Примеры приложений на Flutter
- Flutter Pixel SandИгра с пиксельным песком. Разработана с помощью Google Flutter SDK. Прокачай акселерометр своего смартфона.
- itsallwidgets.com — каталог Flutter приложенийКаталог itsallwidgets.com пополняется разработчиками Flutter приложений. Для добавления в него, любой желающий должен отправить свое приложение на проверку.
Быть в курсе
Новые заметки
Flutter 2.2: что нового?
Этот релиз сосредоточен на оптимизации и совершенствовании функци, включая улучшение работы на iOS, отложенные компоненты Android (deferred components), обновленный сервис-воркер для Flutter web и многое другое! Перевод статьи What’s new in Flutter 2.2 …Представляем Dart 2.13
Новые функции псевдонимов (алиасов) типов, улучшенный Dart FFI. Перевод статьи Announcing Dart 2.13 Автор оригинальной статьи: Michael Thomsen Представляем обновление Dart 2.13 — версия, в которой появились псевдонимы (алиасы) типов — одна из наиболее з…Создание адаптивного пользовательского интерфейса
Автор оригинального текста Aloïs Deniel перевод статьи https://aloisdeniel.com/#/posts/adaptative-ui Недавно я представил доклад на конференции FlutterVikings, в котором подробно объяснил, о чем вам следует думать в первую очередь при создании пользова…Создание бит-машины во Flutter
Эта статья о том, как построить бит-машину с секвенсором в Dart/Flutter. Автор оригинального текста Ken Reilly. Оригинальная статья тут. Пример приложения Вступление С первого релиза Flutter в 2018 году прошло не так много времени, однако он уже набрал …Анонс Dart 2.12
Согласованные нулевые типы (Sound null safety) и Dart FFI в стабильной версии! Мы с радостью представляем вам Dart 2.12, обладающий стабильными версиями согласованных нулевых типов и Dart FFI. Null safety — наша последняя основная функция для повышения …Повтор знаменитой игры с тираннозавром при помощи Flutter и Flame
Автор оригинальной статьи — Renan C. Araujo Если вы еще не знакомы с Flutter, то у меня хорошие новости: вам предстоит познакомиться с одним из самых удобных и гибких способов создания пользовательского интерфейса. Так что не теряйте зря времени и узна…Представляем Flutter 2.0
Flutter нового поколения, созданный для WEB, мобильных устройств и настольных компьютеров
Сегодня мы с гордостью представляем Flutter 2: большое обновление для Flutter, дающее разработчикам возможность создавать интересные, быстрые и портируемые приложе…Context — как это работает во Flutter
Перевод статьи Flutter in Context автора Greg Perry Детальный разбор класса BuidContext
(Эта статья является частью серии Decode Flutter Series) Вы уже знакомы с контекстными объектами? Я имею в виду объекты класса BuildContext с именем context, которы…Анонс Flutter 1.22
Перевод статьи Announcing Flutter 1.22 Поддержка iOS 14 и Android 11, i18n и l10n, готовые плагины Google Maps и WebView, новый инструмент App Size и многое другое! Мы с радостью представляем вам свежую версию Flutter с обширной поддержкой iOS 14 и Andr…Основы Dart 2.x (Коллекции)
Во многих приложениях требуется создавать группы связанных объектов и управлять ими. В языке Dart для этого существуют коллекции.
Коллекции предоставляют более гибкий способ работы с группами объектов. В отличие от массивов которые используются в других…Создание мобильных игр при помощи Flutter и Flame для начинающих
Перевод урока Create a Mobile Game with Flutter and Flame – Beginner Tutorial Зачем создавать свою мобильную игру? Многие люди согласятся, что игры — весьма увлекательное программное обеспечение, в котором можно открыть для себя множество новых миров и …Представляем Вам Flutter 1.17!
Перевод статьи Announcing Flutter 1.17 Включает в себя поддержку Metal для более быстрой работы системы iOS, новые компоненты Material, новые программы для мониторинга сети и многое другое! Сегодня мы с радостью представляем Вам Flutter 1.17, наш первый…Представляем Dart 2.8!
Перевод статьи Announcing Dart 2.8 Сегодня мы представляем вам новую версию Dart SDK — 2.8! Сообщество Dart растет, и миллионы разработчиков Flutter используют Dart как язык для создания приложений на любой платформе. Мы продолжаем работать над завершен…Сохранение pdf файла во Flutter web
Если кто-то столкнулся с проблемой сохранения бинарных файлов во Flutter web, в том числе PDF файлов, предлагаем наше решение. Для вывода бинарного файла в браузере воспользуемся функцией JavaScript, ее нужно подключить в index.html: function ToFile(arg…Flutter for web — создание веб-приложения
Flutter for web Git репозиторий ВНИМАНИЕ: Данная заметка устарела с выходом Flutter >= 1.9
Смотрите: FlutterWeb Урок 1. Введение в разработку на Flutter для Интернета Установка и настройка необходимых пакетов Пакет stagehand — создает новый проект из в…FlutterWeb Урок 1. Введение в разработку на Flutter для Интернета
С выходом версии фреймворка Flutter 1.9 у разработчиков приложений появилась возможность создать один Flutter-проект с одной кодовой базой для платформ: Android, iOS и web.
Это позволяет получить почти все плюсы Flutter в любом браузере и на любом устро…
Algorithm Builder
Algorithm Builder — это графическая среда сторонней разработки для создания программного обеспечения для микроконтроллеров AVR, обеспечивающая быстрое написание проектов различной степени сложности без глубинного изучения языков программирования для этой архитектуры.
Среда предназначена для производства полного цикла разработки начиная от ввода алгоритма, включая процесс отладки и заканчивая программированием кристалла. Разработка программы может быть как на уровне ассемблера, так и на макро уровне с манипуляцией многобайтными величинами со знаком.
В отличие от классического ассемблера программа вводится в виде алгоритма с древовидными ветвлениями и отображается на плоскости, в двух измерениях. Сеть условных и безусловных переходов отображается графически, в удобной векторной форме. Это к тому же освобождает программу от бесчисленных имен меток, которые в классическом ассемблере являются неизбежным балластом. Вся логическая структура программы становится наглядной.
Графические технологии раскрывают новые возможности для программистов. Визуальность логической структуры уменьшает вероятность ошибок и сокращает сроки разработки. Появляется такое понятие, как дизайн алгоритма, предполагающее некоторый художественный вкус программиста. По оценке пользователей, по сравнению с классическим ассемблером, время на разработку программного обеспечения сокращается в 3-5 раз.
Поддерживается автоматическая перекодировка строк ANSI-кодов Windows в коды русифицированного буквенно-цифрового ЖКИ.
Среда объединяет в себе графический редактор, компилятор алгоритма, симулятор микроконтроллера, внутрисхемный программатор. При использовании внутрисхемного программатора микроконтроллер подключается к COM порту компьютера через несложный адаптер (три диода и несколько резисторов). Программатор ведет подсчет числа перепрограммирований кристалла, сохраняя счетчик непосредственно в кристалле.
Algorithm Builder обеспечивает мониторную отладку на кристалле (On-Chip debug) которая позволяет наблюдать содержимое реального кристалла в заданной точке останова. При этом, для связи микроконтроллера с компьютером используется только один вывод, причем по выбору пользователя. Мониторная отладка может быть применена к любому типу кристалла, имеющего SRAM.
Вопросы по Algorithm Builder можно отправлять разработчику данного программного продукта по адресу: [email protected]
Скачать Algorithm Builder для AVR
План урока кодирования: Monster Maker! | Джейн Абрамс | Grok Learning
Чтение интерактивных заметок: Учащиеся могут читать заметки самостоятельно, но в зависимости от оценки и опыта может оказаться целесообразным просматривать заметки всем классом.
Большинство слайдов содержат интерактивные примеры, которые можно запустить, нажав кнопку ▶ в правом верхнем углу примера. Поощряйте студентов запускать эти примеры, когда они их видят. Если вы просматриваете записи в классе, это хорошая возможность, чтобы студенты выдвинули гипотезы о том, что произойдет, когда программа будет запущена!
Решение задач: Для решения задач учащиеся могут писать свои программы в редакторе, запускать их для проверки правильности их работы и затем отправлять их на автоматическую пометку.Если это неверно, они мгновенно получат обратную связь с советами о том, как решить проблему.
Если учащиеся сталкиваются с трудностями при решении задач, предложите им попытаться решить их самостоятельно. Как учитель, у вас также есть доступ к заметкам Учителя в правом верхнем углу заголовка, где вы найдете объяснения решений.
Проявите творческий подход: Заключительное задание — это игровая площадка, где ученики могут дальше экспериментировать с навыками, которые они практиковали, и создавать своего собственного монстра!
Дифференциация и расширенное обучение: Когда порядок имеет значение? По мере того, как ученики создают своих собственных монстров на игровой площадке, заставьте их больше думать о последовательности.Сколько различных алгоритмов они могут придумать, чтобы все рисовали одного и того же монстра ? Иногда у проблем есть несколько возможных решений!
Завершите урок, попросив учащихся определить алгоритм , программу, и разложение своими словами и поделиться своими определениями с классом.
Подчеркните, что порядок и точность алгоритмов важны для обеспечения правильного результата, но иногда проблема имеет более одного правильного решения!
Ваши ученики хотят больше писать код? Вот пара идей, что попробовать дальше!
- Чтобы узнать больше о программировании Monster Maker, ознакомьтесь с нашими полноформатными курсами Monster Maker и More Monster Maker.Эти курсы знакомят младших школьников с более сложными алгоритмами, включая программы с решениями и пользовательским вводом.
- Для студентов старшего возраста попробуйте один из других наших коротких бесплатных курсов. Используйте Blockly для создания снежинок или собственного виртуального питомца!
Австралийская учебная программа
- Основа 2-го года обучения в области цифровых технологий Процессы и производственные навыки: ACTDIP004
- 3-й и четвертый годы обучения в области цифровых технологий Процессы и производственные навыки: ACTDIP010, ACTDIP011
Новая Зеландия учебная программа
- Технологические знания — технологические системы : Уровень 2
Национальная учебная программа в Англии
- K — 2 Алгоритмы и программирование: 1A-AP-08, 1A-AP-10, 1A-AP-11, 1A-AP-12, 1A-AP-14, 1A-AP-15,
- 3-5 Алгоритмы и программирование: 1B-AP-08, 1B-AP-10, 1B-AP-11, 1B-AP-15
Построители кода роботов — алгоритмы и декомпозиция цифровой деятельности
Описание
Научите студентов следовать и разлагать алгоритмы с помощью этих цифровых действий Build a Robot .В 2 типах цифровых действий учащихся просят следовать алгоритму, чтобы собрать робота, а затем взглянуть на предварительно созданного робота и ввести для него свой собственный алгоритм.
Используйте эти упражнения в качестве ускоренного курса, чтобы понять, что такое алгоритм, как его написать, следовать одному и разложить на части. Я даже включил плакаты для печати и словарные карточки.
СОДЕРЖАНИЕ:
2 Ссылка на цифровой файл (5 слайдов с описанием следования и алгоритма, 5 слайдов с описанием алгоритма и 2 плаката с лексикой)
Плакат с 3 алгоритмами (печать на стандартной бумаге для принтера)
4-5 слов в словарном запасе
6-7 Условия использования и кредиты
Стандарты ISTE
Strand: вычислительный мыслитель
Стандарт: 5.а. формулировать определения проблем, подходящие для технологических методов, таких как анализ данных, абстрактные модели и алгоритмическое мышление при исследовании и поиске решений.
Я могу Заявления:
• Я могу следовать алгоритму.
• Я могу создать алгоритм.
• Могу написать задачу по компьютеру на
Я настоятельно рекомендую книжку с картинками «Дети получают кодирование» как введение в эту тему для вас и ваших учеников.
Условия продукта:
Авторские права © Бриттани Уошберн, 2020.Покупка этого файла дает вам право на ОДНУ классную комнату. Вы можете использовать это в нескольких классах, но не можете делиться с другими учителями. Копирование для более чем одного учителя, класса, отдела, школы или школьной системы запрещено. Этот продукт нельзя распространять или отображать в цифровом виде для всеобщего обозрения. Несоблюдение этого требования является нарушением авторских прав и Закона о защите авторских прав в цифровую эпоху (DMCA). Клипарт и элементы, содержащиеся в этом PDF-файле, защищены авторским правом и не могут быть извлечены и использованы за пределами этого файла без разрешения или лицензии.Если несколько лицензий необходимы для использования моим более чем одним преподавателем или более чем в одной компьютерной лаборатории, дополнительные лицензии не принимаются.
Связаться с другими учителями технологий:
Если вы хотите пообщаться с другими учителями технологий, посетите группу Technology Teacher Tribe на Facebook.
Свяжитесь со мной в социальных сетях!
Facebook, Pinterest, блог
Реферальная программа
Каждому приглашенному другу мы отправим вам код купона на 10% скидку, который вы можете использовать для покупки или получения скидки на любой продукт на нашем сайте.Начните прямо сейчас, поделившись своей реферальной ссылкой с друзьями.
Ваш реферальный URL: https://www.k5technologycurriculum.com/product/robot-code-builders-algorithm-and-decomposing-digital-activities/ Нажмите, чтобы скопировать
Я создал приложение, которое упрощает изучение алгоритмов и структур данных
by peterWeinberg
Интерфейс CS-Playground-ReactЯ программист-самоучка. Это означает, что я постоянно имею дело с синдромом самозванца.Для меня не редкость чувствовать себя неадекватным и неспособным понимать сложные концепции компьютерных наук.
Я никогда не разбирался в математике. И я всегда связывал сильные математические навыки с естественной способностью преуспеть в программировании. Я чувствую, что должен работать усерднее, чем другие (у которых есть врожденные математические навыки), чтобы изучить те же концепции. С этой идеей, глубоко укоренившейся в моем мозгу, я был почти уверен, что никогда не смогу научиться таким вещам, как обход двоичных деревьев поиска и умение мысленно разбирать рекурсивные кошмары, такие как Mergesort.
Хоть и приложив немного усилий, удивить себя удалось. Поэтому я хотел немного рассказать о том, как и о реальных результатах моих усилий. Как всегда, в надежде, что найдутся участники, готовые принять участие!
Войдите в CS-Playground-React, простую песочницу JavaScript в браузере для изучения и отработки алгоритмов и структур данных.
Это приложение для подготовки к собеседованию без регистрации автоматически сохраняет ваш прогресс, предлагает решения, когда вы застряли, и содержит множество ссылок на полезные статьи, руководства и другие ресурсы, которые помогут сделать ваше путешествие намного менее болезненным, чем мой был!
Позвольте мне сразу признать, что в этом приложении нет ничего революционного.(Я знаю, что вы так думали!) Существует масса приложений, которые обучают аналогичным навыкам и дают вам возможность писать и запускать код прямо в браузере.
Но CS Playground React стремится быть чрезвычайно минималистичным и оттачивает очень специфический набор тем. Кроме того, этот — не , который должен стать следующим большим достижением. Создание этого приложения было для меня способом развлечься. Если это окажется ценным ресурсом даже для еще одного человека, тем лучше.
Приложение все еще находится в стадии разработки, и еще многое предстоит изучить, когда речь идет о предмете и потенциальных функциях. Поэтому, если вы знаете классную задачу или структуру данных, которые я не рассмотрел, или видите что-то, что, по вашему мнению, можно улучшить, не стесняйтесь открывать проблему или отправлять запрос на перенос. ?
Если вы просто хотите проверить приложение, не читайте больше — оно доступно здесь (также доступно по https, зарегистрирует сервис-воркера для автономного кэширования).
Если вас интересует код, не смотрите дальше.
Остальное — это все скучные вещи о том, почему и как 🙂
Почему я создал это
Мои мотивы для создания этого приложения были просты: я хотел учиться, и я хотел сделать обучение более легким и увлекательным. . Что еще более важно, вот почему я хотел изучить эти конкретные навыки.
За последние 18 месяцев или около того я могу с уверенностью сказать, что научился программировать. Хотя я пока не решаюсь называть себя программистом. И это не потому, что я не зарабатываю на жизнь программированием (я не занимаюсь им), а более или менее из-за феномена синдрома самозванца, о котором я упоминал ранее.Я, конечно, умею строить. Но до недавнего времени я очень мало знал о компьютерных науках.
Изучая основы CS, я надеялся не только почувствовать себя увереннее, думая о себе как о программисте, но и помочь другим увидеть меня таким же.
Программисты-самоучки — это пилюля, которую в последние годы стало легче проглотить технологической индустрии. Особенно в таких регионах, как Кремниевая долина, где учебные курсы по программированию возникают на каждом углу.
Тем не менее, большинству программистов, надеющихся войти в отрасль без формального образования в области компьютерных наук, все еще предстоит преодолеть серьезное препятствие.
Итак, чтобы уменьшить удар, связанный с получением степени бакалавра гуманитарных наук, а не бакалавра наук, я решил научить себя некоторым концепциям, которые может усвоить студент первого или второго курса CS. Я думал, что это дополнит некоторые из моих практических навыков разработки и поможет другим относиться ко мне как к программисту более серьезно.
Я использовал набор тем, которые, как известно, являются общими для собеседований по программированию, в качестве основы, которую я хотел осветить.
Пузырьковая сортировка, сортировка по выбору, сортировка вставкой, сортировка слиянием, быстрая сортировка, сортировка в куче, стеки, очереди, связанные списки, хэш-таблицы и деревья двоичного поиска.Phwewf…
Я был очень напуган этой цепочкой проблем и довольно долго откладывал их решение.
Не желая мириться с поражением, я, наконец, начал копаться в этом. Отслеживая учебные пособия, читая все статьи, которые я мог найти, и изо дня в день бегая по кругу замешательства вокруг себя.
Однако со временем некоторые концепции начали осваиваться. Но возникла пара проблем:
- Мне стало как-то скучно. Мне нравится решать проблемы, но давайте посмотрим правде в глаза: решение
reverseLevelOrder
обход двоичного дерева поиска намного менее увлекательно, чем решение реальной проблемы для вашего последнего приложения. - Это было очень времени. Я работаю полный рабочий день (НЕ пишу код весь день), и мое свободное время для программирования чрезвычайно ценно. Я знал, что потрачу на это месяцы, и забеспокоился, что потеряю связь со своими более востребованными навыками.
Все эти материалы по CS — это здорово, что они есть за плечами, но давайте посмотрим правде в глаза, чаще всего нас, веб-разработчиков, нанимают для создания вещей. И у большинства из этих концепций не так уж много практического применения в повседневной веб-разработке.
Для меня изучение этих концепций было предметом гордости, и я не собирался сдаваться. Но моим приоритетом номер один по-прежнему оставалось владение практической веб-разработкой.
Итак, я решил объединить две идеи. Ответ заключался в том, чтобы создать простое приложение, которое помогло бы мне достичь моих целей и , чтобы я хорошо отработал свои основные навыки.
Для меня лучший способ выучить что-то (особенно что-то сухое) — это связать это с тем, что вы любите. Итак, пока я создавал это приложение и получал удовольствие, я также разрабатывал для него контент.
Итак, изучение алгоритмов и структур данных было необходимой частью моего последнего проекта. Потому что, конечно, какой смысл создавать приложение для подготовки к собеседованию, если вы не собираетесь заполнять его проблемами!
Каждые несколько дней я изучал новый алгоритм или структуру данных. Когда он почти закончился, я собирал учебные ресурсы и добавлял их в приложение. Теперь я мог практиковать это снова и снова в сверхпростом рабочем пространстве, которое построил сам. Как это круто!?
Я нашел действительно классный сайт, который визуализирует, как работают алгоритмы сортировки и структуры данных.Это Quicksort, который делает свое дело с массивом из 100 элементов. Вы можете найти полный список визуализаций здесь. Спасибо, USF, это круто!Суть в том, что я взял то, что долго откладывал, и нашел способ развлечься. И действительно, благодаря этому я добился большего успеха в достижении своих целей.
Я создал это приложение для себя, но не зря хотел поделиться им со всеми вами. Если хотя бы один человек сочтет CS-Playground-React полезным, я буду чувствовать, что сделал свою часть (или, по крайней мере, часть), чтобы отдать должное этому сообществу.
Есть так много программистов, которые свободно делятся своими знаниями и опытом и мало или ничего не просят взамен. Без такого открытого сообщества научиться программировать самостоятельно было бы невозможно.
Десять лет назад, когда дело касалось самообучения, было гораздо меньше возможностей. Поэтому я каждый день благодарен за то, что живу в век информации, когда так много знаний так легко доступны.
Это сделало это путешествие возможным для меня, и я надеюсь, что кто-то еще наткнется на эту статью и обнаружит, что их собственное путешествие стало немного проще.
Tech Stack & Hacks
Если вам интересно, я создал это приложение с помощью React & React-Redux (хотя первая версия была ванильным JS, CSS и HTML). Он также использует CodeMirror и React-Codemirror2 для встраивания редактора в браузер (ПРИМЕЧАНИЕ: исходный React-CodeMirror больше не поддерживается и не работает с новыми версиями React, поэтому дайте репозиторию Scniro звезду на GitHub для выбора. до слабины!).
Mock console
Небольшой взлом позволяет мне запускать действие redux каждый раз, когда пользователь вызывает консоль .введите
в свой код. Таким образом, я могу записывать зарегистрированные сообщения и, в свою очередь, имитировать консоль в браузере, чтобы показать вывод кода — что, на мой взгляд, было круто! Вы можете запустить clearConsole ()
в любое время, когда захотите очистить сообщения фиктивной консоли.
Сохраняющийся код
Я хотел сделать это приложение очень простым в использовании. Поэтому вместо того, чтобы внедрять базу данных и просить пользователей войти в систему, я выбрал более простой подход для сохранения прогресса. Redux управляет состоянием приложения во время каждого сеанса, и я использую localStorage
для сохранения кода между сеансами.Приложение извлекает это сохраненное состояние при следующем посещении и восстанавливает с его помощью хранилище Redux. Таким образом, вы сможете продолжить с того места, на котором остановились.
Если по какой-то причине вы хотите стереть весь свой прогресс, вы можете запустить resetState ()
в любое время в редакторе. Если вы не хотите фиксировать свой код в локальном хранилище, оставьте комментарий // НЕ СОХРАНЯЙТЕ
в своем коде перед тем, как уйти. Это предотвратит сохранение любого кода не только для этого файла.
В качестве примечания, оказалось, что есть пакет, который делает это за вас, под названием Redux-Persist (о котором я узнал постфактум).Но для простого случая использования, если вы можете сделать что-то с помощью нескольких строк кода или установить пакет NPM, чтобы сделать то же самое? Я буду каждый раз выбирать первое. Скорее всего, вы сохраняете сотни строк кода и целый новый набор зависимостей. Это всегда компромисс, и вы должны решить, когда оптимизированное (но более тяжелое) решение лучше, чем ваше упрощенное.
Панели с изменяемым размером
Последний трюк, который у меня был в рукаве, заключался в том, чтобы сделать рабочее пространство гибким и простым в использовании.Я хотел дать пользователям возможность изменять размер как редактора, так и консоли, поэтому я использовал небольшой скрипт, который я нашел, под названием simpleDrag.js
, React refs
и волшебство flexbox, чтобы сделать это возможным.
Спасибо за чтение и удачного взлома!
Стратегия
Намерение
Стратегия — это шаблон поведенческого проектирования, который позволяет вам определять семейство алгоритмов, помещать каждый из них в отдельный класс и делать их объекты взаимозаменяемыми.
Проблема
Однажды вы решили создать приложение для навигации для случайных путешественников. Приложение было построено вокруг красивой карты, которая помогала пользователям быстро ориентироваться в любом городе.
Одной из наиболее востребованных функций приложения было автоматическое планирование маршрута. Пользователь должен иметь возможность ввести адрес и увидеть самый быстрый маршрут к этому пункту назначения, отображаемый на карте.
Первая версия приложения могла строить маршруты только по дорогам. Люди, которые путешествовали на машине, кипели от радости.Но, видимо, далеко не всем в отпуске нравится водить машину. Итак, в следующем обновлении вы добавили возможность строить пешеходные маршруты. Сразу после этого вы добавили еще одну возможность, позволяющую людям использовать общественный транспорт на своих маршрутах.
Однако это было только начало. Позже вы планировали добавить построение маршрутов для велосипедистов. И даже позже — еще один вариант для прокладки маршрутов через все туристические достопримечательности города.
Раздулся код навигатора.
Хотя с точки зрения бизнеса приложение было успешным, техническая часть доставила вам много головной боли.Каждый раз, когда вы добавляли новый алгоритм маршрутизации, основной класс навигатора увеличивался вдвое. В какой-то момент зверя стало слишком сложно поддерживать.
Любое изменение одного из алгоритмов, будь то простое исправление ошибки или небольшая корректировка уличного счета, затрагивало весь класс, увеличивая вероятность создания ошибки в уже работающем коде.
Кроме того, стала неэффективной командная работа. Ваши товарищи по команде, которые были наняты сразу после успешного выпуска, жалуются, что тратят слишком много времени на разрешение конфликтов слияния.Реализация новой функции требует, чтобы вы изменили тот же огромный класс, что противоречит коду, созданному другими людьми.
Решение
Паттерн Стратегия предполагает, что вы берете класс, который делает что-то определенное множеством разных способов, и извлекаете все эти алгоритмы в отдельные классы, называемые стратегиями .
Исходный класс, называемый контекстом , должен иметь поле для хранения ссылки на одну из стратегий. Контекст делегирует работу связанному объекту стратегии вместо того, чтобы выполнять ее самостоятельно.
Контекст не отвечает за выбор подходящего алгоритма для работы. Вместо этого клиент передает желаемую стратегию в контекст. На самом деле контекст мало что знает о стратегиях. Он работает со всеми стратегиями через один и тот же общий интерфейс, который предоставляет только один метод для запуска алгоритма, инкапсулированного в выбранной стратегии.
Таким образом, контекст становится независимым от конкретных стратегий, поэтому вы можете добавлять новые алгоритмы или изменять существующие без изменения кода контекста или других стратегий.
Стратегии планирования маршрута.
В нашем приложении для навигации каждый алгоритм маршрутизации можно выделить в отдельный класс с помощью одного метода buildRoute
. Метод принимает исходную точку и пункт назначения и возвращает набор контрольных точек маршрута.
Несмотря на одинаковые аргументы, каждый класс маршрутизации может построить свой маршрут, основному классу навигатора на самом деле все равно, какой алгоритм выбран, поскольку его основная задача — визуализировать набор контрольных точек на карте.У класса есть метод переключения активной стратегии маршрутизации, поэтому его клиенты, такие как кнопки в пользовательском интерфейсе, могут заменить текущее выбранное поведение маршрутизации другим.
Аналогия из реального мира
Различные способы добраться до аэропорта.
Представьте, что вам нужно добраться до аэропорта. Вы можете сесть на автобус, заказать такси или сесть на велосипед. Это ваши стратегии транспортировки. Вы можете выбрать одну из стратегий в зависимости от таких факторов, как бюджет или временные ограничения.
Псевдокод
В этом примере контекст использует несколько стратегий для выполнения различных арифметических операций.
// Интерфейс стратегии объявляет общие для всех операции
// поддерживаемые версии какого-либо алгоритма. Контекст использует это
// интерфейс для вызова алгоритма, определенного конкретным
// стратегии.
интерфейс Стратегия
метод execute (a, b)
// Конкретные стратегии реализуют алгоритм, следуя
// интерфейс базовой стратегии.Интерфейс делает их
// взаимозаменяемы в контексте.
класс ConcreteStrategyAdd реализует стратегию
метод execute (a, b) является
вернуть a + b
класс ConcreteStrategySubtract реализует стратегию
метод execute (a, b) является
возврат а - б
класс ConcreteStrategyMultiply реализует стратегию
метод execute (a, b) является
вернуть а * б
// Контекст определяет интерфейс, интересующий клиентов.
класс Context - это
// Контекст поддерживает ссылку на одну из стратегий
// объекты.Контекст не знает конкретный класс
// стратегия. Он должен работать со всеми стратегиями через
// интерфейс стратегии.
частная стратегия: Стратегия
// Обычно контекст принимает стратегию через
// конструктор, а также предоставляет сеттер, чтобы
// стратегию можно переключить во время выполнения.
метод setStrategy (Стратегия стратегии)
this.strategy = стратегия
// Контекст делегирует некоторую работу объекту стратегии
// вместо реализации нескольких версий
// алгоритм сам по себе.метод executeStrategy (int a, int b) является
вернуть стратегию. execute (a, b)
// Клиентский код выбирает конкретную стратегию и передает ее
// контекст. Клиент должен знать о различиях
// между стратегиями, чтобы сделать правильный выбор.
class ExampleApplication - это
метод main () - это
Создать объект контекста.
Прочтите первый номер.
Прочтите последний номер.
Прочтите желаемое действие из пользовательского ввода.
если (действие == сложение), то
контекст.setStrategy (новый ConcreteStrategyAdd ())
если (действие == вычитание), то
context.setStrategy (новый ConcreteStrategySubtract ())
если (действие == умножение), то
context.setStrategy (новый ConcreteStrategyMultiply ())
result = context.executeStrategy (Первое число, Второе число)
Распечатать результат.
Понимание онлайн-поиска | Обучение правосудию
Словарь
алгоритм [ al guh rith uhm] ( существительное ) пошаговая процедура решения проблемы, особенно с помощью компьютера
поисковая машина [suhrch en juhn] ( существительное ) программа, которая ищет ключевые слова, которые человек конкретно ищет, особенно в Интернете
точный [ ak yoo reht] ( прилагательное ), содержащий достоверную, проверенную и актуальную информацию
Обзор серии
По мере развития технологий и изменения социального ландшафта для учащихся становится критически важно стать грамотными гражданами в области цифровых технологий.В этой серии учащиеся начальной школы изучат все тонкости медиаграмотности, от выбора надежных источников и понимания результатов поиска в Интернете до навигации по безопасности в Интернете и участия в цифровых сообществах.
Обзор урока
Этот урок направлен на то, чтобы помочь учащимся определить, как работает поиск в Интернете. Изучая алгоритмы поиска, учащиеся начнут понимать, что информация, которую они получают при поиске в Интернете, не материализуется просто из воздуха! Это понимание позволит студентам критически оценивать результаты поиска.
Студенты узнают, что происходит, когда они проводят онлайн-поиск с использованием общей поисковой системы. Они рассмотрят, как алгоритм поиска может повлиять на их результаты. Затем они будут работать над графическим списком требований, которые они предъявляют к информации, которую они получают из Интернета.
Предлагаемая процедура
Что такое алгоритм поиска?
1. Начните с того, что спросите своих учеников, искали ли они когда-нибудь информацию в Интернете или видели ли, как взрослые ищут информацию.Спросите, что они знают, думают или задаются вопросом о том, как работает поиск в Интернете. Если учащиеся никогда не проводили и не видели онлайн-поиск, попросите их рассказать о других случаях и способах поиска информации.
2. Изложите представления учащихся о том, что они уже знают о том, как люди находят информацию в Интернете. Что такое, например, Google? Что такое Siri? Объясните, что это не магические силы, которые получают информацию из ниоткуда или случайно. Программисты разработали их для поиска информации с помощью конкретных вычислений.Объясните: так же, как ваши ученики иногда используют алгоритмы или пошаговые процедуры для решения математических задач, онлайн-поисковые системы также используют алгоритмы для поиска информации для пользователей в Интернете.
3. Составьте проект или раздайте «Откуда берутся результаты поиска?» раздаточный материал. Обсудите раздаточный материал со своими учениками, подчеркнув, что поисковые системы в Интернете не волшебны, но на самом деле следуют процедурам, разработанным людьми. Дайте студентам возможность задать вопросы или рассказать о любых сюрпризах или новой информации.Например, студентов может удивить идея о том, что алгоритмы поиска могут учитывать, где живет человек, который ищет, или его историю поиска. Представление о том, что у создателей поисковых алгоритмов есть свои мотивы, например, продвижение платных сайтов в топ результатов, также может быть новым для студентов. Для учащихся, которые плохо знакомы с идеей поиска в Интернете, помогите им подумать о том, что похоже или отличается от других видов поиска информации, которые они выполняли:
- Чем онлайн-поиск похож или чем отличается от запроса эксперта?
- Чем онлайн-поиск похож или чем отличается от проверки книги?
- По каким причинам люди предпочитают один метод поиска информации другому?
Так много результатов
1.Разделите учащихся на пары и раздайте каждой паре распечатку снимков экрана двух-трех различных результатов поиска по одной и той же теме. Кроме того, вы можете спроецировать эти снимки экрана или попросить учащихся провести собственный поиск, а затем просмотреть результаты. Подчеркните, что на данный момент учащимся не нужно знать подробности каких-либо результатов; они просто думают о том, что происходит, когда они вводят определенные поисковые запросы. Примечание. Конкретные снимки экрана не предоставляются, потому что будет более эффективно, если вы покажете учащимся, что происходит, когда вы проводите локальный поиск.Выберите тему, которая интересует ваших учеников, например футбол, дикие животные или видеоигры. Используйте несколько поисковых систем, чтобы вести один и тот же поиск и предоставлять учащимся свои результаты.
2. Попросите учащихся обсудить со своими партнерами следующие вопросы:
- Что общего у всех результатов?
- Чем они отличаются?
- Какой результат вызывает у вас наибольший интерес и почему?
- Что вы заметили в этих результатах? Что для вас выделяется?
- Чем эти результаты поиска отличаются от ответов, которые вы можете получить в книге или задав вопрос взрослому?
Для более абстрактных мыслителей вы также можете добавить следующие вопросы:
- Что может мотивировать создателей поисковых алгоритмов?
- На что они надеются, что вы сделаете после обыска?
3.Соберите студентов вместе и попросите партнеров поделиться любыми важными идеями, которые возникли в их беседах.
Требование информации о качестве
1. Объясните своим ученикам, что они имеют право искать и даже требовать качественную информацию при поиске в Интернете. Что в идеале они хотели бы, чтобы поисковая система учитывала при предоставлении информации в ответ на их поисковые запросы?
2. Разделите учащихся на небольшие группы и попросите каждую группу создать знак или плакат с указанием их требований к алгоритмам поиска.Например, студенты могут требовать правды, они могут требовать актуальную информацию или они могут требовать ту же информацию, что и взрослый. Ответы должны исходить от студентов, но если им нужна подсказка, попросите их подумать о том, что они надеются получить из любого источника информации, такого как книга или эксперт, с которым они разговаривают.
3. Затем помогите им подумать о том, как они могут воплотить эти надежды в ожидания в отношении Интернета в целом, например, онлайн-сообществ, к которым они принадлежат, или сайтов социальных сетей.Учащиеся могут иллюстрировать свои плакаты, и вы можете повесить их в школе или классе.
Сделай что-нибудь
Попросите учащихся пойти домой и поговорить с членами своей семьи о том, что они узнали о цифровом поиске. Поощряйте их составить список важнейших вопросов, которые каждый член семьи задаст себе при поиске информации в Интернете. Они могут распечатать или написать эти списки и повесить их рядом с компьютерами своей семьи.
Раздаточные материалы
Откуда берутся результаты поиска?
Когда вы вводите слова или вопросы в поисковую систему, алгоритм учитывает некоторые из следующих вопросов, прежде чем он покажет вам ваши результаты.
Какие слова вы использовали?
- Какие слова вы набрали? Как вы хотели их написать по буквам?
- Из всей информации в Интернете, какие слова соответствуют использованным вами словам?
Это то, что вы хотите?
Если на веб-сайте есть слова, которые вы использовали, ответит ли этот веб-сайт на ваш вопрос или будет ли информация, которую вы ищете? Например, если вы ищете «пицца», хотите ли вы, чтобы веб-сайт сообщал вам, где можно купить пиццу, или веб-сайт, объясняющий, что такое пицца?
Если на веб-сайте есть слова, которые вы использовали, платит ли этот веб-сайт за то, что он находится в верхней части результатов поиска?
Что о вас знает Интернет?
Где вы живете и что это говорит нам о том, что вы ищете? Например, если вы вводите запрос «зоопарк», показывает ли алгоритм вам веб-сайт местного зоопарка или веб-сайт, объясняющий, что такое зоопарк?
Что вы искали раньше и что это говорит нам о том, что вы ищете сейчас?
Соответствие государственным стандартам Common Core
CCSS.ELA-Literacy.RI.4.2
Определите основную идею текста и объясните, как она поддерживается ключевыми деталями; резюмируйте текст.
CCSS.ELA-Literacy.RI.4.4
Определите значение общих академических слов или фраз, относящихся к предметной области, в тексте, относящемся к теме или предметной области 4 класса.
CCSS.ELA-Literacy.RI.4.7
Интерпретируйте информацию, представленную визуально, устно или количественно (например, в диаграммах, графиках, диаграммах, графиках времени, анимации или интерактивных элементах на веб-страницах), и объясните, как информация способствует пониманию текста, в котором она появляется.
CCSS.ELA-Literacy.RI.4.9
Объедините информацию из двух текстов по одной и той же теме, чтобы писать или говорить о предмете со знанием дела.
визуализация структур данных и алгоритмов с помощью анимации
VisuAlgo — визуализация структур данных и алгоритмов с помощью анимациивизуализация структур данных и алгоритмов с помощью анимации
Избранный рассказ: Визуализация алгоритмов одним щелчком мыши
Результат не найден.>
Это английский (по умолчанию) интерфейс для https://visualgo.net . VisuAlgo постепенно превратится в многоязычный сайт. Попробуйте посетить другие версии VisuAlgo, например китайский ; индонезийский ; Русский ; и т. д. (см. страницу статистики ).
В VisuAlgo вы можете использовать свой собственный ввод для любого алгоритма вместо образцов ввода. Попробуйте функцию рисования графиков в этих шести визуализациях, связанных с графиками: Graph DS , DFS / BFS , MST , SSSP , Max Flow и Matching .Вы также можете щелкнуть тег «график» в любом из этих 6 полей визуализации, связанных с графами, или ввести «график» в поле поиска.
Для сравнения 2 связанных алгоритмов, например Крускала против Прима на том же графике, откройте 2 страницы VisuAlgo в 2 окнах и сопоставьте их. Нажмите , здесь , чтобы увидеть снимок экрана.
Вы можете визуализировать дерево рекурсии (или DAG, если есть перекрывающиеся подзадачи и применимо динамическое программирование (DP)) ЛЮБОЙ допустимой рекурсивной функции , которая может быть написана на JavaScript.Нажмите , здесь , чтобы увидеть снимок экрана.
VisuAlgo загружается быстро для новых посетителей, но загружается «почти мгновенно» для вернувшихся посетителей, поскольку мы кэшируем много статического содержимого VisuAlgo 🙂 (пожалуйста, не используйте режим инкогнито или приватного просмотра для сохранения кеша). Более того, если вы зарегистрировали учетную запись VisuAlgo, мы загрузим VisuAlgo в соответствии с вашими предпочтениями после того, как вы войдете в систему .
Каждая страница визуализации имеет «Режим электронной лекции», доступный из верхнего правого угла этой страницы, в котором объясняется структура данных и / или алгоритм, которые визуализируются.Этот режим электронной лекции автоматически отображается впервые посетителям (или не вошедшим в систему) для демонстрации структуры данных и / или визуализируемого алгоритма. Качество режима электронных лекций будет постепенно доведено до уровня лекций классов алгоритмов в Национальном университете Сингапура :).
Ознакомьтесь с четырьмя новейшими функциями VisuAlgo: 1). Многоязычность (вам не нужно всегда полагаться на / en язык, если вы не являетесь носителем английского языка), 2). Учетные записи пользователей (есть интересные привилегии и настройки, доступные для постоянных пользователей, пожалуйста, зарегистрируйте бесплатную учетную запись сейчас ), 3).Гораздо более мощный режим электронной лекции для достижения «стандарта NUS» и 4). Визуализации NP-сложных задач (в настоящее время MVC, TSP и Steiner Tree).
VisuAlgo состоит из двух основных компонентов: страниц визуализации (в настоящее время 23) и компонента онлайн-викторины (в настоящее время 12 и в ближайшем будущем их будет 23). Мы не пишем сценарии для вопросов в онлайн-викторине: O, и все ответы будут оцениваться практически мгновенно :). Вы можете пройти онлайн-викторину по адресу , наша страница обучения или нажав кнопку «Обучение» в модуле визуализации.
Найдите термин «визуализация алгоритма» в своей любимой поисковой системе, вы видите VisuAlgo на первой странице результатов поиска :)? Следующий уровень: выполните поиск этого термина еще раз, но на своем родном языке (если это не английский). VisuAlgo все еще отображается на первой странице? :). И будьте готовы удивиться: выполните поиск по названию вашей любимой структуры данных или алгоритма, не упоминая ключевые слова «анимация» или «визуализация». VisuAlgo все еще отображается на первой странице? 🙂 :).
VisuAlgo в настоящее время получает около 3000 обращений в день от различных студентов и преподавателей компьютерных наук со всего мира. Хотя это хорошее число, мы будем продолжать улучшать VisuAlgo, чтобы он мог быть еще более полезным для гораздо большего числа (новых) студентов CS по всему миру ежегодно. Пожалуйста, поделитесь информацией, если вы являетесь нашими постоянными посетителями ( зарегистрируйте бесплатную учетную запись VisuAlgo , чтобы мы могли знать, кто вы) и вам нравится этот инструмент :).
Около
✕VisuAlgo был разработан в 2011 году доктором Стивеном Халимом как инструмент, который поможет его ученикам лучше понять структуры данных и алгоритмы, позволяя им изучать основы самостоятельно и в удобном для них темпе.
VisuAlgo содержит множество сложных алгоритмов, которые обсуждаются в книге доктора Стивена Халима («Конкурентное программирование», в соавторстве с его братом доктором Феликсом Халимом) и не только. Сегодня некоторые из этих продвинутых алгоритмов визуализации / анимации можно найти только в VisuAlgo.
Хотя специально разработан для студентов Национального университета Сингапура (NUS), изучающих различные классы структур данных и алгоритмов (например, CS1010, CS1020, CS2010, CS2020, CS3230 и CS3230), как сторонников онлайн-обучения, мы надеемся, что любопытные умы вокруг мир тоже найдет эти визуализации полезными.
VisuAlgo изначально не предназначен для работы на небольших сенсорных экранах (например, смартфонах) из-за необходимости обслуживать множество сложных алгоритмов визуализации, требующих большого количества пикселей и жестов «щелкнуть и перетащить» для взаимодействия. Минимальное разрешение экрана для удобного взаимодействия с пользователем — 1024×768, и только целевая страница относительно удобна для мобильных устройств.
VisuAlgo — это текущий проект, и более сложные визуализации все еще разрабатываются.
Самая захватывающая разработка — это автоматизированный генератор вопросов и верификатор (система онлайн-викторин), который позволяет студентам проверить свои знания основных структур данных и алгоритмов.Вопросы генерируются случайным образом в соответствии с некоторыми правилами, а ответы студентов мгновенно и автоматически оцениваются при отправке на наш сервер оценок. Эта система онлайн-викторин, когда она будет принята большим количеством преподавателей компьютерных наук во всем мире, должна технически исключить ручные вопросы базовой структуры данных и алгоритмов из типичных экзаменов по информатике во многих университетах. Устанавливая небольшой (но ненулевой) вес при прохождении онлайн-викторины, инструктор CS может (значительно) повысить уровень мастерства своих учеников по этим основным вопросам, поскольку у учеников есть практически бесконечное количество учебных вопросов, которые можно проверить сразу перед они проходят онлайн-викторину.Режим обучения на данный момент содержит вопросы по 12 модулям визуализации. Вскоре мы добавим оставшиеся 8 модулей визуализации, чтобы каждый модуль визуализации в VisuAlgo имел компонент онлайн-викторин.
Еще одна активная ветвь разработки — это подпроект интернационализации VisuAlgo. Мы хотим подготовить базу данных терминологии CS для всего английского текста, который когда-либо появлялся в системе VisuAlgo. Это большая задача, требующая краудсорсинга. Когда система будет готова, мы пригласим посетителей VisuAlgo внести свой вклад, особенно если вы не являетесь носителем английского языка.В настоящее время мы также написали публичные заметки о VisuAlgo на разных языках: ж , id , kr , vn , th .
Команда
✕
Руководитель проекта и советник (июль 2011 г. — по настоящее время)
Д-р Стивен Халим, старший преподаватель, Школа вычислительной техники (SoC), Национальный университет Сингапура (NUS)
Д-р Феликс Халим, инженер-программист, Google (Маунтин-Вью)
Студенты-исследователи 1 (июль 2011 г. — апрель 2012 г.)
Ко Зи Чун, Виктор Ло Бо Хуай
Проект последнего года обучения / студенты UROP 1 (июль 2012 г. — декабрь 2013 г.)
Фан Тхи Куин Транг, Питер Фанди, Альберт Миллардо Тьиндрадината, Нгуен Хоанг Дуй
Проект последнего года обучения / студенты UROP 2 (июнь 2013 г. — апрель 2014 г.)
Роуз Мари Тан Чжао Юнь, Иван Рейнальдо
Студенты-исследователи 2 (май 2014 г. — июль 2014 г.)
Джонатан Ирвин Гунаван, Натан Азария, Ян Леу Тзе Вей, Нгуен Вьет Дунг, Нгуен Кхак Тунг, Стивен Кестер Ювоно, Цао Шенгзе, Мохан Джишну
Студенты последнего года обучения / UROP 3 (июнь 2014 г. — апрель 2015 г.)
Эрин Тео И Лин, Ван Цзы
Проект последнего года обучения / студенты UROP 4 (июнь 2016 г. — декабрь 2017 г.)
Чыонг Нгок Кхан, Джон Кевин Тьяджади, Габриэлла Мишель, Мухаммад Раис Фатхин Мудзакир
Список переводчиков, выполнивших ≥100 переводов, можно найти на странице статистики.
Благодарности
Этот проект стал возможным благодаря щедрому гранту на улучшение преподавания от Центра развития преподавания и обучения (CDTL) NUS.
Условия использования
✕VisuAlgo является бесплатным для сообщества компьютерных наук на Земле. Если вам нравится VisuAlgo, мы просим вас заплатить только за то, чтобы вы рассказали о существовании VisuAlgo другим студентам / преподавателям информатики , которых вы знаете =) через Facebook, Twitter, веб-страницу курса, обзор блога, электронную почту и т. Д. .
Если у вас структура данных и алгоритм студент / преподаватель , вам разрешено использовать этот веб-сайт непосредственно для ваших занятий. Если вы делаете снимки экрана (видео) с этого веб-сайта, вы можете использовать снимки экрана (видео) в другом месте, если вы указываете URL-адрес этого веб-сайта (http://visualgo.net) и / или список публикаций ниже в качестве справки. . Однако вам НЕ разрешено загружать файлы VisuAlgo (на стороне клиента), а размещает его на вашем собственном веб-сайте, поскольку это плагиат .На данный момент мы делаем НЕ , позволяя другим людям форкнуть этот проект и создавать варианты VisuAlgo. Можно использовать автономную копию VisuAlgo (на стороне клиента) для личного использования.
Обратите внимание, что компонент онлайн-викторины VisuAlgo по своей природе имеет тяжелый компонент на стороне сервера, и нет простого способа сохранить сценарии и базы данных на стороне сервера локально. В настоящее время широкая публика может использовать только «режим обучения» для доступа к этой онлайн-системе викторин. В настоящее время «тестовый режим» представляет собой более контролируемую среду для использования этих случайно сгенерированных вопросов и автоматической проверки для реального экзамена в NUS.Другой заинтересованный инструктор CS должен связаться со Стивеном, если вы хотите попробовать такой «тестовый режим».
Список публикаций
Эта работа была кратко представлена на семинаре CLI на финале ACM ICPC World Finals 2012 (Польша, Варшава) и на конференции IOI на IOI 2012 (Сирмионе-Монтикьяри, Италия). Вы можете щелкнуть эту ссылку, чтобы прочитать нашу статью 2012 года об этой системе (в 2012 году она еще не называлась VisuAlgo).
Эту работу в основном выполняют мои бывшие ученики.Самые последние заключительные отчеты здесь: Эрин, Ван Цзы, Роуз, Иван.
Отчеты об ошибках или запрос на новые функции
VisuAlgo не является законченным проектом. Доктор Стивен Халим все еще активно улучшает VisuAlgo. Если вы используете VisuAlgo и обнаружили ошибку на любой из наших страниц визуализации / онлайн-викторины или если вы хотите запросить новые функции, пожалуйста, свяжитесь с доктором Стивеном Халимом. Его контакт — это объединение его имени и добавления точки gmail com.
fast.ai · Делаем нейронные сети снова неохлаждаемыми
Наши онлайн-курсы (все бесплатные и без рекламы):
Прочие полезные ресурсы
быстро.ai в новостях:
15 июл 2021 Джереми Ховард
Резюме: сегодня мы анонсируем fastchan, новый мини-дистрибутив Conda, ориентированный на экосистему PyTorch. Используя fastchan, установка и обновление библиотек, таких как PyTorch и RAPIDS, происходит быстрее, проще и надежнее.
Этот подробный пост в блоге блестящего Амана Арора из Weights and Biases дает отличный обзор того, для чего нужен фастчан, как он соотносится с другими частями экосистемы и как он упрощает жизнь на практике.
Что нужно знать
Если вы используете Anaconda, теперь вы можете установить программное обеспечение Python, такое как fastai, RAPIDS, timm, OpenCV и Hugging Face Transformers, с помощью одной унифицированной команды: conda install -c fastchan
. Такой же подход можно использовать для обновления любого программного обеспечения, установленного вами из fastchan. Программное обеспечение на fastchan было протестировано для успешной установки на Mac, Linux и Windows на всех последних версиях Python. Полный список доступных пакетов доступен здесь.
Мы тестировали fastchan в течение последних нескольких месяцев и переключили официальный источник установки fastchan на использование fastchan. Согласно Anaconda, он уже почти так же популярен, как и сам канал PyTorch!
Статистика загрузок Anaconda для PyTorchBackground
conda — одна из моих любимых программ. Он позволяет мне устанавливать огромное количество программного обеспечения, такого как Rust, GCC, CUDA Toolkit, Python, graphviz и тысячи других, даже не требуя корневого доступа.Он устанавливает исполняемые файлы, библиотеки C, модули Python и все остальное, о чем вы можете подумать. Он также автоматически устанавливает все необходимые зависимости.
Если вы использовали менеджер пакетов Linux, например apt
(Ubuntu) или yum
(Fedora), то это будет звучать довольно знакомо — conda
, по сути, просто еще один менеджер пакетов. Но вместо того, чтобы использоваться для установки пакетов system , которые используются как часть операционной системы, он используется для установки вашего личного программного обеспечения.Это означает, что вы не можете случайно сломать свою ОС, если используете conda.
Он также может создавать отдельные автономные среды с полностью изолированными установками программного обеспечения. Это означает, что я могу создать быструю среду для тестирования нового программного обеспечения, не нарушая мою базовую среду, или даже сохранить отдельные среды для разных проектов, для которых могут потребоваться (например) разные версии Python или библиотек.
Некоторые люди объединяют conda с pip
и virtualenv
.Однако они используются только для управления пакетами Python. Они не могут управлять исполняемыми файлами, библиотеками C и т. Д.
conda устанавливает программное обеспечение из каналов , которые являются репозиториями установочных пакетов. Наиболее широко используются каналы по умолчанию, которые автоматически использует Anaconda, самый популярный установщик системы conda, и conda-forge, репозиторий сообщества, в который тысячи разработчиков разместили пакеты conda.
Многие организации поддерживают свои собственные каналы, такие как fastai, nvidia и pytorch.
Проблема распределения
Вы, вероятно, слышали термин дистрибутив , который используется в мире Linux. Такие дистрибутивы, как Ubuntu и Fedora, предоставляют запланированные выпуски наборов программных пакетов, которые были протестированы на правильную совместную работу. Они также предоставляют репозитории, в которых становятся доступными новые версии программного обеспечения после тестирования программного обеспечения, чтобы убедиться, что оно правильно работает как часть этого дистрибутива.
Anaconda и канал по умолчанию также являются дистрибутивом.Anaconda регулярно выпускает новую версию своего основного установщика вместе с набором пакетов, которые были протестированы на правильную совместную работу. Кроме того, они продолжают тестировать новые версии пакетов между выпусками программного обеспечения, добавляя их в канал по умолчанию, когда они будут готовы.
Многие пакеты в канале по умолчанию получены от conda-forge. conda-forge — это не сам дистрибутив, а репозиторий, в котором любой пользователь может загрузить «рецепты» для создания программного обеспечения и сделать доступными результаты этих сборок.Anaconda берет подмножество этих пакетов вместе с программным обеспечением, которое они упаковывают сами, и программным обеспечением, упакованным другими партнерами, проводит дополнительное интеграционное тестирование комбинации этих пакетов, а затем делает их доступными в своем дистрибутиве.
Эта система очень хорошо работает во многих ситуациях. Те, кому нужны самые современные версии программного обеспечения или пакеты, недоступные в канале по умолчанию, могут установить их прямо из conda-forge, а те, кому нужно удобство и уверенность в дистрибутиве, могут просто установить программное обеспечение по умолчанию.
Однако многие библиотеки Python отсутствуют в каналах по умолчанию или в каналах conda-forge или вообще не доступны ни в одном канале. Кроме того, conda-forge сейчас настолько велик (благодаря его огромному успеху!), Что мне пришлось ждать более двух дней, пока conda выяснит зависимости при попытке установить программное обеспечение, использующее conda-forge. (Существует гораздо более быстрая замена conda, называемая mamba, но она еще не завершена и в настоящее время не может правильно установить PyTorch.)
Библиотеки, использующие графический процессор, представляют собой особую проблему, поскольку в conda-forge еще нет средств для создания и тестирования программного обеспечения с поддержкой графического процессора.Кроме того, библиотеки графического процессора особенно сложно правильно упаковать, поскольку им необходимо работать со многими комбинациями версий CUDA, cudnn, Python и ОС. Существует большая экосистема программного обеспечения, которое зависит от PyTorch, и команда PyTorch настроила большое количество интеграционных тестов, которые запускаются перед каждым выпуском. PyTorch также имеет свою собственную платформу для создания программного обеспечения, в результате чего создаются пакеты, которые автоматически определяют правильный установщик для каждого пользователя.
Эти проблемы приводят к появлению сложных команд для установки пакетов в этой экосистеме, таких как эта команда, которая в настоящее время требуется для установки мощного программного обеспечения NVIDIA RAPIDS:
conda create -n rapids-21.06 -c rapidsai -c nvidia -c conda-forge \
rapids-blazing = 21.06 python = 3.7 cudatoolkit = 11.0
Как красноречиво объясняет Аман Арора, выполнение этой команды создает новую среду, которая не включает в себя какое-либо другое программное обеспечение, которое мы ранее установили, и не предоставляет механизма для поддержания программного обеспечения в актуальном состоянии. Добавление других пакетов в среду становится сложным, поскольку несоответствие версий очень распространено при таком объединении нескольких каналов.
Я хотел создать пакеты, которые зависят от RAPIDS, но нет реального способа упростить пользователям установку и обновление такого пакета.
Я слышал, как многие разработчики говорят специалистам по данным, что им следует создавать новые среды docker или conda для каждого отдельного проекта, и что это правильный способ избежать этих проблем. Однако это все равно, что советовать людям установить новую операционную систему для каждого приложения, которое они хотят использовать. Представьте, что вы не можете одновременно запускать Chrome и vscode, но должны переключаться на новую среду для каждого из них! Нам необходимо установить все программное обеспечение и библиотеки, необходимые для работы, в одном месте и в одно и то же время.Нам нужно иметь возможность использовать их вместе и поддерживать их.
Решение: новый дистрибутив
Чтобы избежать этих проблем, мы создали новый канал и дистрибутив под названием fastchan . fastchan содержит все зависимости, необходимые для установки fastai, PyTorch, RAPIDS и многого другого. Мы используем официальную сборку PyTorch для PyTorch, официальную сборку NVIDIA для RAPIDS и CUDA Toolkit и так далее. Разработчики этих пакетов потратили много времени на компоновку своего программного обеспечения так, чтобы оно работало лучше всего, поэтому мы считаем, что лучше использовать их работу, а не начинать с нуля.
Для библиотек и зависимостей, которые доступны только в conda-forge, мы копируем их в канал fastchan. Мы используем малоизвестную, но очень полезную команду Anaconda под названием copy
, которая копирует пакеты по каналам.
fastchan использует собственный решатель зависимостей Conda для рекурсивного вычисления всех необходимых зависимостей. Мы включаем только те зависимости, которые еще не доступны в канале по умолчанию. Это потому, что значения по умолчанию уже используются в Anaconda по умолчанию, поэтому нам не нужно дублировать то, что уже есть.
Кроме того, мы упаковываем некоторое программное обеспечение, которое в настоящее время доступно только в виде пакетов pip на pypi. Для этого мы используем несколько методов. Один из них использует потрясающее программное обеспечение setuptools-conda от австралийца Криса Биллингтона. Другая — это новая программа build.py, которую мы написали, которая используется для скомпилированного программного обеспечения, такого как фраза и OpenCV.
Пакеты собираются и копируются автоматически дважды в день благодаря этим рабочим процессам GitHub Actions.
Результат
В результате всего этого вы полагаетесь только на настройки по умолчанию и каналы fastchan для установки почти всего, что вам нужно, особенно если вы работаете с программным обеспечением в экосистемах PyTorch и Hugging Face.Еще важнее, чем установка, обновления — теперь вы можете обновить все свои пакеты одновременно с помощью одной команды! Чтобы все это выполнялось автоматически, создайте файл ~ / .condarc
, содержащий следующее:
каналов:
- фастчан
- значения по умолчанию
Затем вы можете просто использовать conda install
и conda upgrade
без необходимости даже проходить -c fastchan
. Если вы запустите conda upgrade --all
, вся ваша среда будет полностью обновлена (аналогично использованию sudo apt upgrade
для поддержания установки Ubuntu в актуальном состоянии).
Будущие работы
Я надеюсь, что fastchan станет полезной отправной точкой для людей, думающих о упаковке и развертывании Python. Есть еще много чего, что можно было бы добавить, чтобы улучшить его. Например, в настоящее время единственной гарантией, которую дает fastchan, является то, что предоставленные пакеты могут быть правильно установлены вместе. На самом деле он не проверяет правильность их работы. В идеале интеграционные тесты должны выполняться как на CPU, так и на GPU, чтобы гарантировать, что код, использующий библиотеки вместе, дает ожидаемые результаты.
Было бы также замечательно, если бы кто-нибудь мог запросить добавление пакетов в fastchan, а также добавить свои собственные интеграционные тесты. Интеграционные тесты особенно важны для того, чтобы гарантировать, что никто не добавляет или не изменяет пакет, который вызывает поломку зависимых пакетов (или, по крайней мере, чтобы гарантировать, что сломанные последующие пакеты четко обозначены как таковые).
fast.ai, цель которого — сделать глубокое обучение более доступным, не является очевидным домом для распространения conda.Мы создали фастчан, потому что он нужен нам и нашим пользователям. Надеюсь, что в будущем ключевые игроки, такие как PyTorch, NVIDIA, Anaconda и conda-forge, вместе решат проблему распространения и сделают fastchan устаревшим!
26 мая 2021 Джереми ХовардЯ только что вернулся в Австралию, чтобы жить после десяти лет работы предпринимателем в Сан-Франциско. Во время моего первого личного разговора в Австралии я поделился своими мыслями о том, как создать успешный технологический стартап практически в любой точке мира.Я потратил почти три месяца на исследования и подготовку к этому докладу, взяв интервью у десятков предпринимателей, инвесторов и ученых. Я также опирался на свой более чем 20-летний опыт работы в качестве предпринимателя — десять лет в Австралии и десять лет в США.
Создание технологического стартапа в районе залива Сан-Франциско (то есть в Сан-Франциско, Кремниевой долине и Окленде) проще, чем в большинстве других частей мира (за исключением, возможно, пары центров стартапов, таких как Израиль). Когда я приехал в Сан-Франциско, я оказался посреди шумной экосистемы технически продвинутых обналичивающих инвесторов, смелых основателей с большими амбициями и реальным желанием помогать друг другу, ученых-предпринимателей, у которых часто было несколько стартапов, которые они консультировали и которыми они занимались. общие направления для своих студентов для стажировок и трудоустройства, а также крупные дальновидные клиенты с инновационными лабораториями в центре Сан-Франциско.
В Австралии все могло быть иначе. В технологические стартапы в США за день инвестируют больше, чем в год в Австралии. Краткосрочность распространена на всех уровнях. Предпринимателям приходится сталкиваться с бессмысленными препятствиями, которые ставят на их пути бюрократические институты.
И все же Австралия полна блестящих талантов, которые только и ждут, чтобы проявить их к миру. Я считаю, что у потенциальных австралийских основателей есть способы создать успешные глобальные стартапы. И я считаю, что эти уроки не менее ценны для основателей во многих других частях мира, где экосистема стартапов слаба, а промышленность консервативна и медленно развивается.
Подробнее см. Мой доклад:
Или, в качестве альтернативы, прочитайте это резюме моего выступления от Амана Арора, который прилетел из Сиднея в Брисбен, чтобы присутствовать на нем, и был достаточно любезен, чтобы изложить свои выводы в вдумчивой статье.
28 октября 2020 Джереми ХовардОбновление 30 октября 2020 г. : NumFOCUS извинился передо мной. Я принимаю их извинения. Я не принимаю их утверждение о том, что «Во время интервью комитет не установил, что имело место нарушение кодекса поведения, а только то, что были поданы и рассматриваются две жалобы.В электронном письме для организации звонка говорилось: «Мы хотели бы назначить встречу, чтобы обсудить с вами результаты нашего расследования» — ничего более. Во время звонка комитет огласил список нарушений и сказал, что «это то, что заявили журналисты, и то, что мы обнаружили». Я спросил, почему они не взяли у меня заявление до этого вывода, и они ответили, что «мы все смотрели видео, чтобы мы могли сами убедиться в нарушении». Комитет предложил мне в своем электронном письме с извинениями провести дополнительное обсуждение, и я отклонил это предложение.
Резюме: NumFOCUS обнаружил, что я нарушил их Кодекс поведения (CoC) на JupyterCon, потому что мой доклад не был «добрым», потому что я сказал, что Джоэл Грус был «неправ» относительно своего мнения о том, что Jupyter Notebook не является хорошей средой для разработки программного обеспечения. Джоэл (которого я очень уважаю и считаю ценным для сообщества специалистов по науке о данных) не участвовал в действиях NumFOCUS, ему не говорили об этом и не поддерживал. NumFOCUS не следовал своей собственной процедуре правоприменения и нарушил свой собственный CoC, заставил меня висеть более недели, даже не зная, в чем меня обвиняют, и не дал мне возможности внести свой вклад до завершения расследования.Я неоднократно говорил их комитету, что моя эмоциональная устойчивость в данный момент была низкой из-за медицинских проблем, над которыми они смеялись и игнорировали, поскольку я пытался (безуспешно) сдерживать слезы. Этот процесс разбил меня, и я не смогу принимать запросы на выступление в обозримом будущем. Я поддерживаю продуманное соблюдение Кодекса поведения для решения проблемы сексистского, расистского и домогательства, но в данном случае этого не произошло.
Обзор
В моем недавнем выступлении на JupyterCon «Мне нравятся Jupyter Notebooks» (повторная запись предоставлена внизу этого поста, если вы хотите увидеть это сами), я попытался опровергнуть весьма влиятельный JupyterCon Джоэла Груса. презентация «Не люблю ноутбуки».Джоэл заявил в своем выступлении, что Jupyter — плохой выбор для разработки и обучения программного обеспечения, а в своем выступлении я утверждал, что это хороший выбор. Комитет NumFOCUS признал меня виновным в нарушении их кодекса поведения, за то, что я не был «добрым» в моем несогласии с Джоэлем, и за «оскорбление» его. Были указаны следующие конкретные причины:
- Я сказал, что Джоэл Грус был «неправ»
- Я использовал некоторые из его слайдов (с правильной атрибуцией) и короткий отрывок из одного из его видео, чтобы объяснить, почему я подумал, что он ошибается
- Что я сделал «отрицательную ссылку» на его предыдущее выступление.
- Мне также сказали, что «как основной докладчик» я «буду придерживаться более высоких стандартов, чем другие» (хотя об этом мне не сообщали до моего выступления, и о том, что это за более высокий стандарт). Кодекс поведения
может быть полезным инструментом, если он продуманно создан и тщательно соблюдается, для решения проблемы сексизма, расизма и домогательств, все из которых были проблемами на технических конференциях.Учитывая проблемы разнообразия в технологической индустрии, важно, чтобы мы продолжали работу по повышению инклюзивности конференций, особенно для тех, кто из маргинальных слоев населения. Наличие кодекса поведения с четкими правилами, запрещающими насильственные угрозы, нежелательное сексуальное внимание, повторяющиеся домогательства, откровенно сексуальные изображения и другое вредное поведение, является первым шагом к устранению и прекращению такого поведения. Код JupyterCon предоставляет следующие примеры неприемлемого поведения, ни один из которых не похож на то, что сделал я (т.е. говоря, что кто-то был неправ по технической теме, и объясняя, как и почему):
- Жестокие угрозы или агрессивные выражения в адрес другого человека
- Дискриминационные шутки и язык
- Публикация материалов сексуального или насильственного характера
- Публикация (или угроза публикации) личной информации других людей («доксинг»)
- Личные оскорбления, особенно с использованием расистских или сексистских терминов
- Непрошенное сексуальное внимание
- Пропаганда или поощрение любого из вышеперечисленных действий
- Неоднократное преследование других лиц.В общем, если вас попросят остановиться, то остановитесь
Мой опыт работы с кодексом поведения NumFOCUS поднимает несколько ключевых вопросов:
- Процесс принудительного исполнения правил включал противоречивую и изменяющуюся информацию, отсутствие у меня возможности внести свой вклад, стресс от долгого ожидания неизвестной продолжительности без информации о том, в чем меня обвиняли или что произойдет дальше, и члены комитета нарушили свои собственный CoC в процессе
- Существовали два совершенно разных Кодекса поведения с разными требованиями, привязанные в разных местах
- Я придерживался другого, недокументированного и неустановленного стандарта
- О существовании сертификата соответствия или подробных сведениях о нем не сообщалось до подтверждения соглашения Эксперты
- CoC рекомендуют избегать требований вежливости или других форм «надлежащего» поведения, но должны сосредоточиться на конкретном списке недопустимого поведения.Однако CoC JupyterCon почти полностью представляет собой список «правильных» поведений (таких как «Будьте приветливы», «Будьте внимательны» и «Будьте дружелюбны»), которые расплывчато определены Эксперты
- CoC рекомендуют использовать CoC, который фокусируется на списке недопустимого поведения. Оба кода, связанные с JupyterCon, имеют такую ссылку, и ни один из примеров неприемлемого поведения никоим образом не связан или близок к тому, что произошло в этом случае. Но NumFOCUS, тем не менее, нашел меня нарушителем.
Я бы предпочел вообще не писать этот пост.Однако я знаю, что люди будут спрашивать, почему мой доклад недоступен на сайте JupyterCon, поэтому я решил, что должен объяснить, что именно произошло. В частности, я был обеспокоен тем, что, если бы была доступна только частичная информация, анти-CoC толпа могла бы наброситься на это как на пример проблем с кодексами поведения в более общем смысле, или могла бы указать на это как на часть «культуры отмены» (концепция Я категорически не согласен с этим, поскольку то, что называется «отмена», часто означает «столкновение с последствиями»).Наконец, я обнаружил, что, находясь на «другой стороне» вопроса о кодексе поведения, я получил дополнительное понимание процесса, и что мне важно поделиться этими мыслями, чтобы помочь сообществу в будущем.
Детали
Остальная часть этого поста представляет собой довольно подробный отчет о том, что произошло, для тех, кто заинтересован.
Мой доклад на JupyterCon
Я недавно выступал на JupyterCon. Моя партнерша Рэйчел выступала с докладом на JupyterCon пару лет назад и получила прекрасный опыт, а я большой поклонник Jupyter, поэтому я хотел поддержать проект.Раньше конференцию организовывал О’Рейли, который всегда отлично справлялся с конференциями, на которых я присутствовал, но в этом году конференцию организовал NumFOCUS.
В своем выступлении я решил сосредоточиться на Jupyter как на среде грамотного и исследовательского программирования, использующей nbdev. Однако одна проблема заключается в том, что двумя годами ранее Джоэл Грус провел блестящую презентацию под названием «Мне не нравятся записные книжки», которая была настолько убедительной, что я обнаружил, что почти невозможно говорить о программировании на Jupyter, не сказав: «Вам следует посмотреть это. разговор, который объясняет, почему программирование на Jupyter — ужасная идея ».
Джоэл открывал и завершал свою презентацию с беззаботной раскопки в мою сторону, так как я заранее попросил его , а не , сделать такую презентацию. Поэтому я подумал, что убью двух зайцев одним выстрелом и воспользуюсь возможностью ответить ему напрямую. Мало того, что его презентация была блестящей, но и его слайды были веселыми, поэтому я решил напрямую пародировать его выступление, используя (конечно, с полной честью) некоторые из его слайдов. Таким образом, люди, которые не видели его выступления, могли не только насладиться фантастическим содержанием, но и понять, на что я отвечал.Например, вот как Джоэл проиллюстрировал проблему запуска ячеек в правильном порядке:
Я показал этот слайд, объяснив, что это взгляд Джоэла на проблему, а затем представил слайд, показывающий, насколько просто на самом деле запустить все ячейки по порядку:
Каждый слайд включал отрывок из титульного слайда Джоэла, который, как я объяснил, показывает, какие слайды были взяты непосредственно из его презентации. Я был осторожен, чтобы никоим образом не модифицировать ни один из его слайдов. Когда я впервые представил его презентацию, я охарактеризовал Джоэла как «блестящего коммуникатора, действительно забавного и неправильного».Других комментариев о Джоэле я не делал (хотя, для протокола, я считаю, что он классный, и очень рекомендую его книгу.
Уведомление о нарушении Кодекса поведения
Неделю спустя я получил электронное письмо, в котором говорилось, что были поданы два отчета CoC относительно моей основной презентации JupyterCon. Мне сказали, что «Группа по обеспечению соблюдения Кодекса поведения соберется завтра, чтобы рассмотреть инцидент, и свяжется с вами, чтобы проинформировать вас о характере отчета и понять вашу точку зрения».
CoC вообще не упоминался до тех пор, пока меня не пригласили выступить, я согласился и не завершил онлайн-регистрацию. Я просмотрел его тогда и был немного сбит с толку. В полученном мной электронном письме содержится ссылка на Кодекс поведения JupyterCon, но в нем, в свою очередь, не содержится подробных сведений о том, что является нормальным, а что нет, и что, в свою очередь, связано с другим Кодексом поведения NumFOCUS. Также была предоставлена ссылка для сообщения о нарушениях, которая также связана с NumFOCUS CoC и называется ею.
Я был обеспокоен тем, что сделал что-то, что могло бы рассматриваться как нарушение, и с нетерпением ждал возможности услышать о характере отчета и возможности поделиться своей точкой зрения.Меня воодушевило то, что JupyterCon задокументировал, что они следуют Руководству по обеспечению соблюдения NumFOCUS. Меня также воодушевило то, что в руководстве есть раздел «Общение с сообщенным лицом об инциденте», в котором говорится, что они «позволят заявителю рассказать кому-нибудь из группы реагирования CoC свою точку зрения; человек, который понимает свою точку зрения, должен быть готов изложить ее на собрании группы реагирования ». Мне также было приятно видеть, что большая часть руководства и кодекса поведения следовала советам (и даже использовала некоторые формулировки) блестящих людей из Ada Initiative, которые чрезвычайно заботятся о том, как разрабатывать и применять кодексы поведения.
Одна из проблем заключается в том, что CoC JupyterCon основан на Django, в котором есть очень общие правила, такие как «Будьте приветливы» и «Будьте внимательны», которые могут быть восприняты разными людьми по-разному. Кодекс NumFOCUS намного яснее, с конкретным списком «неприемлемого поведения», хотя этот список включает «другое неэтичное или непрофессиональное поведение», что вызывает беспокойство, поскольку «непрофессиональное» может быть всеобъемлющим механизмом контроля за кем бы то ни было, «профессия», которую считают противоречащей их особым нормам, не может быть обоснованно известно тем, кто находится вне группы (например, я).
Некоторые из этих вопросов обсуждаются в отличной презентации Валери Аврора, которая объясняет, что «кодекс поведения должен содержать» «поведение, которое многие люди считают приемлемым, но неприемлемым в вашем сообществе», и что «Если вы хотите перечислить хорошее поведение или опишите общественный идеал поведения, сделайте это в отдельном документе », и в частности« Не требуйте вежливости или других форм «надлежащего» поведения ». Практически все кодекса поведения JupyterCon представляют собой список форм «правильного» поведения (например,грамм. «Быть дружелюбным», «быть приветливым», «быть уважительным» и т. Д.) Хотя более широкие и более субъективные ценности, такие как «будь добр», могут быть полезны как часть ценностей конференции, менее ясно, если и даже как они должны соблюдаться посредством кодекса поведения.
В целом, я был очень взволнован, но надеялся, что это скоро разрешится.
Звонки
Обещанный звонок случился на следующий день. Однако представитель сказал мне, что они будут , а не информировать меня о характере отчета в то время и не будут пытаться понять мою точку зрения в то время.Я спросил, почему меняются планы. Представитель объяснил, что у них было заседание комитета, и они решили подождать, пока они не поговорите с двумя репортерами.
Я был ошеломлен. Представитель не мог даже назначить время, когда они вернутся ко мне или скажут, что будет дальше. Я сказал им, что, по моему мнению, сказать кому-то, что у них есть отчет о нарушении, но потом не сказать, что это такое, или когда и смогут ли они изложить свою точку зрения, или предоставить какие-либо временные рамки для любого следующего шага было жестоко.Я сказал им, что моя эмоциональная устойчивость невысока, поскольку я имел дело с серьезными проблемами со здоровьем в семье, и что я надеюсь, что они рассмотрят возможность изменения своего подхода к другим людям в будущем, чтобы им не пришлось иметь дело с бессрочное и непонятное обвинение, как и я.
Представитель объяснил, что я «заставил по крайней мере двух человек почувствовать себя некомфортно». Я сказал им, что действительно не считаю это справедливым. Мы не должны нести ответственности за чувства других людей.Как сторонник ненасильственного общения, я считаю, что мы должны делиться своими чувствами в ответ на слова или поступки других, но не должны обвинять других в этих чувствах. Более того, если требуется, чтобы во время разговора люди чувствовали себя комфортно, это должно быть четко изложено и задокументировано (NumFOCUS не сделал ни того, ни другого).
Следующего звонка не было еще неделю (я был готов встретиться в любое время). Я был шокирован, когда прочитал, что целью звонка будет «обсуждение результатов нашего расследования».Я не мог понять, как они могли завершить свое расследование и получить результаты без моего участия. Тем не менее я согласился на звонок; Я подумал, что все, что мне нужно сделать, это позвонить, услышать результаты, и все готово.
Отчеты
Во время звонка я с удивлением обнаружил, что сталкиваюсь с четырьмя людьми. Предыдущий звонок был только с одним, и внезапно, когда я оказался в меньшинстве, я почувствовал себя очень напуганным. Один из представителей начал с того, что рассказал мне, в чем заключалась находка.Журналисты заявили, и комитет согласился, что действительно имело место нарушение кодекса поведения, в частности, не проявлять доброту к другим и «оскорблять других».
Я был ошеломлен. Я считаю, что Джоэл великолепен, и я точно знаю, что он не против, чтобы его называли «неправильным» (после того звонка, который я у него проверил). Я определенно не оскорблял его. Я сказал, что считаю его подход к кодированию неоптимальным, и в частности, он выиграет от использования Jupyter. Чтобы продемонстрировать это, я показал отрывок из его живого кодирования.Меня шокировало, что частью выводов комитета будет утверждение относительно , почему я показал именно тот слайд, особенно с учетом того, что они даже не спросили. У меня нет желания дискредитировать Джоэла, и я не думаю, что мое мнение о том, что его система кодирования не оптимальна, следует рассматривать как пренебрежение к его характеру.
Можно утверждать, что я не был «добрым». Думаю, может. Я сделал пародию. В некотором смысле, этот относится к типу — он показывает, что (и я прямо сказал это), что я считаю его презентацию блестящей и очень влиятельной, поскольку я потратил значительное количество времени на ее изучение и работу с шутками. и структурировать как можно лучше.С другой стороны, я действительно сказал, что он неправ, и попытался показать ошибки, которые он допустил, указав на них прямо на своих слайдах; Я не думаю, что это плохо, но похоже, что комитет NumFOCUS не согласен. Лично я не думаю, что можно утверждать, что я оскорблял его. Вполне возможно поспорить с кем-то и сказать, что он неправ, не утверждая, что он плохой человек или не говоря о себе ничего плохого. CoC JupyterCon даже упоминает об этом: «Когда мы не согласны, попытайтесь понять, почему. Разногласия, как социальные, так и технические, случаются постоянно, и Jupyter не исключение ».
Существует огромное несоответствие между примерами, представленными в кодах Jupyter и NumFOCUS, по сравнению с тем, за что меня обвинили. Вот список «недопустимого поведения» от NumFOCUS:
- Использование сексуализированного языка или образов
- Чрезмерная ненормативная лексика (пожалуйста, избегайте ругательств; люди сильно различаются по своей чувствительности к ругательствам)
- Публикация материалов сексуального или насильственного характера
- Жестокие или запугивающие угрозы или выражения в адрес другого человека
- Неприемлемый физический контакт и / или нежелательное сексуальное внимание или сексуальные комментарии
- Сексистские, расистские или иным образом дискриминационные шутки и выражения
- Троллинг или оскорбительные и уничижительные комментарии
- Письменные или устные комментарии, которые исключают людей на основании принадлежности к определенной группе, включая уровень опыта, пол, гендерную идентичность и самовыражение, сексуальную ориентацию, инвалидность, нейротип, внешность, размер тела, расу, этническую принадлежность , возраст, религия или национальность
- Публичное или частное преследование
- Совместное использование личного содержания, такого как электронные письма, отправленные частным или частным образом, или история прямых сообщений без согласия отправителя
- Продолжение взаимодействия (например, фотографирование, запись, обмен сообщениями или беседа) с кем-либо после того, как вас попросили прекратить
- Постоянное прерывание переговоров, мероприятий или коммуникации, например крик говорящего
- Публикация (или угроза публикации) личной информации других людей («доксинг»), такой как физические или электронные адреса, без явного разрешения
- Другое неэтичное или непрофессиональное поведение
- Пропаганда или поощрение любого из вышеперечисленных действий
Они также предоставляют следующие образцы оценки воздействия в своем руководстве по применению:
Я полностью согласен с тем, что это поведение следует пресекать, и сообщество должно объединиться, чтобы поддержать это.Но это не то поведение, на котором комитет NumFOCUS сосредоточил внимание в этом случае, или в тех разделах CoC, которые я, как было установлено, нарушил.
Я понятия не имею, что здесь произошло — почему некоторые люди решили использовать код, который, по-видимому, был написан таким образом, чтобы защитить людей от сексизма, насилия, расизма и запугивания. Я знаю, что нажил много врагов в этом году, выступая за универсальную маскировку, и в результате мне приходилось иметь дело с постоянными преследованиями и даже угрозами смерти.За последние годы я также получил много оскорблений от некоторых из-за моих попыток демократизировать ИИ, от тех, кто чувствовал угрозу своему привилегированному положению.
Что теперь?
После того, как они рассказали мне о сообщениях и своем заключении о том, что я нарушил кодекс поведения, они спросили, есть ли у меня что сказать. Я сказал им, что нет. Я только мысленно подготовил себя к тому, о чем, по их словам, был звонок: сообщить мне о результатах. Я сказал им, что не думаю, что это будет так полезно, поскольку они уже завершили свое расследование и сделали свои выводы.У меня не было эмоциональной стойкости, чтобы участвовать в дискуссии, и я им это сказал. Затем один человек усмехнулся в ответ, и, пока я изо всех сил сдерживал слезы, он начал довольно подробно рассказывать о том, какой следующий этап для меня — помочь им определиться с дальнейшими шагами.
Я уже сказал комитету, что не могу провести обсуждение. Одно из «неприемлемых действий» NumFOCUS: «Продолжать инициировать взаимодействие (например, фотографирование, запись, обмен сообщениями или разговор) с кем-то после того, как его попросили остановиться.Поскольку он проигнорировал мою просьбу, я прервал его, повторил, что не могу продолжать, и прекратил разговор. Мне действительно не хотелось, чтобы комитет людей, которых я не знал, смотрел, как я плачу.
Я независимый самофинансируемый исследователь. У меня нет команды юристов, команды связи или коллег, которые могли бы поддержать меня. Я редко выступаю на конференциях, которые в основном собирают люди из крупных компаний, хорошо финансируемых университетов и горячих стартапов.
Кажется, что, возможно, политика NumFOCUS просто не предназначена для учета прав и психического здоровья обвиняемых.Их политика гласит: «Как можно скорее сообщите заявителю, что на него поступила жалоба (до собрания группы реагирования)», и что, приближаясь к обвиняемому, они должны сказать: «Такое поведение не подходит для нашего мероприятия. / meetup ‘, и они должны «подчеркнуть результат / влияние поведения и то, что оно должно прекратиться / прекратиться». Короче говоря, многие части документа, в том числе и этот, предполагают вину и не проявляют никакого уважения к обвиняемым. Возможность неправомерного использования и использования такого кода в качестве оружия вызывает обеспокоенность.
Я старался по возможности участвовать в публичных выступлениях, чтобы поддержать сообщество. Однако потенциальные затраты слишком велики, и лично для меня нет реальных преимуществ, поэтому я не ожидаю, что буду принимать приглашения в будущем, по крайней мере, в ближайшее время. Я, конечно, выполню уже взятые на себя обязательства.
Мне не удалось справиться с процессом NumFOCUS CoC. Хотя сейчас я не в лучшем положении, чтобы справиться с подобными вещами, мне гораздо лучше, чем многим.Во-первых, я белый, цис-гетеросексуальный мужчина, и в моей жизни я добился определенных успехов, которые укрепили мою уверенность в себе. Я также финансово независим и не нуждаюсь в одобрении или поддержке влиятельной организации NumFOCUS. Многие люди, оказавшиеся в такой же ситуации, вполне могут чувствовать себя вынужденными согласиться с этим процессом, даже если это эмоциональное бремя, с которым они не могут справиться. Многие люди, не пользующиеся моей привилегией, могут даже не осознавать, что у них есть способность сказать «нет».Комитет предполагал, что у меня хватит душевной стойкости, чтобы быть готовым с помощью видео встретиться с четырьмя незнакомыми людьми, которые рассказали мне о моих «нарушениях» и потребовали, чтобы я помог им определиться с дальнейшими шагами. Ограничение спикеров конференции NumFOCUS только теми, кто готов и может справиться с такой ситуацией, может значительно ограничить разнообразие конференций NumFOCUS. NumFOCUS недавно «сильно облажался», и ему предстоит много работы, чтобы улучшить разнообразие в своем сообществе. Улучшение Кодекса поведения и процесса его исполнения для соответствия идеалам доброты, справедливости, уважения и внимательности, которые он требует от других, может помочь в этом направлении.
Я не хочу, чтобы эта ситуация помешала моей работе быть доступной, поэтому я создал новую независимую запись выступления, используя те же самые слайды и материал. Однако я не использовал сценарий ни для одного из выступлений, поэтому формулировки не будут идентичными. Видео ниже. Слайды PowerPoint здесь.
PS: Для многих друзей, которые у меня есть в NumFOCUS, и для тех, кто участвует во многих проектах, которые я использую и которыми восхищаюсь в NumFOCUS: это не о вас. Вы все по-прежнему такие же замечательные, как и прежде, и я очень надеюсь, что мой опыт общения с вашим комитетом по Кодексу поведения никоим образом не повлияет на наши отношения.
11 сен 2020 Джереми Ховард
Если вы сейчас находитесь на западе США (как и мы), возможно, вам трудно дышать. Вдыхание воздуха, содержащего пожары, может вызвать у вас ужасное самочувствие, а также отрицательно сказаться на здоровье в долгосрочной перспективе. Дым от лесных пожаров содержит мелкие твердые частицы, известные как «PM2,5», которые можно вдохнуть глубоко в легкие. «2,5» здесь относится к размеру частиц — они составляют 2,5 микрона или меньше.Чтобы увидеть качество воздуха в вашем районе, посмотрите эту карту AirNow. Как только он станет оранжевым, вы можете почувствовать эффект. Если он красный или фиолетовый, вы почти наверняка так и сделаете. (Иногда на улице может казаться дымок, но качество воздуха может быть нормальным, потому что дым может быть выше в атмосфере.)
Хорошая новость в том, что вы можете многое сделать, чтобы воздух, которым вы дышите, стал намного лучше. Вам может быть интересно, почему такой ученый, как я, комментирует фильтрацию воздуха … Причина в том, что я был лидером движения Masks4All, в том числе написал первую и наиболее полную научную статью по этой теме, что означало, что я очень внимательно изучал фильтрацию для месяцы.Фактически, размер частиц, которые мы хотим заблокировать от лесных пожаров, очень похож на размер частиц, которые мы хотим заблокировать от covid-19!
Содержание
Три способа вдохнуть более чистый воздух — это надеть маску, отфильтровать домашний центральный кондиционер или обогреватель и использовать вентиляторы с фильтрами. Я покажу вам подробности ниже. (В этом посте довольно много ссылок на места, где можно купить продукты; я не получаю от них никаких комиссионных или чего-либо еще, это просто вещи, которые я лично считаю полезными.)
Маски
Поэтому вы не удивитесь, узнав, что одно из самых эффективных действий, которое вы можете сделать, — это носить маску. Чтобы заблокировать большинство частиц PM2,5, вам понадобится хорошо подогнанная маска, в которой используется хороший фильтрующий материал. Я уже подготовил совет по этой теме для COVID-19, и почти все они точно такие же, как и для PM2,5 при лесных пожарах, так что прочтите это сейчас. Немного менее важной проблемой является раздел «Санитария» — частицы PM2,5 от лесных пожаров не вызывают болезней, поэтому вам нужно беспокоиться о санитарии только в том случае, если ваша маска действительно пачкается (или если вы были в общественных местах с ним).
Лично мне нравится нано-маска O2 или любая хорошо подогнанная маска, в которую можно вставить фильтр Filti. Недавние научные исследования аэрозолей показывают, что воротник, сложенный в два слоя, тоже хорошо работает (но не забудьте добавить зажим для носа, чтобы убрать щели вокруг носа). Посетите Etsy, чтобы увидеть множество дизайнов масок, которые включают карман для фильтра и зажим для носа.
Выбирайте из тысяч дизайнов масок с карманом для фильтраФильтрация домашнего воздуха
Основная идея заключается в том, чтобы постоянно пропускать воздух в доме через фильтр.Фильтр — это просто кусок материала, через который воздух может проходить, а частицы PM2,5 — нет. Нет идеального фильтра, но есть доступные варианты, которые работают очень хорошо. Фильтры имеют рейтинг MERV, который показывает, сколько мелких частиц они удаляют. Для лесного пожара вам обычно нужен MERV 13.
Не покупайте фильтр с самым высоким рейтингом, который только можете найти. Фильтры с более высоким рейтингом имеют меньшие отверстия (вообще говоря), что означает, что они также не пропускают воздух так быстро. Помните, мы хотим, чтобы ваш домашний воздух быстро проходил через фильтр, чтобы весь ваш воздух очищался, поэтому мы не хотим, чтобы фильтр слишком сильно отрицательно влиял на воздушный поток.Я рекомендую воздушные фильтры Filtrete ™ Healthy Living. Они имеют хороший воздушный поток даже для спецификации MERV 13.
Добавление фильтра в систему кондиционирования воздуха
Если у вас есть центральное отопление или кондиционер, то вам повезло. У этого будут сильные фанаты, которые охватят все ваши комнаты. Хитрость заключается в том, чтобы фильтровать воздух, поступающий в систему с номерами и . Почти все домашние системы просто втягивают воздух через большое вентиляционное отверстие внутри вашего дома. В некоторых блоках есть прорезь для фильтра в самом блоке, тогда как в некоторых приточное отверстие находится в совершенно отдельном месте в доме.Обратите внимание, что кондиционеры выдувают воздух из снаружи дома, но они не всасывают воздух в снаружи дома (за исключением, как правило, более модных систем HVAC в коммерческих зданиях).
Как только вы найдете впускное отверстие, через которое поступает центральный воздух, добавьте к нему фильтр. Если он уже есть, убедитесь, что это MERV 13 или 14. Вы должны менять его каждые 3 месяца или около того (в зависимости от бренда). Вытяжка с установленным фильтром выглядит так:
Впускное отверстие с фильтром снизу.NB : На большинстве фильтров сбоку есть стрелка, показывающая направление воздушного потока.Так что убедитесь, что вы все правильно написали! Кроме того, убедитесь, что вы покупаете правильный размер. Измерьте размер вентиляционного отверстия и купите фильтр на , по крайней мере, на , достаточно большой, чтобы закрыть отверстие. Если есть зазоры, воздух будет проходить через них, а не через ваш фильтр!
Если нет очевидного места для установки фильтра на вентиляционное отверстие, вам нужно проявить творческий подход. Это может выглядеть не очень красиво, но вы всегда можете просто снять вентиляционную крышку и закрепить фильтр прямо сверху, используя ленту, липкую ленту и т. Д.
После того, как вы установили фильтр, самое важное — настроить систему кондиционирования таким образом, чтобы вентилятор работал все время . Большинство систем имеют настройку «авто», при которой вентилятор включается только при нагреве или охлаждении. Ты этого не хочешь! Установите вентилятор на «вкл», а не на «авто». Таким образом, через фильтр будет проходить как можно больше воздуха.
Добавление фильтров к вентиляторам и переносному кондиционеру
Я рекомендую иметь очиститель воздуха в каждой комнате.Большинство очистителей воздуха на самом деле не так много, потому что обычно они тихие и маленькие (что означает, что они не пропускают много воздуха). В продаже есть очень большие очистители, но они очень дорогие, и в настоящее время их часто распродают.
Но мы можем создать собственный очиститель воздуха, который работает так же или лучше, чем большие дорогие. Очиститель воздуха — это вентилятор, продувающий воздух через фильтр. Итак, если мы используем большой вентилятор и хороший фильтр, то у нас будет хороший очиститель воздуха! Уловка состоит в том, чтобы купить 20-дюймовый «коробчатый вентилятор» (который представляет собой просто вентилятор в 20-дюймовой квадратной коробке) и вставить перед ним 20-дюймовый фильтр.Мы выбрали 20 дюймов, потому что это довольно много, а больший вентилятор и больший фильтр означают, что за определенное время может произойти большая фильтрация.
Я купил несколько таких коробчатых вентиляторов: 3-скоростной коробчатый вентилятор PELONIS. Я не говорю, что этот лучше или хуже любого другого — просто покупайте все, что попадется вам в руки. Вам нужен тот, который имеет настройку высокой скорости, чтобы пропускать много воздуха.
Для фильтров подойдет что-нибудь подходящего размера и спецификации MERV 13 или 14. Я купил этот пакет из 6 20-дюймовых фильтров Filtrete.Как правило, фильтры более высокого качества обеспечивают лучшую циркуляцию воздуха. Также более толстые фильтры могут увеличить поток воздуха; например вместо фильтров 20x20x1, которые я получил, вы можете попробовать фильтры 20x20x4 (4 дюйма толщиной).
У купленных мной вентиляторов есть переключатель включения / выключения / скорости на передней панели, поэтому я сначала повернул его на максимальную скорость, поскольку после того, как я прикрепил фильтр, я больше не мог получить доступ к переключателю. Затем я наклеил эту клейкую пену на переднюю поверхность вентилятора, стараясь не оставлять зазоров.Идея в том, что когда я наклею на него вентилятор, будет как можно меньше зазоров. С таким же успехом, вероятно, можно было бы наклеить длинный кусок плаката вокруг лицевой стороны. Наконец, я приклеил фильтр к передней части вентилятора, используя большое количество высококачественной упаковочной ленты.
Готовый очиститель воздуха своими рукамиЭти штуки довольно шумные! Но это намного лучше, чем задымленный дом. Они также неплохо помогают сдерживать COVID-19, поэтому, если у вас есть магазин или бизнес, разбросайте несколько из них по всему дому, если у вас нет хорошей системы вентиляции и кондиционирования с высокой скоростью изменения.
Другой подход, который я нашел полезным, — это покупка компактного портативного кондиционера. Они поставляются со шлангом, который выдувает горячий воздух через окно и всасывает воздух через переднюю или заднюю часть устройства. Вы можете прикрепить фильтр перед тем местом, где он всасывает воздух, используя тот же подход, что и вентилятор, описанный выше.
Благодарности
Большое спасибо Джиму Розенталю из Tex-Air Filters и Ричарду Корси за идею домашнего очистителя воздуха. У Джима есть более модная версия для людей с ограниченным бюджетом.Спасибо также Хосе-Луису Хименесу, Линси Марр, Владимиру Здималу, Адриану Баксу и Кимберли Пратер за многочисленные обсуждения, которые помогли мне улучшить мое (все еще ограниченное!) Понимание науки об аэрозолях.
21 августа 2020 Джереми Ховардfast.ai — это самофинансируемая лаборатория для исследований, разработки программного обеспечения и обучения, цель которой — сделать глубокое обучение более доступным. Мы делаем все наше программное обеспечение, исследовательские работы и курсы бесплатно доступными без рекламы. Мы оплачиваем все расходы из собственных средств и не берем никаких грантов или пожертвований, поэтому вы можете быть уверены, что мы действительно независимы.
Сегодня самый важный день для fast.ai в нашей четырехлетней истории. Выпускаем:
- fastai v2: полная переписанная версия fastai, которая стала быстрее, проще и гибче, реализующая новые подходы к проектированию фреймворка глубокого обучения, как обсуждалось в рецензируемой академической статье fastai .
- fastcore, fastscript и fastgpu: базовые библиотеки, используемые в fastai v2 и полезные для многих программистов и специалистов по данным.
- Практическое глубокое обучение для программистов (курс 2020, часть 1): включает введение в машинное обучение и глубокое обучение, а также производство и развертывание продуктов данных
- Deep Learning for Coders with fastai и PyTorch: AI Applications Without PhD: книга от O’Reilly, которая охватывает тот же материал, что и курс (включая содержание, запланированное для части 2 курса)
Кроме того, на случай, если вы его пропустили, ранее на этой неделе мы выпустили курс «Практическая этика данных», в котором основное внимание уделяется темам, которые являются как срочными, так и практическими.
Содержание
fastai v2
fastai — это библиотека глубокого обучения, которая предоставляет практикам компоненты высокого уровня, которые могут быстро и легко обеспечивать самые современные результаты в стандартных областях глубокого обучения, а также предоставляет исследователям компоненты низкого уровня, которые можно смешивать и сопоставлять с ними. строить новые подходы. Он направлен на решение обеих задач без существенного ущерба для простоты использования, гибкости и производительности. Это возможно благодаря тщательно продуманной многоуровневой архитектуре, которая выражает общие базовые шаблоны многих методов глубокого обучения и обработки данных в терминах разделенных абстракций.Эти абстракции можно выразить кратко и ясно, используя динамизм основного языка Python и гибкость библиотеки PyTorch. fastai включает:
- Новая система диспетчеризации типов для Python вместе с семантической иерархией типов для тензоров
- Оптимизированная для графического процессора библиотека компьютерного зрения, которая может быть расширена на чистом Python
- Оптимизатор, который преобразует общие функции современных оптимизаторов в две основные части, позволяя реализовать алгоритмы оптимизации в 45 строках кода.
- Новая двусторонняя система обратного вызова, которая может получить доступ к любой части данных, модели или оптимизатора и изменить ее в любой момент во время обучения
- Новый блок данных API
- И многое другое… Многоуровневая архитектура
fastai организована вокруг двух основных целей проектирования: быть доступным и быстро производительным, а также быть глубоко взломаемым и настраиваемым.Он построен на основе иерархии API нижнего уровня, которые предоставляют составляемые строительные блоки. Таким образом, пользователю, желающему переписать часть высокоуровневого API или добавить определенное поведение в соответствии со своими потребностями, не нужно учиться использовать самый низкий уровень.
Чтобы увидеть, что возможно с fastai, взгляните на Quick Start, в котором показано, как использовать около 5 строк кода для создания классификатора изображений, модели сегментации изображений, модели тональности текста, системы рекомендаций и табличной модели. .Для каждого из приложений код во многом одинаков.
Пример использования fastai для сегментации изображенийПрочтите учебные пособия, чтобы узнать, как обучать собственные модели на собственных наборах данных. Используйте боковую панель навигации, чтобы просмотреть документацию Fastai. Здесь описаны все классы, функции и методы. Чтобы узнать о дизайне и мотивации библиотеки, прочитайте рецензируемый документ или посмотрите эту презентацию, в которой резюмируются некоторые ключевые моменты дизайна.
Все быстро.Проекты ai, включая fastai, создаются с помощью nbdev, полностью грамотной среды программирования, построенной на Jupyter Notebooks. Это означает, что к каждой части документации можно получить доступ как к интерактивным записным книжкам Jupyter, и каждая страница документации включает ссылку, чтобы открыть ее непосредственно в Google Colab, чтобы можно было экспериментировать и настраивать.
Очень легко перейти с простого PyTorch, Ignite или любой другой библиотеки на основе PyTorch или даже использовать fastai вместе с другими библиотеками.Как правило, вы сможете использовать весь имеющийся у вас код обработки данных, но сможете сократить объем кода, необходимый для обучения, и с большей легкостью воспользоваться преимуществами современных передовых методов. Вот руководства по миграции из некоторых популярных библиотек, которые помогут вам на вашем пути: Plain PyTorch; Зажечь; Молния; Катализатор. А поскольку фреймворк fastai легко комбинировать с существующим кодом и библиотеками, вы можете просто выбрать нужные фрагменты. Например, вы можете использовать библиотеку компьютерного зрения fastai с ускорением на GPU вместе со своим собственным циклом обучения.
fastai включает множество модулей, которые добавляют функциональность, как правило, через обратные вызовы. Благодаря гибкой инфраструктуре все они работают вместе, так что вы можете выбирать то, что вам нужно (и добавлять свои собственные), в том числе: возможность комбинирования и вырезания, уникально гибкую структуру обучения GAN, ряд планировщиков (многие из которых недоступны). ‘недоступно ни в какой другой структуре), включая поддержку точной настройки в соответствии с подходом, описанным в ULMFiT, смешанную точность, накопление градиента, поддержку ряда фреймворков журналирования, таких как Tensorboard (с особенно сильной поддержкой весов и смещений, как показано здесь), медицинская визуализация и многое другое.Другие функции добавляются через экосистему fastai, такие как поддержка HuggingFace Transformers (что также можно сделать вручную, как показано в этом руководстве), аудио, ускоренный вывод и т. Д.
Медицинская визуализация в fastaiСообщество уже предоставило несколько отличных учебных материалов для fastai v2, например, серия Zero to Hero от Зака Мюллера: часть 1; Часть 2.
Практическое глубокое обучение для кодеров, курс
Предыдущие курсы fast.ai изучали сотни тысяч студентов из всех слоев общества со всех уголков мира.Многие студенты рассказали нам о том, как они стали многократными обладателями золотых медалей международных конкурсов по машинному обучению, получили предложения от ведущих компаний и опубликовали исследовательские работы. Например, Исаак Димитровский сказал нам, что « играл с ML в течение нескольких лет, не особо разбираясь в нем… [затем] прошел курс fast.ai, часть 1 в конце прошлого года, и мне понравился ». . Он занял первое место в престижном международном соревновании RA2-DREAM Challenge! Он разработал многоступенчатый метод глубокого обучения для оценки радиографических повреждений суставов рук и ног при ревматоидном артрите, воспользовавшись библиотекой fastai.
Курс этого года идет еще дальше. Он включает в себя как машинное обучение, так и глубокое обучение в одном курсе, охватывающем такие темы, как случайные леса, повышение градиента, наборы для тестирования и проверки и значения p, которые ранее были в отдельном курсе машинного обучения. Кроме того, также рассматриваются производство и развертывание, включая материалы по разработке графического веб-интерфейса для наших собственных приложений на базе глубокого обучения. Единственное необходимое условие — математика в средней школе и год опыта программирования (желательно на Python).Курс был записан в прямом эфире совместно с Институтом данных Университета Сан-Франциско.
По окончании курса вы будете знать:
- Как обучать модели, которые достигают самых современных результатов:
- Компьютерное зрение, включая классификацию изображений (например, классификацию фотографий домашних животных по породам), а также локализацию и обнаружение изображений (например, определение местоположения животных на изображении)
- Обработка естественного языка (NLP), включая классификацию документов (e.g., анализ тональности обзора фильма) и языковое моделирование
- Табличные данные (например, прогноз продаж) с категориальными данными, непрерывными данными и смешанными данными, включая временные ряды
- Совместная фильтрация (например, рекомендация фильма)
- Как превратить ваши модели в веб-приложения и развернуть их
- Почему и как работают модели глубокого обучения и как использовать эти знания для повышения точности, скорости и надежности ваших моделей
- Новейшие методы глубокого обучения, которые действительно важны на практике
- Как реализовать стохастический градиентный спуск и полный цикл обучения с нуля
- Как думать об этических последствиях своей работы, чтобы быть уверенным в том, что вы делаете мир лучше и что ваша работа не используется во вред
Мы очень заботимся об обучении, используя целостный игровой подход.В этом курсе мы начнем с демонстрации того, как использовать полную, работающую, очень удобную и современную сеть глубокого обучения для решения реальных проблем с использованием простых выразительных инструментов. А затем мы постепенно копаем все глубже и глубже в понимание того, как создаются эти инструменты, как создаются инструменты, из которых они изготавливаются, и так далее. Мы всегда учим на примерах. Мы гарантируем, что есть контекст и цель, которые вы можете понять интуитивно, а не начинать с алгебраических манипуляций с символами.Мы также углубляемся в детали, показывая вам, как построить все компоненты модели глубокого обучения с нуля, включая обсуждение производительности и деталей оптимизации.
Весь курс можно пройти бесплатно без какой-либо установки, воспользовавшись руководствами для платформ Colab и Gradient, которые предоставляют бесплатные ноутбуки с графическим процессором.
Глубокое обучение для кодеров с помощью fastai и PyTorch, книга
Чтобы понять, о чем новая книга и для кого она предназначена, давайте посмотрим, что говорят об этом другие … Сумит Чинтала, соавтор PyTorch, сказал в предисловии к Deep Learning for Coders with fastai и PyTorch:
Но, в отличие от меня, Джереми и Сильвен самоотверженно вложили огромное количество энергии в то, чтобы другим не пришлось идти по болезненному пути, по которому они пошли.Они создали отличный курс под названием fast.ai, который делает передовые методы глубокого обучения доступными для людей, знающих основы программирования. Он выпустил сотни тысяч активных учеников, которые стали великими практикующими.
В этой книге, еще одной неустанной работе, Джереми и Сильвен построили волшебное путешествие через глубокое обучение. Они используют простые слова и представляют каждое понятие. Они предоставляют вам передовые методы глубокого обучения и новейшие исследования, но при этом делают их очень доступными.
Вы познакомитесь с последними достижениями компьютерного зрения, погрузитесь в обработку естественного языка и выучите основы математики за 500-страничную увлекательную поездку. И поездка не заканчивается весельем, поскольку они проводят вас через внедрение ваших идей в производство. Вы можете относиться к сообществу fast.ai, тысячам практикующих в Интернете, как к своей большой семье, где такие люди, как вы, готовы поговорить и найти маленькие и большие решения, какой бы ни была проблема.
Питер Норвиг, директор по исследованиям Google (и автор окончательного текста по ИИ) сказал:
«Глубокое обучение — для всех» мы видим в главе 1, разделе 1 этой книги, и, хотя другие книги могут делать аналогичные утверждения, эта книга оправдывает их.Авторы обладают обширными знаниями в этой области, но могут описать ее таким образом, который идеально подходит для читателя, имеющего опыт программирования, но не машинного обучения. В книге сначала приводятся примеры, а теория рассматривается только в контексте конкретных примеров. Для большинства людей это лучший способ учиться. Книга представляет собой впечатляющую работу по охвату ключевых приложений глубокого обучения в области компьютерного зрения, обработки естественного языка и обработки табличных данных, но также охватывает такие ключевые темы, как этика данных, а также некоторые другие. книги скучаю.В целом, это один из лучших источников для программиста, чтобы овладеть глубоким обучением.
Кертис Ланглоц, директор Центра искусственного интеллекта в медицине и визуализации при Стэнфордском университете сказал:
Gugger and Howard создали идеальный ресурс для всех, кто хоть немного писал код. Эта книга и прилагаемые к ней курсы fast.ai просто и практически демистифицируют глубокое обучение, используя практический подход с заранее написанным кодом, который вы можете изучить и использовать повторно.Больше не нужно мучиться с теоремами и доказательствами абстрактных понятий. В главе 1 вы построите свою первую модель глубокого обучения, а к концу книги вы будете знать, как читать и понимать раздел «Методы» любой статьи по глубокому обучению.
fastcore, fastscript и fastgpu
фасткор
Python — мощный, динамичный язык. Вместо того, чтобы запекать все в языке, он позволяет программисту настроить его так, чтобы он работал на них. fastcore использует эту гибкость для добавления в Python функций, вдохновленных другими любимыми нами языками, такими как множественная отправка из Julia, миксины из Ruby, каррирование, привязка и многое другое из Haskell.Он также добавляет некоторые «недостающие функции» и устраняет некоторые острые углы в стандартной библиотеке Python, такие как упрощение параллельной обработки и перенос идей из NumPy в тип списка Python.
fastcore содержит множество функций. Подробную информацию о предоставленных модулях см. В документации:
-
test
: Простые функции тестирования -
foundation
: миксы, делегирование, состав и многое другое -
utils
: Служебные функции, помогающие с функциональным программированием, параллельной обработкой и т. Д. -
отправка
: несколько способов отправки -
преобразование
: конвейеры составных частично обратимых преобразований
fastscript
Иногда вам нужно создать быстрый сценарий либо для себя, либо для других.Но в Python это включает в себя множество шаблонов и церемоний, особенно если вы хотите поддерживать аргументы командной строки, предоставлять помощь и другие тонкости. Для этой цели вы можете использовать argparse, который поставляется с Python, но он сложен и многословен. fastscript упрощает жизнь. Фактически, это полноценное работающее приложение командной строки (не требуется никаких стандартных шаблонов Python, таких как if __name __ == 'main'
):
из импорта fastscript *
@call_parse
def main (msg: Param ("Сообщение", str),
верхний: Param ("Преобразовать в верхний регистр?", bool_arg) = False):
печать (сообщениеupper () если верхний else msg)
Когда вы запустите этот скрипт, вы увидите:
$ примеры Python / test_fastscript.py
использование: test_fastscript.py [-h] [--upper UPPER] сообщение
test_fastscript.py: error: необходимы следующие аргументы: msg
fastgpu
fastgpu предоставляет единственную команду fastgpu_poll
, которая опрашивает каталог для проверки наличия скриптов для запуска, а затем запускает их на первом доступном графическом процессоре. Если графических процессоров нет, он ждет, пока один из них не появится.Если доступно более одного графического процессора, несколько скриптов запускаются параллельно, по одному на каждый графический процессор. Это самый простой способ, который, как мы обнаружили, проводить исследования абляции, который задействует все ваши графические процессоры, не требует дополнительных затрат на параллельную обработку и не требует ручного вмешательства.
Благодарности
Большое спасибо всем, кто помог реализовать эти проекты, особенно Сильвен Гуггер, которая в течение последних двух лет тесно сотрудничала со мной в fast.ai. Спасибо также за поддержку со стороны Института данных Университета Сан-Франциско и Рэйчел Томас, соучредителю Fast.ai, который (среди прочего) преподал урок этики данных и разработал большую часть материала по этике данных в книге. Спасибо всем из сообщества fast.ai за ваш замечательный вклад.
.