Часть 8: Недопустимое название — Escape from Tarkov Wiki

Содержание

ГрК РФ Статья 39. Порядок предоставления разрешения на условно разрешенный вид использования земельного участка или объекта капитального строительства / КонсультантПлюс

ГрК РФ Статья 39. Порядок предоставления разрешения на условно разрешенный вид использования земельного участка или объекта капитального строительства

1. Физическое или юридическое лицо, заинтересованное в предоставлении разрешения на условно разрешенный вид использования земельного участка или объекта капитального строительства (далее — разрешение на условно разрешенный вид использования), направляет заявление о предоставлении разрешения на условно разрешенный вид использования в комиссию. Заявление о предоставлении разрешения на условно разрешенный вид использования может быть направлено в форме электронного документа, подписанного электронной подписью в соответствии с требованиями Федерального закона от 6 апреля 2011 года N 63-ФЗ «Об электронной подписи» (далее — электронный документ, подписанный электронной подписью).

(в ред. Федерального закона от 27.12.2019 N 472-ФЗ)

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

(часть 2 в ред. Федерального закона от 29.12.2017 N 455-ФЗ)

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

(в ред. Федерального закона от 29.12.2017 N 455-ФЗ)

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

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

(в ред. Федеральных законов от 29.12.2017 N 455-ФЗ, от 27.12.2019 N 472-ФЗ)

5 — 6. Утратили силу. — Федеральный закон от 29.12.2017 N 455-ФЗ.

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

(часть 7 в ред. Федерального закона от 29.12.2017 N 455-ФЗ)

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

(в ред. Федерального закона от 29.12.2017 N 455-ФЗ)

9. На основании указанных в части 8 настоящей статьи рекомендаций глава местной администрации в течение трех дней со дня поступления таких рекомендаций принимает решение о предоставлении разрешения на условно разрешенный вид использования или об отказе в предоставлении такого разрешения. Указанное решение подлежит опубликованию в порядке, установленном для официального опубликования муниципальных правовых актов, иной официальной информации, и размещается на официальном сайте муниципального образования (при наличии официального сайта муниципального образования) в сети «Интернет».

(в ред. Федерального закона от 31.12.2005 N 210-ФЗ)

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

(в ред. Федерального закона от 29.12.2017 N 455-ФЗ)

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

(в ред. Федерального закона от 29.12.2017 N 455-ФЗ)

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

(часть 11.1 введена Федеральным законом от 03.08.2018 N 340-ФЗ)

12. Физическое или юридическое лицо вправе оспорить в судебном порядке решение о предоставлении разрешения на условно разрешенный вид использования или об отказе в предоставлении такого разрешения.

Открыть полный текст документа

ГрК РФ Статья 36. Градостроительный регламент / КонсультантПлюс

ГрК РФ Статья 36. Градостроительный регламент

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

2. Градостроительные регламенты устанавливаются с учетом:

1) фактического использования земельных участков и объектов капитального строительства в границах территориальной зоны;

2) возможности сочетания в пределах одной территориальной зоны различных видов существующего и планируемого использования земельных участков и объектов капитального строительства;

3) функциональных зон и характеристик их планируемого развития, определенных документами территориального планирования муниципальных образований;

4) видов территориальных зон;

5) требований охраны объектов культурного наследия, а также особо охраняемых природных территорий, иных природных объектов.

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

4. Действие градостроительного регламента не распространяется на земельные участки:

1) в границах территорий памятников и ансамблей, включенных в единый государственный реестр объектов культурного наследия (памятников истории и культуры) народов Российской Федерации, а также в границах территорий памятников или ансамблей, которые являются выявленными объектами культурного наследия и решения о режиме содержания, параметрах реставрации, консервации, воссоздания, ремонта и приспособлении которых принимаются в порядке, установленном законодательством Российской Федерации об охране объектов культурного наследия;

(в ред. Федерального закона от 22.10.2014 N 315-ФЗ)

2) в границах территорий общего пользования;

3) предназначенные для размещения линейных объектов и (или) занятые линейными объектами;

(п. 3 в ред. Федерального закона от 20.03.2011 N 41-ФЗ)

4) предоставленные для добычи полезных ископаемых.

(п. 4 введен Федеральным законом от 31.12.2005 N 210-ФЗ)

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

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

6.1. До установления градостроительных регламентов в отношении земельных участков, включенных в границы населенных пунктов из земель лесного фонда (за исключением лесных участков, которые до 1 января 2016 года предоставлены гражданам или юридическим лицам либо на которых расположены объекты недвижимого имущества, права на которые возникли до 1 января 2016 года, и разрешенное использование либо назначение которых до их включения в границы населенного пункта не было связано с использованием лесов), такие земельные участки используются с учетом ограничений, установленных при использовании городских лесов в соответствии с лесным законодательством.

(часть 6.1 введена Федеральным законом от 29.07.2017 N 280-ФЗ)

КонсультантПлюс: примечание.

Разрешенное использование земельных участков особо охраняемой природной территории, которая полностью или частично расположена в границах земель лесного фонда, устанавливается положением об особо охраняемой природной территории (ФЗ от 03.08.2018 N 342-ФЗ).

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

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

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

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

Экономика Третьего Рейха. Часть 8

В.Рыжков― Здравствуйте. В эфире как всегда в это время на волнах радиостанции «Эхо Москвы» программа «Цена Победы». Сегодня я веду ее один, я – Владимир Рыжков. В гостях у меня наш постоянный в последнее время гость, доктор экономических наук Борис Ческидов.

Б.Ческидов― Добрый вечер.

В.Рыжков― Мы с Борисом делаем сериал в рамках нашей программы об экономике Третьего рейха. И дошли уже почти до самого конца войны. Мы в прошлый раз остановились, в нашем прошлом разговоре, мы остановились на неудаче заговора Штауффенберга. Это июль 44 года. И Борис рассказывал нам о том, что заговор Штауффенберга и попытка взорвать Гитлера, уничтожить Гитлера физически, что за ней стояли крайне правые политические круги Германии и крупные промышленники. Стоял Шахт, которому повезло, что никто не дал на него показания. И он избежал участи многих других участников заговора, которые были не только схвачены, но и казнены.

И Борис как раз начал рассказывать в завершение нашей прошлой программы, начал рассказывать о том, что после провала заговора, провала покушения гитлеровский режим в очередной раз радикально меняется. Видимо, это было последнее его изменение, потому что там оставалось тоже не так много времени, чуть меньше года, 10 месяцев оставалось до окончания войны. И вы начали рассказывать о том, что вот этот перелом привел к тому, что окончательно была разгромлена и отстранена старая родовитая военная аристократия, и что режим в очередной раз «полевел». Вот когда вы говорите, что режим в очередной раз «полевел», что вы вкладываете в это слово? «Левый поворот» — что это означало на последнем этапе войны? Что они там, с красными флагами стали ходить, или что? Маркса вспоминать?

Б.Ческидов― Флаги у них были красные, только в центре был белый круг с черной свастикой. Вспоминали они только Гитлера, у них особо других теоретических основ не было, в отличие от марксизма. Просто Гитлер стал рассматривать партию как основу своей власти. Как надежный элемент управления. Именно партию. А что у него оставалось?

В.Рыжков― А что у него оставалось?

Б.Ческидов― Бюрократия участвовала в заговоре. Особенно высшая.

В.Рыжков― СС?

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

В.Рыжков― Гестапо – тоже же опора?

Б.Ческидов― Про гестапо мы в самом начале говорили, оно просто численно с этим бы не справилось. СС… Мы отлично знаем, что силовики могут все, что угодно, кроме как управлять. Просто они под это не заточены. У них каждый… Каждый отдельный силовик может стать замечательным управленцем, но не в рамках силовой структуры, которая заточена не под это. Она по-другому распоряжается ресурсами.

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

А Гитлер, с другой стороны, хотя и сохранял почти до самого конца свой авторитет, подпитывать им партию уже не мог. То есть, делиться, как сейчас принято говорить… Тогда не было этого глупого и неприятного понятия «рейтинг», делиться своим имиджем с партией у Гитлера возможности не было. Мы говорили, что правящая элита была расколота совершенно сознательно. Еще при формировании самих принципов управления режима. Поэтому у истеблишмента не было ни коллективной воли, ни механизмов осуществления власти. Чтобы помешать Гитлеру вести Германию к своему концу. То есть, вот здесь возможности у них никакой не было.

И здесь есть еще один нюанс. Другие принципы управления, которые практиковал Гитлер. Вот есть замечательные документальные кадры, по-моему, они относятся к весне то ли 40, то ли 41 года. Сталин идет по Кремлю в окружении этих всех вождей. Впереди – Сталин в своей шинели еще того образца, которая под горло такая полугржданская. Рядом – Калинин. В своей шубке каракулевой. И шапочке пирожком. А сзади – остальные вожди, военные и гражданские. И вот Калинин разговаривает со Сталиным, и отчетливо видно, что, с одной стороны, он никому не отдал бы возможность сейчас с ним разговаривать, а с другой стороны – сам факт этого разговора для него смертельно страшен. То есть, вот ты сейчас что-то говоришь, и ты даже не понял, что ты что-то не так сказал. А вот ты уже и не жилец до завтра.

И остальные идут сзади, их лица видны хуже – не такое уж качество хроники…

В.Рыжков― Но им было легче.

Б.Ческидов― С одной стороны – завидуют, а с другой стороны – полегче.

В.Рыжков― Потому что фараон смотрит не на них.

Б.Ческидов― Да. А взгляд фараона настолько…

В.Рыжков― Ужасен.

Б.Ческидов― Он не ужасен. Он непредсказуем и не может быть истолкован. У Гитлера все было иначе. Близость к Гитлеру однозначно означала власть. Разговаривали с ним без страха. Я имею в виду, из тех, кого он считал, его не предавал, он никого не репрессировал. Отодвинуть…

В.Рыжков― Можно ли сказать, что он доверял этим людям?

Б.Ческидов― Нет. Просто стиль другой. Никому он не доверял, это мы увидим, когда пойдет речь о его последних днях. Просто другой стиль. Вот у него был другой… Что называется, порог расправы. Просто другой стиль. Эти люди же не были ему близки. У него был свой круг царедворцев, но никто никогда не мог сказать, что он знает настоящего фюрера и он на него влияет. Нет. Просто другой стиль. Но факт есть факт. Принципиально другой подход к руководству. Ротация не осуществлялась методами физического уничтожения, когда человек все, вычеркивается…

В.Рыжков― Борис, мне припоминается знаменитая сцена из всем известного фильма «17 мгновений весны». Помните, когда Штирлиц прикидывает, через кого вбросить дезинформацию или через кого выйти на руководство Рейха. Или у кого узнать детали переговоров… Попыток переговоров Гитлера с союзниками, помните? Он перебирает фотографии… Рисунки. И там Борман, который был главой аппарат партии. Генсек?

Б.Ческидов― Глава канцелярии партии.

В.Рыжков― Это, скорее, похоже на Черненко…

Б.Ческидов― Его должность – рейхсляйтер, глава канцелярии партии. И личный… Но это уже потом.

В.Рыжков― Вот, смотрите, партийный хозяин – это Борман. Второй рисунок у Штирлица – это глава СС, всемогущий и ужасный Гиммлер. Генрих Гиммлер. Третий – тоже всемогущий и тоже ужасающий, это Йоахим Геббельс. Который отвечал и за пропаганду, и за рейхспропаганду, и был, по-моему, главой партийного комитета Берлина. И четвертая фигура немного в стороне стоит, потому что она не ассоциируется непосредственно с нацистской партией, как Борман, Гиммлер и Геббельс – это Шпеер, который фактически глава правительства. Человек, отвечавший за экономику. И вот мы помним по фильму, что Штирлиц в итоге устраивает спецоперацию с Борманом. Помните, знаменитое – он ходит по музею с какими-то чучелами, потом они садятся в машину со шторкой, закрывается окно, отключается связь, и так, чтобы не слышал даже личный шофер Бормана, они там что-то обсуждают про эти все схемы.

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

Б.Ческидов― У Штирлица был вместо Шпеера Геринг.

В.Рыжков― А, Геринг еще.

Б.Ческидов― Ну, я Геринга выключил…

В.Рыжков― К тому времени Геринг вышел из доверия.

Б.Ческидов― Но у Штирлица он был. Я, в отличие от штандартенфюрера рисовать не умею, поэтому я воспользовался его рисунками. Борман…

В.Рыжков― Вы мне давайте, я буду показывать на камеру. Смотрите, уважаемые наши ютуберы… Это Борман.

Б.Ческидов― Только вы его поверните.

В.Рыжков― Вот-вот-вот… Кстати, сходство есть. Мы, кстати, делали с Дымарским программу о последних днях Бормана, подробно рассказывали об этом. Это Борман. Дальше?

Б.Ческидов― Гиммлер.

В.Рыжков― О, да. Кстати, тоже очень хорошее сходство. Вот вы видите, типичная гиммлеровская, простите, рожа. C черепом на фуражке. Борман. Гиммлер.

Б.Ческидов― Геббельс.

В.Рыжков― О, да. Это он. Это Геббельс.

Б.Ческидов― И, я, опять-таки, в отличие от Максима Максимовича Исаева рисовать не умею, за меня нарисовали Кукрыниксы на Нюрнбергском процессе.

В.Рыжков― Это кто?

Б.Ческидов― Шпеер.

В.Рыжков― Вот давайте о них и расскажем.

Б.Ческидов― Информация к размышлению, как говорили в фильме, звучит тревожно…

В.Рыжков― И часы должны «тик-так».

Б.Ческидов― И звучит тревожная музыка. Что происходит? Про разобщение управления государством мы говорили. Начинается, естественно, при таком разобщении жесткая аппаратная борьба. Характерный пример. Мы начинаем постепенно к Борману подбираться. Помните, мы говорили, что за распорядок дня Гитлера отвечало пять организаций, пять структур? Вот одна из них была имперской канцелярией под руководством Ламмерса. Он традиционно выступал медиатором между министрами и Гитлером. Но в результате того, как мы говорили, Гитлер все больше изолируется от советников, он превращается в простого медиатора распоряжений Бормана, который заведует партийной канцелярией и личной канцелярией фюрера. И в последний раз Ламмерс, глава Рейхсканцелярии, канцелярии министерской, видит в сентябре 44-го года. Чиновник такого рода в последний раз видит фюрера.

В.Рыжков― То есть, его отлучают?

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

Канцелярия под руководством Бормана только за 44 год выпускает 1372 циркуляра.

В.Рыжков― По четыре в день.

Б.Ческидов― Да. Это выпускает канцелярия. А есть еще объявления и приказы. Инструкции самого Гитлера. То есть, эти инструкции идут отдельно. Эта канцелярская горячка стремительно начинает распространяться в последние месяцы существования Рейха буквально на всех уровнях управления, хотя есть множество официальных требований экономить бумагу, ее брать уже неоткуда. Бюрократическая активность растет настолько, что министр почты пишет, это дословная цитата: «Нарастающая, как лавина, масса корреспонденции привела к значительному снижению эффективности почтовой службы».

В.Рыжков― Борис, это что было? Это хаотизация была? И паника?

Б.Ческидов― Нет. Это хаотизация за счет того, что нет централизованного управления. Не проходят команды сверху вниз. Вот пример – сотрудники Мюнхенского отделения полиции, разбомбили их, они остались без центрального отопления. Ну, казалось бы, тоже не проблема. Нет, они затеяли длинную объемную переписку для того, чтобы получить разрешение на установку железной печки. Переписываются… При этом сознательно создают ситуации слабой информированности об общей ситуации в стране. Даже самых высокопоставленных лиц. Меня вот поразили данные генерал-полковника Генриха фон Фитингхофа, который был последним главнокомандующим в Италии. Он пишет, что в 45 году в вермахте насчитывалось 1250 генералов. Общее представление о стратегической ситуации имело 50 из них. Ничтожная часть.

И здесь не могу себе не позволить привести замечательную цитату Яна Кершоу. Он написал по этому вопросу чрезвычайно интересную, всем рекомендую, книгу, «Агония и гибель» называется. Прямая цитата.

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

Фольксштурм создаются 25 сентября 44 года, но под другим названием раньше его придумывает Гудериан, который станет предпоследним начальником ОКХ, генерального штаба сухопутных войск. Идею тут же перехватывает глава СА Шепманн и начальник трудового фронта Лей. Но ни тому, ни другому контроль за Фольксштрумом не достается. Его «отжимает» себе Гиммлер, но отжимает не сам, а сначала при поддержке Геббельса, а потом к поддержке подключается Борман, который берет на себя…

В.Рыжков― Кстати, элементы вот этих ситуативных коалиций между этой четверкой, они есть и в фильме «17 мгновений весны». Помните, они там друг с другом все время созваниваются, встречаются, договариваются, кто против кого дружит? Шелленберг… Этот фильм отчасти отражает то, что там на самом деле было.

Б.Ческидов― Отражает очень хорошо, и мы сейчас увидим, как они все боролись, в том числе, за экономику. Точно так же «Верфольф» вот этот знаменитый. Его придумал, на самом деле, Лей, но, тем не менее, его «отжимают», в конце концов, Борман и Гиммлер. Хотя «Вервольф», на самом деле, организация малоэффективная. Они всего, вервольфовцы, уничтожили 3-5 тысяч человек. И в основном – немцев, которые сотрудничали с оккупационными властями.

В области экономики… Казалось бы, только что Борман с Леем воевал заодно. Теперь он воюет за другое. Он «отжал» у Бормана контроль за строительством фортификационных сооружений. И эта борьба идет до самого конца, до самого конца Гитлер сохраняет за собой роль единственного человека, который ее контролирует. А власть в ближнем кругу разделяет упомянутая нами четверка, которая ведет очень жесткую аппаратную борьбу.

Теперь о каждом. И об их роли в экономике. Борман.

Еще до того, как он стал соратником Гитлера, успел отсидеть за политическое убийство. Фигура очень темная. Он сделал карьеру, руководя личной бухгалтерией Гитлера. И аппаратную игру он освоил в совершенстве. Вообще, если искать аналогии Сталину в немецком руководстве – это Борман. Его власть – это…

В.Рыжков― Борис, если Гитлер доверял ему личные финансы – это ближайший человек. Это означает… Слушайте. Человек, который знает, что у тебя в кармане – человек, которому ты абсолютно доверяешь. И поэтому, помните, фильм «17 мгновений весны», Борман там еще за партийную кассу отвечал. Видимо, личные деньги Гитлера и партийная касса – это как раз Борман. Значит, самый близкий человек.

Б.Ческидов― Знаете, чьим заместителем начал свою карьеру Борман? Гесса. И мало того… Гесс был крестником его детей, а когда Гесс сбежал, их перекрестили.

В.Рыжков― Вот как.

Б.Ческидов― Да. То есть, не сбеги Гесс – Борман бы не поднялся. Очень похоже. Они со Сталиным психологически были абсолютно разные люди…

В.Рыжков― То есть, он был такой матерый аппаратчик.

Б.Ческидов― Да, это власть аппарата. Власть над партией аппарата, которая во многом, конечно, приходит случайно к представителю этого аппарата, потому что в какой-то момент на этом месте мог бы оказаться кто-то другой. Это не требует каких-то…

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

Б.Ческидов― С Борманом, я убежден, кончилось бы ровно тем же самым, потому что это всегда власть аппарата. Она может быть выстроена только так. И никак иначе.

Итак, с 43 года… Он победил аппаратных противников, Борман. И получает статус личного секретаря фюрера. С чисто количественной точки зрения у Бормана, казалось бы, неплохой аппарат. Вот смотрите, чем он располагает. К июлю 44 года партия территориально делится на 42 гау, 849 районов, 28 376 местных групп, 89 378 ячеек и 397 040 блоков. Блок – это район, как район, в котором мы живем.

В.Рыжков― А членов партии, получается, несколько миллионов было.

Б.Ческидов― Да. Но это не так важно… От члена партии тебе толку нет, тебе нужен аппарат в такой ситуации. Они же не голосуют. Численность штатных работников – 37 192 мужчин, 140 000 женщин. И плюс 3 миллиона добровольных. Но среди этих людей очень мало профессиональных чиновников. Очень мало. Мало представителей репрессивного аппарата, его контролирует СС, то есть – Гиммлер, он там у себя не допустит, естественно, тех, кто служит двум господам. И нет профессиональных военных, потому что военные вообще не имеют права вступать в партию.

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

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

Многодетность. У Борманов – 10 детей, из 9 выживших. Хотя родители – ярые антихристиане – все католики. Один даже католический священник. Сохранилась переписка этой, мягко говоря, странной четы, из которой видно, что они искренне привязаны друг к другу, но есть эпизод 44 года, когда Мартин сообщает любимой Герде, что соблазнил актрису Беренс, а та в ответ реагирует положительно, выражает надежду, что любовница подарит мужу ребенка и начинает готовить закон о многоженстве. Помните… У Геббельса в семье все тоже было, мягко говоря… Министр пропаганды был человеком, если это можно так назвать, влюбчивым.

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

Силы Гиммлера, другой наш персонаж.

В.Рыжков― Да. СС.

Б.Ческидов― Информация к размышлению, звучит тревожная музыка. Контроль за репрессивным аппаратом…

В.Рыжков― У него же был свой аналог ГУЛАГ? Лагеря, где работают люди. Миллионы людей. Это была гигантская империя, так же, как у Берии.

Б.Ческидов― Было еще кое-что. Он – представитель правого крыла партии. Человек трусливый, боящийся крови эксцентрик. Он не смог присутствовать на казнях, которые сам продвигал. Сильно заботившийся о соблюдении приличий. У него был прямо пунктик на эти приличия. Постоянно он поучал на эту тему своих подчиненных – для них он стремился казаться отцом строгим, но заботливым.

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

В.Рыжков― Да. Организация, конечно, склонная к юмору.

Б.Ческидов― Особенно к доброму. Особенно. Цель Гиммлера – подмять под себя вермахт. От всячески повышал роль войск СС и, конечно, заговор Штауффенберга дал ему огромные при этом возможности. Но, поскольку приходилось противостоять военной аристократии, формально и идеологически пришлось чуть-чуть сместиться влево. В экономику как проникает Гиммлер?

В.Рыжков― У него империя.

Б.Ческидов― Побольше, чем у Бормана. Во-первых, он располагает этими трудовыми ресурсами военнопленных.

В.Рыжков― Концлагеря.

Б.Ческидов― Конечно. Также с 44 года он – начальник вооружения сухопутных войск. Здесь у него деловые интересы пересекаются со Шпеером. Это еще не все. Наши современники поймут сейчас, чем еще располагал важным Гиммлер в области экономики. Он, как рейхсфюрер, курирует главное управление имперской безопасности. РСХА. Непосредственно организацию возглавляет Кальтенбруннер. В состав которой входят подразделения, занимающееся экономикой. Какие? В первую очередь, это внутреннее СД, его отдел IIID. Этот отдел так и называется – «Экономика». Под управлением штурмбанфюрера СС Вилли Зайберта. Из каких направлений состоит это подразделение? Мы поймем, как в СС воспринимали структуру экономики. Я не буду называть номера… И руководители для нас уже неважны.

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

Как мы видим, деление не очень логичное. Некоторых отраслей нет вообще…

В.Рыжков― А чем они занимались?

Б.Ческидов― Контролем.

В.Рыжков― То есть, они внедряли своих людей типа комиссаров?

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

В.Рыжков― Но стремились.

Б.Ческидов― Был контроль. Были негласные агенты, они какую-то собирались собирать статистику, при необходимости они проводили проверку. Вели другую работу. У них была возможность… Ты можешь не присутствовать везде, и это плохо с точки зрения реального повседневного управления. Но если ты куда-то со своими корочками пришел, тебе будут отвечать. Это важно.

Также экономикой занимается еще один отдел РСХА, четвертый, гестапо. Тайная государственная полиция.

В.Рыжков― Мюллер?

Б.Ческидов― Да, во главе со старым нашим знакомым, группенфюрером СС, генерал-лейтенант полиции Генрих Мюллер. В его компетенцию входит контрразведка, борьба с саботажем, диверсии, вражеская пропаганда и уничтожение евреев. Непосредственно экономикой у Мюллера кто занимается? Отдел IV E 2, противодействие экономическому шпионажу. Регирунгсамтманн Себастиан. Ну тут огромный простор. Когда ты занимаешься саботажем…

В.Рыжков― Если ты хочешь найти саботаж – ты найдешь саботаж. Куда бы ты ни посмотрел, в любую сторону, ты при желании найдешь саботаж.

Б.Ческидов― Можешь спросить: «Это что, небрежность? Или что-то похуже?». И тебе не могут не ответить. Также существенная ценность – ограбление евреев. Но здесь интересный момент, чтобы мы понимали слабость Гиммлера в области экономики. Есть еще шестой отдел РСХА, это заграница. Внешняя разведка под управлением бригадефюрера СС Вальтера Шелленберга. Это начальник.

В.Рыжков― Тоже известный герой фильма.

Б.Ческидов― Да. Штандартенфюрер СС Штирлиц – начальник Шелленберга. И вот это подразделение не располагает отдельным экономическим управлением. Чтобы вот выделена была структура под экономику. Мало того, после 44 года Шелленберг подмял под себя абвер, в котором был раскрыт заговор. Они тоже ничего в этом смысле никаких структур организационных не получили.

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

В.Рыжков― Спасибо, Борис. Напоминаю, что это программа «Цена Победы», я – Владимир Рыжков, мой гость – доктор экономических наук и специалист по военным экономикам Второй мировой войны Борис Ческидов. Мы говорим о правящей четверке, как ее назвать, квадрига? Квадравират… Это Борман, Гиммлер, Геббельс и Шпеер. Сейчас мы сделаем короткий перерыв на новости и сразу после него продолжим наш рассказ о других «героях» этого периода немецкой истории.

НОВОСТИ

В.Рыжков― Еще раз добрый вечер, это программа «Цена Победы», я – Владимир Рыжков, веду сегодня я программу один, из студии на Новом Арбате в Москве. Мой гость – доктор экономический наук Борис Ческидов, мы продолжаем с ним, на мой взгляд, интереснейший радиосериал и ютуб-сериал об экономике нацистской Германии. Мы уже дошли до последнего периода истории нацистского рейха. И мы начали рассказывать в первой части сегодняшней программы о том, что после провала заговора Штауффенберга и неудачного покушения на Гитлера, режим гитлеровский пережил очередную свою радикальную трансформацию, и мы начали говорить о том, что на последнем этапе войны фактически выделилась четверка руководителей, которые вели борьбу за власть, влияние, деньги и, в том числе, борьбу за влияние на Гитлера и борьбу за влияние в экономике. И мы уже говорили о том, что это Борман, Гиммлер, Геббельс и Шпеер. В первой половине этого разговора мы рассказали о ресурсах Бормана и всемогущего главы спецслужб Генриха Гиммлера.

Давайте теперь расскажем про Геббельса. Это рейхсфюрер пропаганды.

Б.Ческидов― Рейхсминистр.

В.Рыжков― И вот здесь интересно, если смотреть из современности, то министр пропаганды не имеет прямого отношения к экономике. Понятно, что ему даются ресурсы, частоты, ему даются деньги, он нанимает пропагандистов, занимается пропагандой. А Геббельс каким боком на последнем этапе войны и последнем этапе истории Рейха – он каким боком попал в экономическую историю?

Б.Ческидов― С вашего позволения, прежде, чем перейти к Геббельсу, я кратко закончу по Гиммлеру. Потому что мы только что увидели, что внутри страны у него контроль за экономикой… Не то, что он контролировал все, но он мог туда при необходимости проникать, все было просто. Конечно, Шпеер ему в аппаратном плане уступал, и с учетом его потенциала вынужден был ему в итоге отдать ресурсы организации. По крайней мере, значительную часть. А вот с внешними ресурсами у Гиммлера была проблема. И как он ее, интересно, решал?

Он вообще из всей четверки вел с Гитлером наиболее очевидную двойную игру. Одновременно он демонстрировал жестокость к узникам, когда разговаривал с самим фюрером, и использовал их для торга, в том числе – денежного. Что он сделал? В октябре 44 года. Это октябрь 44 года. То есть, еще даже до Арденн. Он встречается с бывшим президентом Швейцарии Жан-Мари Мюзи, и при его посредничестве предлагает просто обменять находящихся в руках у немцев евреев на 20 миллионов швейцарских франков из еврейских источников в США.

На встрече в Шварцвальде, это уже 12 января 45 года, переговоры, как видимо, шли небыстро, Гиммлер предлагает раз в две недели отправлять в Швейцарию по 1200 евреев, чтобы в обмен на каждого на счет в швейцарском банке, который будет открыт на имя Мюзи, переводили по 100 долларов. И такой обмен происходит. Первый из образцового лагеря Терезиенштадт, вывозят людей, получают 5 млн…

В.Рыжков― Это был бизнес или это была политическая игра?

Б.Ческидов― В значительной степени бизнес.

В.Рыжков― Продажа людей.

Б.Ческидов― Да. 5 млн швейцарских франков, этот обмен происходит 6 февраля 45 года. В таких делах не бывает чистого бизнеса, он как бы спасает людей. Но заодно неплохо… Но Кальденбруннер узнал об этом, он сам хотел сотрудничать с союзниками, не был он здесь ни в коей мере ревнителем продолжения войны беспощадной до самого конца. Он об этом узнает, доносит Гитлеру и заодно добавляет. Вероятно, выдумал. Что Гиммлер договорился о предоставлении 250 нацистам убежища в Швейцарии, когда война будет проиграна. Гитлер приходит в ярость, велел расстреливать любого, кто помогает евреям. И здесь он впервые усомнился в верности верного Гиммлера. Но Гиммлер еще раз попробует использовать евреев для торга на последних переговорах, которые он проведет через Швецию. И в марте 45 он даже для этой цели дает распоряжение евреев не убивать больше, обращаться с ними как с другими узниками, вообще сделать так, чтобы смертность среди узников сократилась… Но тут начинают.

В.Рыжков― Я напомню нашей аудитории, что к этому времени уже 6 миллионов было уничтожено. Так что его мартовское послабление – это просто шкуру свою спасал. А до этого этот палач уничтожил миллионы людей.

Б.Ческидов― Потом, это послабление оказалось недолгим. Как раз в это время союзники начинают освобождать самые страшные концлагеря, не считая Освенцима, его освободили мы. Из крупных, я имею в виду лагерей. И настолько это производит на них сильное впечатление, что Гиммлер понимает: лучше заметать следы. И опять узников начинают уничтожать. Послабление было очень коротким.

Вот такой человек. Видимо, у него экономические интересы были разносторонние. Теперь Геббельс

В.Рыжков― Министр пропаганды Геббельс.

Б.Ческидов― Умнее прочих нацистских лидеров. Но это замечательное качество нивелируется крайним фанатизмом и злобностью характера. Это от него людей отталкивало. Неприятный человек был. Он – наиболее левый из сохранивших власть высокопоставленных нацистов, причем в отличие от прочих – не по аппаратным соображениям, а по личным убеждениям. Он действительно левый. Характерно, что будучи главным пропагандистом тотальной войны, он не верит в победу уже. И еще в сентябре 44 года поддерживает в письме Гитлеру предложение Японии о заключении сепаратного мира с СССР. Он будет пытаться договориться именно с нами, а не с Западом, до самого своего конца.

Гитлер в ответ просто промолчал, гГеббельс к этому вопросу, как это было принято в гитлеровском окружении, не возвращался, промолчал – значит, не понравилось. И после этого уже только война до конца. И в публичных выступлениях, и в личных разговорах с фюрером. В области экономики его интересы как имперского уполномоченного по народной мобилизации заключались в контроле за концентрацией всех ресурсов, в первую очередь – людских, для нужд фронта. Что требовало перестройки производства.
Как интересно здесь он пересекается по Шпеером. Поначалу он совпадает с программой Шпеера, Шпеер в начел 44 года болел, весной 44 года он возвращается к делам и начинает осаждать Гитлера предложениями о мобилизации экономических ресурсов. Эту записку подают фюреру 12 июля, а уже 18 июля с очень схожей идеей тотальной войны выступает Геббельс. Это очевидная координация аппаратных усилий, безусловно.

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

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

Кроме того, он уступает Борману и Гиммлеру в организаторских способностях, Геббельсу – в ораторских. Это проблема. И еще одна крайняя неприятность. Заговорщики без ведома, там было много списков кабинетов, в один из этих списков. И Шпееру нужно время, чтобы оправдаться, потому что идет же еще и следствие. Пока все те, кого пытали, дали показания, пока Гитлер убедился, что он включен в этот список без его ведома…

Геббельс – единственный, пожалуй, из всех не собирался пережить режим. Относительно Бормана это сказать нельзя, но идеологически он остается верен национал-социализму в его более левом проявлении. И, вероятно, как и Геббельс, рассчитывает на то, что сепаратный мир будет заключен с СССР, а не с Западом. Вероятнее всего. Но про Геббельса это очевидно. А Гиммлер и Шпеер умирать не собирались вообще. Они рассчитывали договориться с Западом. Здесь уже на основе коммунизма.

Просчитались и те, и другие, потому что считали, что они кому-то нужны сами по себе. А нужен… Утрачивая ресурсы, они теряли всякую ценность.

За симпатией фюрера они конкурировали очень жестко. И по мере того, как обстановка на фронтах и самочувствие Гитлера все более ухудшалось, начинали заглядывать в завтрашний день. И вот как это делает Геббельс. Он заключает союз с идеологически близким Борманом. И тут же весьма презрительно заявляет о Шпеере, цитирую: «Я думаю, мы позволили этому молодому человеку слишком сильно подняться». Момент. Шпеер, про которого мы потихоньку начинаем…

В.Рыжков― Геббельс в экономике, я так понимаю, он отвечал за вооружение сухопутных сил…

Б.Ческидов― Нет, за вооружение отмечал Гиммлер. Геббельса интересовала… Его специфическая натура такова, его интересовал контроль за душами. Ему нужны были люди. Вот единицы, которых он…

В.Рыжков― То есть, ему нравились мобилизация, воодушевление…

Б.Ческидов― Да, контроль. И контроль за призывом ему тоже был нужен. А для этого он должен был пролезать в экономику, потому что ему бы очень хотелось получить право рассылать своих комиссаров везде, чтобы они просто от станка… «Сынок, ты пойдешь со мной». Но ему это мешало. И здесь, естественно, его интересы в экономике…

В.Рыжков― И особенно в экономику его в итоге не пустили.

Б.Ческидов― Был момент, когда он почти добрался до этих людских ресурсов. Был. Но я вот сейчас покажу, как и почему Шпеер… Точнее, Гитлер это дело пресек. Шпеер, вот мы видим, постепенно начинаются заговоры, ему труднее и труднее. То с одной стороны у него кусочек откусят, то с другой. Вдобавок, у него есть собственный подчиненный, Карл Отто Зауэр, он откровенно более жесткий и бескомпромиссный человек. Намного более заточенный на войну до конца и не слишком задумывающийся о последствиях. Гитлер его сначала назначает на должность ответственного за противовоздушную оборону, а потом он постепенно, как это у нацистов водилось, начинает у собственного шефа кусочек за кусочком под оперативное руководство отгрызать.

Шпеер это компенсирует. Он борется с более влиятельными конкурентами, проигрывает. Зато – есть кто-то послабее. С 1 августа 44 года он добивается передачи себе стремительно теряющего симпатии фюрера Геринга, контроль над производством вооружения для люфтваффе. Кусок. 14 февраля 45 года характеризует, как они работали. Министр транспорта Дюркмюллер заболел, Шпеер этим тут же пользуется и присваивает себе его полномочия. Просто присваивает. Ну, заболел человек, надо временно кому-то руководить… А что временно, вы вернулись? Извините, уже дела налажены.

Что объединяло этих людей? Их объединяло, что, во-первых, они видели свою власть в сохранении симпатий Гитлера, а, значит, продвижении идеи тотальной войны и радикализации режима. Это для них было важно. А Гитлер говорил: «Любой, кто заговор со мной о мире без победы, останется без головы. Независимо от того, кто какую должность занимает». И в конечном итоге как они разделились. Вермахт, то есть, самый ценный приз, достался Гиммлеру. И он сохранял общий контроль за ним почти до самого конца войны. Не менее ценный приз, по крайней мере, пока фюрер жив – доступ к его телу, достается Борману. Геббельс, как я уже говорил, очень специфическая с точки зрения психологии личность, сохраняет контроль за идеологией, за душами.

В.Рыжков― И доступ к Гитлеру. Мы же знаем, что он в бункере был до последних дней. Вместе с семьей. Значит, он каждый день мог видеть фюрера.

Б.Ческидов― Да, доступ они все имеют свободный, здесь никаких ограничений нет. Шпеер маневрирует между Гитлером и Геббельсом, что само по себе демонстрирует, до какой степени экономика ослабела. Все четверо при этом зависимы от Гитлера. Постоянно в тех или иных вопросах он ограничивает их полномочия. Например, издавая распоряжения, фюрер очень хорошо обеспечивал себя… Он вывел из-под их юрисдикции даже отдельных лиц. Например, своих шоферов. Непосредственных сотрудников рейхсканцелярии. И также – четверка, кого они контролируют. Гауляйтеров. Это важно. Они тоже до самого конца сохраняют свой доступ к фюреру. И здесь, казалось бы, все. Начинает конец Шпеера. Вот-вот его сожрут, потому что интерес Гитлера к экономике, он угасает и оживляется вместе с надеждами на перелом в ходе военных действий.

В начале октября 44 года Шпеер еще докладывает Гитлеру, что если даже Германия потеряет все оккупированные территории, оборонная промышленность сможет работать до 46 года. Однако после того, как Геббельс в два приема… Изымает у него для нужд фронта 100 000 рабочих, конфликт становится открытый. И в атаке на Шпеера объединяются Геббельс, Гиммлер, Борман, Лей, гауляйтеры. Он непременно проиграл бы, но какой интересный аппаратный ход он делает. 20 сентября направляет Гитлеру служебную записку, в которой пишет о своей аполитичности. Его обвиняли все эти перечисленные ни много ни мало в том, что он не понимает линию партии. У нас это был бы приговор. А если бы ты еще в ответ сказал, что ты аполитичен – ну, все. Считай, сам расписался на своем расстрельном приказе.

А с Гитлером сработало. Вот ему…

В.Рыжков― «Что вы привязались к Шпееру? Он не политик, он хозяйствам занимается».

Б.Ческидов― Он не должен понимать… Но почему это сработало? Не потому, что фюрер такой какой-то витающий в облаках эксцентрик. В первый раз Шпеер получает от Бормана резкую отповедь с указанием на приоритет задачи мобилизации. Не падает духом. Вновь обращается к Гитлеру, просит его… Не то, чтобы совсем не призывать 100 000 рабочих. «Не призывайте, пока я не организую производство так, что их потеря не приведет к сокращению». Гитлер все равно.. Шпеер уезжает на запад, в Рур, в это время Гитлер дает приказ призвать 60 000 до назначенной Шпеером даты. Не сдается Шпеер все равно.

Хотя Геббельс ярость уже публично демонстрирует, не скрывает свою неприязнь. И выигрывает. К осени положение на фронтах стабилизируется. Гитлер загорает идеей наступления в Арденнах. А что нужно для наступления? Топливо и оружие. Это будет последний раз, когда хоть как-то удалось снабдить… Недостаточно, но снабдить крупную стратегическую группировку. И тут же Шпеер становится нужен. Отношение к нему фюрера улучшается. Он принимает его в конце ноября 44 года. Поддерживает его основные предложения. Называет «гениальным организатором», и защищает от конкурентов. Аппаратная борьба зашла, как говорят военные, в позиционный тупик. То есть, экономикой, по сути дела, по крайне мере, оперативно сохраняет возможность управлять Шпеер.

А в экономике дела обстоят…

В.Рыжков― Да, я вот хотел бы, чтобы вы рассказали. Давайте последние месяцы войны, условно говоря, с декабря 44-го по май 45-го, очевидно, что резко начало ухудшаться экономическое положение населения. И это, кстати, тоже отчасти видно в фильме «17 мгновений весны», помните, там разбомбленные кварталы Берлина, перебои с продуктами питания, карточная система, исхудавшие люди… Солдат, который помогал спасать ребятишек, и так далее. Что происходило с положением населения, карточная система, протесты против норм снабжения, решения Гитлера о конфетах и пиве. Вот что происходило в быту, что называется, у немцев?

Б.Ческидов― Усиливается инфляция. И впервые за годы войны население Германии сталкивается с продовольственными трудностями. Хотя, конечно, со снабжением продовольственным дела обстоят, мы говорили в предыдущей передаче, намного лучше, чем в годы Первой мировой войны. Практически до самого конца серьезной нехватки продовольствия не будет. К 43 году товарооборот предметов… Уже 43 году, мы рассматриваем 44, а уже к 43, товарооборот предметов домашнего обихода составляет 65%, текстильных товаров и одежды – 78% от довоенного. Это неплохой результат, особенно учитывая то, что миллионы мужчин были освобождены от необходимости заботиться о своем питании и одежде, поскольку их этим снабжали призвавшие их организации.

Но на самом деле, в количественном отношении сокращение производства первой необходимости было больше, потому что здесь надо учитывать инфляцию, она даже формально повысилась на 10%, ну, в реальности при карточной системе считать инфляцию трудно, потому что нормирование. Однако, вы хорошо очень… Актуальный вопрос задали. Производство пива и конфет. Геббельс очень… Ему удалось продавить решение о закрытии театров, журналов. Он пытался продавить решение, «ну, не будем производить, это не насущное, не необходимое». Пиво и конфеты.

В.Рыжков― Ну конфеты – бог с ними. Но как немцы без пива? Это представить себе невозможно.

Б.Ческидов― Вот Гитлер что ответил…

В.Рыжков― Это как сибиряки без пельменей. Невозможно.

Б.Ческидов― Вот что ответил Гитлер: «Конфеты не прекращали производить даже большевики, потому что понимали, что конфеты нужны не только в тылу, но и солдатам на фронте. А прекращение производства пива вызовет серьезные психологические последствия в Баварии и негодование народа».

В.Рыжков― Это он вспомнил свои речи в этих огромных мюнхенских пивных, где начиналась его карьера. Как-то раз меня приводили в такую гигантскую, напоминающую ангар, вокзал пивную, и говорили, что с этого места Гитлер в 19-20 году произносил свои первые речи. Собирались полные залы, ему рукоплескали… Видимо, вспомнил, какую роль пиво сыграло в его карьере.

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

В.Рыжков― Пиво и конфеты.

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

В.Рыжков― Да и пива было не то, чтобы в изобилии.

Б.Ческидов― Вот эти моменты, что надо давать выход пару и людям расслабляться, этого у нас не понимали. Там фюрер это почти до конца понимал. Потом он это, наверное, понимал. Но понимал, что не может дать эти простые радости. Там же вот интересный пример. Он в августе подписывает директиву о выделении средств на 190 000 бутылок гоголя-моголя, который должны раздать населению после бомбежек. Вот это понимание у него оставалось.

Ну, вы спрашивали про протесты. Вот первый серьезный протест с нехваткой снабжения в Берлине имел место только в конце января 45 года. Разгромили булочные… Но там тогда был комендантом Берлина Геббельс, жуткая история. Люди с голоду разгромили булочные, тут же людей похватали, из них произвольно выдернули одного мужчину, очень пожилого, одну женщину. Отрубили им головы той же ночью после комедии-суда. То есть, это даже по нацистскому правосудию никак не проходило, потому что это было типичное уголовное преступление, явно не доходило до смертной казни… Уже ясно, что по-другому остановить они не могли.

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

В.Рыжков― В конце 45 или 44?

Б.Ческидов― К концу марта 45. Уже голодали всерьез. И в Берлине вновь урезают пайки к тому времени. Тем не менее, в Берлине в немногочисленных оставшихся ресторанах можно было увидеть дам в дорогих мехах и вечерних платьях. В марте 45 года. К июню 44 года уровень индекса оптовых цен поднялся только на 9%. Уровень жизни упал на 12%. Заработная плата – 11%. Но, еще раз повторяю, к тому моменту цены уже не выполняли регулирующую функцию, потому что все захватила карточная система. И возникает серьезная проблема блуждающей покупательной способности. Что это значит? Избыток денег. Сначала уходит на краткосрочные вклады. В любое время возникает у людей паника, они их снимают, прячут в чулок или относят на черный рынок. Если до 42 года инфляционное финансирование не превышало допустимых пределов, то с середины 44 года началось развитие инфляции, все менее контролируемое. Недоверие населения влечет за собой массовое изъятие банковских вкладов. Национальная валюта утрачивает постепенно свою функцию, возрастает натуральный обмен, и к 45 году это уже сигаретная валюта. То есть, за сигареты…

В.Рыжков― В Советском Союзе так же было, когда… Если тебе нужен был трактор, ты давал трактористу бутылку водки, и он тебе копал траншею. Примерно так. Бартер.

Б.Ческидов― Это мирное время, да. В годы войны у нас тоже была инфляция, хотя ее всячески отрицают.

В.Рыжков― Конечно, мы об этом делали программу. И она была очень большая.

Б.Ческидов― Да. Но поскольку мы побеждали, доверие к нашей валюте было существенно больше, чем в Германии. И к концу войны избыток покупательной способности – 200 миллиардов марок.

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

Б.Ческидов― Нет, конечно. У них она с 43 года под бомбежками начала…

В.Рыжков― То есть, уже были проблемы?

Б.Ческидов― Просто всего не было. Не хватало не то что для гражданского населения, не хватало…

В.Рыжков― То есть, немцы тоже нахлебались?

Б.Ческидов― Вода в лучшем случае была из городских колонок, это был предел. Горячей не было, еду готовить не на чем, но было создано большое количество полевых кухонь, была нацистская организация помощи жертвам, которая кормила. Это было организовано очень хорошо. Просто интересная тема, хотел ее отложить к моменту, когда бомбежка… Вот мы увидели, 200 млрд марок – это избыток покупательной способности, по сути дела, инфляционной. И получается, что вкладчик в результате бесшумного кредитования на 90% превращался в государственного кредитора. Государственный долг становится все более краткосрочным. И размеры долгов были очень велики по сравнению с прочими государствами. Ну, министр финансов говорит, что не были использованы налоговые резервы, но какие налоговые резервы-то? Собирал бы те же фантики. Но, по сути дела, это же технический вопрос. Фактически речь идет о том, что эта мобилизационная модель германская, я же все время повторяю про нехватку капитала, она способна предлагать остроумные способы разрешения, даже изощрённые способы разрешения проблем. Добиваться эффективности при реализации самих этих способов. Но ей недоступно главное, она не может поставить реалистичные и прагматичные цели. А если у тебя нет прагматичных достижимых целей, какие бы ни были методы, это не работает.

Государственный долг – 143 млрд марок. В долгосрочных и среднесрочных обязательствах. 235 млрд марок – краткосрочные кредиты, плюс почти миллиард марок по налоговым квитанциям. Помните, мы о них и говорили? Почти миллиард – по векселям промышленных предприятий. И 8 млрд – по «МЕФО» векселям. Всего 387 млрд марок.

В.Рыжков― Это то, что сближает нацистскую экономику с итальянской. Помните, мы с вами делали программу про экономику Муссолини? Там ровно одно и то же. Гигантский рост военных расходов, гигантский рост государственного долга. И в результате – коллапс экономики и коллапс государственной системы. Ровно это же произошло и с гитлеровской Германией. Может быть, не так быстро, как с Италией. Чуть подольше они продержались.

Б.Ческидов― Ну, в Италии мы видели, тоже большая разница. В Италии сами предприятия не были заинтересованы в этом сотрудничестве, они всячески уклонялись. Потом, в Италии с 43 года фактически шла гражданская война, потому что на момент капитуляции на стороне оси…

В.Рыжков― Там уже союзники с юга наступали.

Б.Ческидов― В сентябре они высадились. Фактически на момент капитуляции в Италии сражалось 120 тысяч человек на стороне Оси, и 70 тысяч на стороне союзников. Ну, а про германскую экономику и как она вступает в положение коллапса, вероятно, мы продолжим говорить дальше.

В.Рыжков― Да. Спасибо огромное, Борис, я думаю, что сегодня мы на этой логической точке остановимся. Мы дошли уже, собственно говоря, до весны 45 года. И уже в следующий раз мы расскажем о коллапсе нацистской экономики, о том, как это происходило, какие закономерности можно выделить. Я напоминаю, что это программа «Цена Победы», я – Владимир Рыжков, в гостях у меня – доктор экономических наук Борис Ческидов. Мы с ним на протяжении ряда программ подробно рассказываем о эволюции нацистского режима и о соответственных изменениях, которые происходили в экономике Третьего Рейха. Борис, спасибо. А мы с вами услышимся ровно через неделю.

Б.Ческидов― До свидания.

Руководство Django Часть 8: Аутентификация и авторизация пользователя — Изучение веб-разработки

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

Требования: Завершить изучение предыдущих тем руководства, включая Руководство Django Часть 7: Работа с сессиями.
Цель: Понимать как настроить и использовать механизм аутентификации пользователя и разграничений прав доступа.

Django предоставляет систему аутентификации и авторизации («permission») пользователя, реализованную на основе фреймворка работы с сессиями, который мы рассматривали в предыдущей части. Система аутентификации и авторизации позволяет вам проверять учётные данные пользователей и определять какие действия какой пользователь может выполнять. Данный фреймворк включает в себя встроенные модели для Пользователей и Групп (основной способ применения прав доступа для более чем одного пользователя), непосредственно саму систему прав доступа (permissions)/флаги, которые определяют может ли пользователь выполнить задачу, с какой формой и отображением для авторизованных пользователей, а так же получить доступ к контенту с ограниченным доступом.

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

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

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

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

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

Примечание: Необходимые настройки были выполнены для нас, когда мы создали приложение при помощи команды django-admin startproject. Таблицы базы данных для пользователей и модели авторизации были созданы, когда в первый раз выполнили команду python manage.py migrate.

Соответствующие настройки сделаны в параметрах INSTALLED_APPS и MIDDLEWARE файла проекта (locallibrary/locallibrary/settings.py), как показано ниже:

INSTALLED_APPS = [
    ...
    'django.contrib.auth',  
    'django.contrib.contenttypes',  
    ....

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',  
    ...
    'django.contrib.auth.middleware.AuthenticationMiddleware',  
    ....

Вы уже создали своего первого пользователя когда мы рассматривали Административная панель сайта Django в части 4 (это был суперпользователь, созданный при помощи команды python manage.py createsuperuser). Наш суперпользователь уже авторизован и имеет все необходимые уровни доступа к данным и функциям, таким образом нам необходимо создать тестового пользователя для отработки соответствующей работы сайта. В качестве наиболее быстрого способа, мы будем использовать административную панель сайта для создания соответствующих групп и аккаунтов locallibrary.

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

from django.contrib.auth.models import User


user = User.objects.create_user('myusername', '[email protected]', 'mypassword')


user.first_name = 'John'
user.last_name = 'Citizen'
user.save()

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

Запустите сервер разработки и перейдите к административной панели вашего сайта (http://127.0.0.1:8000/admin/). Залогиньтесь на сайте при помощи параметров (имя пользователя и пароля) аккаунта суперпользователя. Самая «верхняя» страница панели Администратора показывает все наши модели. Для того, чтобы увидеть записи в разделе Authentication and Authorisation вы можете нажать на ссылку Users, или Groups.

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

  1. Нажмите на кнопку Add (Добавить) (рядом с Group) и создайте новую группу; для данной группы введите Name (Имя) «Library Members».
  2. Для данной группы не нужны какие-либо разрешения, поэтому мы просто нажимаем кнопку SAVE (Сохранить) (вы перейдёте к списку групп).

Теперь давайте создадим пользователя:

  1. Перейдите обратно на домашнюю страницу административной панели
  2. Для перехода к диалогу добавления пользователя нажмите на кнопку Add, соответствующую строке Users (Пользователи).
  3. Введите соответствующие Username (имя пользователя) и Password/Password confirmation (пароль/подтверждение пароля) для вашего тестового пользователя
  4. Нажмите SAVE для завершения процесса создания пользователя.

    Административная часть сайта создаст нового пользователя и немедленно перенаправит вас на страницу Change user (Изменение параметров пользователя) где вы можете, соответственно, изменить ваш username, а кроме того добавить информацию для дополнительных полей модели User. Эти поля включают в себя имя пользователя, фамилию, адрес электронной почты, статус пользователя, а также соответствующие параметры доступа (может быть установлен только флаг  Active). Ниже вы можете определить группу для пользователя и необходимые параметры доступа, а кроме того, вы можете увидеть важные даты, относящиеся к пользователю (дату подключения к сайту и дату последнего входа).

  5. В разделе Groups, из списка Доступные группы выберите группу Library Member, а затем переместите её в блок «Выбранные группы» (нажмите стрелку-«направо», находящуюся между блоками).
  6. Больше нам не нужно здесь нечего делать, просто нажмите «Save»(Сохранить), и вы вернётесь к списку созданных пользователей.

Вот и все! Теперь у вас есть учётная запись «обычного члена библиотеки», которую вы сможете использовать для тестирования (как только добавим страницы, чтобы пользователи могли войти в систему).

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

Django предоставляет почти все, что нужно для создания страниц аутентификации входа, выхода из системы и управления паролями из коробки. Это включает в себя url-адреса, представления (views) и формы,но не включает шаблоны — мы должны создать свой собственный шаблон!

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

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

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

Проектирование URLs

Добавьте следующее в нижней части проекта urls.py файл (locallibrary/locallibrary/urls.py) файл:


urlpatterns += [
    path('accounts/', include('django.contrib.auth.urls')),
]

Перейдите по http://127.0.0.1:8000/accounts/ URL (обратите внимание на косую черту!), Django покажет ошибку, что он не смог найти этот URL, и перечислить все URL, которые он пытался открыть. Из этого вы можете увидеть URL-адреса, которые будут работать, например:

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

accounts/ login/ [name='login']
accounts/ logout/ [name='logout']
accounts/ password_change/ [name='password_change']
accounts/ password_change/done/ [name='password_change_done']
accounts/ password_reset/ [name='password_reset']
accounts/ password_reset/done/ [name='password_reset_done']
accounts/ reset/<uidb64>/<token>/ [name='password_reset_confirm']
accounts/ reset/done/ [name='password_reset_complete']

Теперь попробуйте перейти к URL-адресу входа (http://127.0.0.1:8000/accounts/login/). Это приведёт к сбою снова, но с ошибкой, сообщающей вам, что нам не хватает требуемого шаблона (registration / login.html) в пути поиска шаблона. Вы увидите следующие строки, перечисленные в жёлтом разделе вверху:

Exception Type:    TemplateDoesNotExist
Exception Value:    registration/login.html

Следующий шаг — создать каталог регистрации в пути поиска, а затем добавить файл login.html.

Каталог шаблонов

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

Для этого сайта мы разместим наши HTML-страницы в каталоге templates / registration /. Этот каталог должен находиться в корневом каталоге проекта, то есть в том же каталоге, что и в каталоге и папках locallibrary). Создайте эти папки сейчас.

Примечание: ваша структура папок теперь должна выглядеть как показано внизу:
locallibrary (django project folder)
   |_catalog
   |_locallibrary
   |_templates (new)
                |_registration

Чтобы сделать эти директории видимыми для загрузчика шаблонов   (т. е. помещать этот каталог в путь поиска шаблона) откройте настройки проекта (/locallibrary/locallibrary/settings.py), и обновите в секции TEMPLATES строку 'DIRS' как показано.

TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        ...

Шаблон аутентификации

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

Создайте новый HTML файл, названный /locallibrary/templates/registration/login.html. дайте ему следующее содержание:

{% extends "base_generic.html" %}

{% block content %}

{% if form.errors %}
  <p>Your username and password didn't match. Please try again.</p>
{% endif %}

{% if next %}
  {% if user.is_authenticated %}
    <p>Your account doesn't have access to this page. To proceed,
    please login with an account that has access.</p>
  {% else %}
    <p>Please login to see this page.</p>
  {% endif %}
{% endif %}

<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>

<tr>
  <td>{{ form.username.label_tag }}</td>
  <td>{{ form.username }}</td>
</tr>

<tr>
  <td>{{ form.password.label_tag }}</td>
  <td>{{ form.password }}</td>
</tr>
</table>

<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>

{# Assumes you setup the password_reset view in your URLconf #}
<p><a href="{% url 'password_reset' %}">Lost password?</a></p>

{% endblock %}

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

Перейдите на страницу входа (http://127.0.0.1:8000/accounts/login/) когда вы сохраните свой шаблон, и вы должны увидеть что-то наподобие этого:

Если ваша попытка войти в систему будет успешной,  вы будете перенаправлены на другую страницу (по умолчанию это будет http://127.0.0.1:8000/accounts/profile/). Проблема здесь в том, что по умолчанию Django ожидает, что после входа в систему вы захотите перейти на страницу профиля, что может быть или не быть. Поскольку вы ещё не определили эту страницу, вы получите ещё одну ошибку!

Откройте настройки проекта (/locallibrary/locallibrary/settings.py) и добавьте текст ниже. Теперь, когда вы входите в систему, вы по умолчанию должны перенаправляться на домашнюю страницу сайта.

Шаблон выхода

Если вы перейдёте по URL-адресу выхода (http://127.0.0.1:8000/accounts/logout/), то увидите странное поведение — ваш пользователь наверняка выйдет из системы, но вы попадёте на страницу выхода администратора. Это не то, что вам нужно, хотя бы потому, что ссылка для входа на этой странице приведёт вас к экрану входа в систему администратора. (и это доступно только для пользователей, у которых есть разрешение is_staff).

Создайте и откройте /locallibrary/templates/registration/logged_out.html. Скопируйте текст ниже:

{% extends "base_generic.html" %}

{% block content %}
<p>Logged out!</p>

<a href="{% url 'login'%}">Click here to login again.</a>
{% endblock %}

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

Шаблон сброса пароля

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

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

Форма сброса пароля

Это форма, используемая для получения адреса электронной почты пользователя (для отправки пароля для сброса пароля). Создайте /locallibrary/templates/registration/password_reset_form.html и дайте ему следующее содержание:

{% extends "base_generic.html" %}
{% block content %}

<form action="" method="post">{% csrf_token %}
    {% if form.email.errors %} {{ form.email.errors }} {% endif %}
        <p>{{ form.email }}</p>
    <input type="submit" value="Reset password" />
</form>

{% endblock %}
Сброс пароля

Эта форма отображается после того, как ваш адрес электронной почты будет собран. Создайте /locallibrary/templates/registration/password_reset_done.html, и дайте ему следующее содержание:

{% extends "base_generic.html" %}
{% block content %}
<p>We've emailed you instructions for setting your password. If they haven't arrived in a few minutes, check your spam folder.</p>
{% endblock %}
Сброс пароля по email

Этот шаблон предоставляет текст электронной почты HTML, содержащий ссылку на сброс, которую мы отправим пользователям. Создайте /locallibrary/templates/registration/password_reset_email.html и дайте ему следующее содержание:

Someone asked for password reset for email {{ email }}. Follow the link below:
{{ protocol}}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
Подтверждение на сброс пароля

На этой странице вы вводите новый пароль после нажатия ссылки в электронном письме с возвратом пароля. Создайте /locallibrary/templates/registration/password_reset_confirm.html и дайте ему следующее содержание:

{% extends "base_generic.html" %}

{% block content %}

    {% if validlink %}
        <p>Please enter (and confirm) your new password.</p>
        <form action="" method="post">
            {% csrf_token %}
            <table>
                <tr>
                    <td>{{ form.new_password1.errors }}
                        <label for="id_new_password1">New password:</label></td>
                    <td>{{ form.new_password1 }}</td>
                </tr>
                <tr>
                    <td>{{ form.new_password2.errors }}
                        <label for="id_new_password2">Confirm password:</label></td>
                    <td>{{ form.new_password2 }}</td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" value="Change my password" /></td>
                </tr>
            </table>
        </form>
    {% else %}
        <h2>Password reset failed</h2>
        <p>The password reset link was invalid, possibly because it has already been used. Please request a new password reset.</p>
    {% endif %}

{% endblock %}
Сброс пароля завершён

Это последний шаблон сброса пароля, который отображается, чтобы уведомить вас о завершении сброса пароля. Создайте /locallibrary/templates/registration/password_reset_complete.html и дайте ему следующее содержание:

{% extends "base_generic.html" %}
{% block content %}

<h2>The password has been changed!</h2>
<p><a href="{% url 'login' %}">log in again?</a></p>

{% endblock %}

Тестирование новых страниц аутентификации

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

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

Примечание: Система сброса пароля требует, чтобы ваш сайт поддерживал электронную почту, что выходит за рамки этой статьи, поэтому эта часть ещё не будет работать. Чтобы разрешить тестирование, поместите следующую строку в конец файла settings.py. Это регистрирует любые письма, отправленные на консоль (чтобы вы могли скопировать ссылку на сброс пароля с консоли).

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

Для получения дополнительной информации см. Отправка email (Django docs).

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

Тестирование в шаблонах

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

Обычно вы сначала проверяете переменную шаблона {{user.is_authenticated}}, чтобы определить, имеет ли пользователь право видеть конкретный контент. Чтобы продемонстрировать это, мы обновим нашу боковую панель, чтобы отобразить ссылку «Вход», если пользователь вышел из системы, и ссылку «Выход», если он вошёл в систему.

Откройте базовый шаблон (/locallibrary/catalog/templates/base_generic.html) и скопируйте следующий текст в sidebar блок непосредственно перед тегом шаблона endblock.

  <ul>

    ...

   {% if user.is_authenticated %}
     <li>User: {{ user.get_username }}</li>
     <li><a href="{% url 'logout'%}?next={{request.path}}">Logout</a></li>
   {% else %}
     <li><a href="{% url 'login'%}?next={{request.path}}">Login</a></li>
   {% endif %} 
  </ul>

Как вы можете видеть, мы используем теги шаблона if-else-endif для условного отображения текста на основе того, является ли {{user.is_authenticated}} истинным. Если пользователь аутентифицирован, мы знаем, что у нас есть действительный пользователь, поэтому мы вызываем {{user.get_username}}, чтобы отобразить их имя.

Мы создаём URL-адрес для входа и выхода из системы, используя тег шаблона URL-адреса и имена соответствующих конфигураций URLs. Также обратите внимание на то, как мы добавили ?next={{request.path}} в конец URLs. Это означает, что следующий URL-адрес содержит адрес (URL) текущей страницы, в конце связанного URL-адреса. После того, как пользователь успешно выполнил вход в систему, представления будут использовать значение «next» чтобы перенаправить пользователя обратно на страницу, где они сначала нажали ссылку входа / выхода из системы.

Примечание: Попробуйте! Если вы находитесь на главной странице и вы нажимаете «Вход / Выход» на боковой панели, то после завершения операции вы должны вернуться на ту же страницу.

Тестирование в представлениях

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

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

Примечание: Вы можете сделать то же самое вручную, путём тестирования request.user.is_authenticated, но декоратор намного удобнее!

Аналогичным образом, самый простой способ ограничить доступ к зарегистрированным пользователям в ваших представлениях на основе классов — это производные от LoginRequiredMixin. Вы должны объявить этот mixin сначала в списке суперкласса, перед классом основного представления.

from django.contrib.auth.mixins import LoginRequiredMixin

class MyView(LoginRequiredMixin, View):
    ...

Это имеет такое же поведение при переадресации, что и  login_required декоратор. Вы также можете указать альтернативное местоположение для перенаправления пользователя, если он не аутентифицирован (login_url), и имя параметра URL вместо «next» , чтобы вставить текущий абсолютный путь (redirect_field_name).

class MyView(LoginRequiredMixin, View):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'

Для получения дополнительной информации ознакомьтесь с  Django docs here.

Теперь, когда мы знаем, как ограничить страницу определённому пользователю, создайте представление о книгах, которые заимствовал текущий пользователь.

К сожалению, у нас пока нет возможности пользователям использовать книги! Поэтому, прежде чем мы сможем создать список книг, мы сначала расширим BookInstance модель для поддержки концепции заимствования и использования приложения Django Admin для заимствования ряда книг нашему тестовому пользователю.

Модели

Прежде всего, мы должны предоставить пользователям возможность кредита на BookInstance (у нас уже есть status и due_back дата, но у нас пока нет связи между этой моделью и пользователем. Мы создадим его с помощью поля ForeignKey (один ко многим). Нам также нужен простой механизм для проверки того, просрочена ли заёмная книга.

Откройте catalog/models.py, и импортируйте модель User из django.contrib.auth.models (добавьте это чуть ниже предыдущей строки импорта в верхней части файла, так User доступен для последующего кода, что позволяет использовать его):

from django.contrib.auth.models import User

Затем добавьте поле borrower в модель BookInstance:

borrower = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)

Пока мы здесь, давайте добавим свойство, которое мы можем вызвать из наших шаблонов, чтобы указать, просрочен ли конкретный экземпляр книги. Хотя мы могли бы рассчитать это в самом шаблоне, использование свойства, как показано ниже, будет намного более эффективным. Добавьте это где-нибудь в верхней части файла:

from datetime import date

Теперь добавьте следующее определение свойства внутри класса BookInstance:

@property
def is_overdue(self):
    if self.due_back and date.today() > self.due_back:
        return True
    return False

Примечание. Сначала мы проверим, является ли due_back пустым, прежде чем проводить сравнение. Пустое поле due_back заставило Django выкидывать ошибку, а не показывать страницу: пустые значения не сопоставимы. Это не то, что мы хотели бы, чтобы наши пользователи испытывали!

Теперь, когда мы обновили наши модели, нам нужно будет внести новые изменения в проект, а затем применить эти миграции:

python3 manage.py makemigrations
python3 manage.py migrate

Admin

Теперь откройте каталог catalog/admin.py, и добавьте поле borrower в класс BookInstanceAdmin , как в list_display , так и в полях fieldsets , как показано ниже. Это сделает поле видимым в разделе Admin, так что мы можем при необходимости назначить User в BookInstance.

@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
    list_display = ('book', 'status', 'borrower', 'due_back', 'id')
    list_filter = ('status', 'due_back')

    fieldsets = (
        (None, {
            'fields': ('book','imprint', 'id')
        }),
        ('Availability', {
            'fields': ('status', 'due_back','borrower')
        }),
    )

Займите несколько книг

Теперь, когда возможно кредитовать книги конкретному пользователю, зайдите и заработайте на нескольких записей в BookInstance. Установите borrowed поле вашему тестовому пользователю, сделайте status «В займе» и установите сроки оплаты как в будущем, так и в прошлом.

Примечание: Мы не будем описывать процесс, так как вы уже знаете, как использовать Admin сайт!

Займ в представлении

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

Добавьте следующее в catalog/views.py:

from django.contrib.auth.mixins import LoginRequiredMixin

class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):
    """
    Generic class-based view listing books on loan to current user.
    """
    model = BookInstance
    template_name ='catalog/bookinstance_list_borrowed_user.html'
    paginate_by = 10

    def get_queryset(self):
        return BookInstance.objects.filter(borrower=self.request.user).filter(status__exact='o').order_by('due_back')

Чтобы ограничить наш запрос только объектами BookInstance для текущего пользователя, мы повторно реализуем get_queryset(), как показано выше.mybooks/$’, views.LoanedBooksByUserListView.as_view(), name=’my-borrowed’), ]

Шаблон для заёмных книг

Теперь все, что нам нужно сделать для этой страницы, — это добавить шаблон. Сначала создайте файл шаблона /catalog/templates/catalog/bookinstance_list_borrowed_user.html и дайте ему следующее содержание:

{% extends "base_generic.html" %}

{% block content %}
    <h2>Borrowed books</h2>

    {% if bookinstance_list %}
    <ul>

      {% for bookinst in bookinstance_list %}
      <li>
        <a href="{% url 'book-detail' bookinst.book.pk %}">{{bookinst.book.title}}</a> ({{ bookinst.due_back }})
      </li>
      {% endfor %}
    </ul>

    {% else %}
      <p>There are no books borrowed.</p>
    {% endif %}
{% endblock %}

Этот шаблон очень похож на тот, который мы создали ранее для объектов Book и Author. Единственное, что «новое» здесь, это то, что мы проверяем метод, который мы добавили в модель (bookinst.is_overdue) с целью использовать его для изменения цвета просроченных предметов.

Когда сервер разработки запущен, вы должны теперь иметь возможность просматривать список для зарегистрированного пользователя в своём браузере по адресу  http://127.0.0.1:8000/catalog/mybooks/. Попробуйте это, когда ваш пользователь войдёт в систему и выйдет из системы (во втором случае вы должны быть перенаправлены на страницу входа в систему).

Добавить список на боковую панель

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

Откройте базовый шаблон (/locallibrary/catalog/templates/base_generic.html) и добавьте выделенную строку из sidebar, как показано на рисунке.

 <ul>
   {% if user.is_authenticated %}
   <li>User: {{ user.get_username }}</li>
   <li><a href="{% url 'my-borrowed' %}">My Borrowed</a></li>
   <li><a href="{% url 'logout'%}?next={{request.path}}">Logout</a></li>
   {% else %}
   <li><a href="{% url 'login'%}?next={{request.path}}">Login</a></li>
   {% endif %}
 </ul>

На что это похоже?

Когда любой пользователь войдёт в систему, он будет видеть ссылку «Мной позаимствовано (My Borrowed)» в боковой колонке, и список книг, показанных ниже (первая книга не имеет установленной даты, что является ошибкой, которую мы надеемся исправить в более позднем уроке!).

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

Модели

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

class BookInstance(models.Model):
    ...
    class Meta:
        ...
        permissions = (("can_mark_returned", "Set book as returned"),)   

Затем мы могли бы назначить разрешение группе «Библиотекарь» (Librarian) на сайте администратора.

Откройте catalog/models.py, и добавьте разрешение, как показано выше. Вам нужно будет повторно выполнить миграцию (вызвав python3 manage.py makemigrations и python3 manage.py migrate) для надлежащего обновления базы данных.

Шаблоны

Разрешения текущего пользователя хранятся в переменной шаблона, называемой  {{ perms }}. Вы можете проверить, имеет ли текущий пользователь определённое разрешение, используя конкретное имя переменной в соответствующем приложении «Django» — например, {{ perms.catalog.can_mark_returned }} будет True если у пользователя есть это разрешение, а False — в противном случае. Обычно мы проверяем разрешение с использованием шаблона {% if %}, как показано в:

{% if perms.catalog.can_mark_returned %}
    <!-- We can mark a BookInstance as returned. -->
    <!-- Perhaps add code to link to a "book return" view here. -->
{% endif %}

Представления

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

Функция в представлении с декоратором:

from django.contrib.auth.decorators import permission_required

@permission_required('catalog.can_mark_returned')
@permission_required('catalog.can_edit')
def my_view(request):
    ...

Требуется разрешение mixin для представлений на основе классов.

from django.contrib.auth.mixins import PermissionRequiredMixin

class MyView(PermissionRequiredMixin, View):
    permission_required = 'catalog.can_mark_returned'
    
    permission_required = ('catalog.can_mark_returned', 'catalog.can_edit')
    
    

Пример

Мы не будем обновлять LocalLibrary здесь; возможно, в следующем уроке!

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

 Вы должны следовать той же схеме, что и для другого представления. Главное отличие состоит в том, что вам нужно ограничить представление только библиотекарями. Вы можете сделать это на основе того, является ли пользователь сотрудником (декоратор функции:  staff_member_required, переменная шаблона: user.is_staff) но мы рекомендуем вам вместо этого использовать  can_mark_returned разрешения и PermissionRequiredMixin, как описано в предыдущем разделе.

Важно: Не забудьте использовать вашего суперпользователя для тестирования на основе разрешений (проверки разрешений всегда возвращают true для суперпользователей, даже если разрешение ещё не определено!). Вместо этого создайте пользователя-библиотекаря и добавьте необходимые возможности.

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

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

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

Изучаем Raspberry Pi. Часть 8. Модуль камеры Raspberry Pi

В этой части нашего обзора Rapberry Pi мы рассмотрим как подключение модуля камеры (Camera Module)  превращает этот микрокомпьютер в мощный инструмент для получения фотографий, видео, а также распознавания различных объектов, что другими словами называется компьютерное зрение (computer vision). Как и всё в этом микрокомпьютере, подключение камеры — такое же простое действие, не требующее серьёзных навыков и умений. Разработанный специально для новичков, он позволяет за считанные минуты развернуть этот функционал и сразу приступать к исследованию и реализации ваших идей в проектах с использованием технологий компьютерного зрения.

Камера для Raspberry Pi является ещё одним устройствомм ввода и представляет собой отдельный модуль на печатной плате квадратной формы, имеющей специальные отверстия для её фиксации/крепления с гибим кабелем-шлейфом, подсоединяемым к разъёму камеры (Последовательный интерфейс камеры, Camera Serial Interface, CSI) на плате микрокомпьютера. Этот порт обеспечивает передачу видеоданных в высоком разрешении, что открывает перед вами огромное направление деятельности, использующей визуальное взаимодействие с объектами в реальном окружающем нас мире.


Доступны две версии модуля камеры Raspberry Pi: обычная версия и версия «NoIR». Эти версии легко различить визуально: нормальная версия имеет зеленую печатную плату, а версия NoIR — черную печатную плату. Если вы хотите снимать обычные фотографии и видео в хорошо освещенном помещении, вы всегда должны использовать обычную версию для получения наилучшего качества изображения. Версия NoIR называется именно так, потому что в ней нет инфракрасного (IR, Infrared) фильтра и она предназначена для использования с источниками инфракрасного света для получения фотографий и видео в полной темноте. Если вы строите к примеру, скворечник, или систему видеонаблюдения, или разрабатываете другой проект, связанный с ночным видением, вам нужна версия NoIR, но не забудьте одновременно купить и источник инфракрасного света для «постветки» объектов, если они сами не излучают тепло!

На данный момент текущая версия модуля камеры Raspberry Pi имеет индекс v2 (или версия 2.1). Модуль собирается на высококачественном датчике изображения Sony IMX219 — датчике того же типа, который можно найти на на задней панели смартфона или планшета. Это 8-мегапиксельный сенсор, что буквально означает, что он может делать снимки с разрешением до 8 миллионов пикселей. Он делает это путем захвата изображений и фиксации данных о нем на матрице с размерами 3280 пикселей в ширину и 2464 пикселей в высоту: умножьте эти два числа вместе и вы получите в общей сложности чуть более 8 миллионов отдельных пикселей!

Помимо фотографий, модуль камеры может снимать видеоматериалы с разрешением Full HD — таким же, как и у большинства телевизоров — и со скоростью 30 кадров в секунду (30 frames per second, 30 fps). Для более плавного движения или даже для создания эффекта замедленного движения камеру можно настроить на захват с более высокой частотой кадров, уменьшив разрешение: 60 кадров в секунду для видеоматериалов с разрешением 720p и до 90 кадров в секунду для разрешения 480p (VGA).

 

 

Установка модуля камеры

Как и любое дополнительное оборудование, модуль камеры следует подключать или отключать от Raspberry Pi только при выключенном питании и отсоединенном от сети кабеле питания. Если ваш Raspberry Pi включен, выберите «Выключение» в главном меню, подождите, пока он выключится, и отключите его от сети.

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

Таким же образом установите другой конец кабеля. Найдите порт камеры (CSI) на Raspberry Pi и осторожно потяните фиксатор вверх. Если ваш Raspberry Pi размещён в защитном корпусе — вам следует вынуть его из корпуса перед подключением модуля к разъёму. Расположив Raspberry Pi так, чтобы порт HDMI был обращен к вам, вставьте ленточный кабель таким образом, чтобы серебристые края были слева от вас, а синий пластик — справа, затем осторожно задвиньте фиксатор на место. Если кабель установлен правильно, он будет расположен ровно и не выскочит, если вы его слегка потянете. Если нет, вытяните фиксатор и повторите процедуру еще раз.

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

 

РЕГУЛИРОВКА ФОКУСА

Модуль камеры Raspberry Pi обычно поставляется с небольшим пластиковым колесиком. Оно предназначено для настройки фокуса объектива. Хотя заводская установка фокусировки обычно идеальна, если вы используете камеру для работы с очень близким планом, вы можете сдвинуть колесико над объективом и осторожно повернуть его, чтобы настроить фокус вручную.

 

Подключите блок питания обратно к Raspberry Pi и подождите, пока загрузится операционная система. Прежде чем вы сможете использовать камеру, вам нужно сообщить Raspberry Pi, что она подключена. Для этого нажмите значок «Малинка» (Пуск), чтобы загрузить меню, выберите категорию «Настройки» (Preferences) и нажмите «Конфигурация Raspberry Pi» (Raspberry Pi Configuration). Когда инструмент конфигурации загрузится, щелкните вкладку «Интерфейсы» (Interfaces), найдите в списке запись «Камера» (Camera) и щелкните круглый переключатель слева от «Включено» (Enabled), чтобы включить его. Нажмите OK, и инструмент предложит вам перезагрузить Raspberry Pi. Сделайте это, и ваша камера будет готова к использованию!

 

 

Тестирование модуля камеры

Чтобы убедиться, что ваш модуль камеры установлен правильно и вы включили интерфейс в Raspberry Pi Configuration Tool, вы можете использовать инструмент raspistill. Это, наряду с raspivid для видео, предназначено для захвата изображений с камеры с помощью интерфейса командной строки (CLI, command-line interface) Raspberry Pi.

В отличие от программ, которыми вы пользовались до сих пор, в меню вы не найдете raspistill. Вместо этого щелкните значок малины, чтобы загрузить меню, выберите категорию «Стандартные» (Accessories) и щелкните «Терминал» (Terminal). В появившемся черном окне с зелеными и синими надписями необходимо будет ввести соответствующую команду.

Чтобы протестировать камеру, введите в Терминал следующее:

Как только вы нажмете ENTER, вы увидите на экране большое изображение того, что видит камера. Это называется предварительным просмотром в реальном времени (live preview) и, если вы не укажете иное, оно будет длиться 5 секунд. По истечении этих 5 секунд камера сделает одно неподвижное изображение и сохранит его в вашей домашней папке под именем test.jpg. Если вы хотите сделать ещё один снимок, введите ту же команду еще раз, но не забудьте изменить имя выходного файла после -o, иначе вы сохраните новый файл поверх своего первого изображения и первое изображение будет безвозвратно утеряно!

Если изображение предварительного просмотра в реальном времени перевернуто, то вам нужно сообщить raspistill, что камера повернута. Модуль камеры имеет ленточный кабель, а фиксация модуля во внешних устройствах часто производится под разным углом относительно вертикали, отсчитывающейся от «нулевого» положения, когда выходящий из нижнего края модуля кабель нормально направлен вниз. Если изображение смотрит «в бок» или перевернтуро «вверх ногами», то вы можете программно повернуть изображение на 90, 180 или 270 градусов с помощью переключателя -rot (rotation, вращение). Для камеры, установленной с кабелем, выходящим сверху (т.е. под углом 180 шрадусов относительно «нулевого» положения, просто используйте следующую команду:

Если ленточный кабель смотрит направо, используйте значение поворота 90 градусов; если он смотрит налево, используйте угол 270 градусов. 

Чтобы увидеть полученное изображение, откройте «Диспетчер файлов» (File Manager) из категории «Стандартные» (Accessories) в главном меню. Полученное вами изображение под названием test.jpg будет в вашей домашней папке home/pi. Найдите его в списке файлов, затем дважды щелкните по нему, чтобы загрузить в средство просмотра изображений. Теперь вы можете прикрепить это изображение к электронным письмам, загрузить его на веб-сайты через браузер или перетащить на внешнее запоминающее устройство.

 

 

Представляем picamera

Самый удобный способ управления модулем камеры — использовать Python и библиотеку picamera, что даёт полный контроль над возможностями предварительного просмотра, получения изображения и захвата видео модулем камеры. Эта связка инструментов также позволяет интегрировать камеру в свои собственные проекты, более того даже комбинируя их с программами, которые используют модуль GPIO через библиотеку GPIO Zero!

 

В этой части нашего обзора предполагается наличие у вас опыта работы с Python и интегрированной средой разработки (IDE) Thonny! Если вы еще не имеете этой квалификации, обратитесь к разделам  «Изучаем Raspberry Pi. Часть 5. Программирование на Python» и «Изучаем Raspberry Pi. Часть 7. Подключаем платы расширения» и сначала поработайте над проектами в них.

 

Закройте Терминал, если он еще открыт, щелкнув «крестик» в правом верхнем углу окна, затем загрузите Thonny из категории «Программирование» (Programming) главного меню. Сохраните новый проект как Camera, затем начните импортировать библиотеки, необходимые для вашей программы, введя следующее в область сценария:

Последняя строка позволяет вам управлять модулем камеры с помощью функции camera. Для начала введите следующее:

Нажмите «Выполнить» (Run), и ваш рабочий стол исчезнет; на его месте вы увидите в полноэкранном режиме все, что видит камера. Попробуйте переместить её или помахать рукой перед объективом, и вы увидите, что изображение на экране повторит всё, что увидит камера. Через 10 секунд окно предварительного просмотра закроется, а программа завершится, но, в отличие от предварительного просмотра из raspistill,  изображение не будет при этом сохранено. Пример полноэкранного предварительного просмотра:

Если предварительный просмотр отображался под неправильным углом, вы можете программно повернуть изображение, чтобы оно отображалось правильно. Сразу под строкой camera = PiCamera () введите:

Эта строка исправит ситуацию, если предварительный просмотр был отображен под неправильным углом. Как и в случае с raspistill, camera.rotation позволяет повернуть изображение на 90, 180 или 270 градусов, в зависимости от того, выходит ли кабель с правой, верхней или левой стороны модуля камеры.  Возьмите за правило использовать camera.rotation в начале каждой программы, которую вы пишете, чтобы получать изображения в правильном ракурсе!

 


Захват неподвижных изображений

Чтобы сделать снимок, а не просто показать предварительный просмотр в реальном времени, вашу программу необходимо изменить. Начните с уменьшения задержки для предварительного просмотра: найдите строку sleep(10) и измените ее на:

А прямо под этой строкой добавьте следующее:

Обратите внимание!

Когда камера находится в режиме предварительного просмотра, она автоматически анализирует видео, чтобы узнать, нужно ли изменить свои настройки для получения наилучшего качества. Вы увидите это, если находитесь в очень темной или очень светлой среде, когда предварительный просмотр сначала невозможно увидеть, а затем он быстро становится чётче. Чтобы дать камере время на настройку, всегда добавляйте в программу как минимум 2-секундный период предварительного просмотра, прежде чем делать снимок.

 

Функция camera.capture сообщает Python о том, что нужно сохранить получаемое неподвижное изображение. В ней также указывается название файла-изображения и путь к нему. В этом примере вы сохраняете его на рабочий стол — найдите его, посмотрев чуть ниже корзины для мусора. Если окно Thonny мешает, просто щелкните и перетащите строку заголовка в сторону. Дважды щелкните файл, чтобы просмотреть сделанное изображение. Поздравляем: вы только что запрограммировали работу камеры!

 

 

Захват видео

Вы можете снимать не только неподвижные изображения, но и динамичное видео. Удалите все, что находится между строками camera.start_preview () и camera.stop_preview (), затем введите следующее под строкой camera.start_preview ():

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

Чтобы воспроизвести видео, просто дважды щелкните файл video.h364 на рабочем столе и видео начнет воспроизводиться! После того, как видео закончится, программное обеспечение плеера закроется с дружественным сообщением в Терминале. Поздравляем: теперь вы можете снимать видео с помощью модуля камеры Raspberry Pi!

 

 

Покадровая анимация при нажатии кнопки

Используя то, что вы только что узнали, и свои знания о том, как подключить оборудование к разъёму GPIO Raspberry Pi из нашей статьи «Изучаем Raspberry Pi. Часть 6. Использование Scratch и Python для управления физическими устройствами», пора создать что-то особенное: например, вашу собственную студию покадровой анимации (stop-motion animation).

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

Для этого проекта вам понадобится кнопочный переключатель, макетная плата, перемычка «папа-папа» (M2M) и пара перемычек «папа-мама» (M2F). Если у вас нет макетной платы, вы можете подключить коммутатор, используя вместо этого кабели «мама-мама» (F2F), но его будет намного труднее нажимать. Если вам нужно напомнить о каком-либо из этих компонентов, обратитесь к упомянутой выше статье «Изучаем Raspberry Pi. Часть 6. Использование Scratch и Python для управления физическими устройствами». Вам также понадобятся объекты для анимации: это может быть что угодно, от кусочка пластилина — до игрушечной машинки или фигурки.

Начните с создания схемы: добавьте кнопку на макетную плату, затем подключите шину заземления макета к контакту заземления на Raspberry Pi (отмечен GND) с помощью перемычки «папа-мама». Используйте перемычку «папа-папа», чтобы подключить одну ножку коммутатора к шине заземления на макетной плате, затем перемычку «папа-мама», чтобы подключить другую ножку коммутатора к контакту 2 GPIO (обозначен GP2).

Создайте новый проект в Thonny и сохраните его как Stop Motion. Начните с импорта и настройки библиотек, необходимых для использования камеры и порта GPIO:

Затем напишите следующее:

Нажмите «Выполнить» (Run), и вы увидите окно предварительного просмотра камеры. Предварительный просмотр будет оставаться на экране до тех пор, пока вы не нажмете кнопочный переключатель: нажмите его сейчас, и предварительный просмотр закроется после того, как ваша программа сохранит изображение на рабочем столе. Найдите изображение с именем image.jpg и дважды щелкните его, чтобы открыть и подтвердить, что программа работает корректно.

Покадровая анимация предполагает создание множества неподвижных изображений, чтобы создать иллюзию движения, когда они все собраны вместе и воспроизводятся по очереди. Наличие большого количества этих отдельных изображений на рабочем столе приведет к беспорядку, поэтому вам понадобится отдельная папка для их хранения. Щелкните правой кнопкой мыши в любом месте рабочего стола, на котором еще нет файла или значка, затем выберите «Создать новую» (Create New) и «Папку» (Folder). Назовите её animation строчными буквами, затем нажмите кнопку ОК.

Необходимость перезапускать программу каждый раз, когда вы делаете снимок для анимации является не очень удобным решением, поэтому вам следует изменить ее, чтобы она работала в цикле. Однако в отличие от предыдущих циклов, которые вы создавали, этот нуждается в способе корректного закрытия — в противном случае, если вы остановите программу во время отображается превью камеры, вы больше не сможете видеть рабочий стол! Для этого вам нужно воспользоваться двумя специальными инструкциями: try (пытаться) и except (кроме).

Начните с удаления всего, что находится после camera.start_preview (), затем введите:

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

Затем настройте цикл, набрав:

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

В этих трех строках кода есть пара хитрых приемов. Первый находится в имени файла захвата: использование %03d указывает Python взять число и добавить столько нулей в начало, сколько нужно, чтобы получилось три цифры. Таким образом, «1» становится «001», «2» становится «002», а «10» становится «010». Это необходимо для того, чтобы файлы располагались в правильном порядке и чтобы вы не перезаписывали уже сохраненный файл.

% frame в конце этой строки указывает Python использовать номер переменной кадра в имени файла. Чтобы убедиться, что каждый файл уникален, последняя строка:  frame + = 1  увеличивает переменную кадра на 1. При первом нажатии кнопки кадр будет увеличен с 1 до 2; в следующий раз с 2 до 3; и так далее.

Однако на данный момент ваш код не завершится корректно, когда вы закончите делать снимки. Чтобы это произошло, вам понадобится, except (кроме) для вашего try. Введите следующее, не забывая удалить один уровень отступа в первой строке, чтобы Python знал, что это не часть раздела try:

Вся программа должна выглядеть так:

Попробуйте нажать «Выполнить» (Run), но вместо нажатия кнопки нажмите клавиши CTRL и C на клавиатуре. Вам не нужно нажимать обе клавиши одновременно: просто удерживайте CTRL, нажмите и отпустите C, затем отпустите CTRL. Эти два ключа действуют как прерывание, говоря Python, чтобы он остановился. Без строки except KeyboardInterrupt: Python немедленно завершит работу и оставит предварительный просмотр камеры, блокирующий ваш экран; однако с этой строкой Python запускает любой код, который находится внутри — в данном случае код, говорящий ему, что нужно остановить предварительный просмотр камеры и завершить работу.

Теперь вы готовы приступить к съемке покадровой анимации! Расположите модуль камеры так, чтобы он мог видеть объекты, которые вы собираетесь анимировать, и убедитесь, что он не двигается. Если камера двигается или шевелится — это может испортить вашу работу. Поместите ваши объекты в их начальные позиции, затем нажмите «Выполнить» (Run), чтобы запустить программу. Убедитесь, что все выглядит как требуется в предварительном просмотре и нажмите кнопку, чтобы сделать первый кадр.

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

Когда вы закончите, нажмите CTRL + C, чтобы закрыть программу, затем дважды щелкните папку animation на рабочем столе, чтобы увидеть сделанные вами файлы изображений. Дважды щелкните любое изображение, чтобы открыть его и просмотреть во всех деталях!

Изначально мы говорили об анимации, однако на данный момент всё, что у вас получилось — это папка, полная неподвижных, статических изображений. Чтобы создать анимацию, вам нужно превратить их в видео. Для этого щелкните значок «Малинка» (Пуск), чтобы загрузить главние меню, выберите «Стандартные» (Accessories)  и щелкните «Терминал» (Terminal). При этом откроется интерфейс командной строки (command-line interface), более подробно описанный в статье «Изучаем Raspberry Pi. Дополнение 3. Интерфейс командной строки», который позволяет вам вводить команды в Raspberry Pi. Когда Терминал загрузится, начните с перехода в созданную вами папку, набрав:

Важно, чтобы буква «D» слова «Desktop» была в верхнем регистре; Raspbian очень чувствительна к регистру, что означает, что если вы не введете команду или имя папки в том виде, в котором они были изначально написаны, это не будет работать! После смены папок введите следующее:

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

Чтобы воспроизвести видео, найдите файл animation.h364 в папке animation и дважды щелкните его, чтобы открыть. Кроме того, вы можете воспроизвести его из Терминала, набрав следующее:

Как только видео загрузится, вы увидите, как оживает ваша покадровая анимация. Поздравляем: вы превратили Raspberry Pi в мощную анимационную студию!

 

Если ваша анимация движется слишком быстро или слишком медленно, измените часть -r 10 команды avconv на меньшее или большее число: это частота кадров или количество неподвижных изображений в одной секунде видео. Чем меньше значение, тем медленнее будет анимация, но она будет выглядеть менее гладкой. Большее число позволяет выглядеть анимации более плавной, но заставляет её проигрываться быстрее.

Если вы хотите сохранить видео, обязательно перетащите его с рабочего стола в папку «Видео»; в противном случае, в следующий раз, когда вы запустите свою программу, вы в конечном итоге перезапишете файл!

 

 

Расширенные настройки камеры

Если вам нужен больший контроль над модулем камеры Raspberry Pi, вы можете использовать библиотеку Python picamera для доступа к различным настройкам. Эти настройки вместе со значениями по умолчанию подробно описаны ниже, а изучив, вы сможете их использовать в ваших собственных программах.

 

Эта настройка устанавливает режим автоматического баланса белого камеры и может быть установлен в любой из следующих режимов: выключен, авто, солнечный свет, облачно, тень, вольфрам, флуоресцентный, лампа накаливания, вспышка или горизонт (сответственно: off, auto, sunlight, cloudy, shade, tungsten, fluorescent, incandescent, flash или horizon). Если вы обнаружите, что ваши фотографии и видео выглядят немного синими или желтыми, попробуйте применить другой режим.

 

Эта настройка устанавливает яркость изображения камеры от самого темного при «0» до самого яркого при «100».

 

Эта настройка изменяет цветовой эффект, используемый камерой. Обычно этот параметр не следует менять, но если вы введете пару чисел, то сможете изменить способ записи цвета камерой. К примеру, попробуйте (128, 128), чтобы создать черно-белое изображение.

 

Эта настройка устанавливает контрастность изображения. Чем больше число, тем более драматичнее и резче выглядят вещи; меньшее число сделает вещи более размытыми. Вы можете использовать любое число от «-100» для минимального контраста до «100» для максимального контраста.

 

Эта настройка позволяет обрезать изображение, отрезая части по бокам и сверху, чтобы захватить только ту часть изображения, которая вам нужна. Числа представляют координату X, координату Y, ширину и высоту и по умолчанию захватывает все изображение. Попробуйте уменьшить последние два числа на «0,5» и «0,5» чтобы увидеть, какое вляние на изображение имеет этот параметр.

 

Эта настройка устанавливает компенсацию экспозиции (exposure compensation) камеры, позволяя вручную контролировать количество света, улавливаемого для каждого изображения. В отличие от изменения яркости, это фактически управляет самой камерой. Допустимые значения варьируются от «-25» для очень темного изображения до «25» для очень яркого изображения.

 

Эта настройка устанавливает режим экспозиции (exposure mode), который модуль камеры использует чтобы решить, как следует экспонировать изображение. Возможные режимы: выключено, авто, ночь, подсветка, прожектор, спорт, снег, пляж, очень длинная, фиксированная частота кадров, антишейк и фейерверк (соответственно: off, auto, night, backlight, spotlight, sports, snow, beach, verylong, fixedfps, antishake и fireworks).

 

Эта настройка устанавливает количество изображений, захваченных для создания видео в секунду, или другими словами — частоту кадров (frame rate). Более высокая частота кадров создает более плавное видео, но занимает больше места для хранения создаваемого файла. Более высокая частота кадров требует использования более низкого разрешения, которое вы можете установить с помощью параметра camera.resolution.

 

Эта настройка переворачивает изображение камеры по горизонтальной оси (оси X), если установлено значение True.

 

Эта настройка применяет к видеопотоку один из эффектов изображения, который будет отображаться в предварительном просмотре, а также в сохраненных изображениях и видео. Возможные эффекты: размытие, мультипликация, цветовой баланс, колорпойнт, смена цветов, деинтерлейсинг1, деинтерлейсинг2, шумоподавление, тиснение, пленка, gpen, штриховка, негатив, нет, масляная краска, пастель, постеризация, насыщенность, эскиз, соляризация, размытие и акварель (соответственно: blur, cartoon, colorbalance, colorpoint, colorswap, deinterlace1, deinterlace2, denoise, emboss, film, gpen, hatch, negative, none, oilpaint, pastel, posterise, saturation, sketch, solarize, washedout и watercolor).

 

Эта настройка изменяет настройку ISO камеры, что влияет на ее чувствительность к свету. По умолчанию камера регулирует ISO автоматически в зависимости от доступного ей света. Вы можете установить ISO самостоятельно, используя одно из следующих значений: 100, 200, 320, 400, 500, 640, 800. Чем выше ISO, тем лучше камера будет работать в условиях низкой освещенности, но тем более зернистым будет изображение или захватываемое видео.

 

Эта настройка влияет на то, как камера определяет количество доступного света при настройке экспозиции. Значение по умолчанию «average» (среднее) усредняет количество света, доступного по всему изображению. Другие возможные режимы — «backlit» (с подсветкой), «matrix» (матричный) и «spot» (точечный).

 

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

 

Эта настройка управляет поворотом изображения от 0 градусов до 90, 180 и 270 градусов. Используйте её, если вы не можете расположить камеру так, чтобы ленточный кабель модуля камеры выходил по направлению вниз.

 

Эта настройка контролирует насыщенность изображения или другими словами — яркость цветов. Возможные значения от «-100» до «100».

 

Эта настройка контролирует резкость изображения. Возможные значения от «-100» до «100».

 

Эта настройка контролирует то, как быстро открывается и закрывается затвор (shutter) при съемке изображений и видео. Вы можете установить выдержку (shutter speed) вручную в микросекундах, при этом более длинные выдержки лучше работают при слабом освещении, а более короткие выдержки — при более ярком. Обычно следует оставить значение по умолчанию — автоматическое («0»).

 

Эта настройка, подобно рассмотренной выше hflip, переворачивает изображение камеры, но по горизонтальной оси (оси Y), если установлено значение True.

 

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

 

Мы рассмотрели основные функции настройки камеры. Более подробную информацию об этих настройках, а также о дополнительных настройках, которые не были рассмотрены здесь, можно найти на сайте библиотеки picamera:  picamera.readthedocs.io.

 

На официальном сайте Raspberry Pi в разделе проектов на Python для модуля камеры вы можете попробовать свои силы в практическом применении своих знаний в программировании на этом языке, а также использования модуля камеры, просто следуя подробным инструкциям, копируя написанный до вас код и проверяя заявленную в проектах функциональность. Вы можете проверить на практике такие проекты, как: съёмка в таймлапс, наложение масок на фотографии в реальном времени, создание объектов для Minecraft и многое другое. Просматривая готовые проекты и пытаясь повторить их у себя на компьютере, вы очень быстро повысите свои знания и навыки работы с Raspberry Pi, внешними модулями и платами расширения. Существует также огромное количество проектов, написанных на других языках программирования, к примеру, Scratch и других. Это сделано для вашего удобства и большей гибкости в применении микрокомпьютеров Raspberry Pi для реализации всевозможных задач в реальном мире.

 

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

 

  

 

 

ГДЗ рабочая тетрадь по истории 8 класс часть 1, 2 Чернова Экзамен

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

Приоритетные группы пользователей онлайн справочника

Среди пользователей, активно применяющих онлайн ответы к рабочей тетради по истории 8 класс Черновой, можно встретить:

  • восьмиклассников, принимающих участие в исторических научных, конкурсных мероприятиях. Ресурс позволит им качественно подготовиться, особенно в том случае, если в классе дисциплина изучается по другим материалам. Применение этого источника в таком случае расширит и углубит знания, позволит рассмотреть событие, исторический факт максимально всесторонне;
  • те, кто не включил историю в наиболее значимые для себя школьные предметы, смогут получить высокий балл, применяя эту площадку. Это позволит им иметь достаточный для прохождения конкурса аттестатов средний балл, не углубляясь в курс предмета, оставив время на более подробное прохождение тех дисциплин, на которых будет базироваться их профессия;
  • выпускники, готовящиеся к итоговой контрольной, ЕГЭ по предмету и повторяющие курс отечественной истории за восьмой класс;
  • подростки, часто отсутствующие в школе из-за болезни, творческих и спортивных поездок. Для них материал будет альтернативой учительскому объяснению, позволяющей уверенно подготовиться и хорошо ответить педагогу;
  • сами предметники, которые в авральном порядке проверяют большое количество рабочих тетрадей в период повышенной нагрузки при наличии срочных рабочих задач;
  • родители восьмиклассников, проверяющие качество знаний своего ребенка, не внедряясь в курс предмета.

Какие плюсы имеет сборник ответов к рабочей тетради по истории за 8 класс (автор Чернова)?

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

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

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

Введение в Python. Часть 8. Функции

Функция в Python — это объект, принимающий аргументы и возвращающий значение. Со встроенными функциями вы уже сталкивались в предыдущих уроках. Например, когда когда мы хотели узнать сумму всех чисел в списке. Можете заглянуть в выпуск про списки.

Видео: Глеб Лиманский

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

Если бы такой функции в Python не существовало, то мы бы могли написать что-то вроде такого кода:

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

Подписывайтесь на рассылку «Мастерской»

Вы узнаете о крутых инструментах для сбора, анализа и визуализации данных

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

Чтобы определить функцию используется конструкция def. Дальше пишем имя функции, скобки и двоеточие. После двоеточия вы кодом прописываете, что именно должна делать функция, а дальше с помощью return функция возвращает результат. А чтобы использовать функцию нужно написать ее название и в скобка и передать ей аргумент.

Вот так почти всегда будет выглядеть функция.

Но она не всегда должна что-то принимать на вход или что-то возвращать. Вот пример функции, которая просто здоровается — распечатывает «Hi!», но не принимает аргументов и ничего не возвращает. И если напишете print(say_hi()), то в ответе вы увидите None.

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

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

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

По умолчанию мы назначили small_talk = «Как дела?». Когда мы будем вызывать функцию, нам не нужно указывать этот аргумент, он уже есть по умолчанию. Нам нужно лишь передать имя, дальше функция сама спросит пользователя «Как дела?».

Отдельно указывать аргумент small_talk при вывозе функции нужно только тогда, когда мы хотим внести в него какие-то изменения. Например, мы хотим, чтобы вместо «Как дела?» функция спросила что-то другое.

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

Допустим, наши данные у нас хранятся в виде подобного словаря — phone_book = {‘Alice’: ‘8-987-657 12 11’, ‘Bob’:’89012345678′, ‘Jack’:’8 (9 1 2) 3 4 5 6 7 8 9′}. Ключами тут являются имена, а значениями — телефоны, которые написаны по-разному: с пробелами, дефисами, скобками. Нам нужно к каждому из этих номеров приметь функцию clean_tel().

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

Такой список можно будет легко сохранить в табличку.

Анонимная функция

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

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

А вот как она выглядит, если переписать ее с помощью lambda.

После инструкции lambda нужно указать аргументы, а через двоеточие, что функция должна сделать с этими аргументами.

Лямбда-функцию не обязательно как-то называть. Ее можно вызвать и без имени. Нужно поместить функцию в скобки. И рядом же в скобках указать аргументы.

Кстати, и нашу функцию say_hi() тоже можно переписать с помощью lambda.

Это все основные принципы работы функций в Python. Если вы хотите прочитать о дополнительных возможностях функций, можете сделать это здесь. И, как всегда, тетрадка Jupyter Notebook с этого урока лежит на нашем GitHub.

JoJolion — Причудливая энциклопедия ДжоДжо

ДжоДжолион

Японское имя

ジョジョの奇妙な冒険 Part8
ジョジョリオン

Альтернативные имена

Невероятные приключения ДжоДжо
Часть 8: ДжоДжолион

Жанр

Боевик, Приключения, Сверхъестественное, Тайна, Романтика, Драма

Год выпуска

май 2011 г. — август 2021 г.

Главы

110 глав, JJL Ch. 1 — 110

»

Это история о снятии проклятия … Этот загадочный мальчик, закопанный в землю, кто он такой?

JoJolion (ジョジョリオン, JoJorion ) — отмеченная наградами восьмая часть JoJo’s Bizarre Adventure , сериализованный в Ultra Jump from May 1

История начинается в 2011 году и рассказывает о Джоске Хигашиката, молодом человеке, страдающем ретроградной амнезией, который пытается раскрыть свою личность в городе Морио, прибрежном японском городе, пострадавшем от землетрясения Тохоку.Однако его раскопки втягивают его и его приемную семью в незавершенное дело между его предыдущей жизнью и надвигающейся бесчеловечной угрозой.

JoJolion представляет собой вторую часть серии, действие которой происходит во вселенной Steel Ball Run . Эта часть также получила Гран-при манги на Японском фестивале медиаискусства 2013 года. [1] В 2021 году Араки получил специальную награду за мангу в родном городе Иватэ за часть 8 и его вклад в префектуру. [2]

JoJolion изображен на обложке Ultra Jump .

Краткое описание сюжета

Человек с амнезией

Раскопки
Основная статья: Soft & Wet (сюжетная арка)
Ясухо находит загадочного человека, похороненного возле Стенных Глаз

Ясухо Хиросе, скрывающийся от Джошу Хигашиката возле Стены Глаз города Морио, обнаруживает человека в матросской фуражке, наполовину погребенного под землей. После того, как она вызывает скорую помощь, Ясухо замечает родимое пятно в форме звезды на его плече, окруженное свежим следом от укуса. Более того, мужчина спрашивает его имя.После того, как она вытаскивает его из-под земли, она замечает, что мужчина полностью обнажен, и именно тогда Ясухо обнаруживает, что у него четыре яичка. Затем между Джошу и страдающим амнезией вспыхивает драка, во время которой из плеча моряка появляется мыльный пузырь, который, по-видимому, заставляет Джошу вылезти из глаз. Мужчина теряет сознание, прежде чем их всех доставят в больницу.

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

Первая улика

Позже в больнице Ясухо снова встречает молодого человека и объясняет ей, что у него амнезия. Ясухо предлагает ему помощь, и, исследуя его шляпу, им, по-видимому, удается узнать его личность: Йошикаге Кира. Однако Ясухо считает, что это имя ему не подходит, и вместо этого называет его «Джоске». Дуэт идет в квартиру Киры, где Джоске обнаруживает обнаженную женщину в ванне. Ясухо и Джоске пытаются спросить женщину, кто она такая, но она не отвечает.Ясухо обнаруживает компрометирующий фотоальбом, содержащий фотографии женщины, связанной эротическим рабством с кем-то, кто, похоже, был Джоске. Убежденный, что Джоске — садист, Ясухо в отчаянии уходит. Более того, Джоске замечает, что на него нападают: каждый раз, когда он ранит руку или ногу, она попадает под контроль агрессора в квартире над ним. Раскрывая свой стенд Soft & Wet и благодаря своевременному возвращению Ясухо, Джоске удается поймать своего противника.

Злоумышленник представляется как Одзиро Сасаме, серфер, стремящийся отомстить Йошикаге Кире и подтверждающий, что Джоске не Кира, хотя и имеет мимолетное сходство.Сасаме рассказывает о психопате Кире, который в прошлом с помощью неясной силы и по незначительной причине убедил Сасаме съесть свои собственные пальцы. Джоске видит фотографию Киры возле Стенных Глаз и возвращается туда, где он появился, чтобы обнаружить тело настоящего Йошикаге Киры, который умер от остановки сердца за три дня до этого. Ясухо тайно получает результаты вскрытия и обнаруживает еще кое-что: у трупа Киры отсутствуют оба яичка.

Поиск личности

След Хигашиката
Основная статья: Калифорнийская королевская кровать (сюжетная арка)
Основная статья: «Paisley Park» и «Born This Way» (сюжетная арка)
Джоске принят в семью Хигашиката

Ясухо знакомит Джоске с главой семьи Хигахиката, Норисукэ Хигашиката IV, владельцем бизнеса по импорту фруктов, унаследованного от его деда Норисукэ Хигашиката I.Получив имя Хигашиката, Джоске Хигашиката приветствуется в доме Нориске и получает указание охранять младшую дочь Дайю. Когда Норисукэ зловеще предупреждает его повиноваться своему слову, Ясухо выводит горничная семьи Ниджимура и предупреждает не возвращаться.

Когда все уходят, Дайя начинает флиртовать с Джоске и решает поиграть с ним. Используя свою кровать Stand California King Bed, она крадет одно из немногих воспоминаний Джоске каждый раз, когда он суетится из-за нее. Чтобы все было по справедливости, она говорит Джоске, что если ему удастся заставить ее наступить на его тень, воспоминания вернутся к нему, хотя ее знания и проницательность делают для него эту попытку почти невозможной.Тем временем Ясухо обнаруживает с помощью теста ДНК, что Джоске и Кира — практически один и тот же человек. В конце концов Джоске обманом заставляет Дайю наступить на его тень, отбрасываемую светом открытого холодильника. Джоске решает не держать зла и входит в кабинет Нориске, следуя символу, который он видел на запястье Киры.

Джоске обнаруживает в кабинете книгу, помеченную тем же символом: запись гонки Steel Ball Run. На обложке он обнаруживает генеалогическое древо семьи Хигашиката и то, что первая дочь Норисукэ Хигашиката вышла замуж за Джонни Джостара, прямого предка мертвого Йошикаге Киры.Из генеалогического древа Джоске планирует найти единственного живого родственника Киры: его мать Холи Джостар-Киру. С помощью Ясухо Джоске узнает, что она врач в местной больнице T.G. Университетская больница и оба соглашаются встретиться здесь. Кроме того, они обнаруживают, что в настоящее время она является пациентом. По пути в больницу Джоске замечает, что его GPS неисправен и что стенд мотоциклиста преследует его, внезапно появляясь и атакуя ледяным ветром, прежде чем так же быстро исчезнуть.

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

Джоске — смесь двух мужчин!

Узнав о сверхъестественных свойствах почвы возле Глаза Стены, Кей и Джоске выясняют, что Джоске представляет собой смесь двух мужчин, демонстрируя процесс с двумя фруктами. Однако Стенд Киры был не Soft & Wet, а скорее Killer Queen, оставляя личность другого человека загадкой.

Тем временем Ясухо удалось проникнуть в больницу и встретиться с бредившей Святой Джостар-Кирой, но вскоре ее выгнала охрана. Холи наблюдает за тем, как она видит стенд Ясухо в Пейсли-парке, активируется подсознательно, размышляя о том, что она может помочь своему сыну.Силы Пейсли Парк в конечном итоге приводят Ясухо обратно в больницу в комнату рядом с Холи, где она видит степень своей загадочной болезни. Ей не хватает способности отличать людей от предметов, и врачи отмечают, что у нее отсутствуют несколько жизненно важных органов, а в ее мозгу есть идеально сферические пустоты, но нет никаких признаков хирургического вмешательства. удаление.

Shakedown Road и Джонни Джостар
Основная статья: «Дорога вымогательства» (сюжетная арка)

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

Джоске и Джошу по отдельности понимают, как работает Shakedown Road, и используют это в своих интересах.По-видимому, взяв деньги и отбиваясь от головореза с помощью своего недавно пробужденного Stand Nut King Call, Джошу видит, что его обманули. По правде говоря, Джоске совершил еще один обмен и очистил свое имя перед полицейскими, а также получил деньги за сделку, чтобы возместить старику. После этого Ясухо и Джоске соответственно узнают в результате исследований и откровений владельца зоомагазина, что соседний Дзидзо был построен как памятник Джонни Джостару, и выясняют обстоятельства его смерти.

Джонни и Рина живут счастливо

После пробега «Стальной шар» Джонни женился на Рине Хигашикате, с которой познакомился по пути в Европу.Через несколько лет счастливой жизни Рину поразила загадочная болезнь: она начала терять воспоминания, а кожа стала каменной. В муках Джонни украл Труп Святого и увез его в Японию. Спрятав Труп в норе под сосной, Джонни привел сюда свою семью и молил Трупа передать болезнь от жены, Джонни с ужасом увидел, что вместо этого заболел его сын. В конце концов, Джонни принял болезнь на себя и умер, раздробив голову камнем.

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

В другом месте Ясухо находит путь к Медитационной сосне в задней части поместья Хигашиката по фотографиям в новостях, которые она исследовала. Она читает о ребенке, которого выбросило на берег неподалеку 13 ноября 1901 года. Он был одет в ожерелье. Ясухо внезапно схватили за руку изнутри дерева и на мгновение ощупали в темноте.

Новый враг: скальные люди
Розыгрыш Цуруги
Основная статья: Обман Бумажной Луны (сюжетная арка)

Ясухо оказывается с Цуруги Хигашиката, внуком Нориске.Цуруги сообщает, что они находятся в подземном помещении, используемом семьей Хигашиката. Цуруги и Ясухо болтают, и Цуруги показывает, что он мальчик, переодевающийся, чтобы предотвратить семейное проклятие. Когда Ясухо требует, чтобы он позволил ей уйти, Цуруги разыгрывает ее. Он сложил смартфон Ясухо в лягушку, которая прыгает на нее, и она внезапно попадает в плен к Королю Бумажной Луны.

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

Через щель в двери второго подземного помещения кто-то шпионит за возвращением Цуруги и Ясухо.

Битва против Ёцую Ягияма
Основная статья: Норисукэ Хигашиката, Цуруги Хигашиката и Ёцую Ягияма (сюжетная арка)
Основная статья: «Я скала» (сюжетная арка)

Цуруги извиняется, признавая, что он нацелился на нее с помощью своего бумажного лунного короля.Успокоенный Ясухо спрашивает Цуруги о цели подземного комплекса, и она узнает, что он предназначен для лечения таинственной болезни, поражающей первенцев семьи Хигашиката, которая медленно превращает их кожу в камень. Ясухо вспоминают о состоянии Холи и о том, что Кира пытался спасти его мать. После ухода Цуруги появляется таинственный человек по имени Ёцую Ягияма и нападает на Ясухо.

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

Джоске сражается с Ёцую Ягиямой, человеком, который может превращаться в камень.

Вскоре на двоих мужчин нападают различные объекты, которые продолжают собираться в Джоске после того, как Йоцую каким-то образом подкрадывается к Джоске и касается его.Джоске и Нориске укрываются в бункере, где узнают, что Йоцую пообещал Цуруги дать ему лекарство в обмен на то, что он отдаст Джоске. Когда Джоске видит, что Ясухо схватили, он немедленно бросается в погоню с помощью стенда Нориске «Король ничего», который отслеживает предметы и людей по их запаху. Следуя по запаху, Нориске рассказывает Джоске о каменной болезни, которая поражает старшего ребенка в каждом поколении, и о том, как участники жертвуют собой ради ребенка. Король Ничто приводит Джоске и Нориске к побережью, где они находят Ясухо, все еще без сознания.В то же время они обнаруживают Йоцую и видят, что он каким-то образом может превратиться в камень. Ёцую снова атакует канистрами с пестицидами, но Джоске хватает его и прыгает со скалы в море внизу. Затем он ловит его в сетях и угрожает утопить, если он не ответит на свой вопрос, но Йоцую молчит, прежде чем рассыпаться в прах. В то же время Джоске замечает среди обломков таинственный фрукт, но вскоре он тонет глубоко в воде.

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

След фруктов
Участие Джобина Хигашиката
Основная статья: Каждый день — это летние каникулы (сюжетная арка)

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

Чтобы исследовать фрукт дальше, Нориске приводит Джоске в свою фруктовую комнату, чтобы изучить энциклопедию, но их прерывает возвращение первенца Нориске, Джобина Хигашиката. Джобин только что вернулся из зарубежной поездки и дарит Джоске редкого жука-оленя Dorcus Titanus Palawanicus. Обрадованный, увидев своего старшего сына, Нориске решает сопровождать его домой, и без его ведома Король Ничто обнаруживает запах таинственного фрукта на носовом платке Джобина, факт, который замечает только Джоске.

Джоске вызывает Джобина Хигашиката на бой с жуками.

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

Во время испытания Цуруги также завербовал Ясухо и заставил ее войти в Дом Хигашиката. После того, как Джоске отправляет им ключи от машины с пузырем, Ясухо и Цуруги входят в гараж и исследуют, куда Джобин ушел со своей машиной благодаря Пейсли-парку. Таким образом, они видят, что Джобин отдал дерево для таинственных плодов неизвестному человеку. Тем временем Джобин начал подозревать Джоске и пытается заставить его раскрыть свои намерения с помощью Speed ​​​​King; однако Джоске убегает.Как и Ясухо и Цуруги.

Битва против Айшо Дайненджияма
Основная статья: Дуби Ва (сюжетная арка)

Ясухо узнает, что это Айшо Дайненджияма, охранник бейсбольного стадиона Морио. Используя телефон Ясухо, наделенный полномочиями Пейсли Парк и сложенный Королем Бумажной Луны в лягушку, дуэт становится свидетелем того, как Айшо заключает фруктовую сделку со стариком, у которого чудесным образом отрастает потерянная нога. Однако Айшо обнаруживает телефон. Хотя телефон убегает, Айшо выпускает свой стенд Doobie Wah! преследовать Ясухо и Цуруги.Автоматический Doobie Wah! материализуется из их собственного дыхания и безжалостно преследует их.

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

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

Старый знакомый
Основная статья: Love Love Deluxe (сюжетная арка)
Джоске встречает Кареру Сакунами, знакомую его прежней личности

На следующий день Ясухо снова встречается с Джоске. Они прогуливаются по пляжу, разделяя нежный момент, но другая девушка внезапно приветствует Джоске как «Се-чан» и просит о встрече позже. Джоске идет на встречу с девушкой по имени Карера Сакунами. Несмотря на ее подозрительное поведение, Карера знакома с человеком, которым был Джоске, и он подыгрывает, скрывая свои потерянные воспоминания, и Карера действительно раскрывает свое имя: Джозефуми Куджо.Тем временем пара близнецов, играющих в футбол, братья А. Фекс, выслеживают Кареру и нападают на нее.

Объясняется природа каменных людей, раскрывается их тайное сосуществование с человечеством, преобладание среди них стендов и кажущиеся проклятыми взаимодействия, которые у них возникают, если они влюбляются в человека.

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

Битва против Тамаки Дамо
Основная статья: Хато привела своего парня домой (сюжетная арка)
Основная статья: Витамин С и Королева-убийца (сюжетная арка)
Основная статья: Ходячее сердце (сюжетная арка)

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

Пока Джоске отдыхает в доме Хигашиката и разговаривает с Ясухо, Хато приводит своего нового парня Тамаки Дамо, чтобы познакомиться с ее семьей. Удивительно, но Дамо непривлекателен и неуклюж, что приводит к неловкой встрече. Однако вскоре вся семья обездвижена витамином С Дамо, который превращает их в лужи.Дамо противостоит Нориске и допрашивает его, чтобы выяснить, кто ликвидировал его организацию. Затем Дамо объясняет контекст всего дела.

Трагедия смерти Киры и Джозефуми

Два года назад Йошикаге Кира случайно обнаружил Айшо Дайненджияма в его каменной форме, когда работал на корабле. Любопытный, он исследовал всю торговлю и обнаружил Локакаку. Он случайно встретился со знакомым, Джозефуми. Когда он был мальчиком, Джозефуми был спасен Холи Джостар-Кирой и Йошикаге, которые сделали ему операцию.Благодарный, Джозефуми согласился помочь Кире незаметно украсть несколько веток у Айшо, а затем привил ветки к другому дереву. Однако 19 августа 2011 года Джозефуми и Кира были пойманы Дамо и Йоцую. Кира был смертельно ранен, но подбросил к ним часть бомбы Killer Queen, вызвав взрыв. Это позволило Джозефуми затащить Киру в тайник с двумя фруктами, которые у них были. Хотя он прогнал братьев А. Фекс, Джозефуми потратил фрукты впустую, пытаясь спасти Киру, но, заметив их новую способность сливаться, решил слиться с Кирой в надежде, что Кира выживет и соберет новые плоды.Разлом открылся, и двое мужчин были погребены под землей.

Каато Хигашиката возвращается к своей семье

Вернувшись в настоящее, Хато противостоит Дамо тому, что он делает, но Дамо берет ее, чтобы противостоять Джоске после того, как Нориске раскрывает личность Джоске. Дамо почти убивает его, но его прерывают, когда Джоске выносит Хато из дома. Благодаря своему Ходячему сердцу Хато наносит серьезный урон, а Джоске может прикончить Дамо. Впоследствии он подтверждает, что является слиянием Йошикаге Киры и Джозефуми Куджо.

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

Интерлюдия и последствия

Основная статья: Человек Милагро (сюжетная арка)
Основная статья: Рассвет семьи Хигашиката

За две недели до освобождения Каато Хигашиката Джошу просит у отца немного денег, чтобы купить некоторые товары для идолов.После встречи с айдолом Джошу противостоит другому фанату и тайно крадет его бумажник после того, как он оставляет его в кассе. Джошу предается шопингу и по совпадению накапливает все больше и больше денег, пытаясь их потратить. Люди фактически отказываются брать у него деньги, упоминая таинственного Милагро. Обнаружив, что деньги буквально цепляются за него и обременяют его все больше и больше, Джошу выслеживает свою жертву Заихея Нигатаке. Зайхей, благодаренный Джошу за то, что он взял на себя его «проклятие», объясняет легенду о Человеке Милагро и его историю с проклятием.Тем не менее, Джошу обманом заставляет Зайхэя разорвать одну из проклятых купюр и, к ужасу Зайхэя, возвращает ему проклятие. По пути домой Джошу меланхолично размышляет о своей истинной ценности в этом мире.

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

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

Новая Локакака

Ищу оценщика растений
Основная статья: Голубая лагуна Доломитовых Альп (сюжетная арка)
Основная статья: Оценщик растений — Рай Мамедзуку (31) (сюжетная арка)
Основная статья: Городской партизан и Доремифасолати До (сюжетная арка)

Некоторое время спустя Джоске рассказывает Нориске о состоянии Холи, а также о том, что Джобин может каким-то образом замышлять заговор против них всех из-за его участия в организации контрабанды Локакака.Нориске отказывается подозревать Джобина, но поручает Джоске найти оценщика растений его компании, чтобы найти филиалы. Каато подслушивает этот разговор и сообщает Джобину о планах двоих. Джобин, в свою очередь, ищет другого каменного человека по имени Доломит, который соглашается напасть на Джоске, веря, что он вернет свое тело в нормальное состояние, вызывая свой стенд Blue Hawaii. Затем Blue Hawaii контролирует нескольких последовательных людей, которые пытаются прикоснуться к Джоске, чтобы он был под контролем. Несмотря на все его усилия, Джоске тронут ребенка.Подконтрольный Джоске направляется в храм Муцукабэ, где Доломити допрашивает его о его целях. Узнав правду, Доломити приказывает Джоске утопиться в пруду, но, к счастью, вмешивается Ясухо.

Рай Мамедзуку, оценщик растений, выходит на сцену

После того, как Доломит нейтрализован и раскрыта связь Джобина с организацией Локакака, Джоске и Ясухо едут в дом оценщика растений на автобусе. Внезапно Рай Мамедзуку, оценщик растений, появляется, чтобы угнать автобус.В частности, он сообщает Джоске, что новая группа врагов теперь движется против них, и Мамедзуку приводит пару к себе домой: на горнолыжный подъемник. Он также раскрывает Doggy Style, способность стенда, позволяющую ему раскрыть себя. Вскоре на троицу нападает дуэт новых врагов: Urban Guerrilla и Doremifasolati Do. Урбан — каменный человек, а Доремифасолати — его питомец, который действует как подземный перевозчик. Из-за своих сильных способностей эти двое почти убивают Джоске, Мамедзуку и Ясухо, но им удается выпустить немного газа внутрь Доремифасолати До и зажечь его, создав взрыв, который убивает их обоих.

Вскоре после этого Джобин встречается с начальником Урбана, беднягой Томом. Затем похожий на ребенка старый каменный человек поручает Джобину закопать свой стенд Ozon Baby в саду поместья Хигашиката.

Интерлюдия: прошлое Ясухо
Основная статья: Заколка для волос династии Цин

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

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

Кража филиала Локакака
Основная статья: Бедный Том и Озон Бэби (сюжетная арка)

Завтрак в Хигашиката.Джобин тайно сажает Озон Бэби в саду, но когда он возвращается в сарай для инструментов, ему противостоит его сын Цуруги. Таким образом, Джобин заверяет, что его действия направлены на благо его семьи.

Тем не менее, давление воздуха увеличивается, и кажется, что стенд Ozon Baby атакует всех.

Дом Хигашиката подвергается нападению Озон Бэби, который манипулирует давлением, все, кроме Джобина, потеряли сознание. Оказавшись в ловушке в своем сарае, Джобин и возрожденный Цуруги понимают, что Озон Бэби — это автоматический стенд, который без разбора атакует любого в пределах досягаемости.Джобин также примерно понимает способности противника: Ozon Baby может снизить давление воздуха в зоне, но любое замкнутое пространство ослабит его воздействие. Решительные, они подожгли сад, используя оригами и Speed ​​King, чтобы подтолкнуть своих врагов к действию.

После нападения Бедняги Тома именно Джобин и Цуруги приобретают филиал Локакака.

Действительно, Бедняга Том бросается в сад за веткой, а Джоске и Мамедзуку выходят, защищенные пузырями Soft & Wet. Они встречаются как раз в тот момент, когда Мамедзуку берет ветку, и начинается драка.Бедняга Том убивает Мамедзуку и хватает ветку, но его отравляет тисовое семя. Преследуемый Джоске, Бедный Том обманом заставил отменить способность давления воздуха, но прибыли его предполагаемые союзники из больницы. Удивительно, но Бедняга Том убит таинственной способностью, простреливающей ему голову. Невидимый человек хватает ветку и уезжает, прежде чем Джоске успевает что-либо сделать. Однако выясняется, что Цуруги использовал Бумажного Лунного Короля, чтобы обмануть всех: за обычную ветвь велась борьба, в то время как Джобин украл настоящую ветвь Локакака.Они прячут ветку, привитую к кактусу. Тем временем водитель скорой помощи обнаруживает подвох и догадывается, что поджигатель — тот, у кого ветка.

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

Университетская больница TG
Основная статья: Доктор Ву и Пробуждение 3 Листа (сюжетная арка)
Основная статья: Новая Локакака
Ясухо и Мицуба атакованы Ву Томоки

После пожара вся семья Хигашиката собирается, позволяя Джоске объяснить свою ситуацию и то, что у него есть 10 дней, чтобы забрать фрукт.Настойчивость Джобина в больнице подсказывает Мамедзуку вину старшего сына в пожаре, но они оба решают сначала обыскать университетскую больницу TG в поисках пассажиров машины скорой помощи.

Со своей стороны, Ясухо уже направилась в больницу. Ясухо видит Мицубу Хигашиката с врачом, доктором Ву Томоки, и обнаруживает, что он тоже продает Локакаку Мицубе как форму «ухода за красотой». Томоки, который может превратиться в пыль благодаря своей способности, Доктор Ву нападает на Ясухо, но Мицуба вмешивается со своим Stand Awaking III Leaves, понимая, что она не помнит, как с ней обращаются, и полна решимости спасти своего будущего ребенка от эквивалентного обмена.Во время боя Ясухо случайно встречает Тору, своего бывшего парня. Отбиваясь от Томоки, пока они не обнаруживают скрытую лабораторию и сад фруктового сада Локакака, Томоки чуть не убивает двух женщин, но в последний момент спасает Джоске, который убивает Томоки. Единственным оставшимся членом Организации, кажется, является главный врач университетской больницы TG Сатору Акефу, 89 лет.

Погоня за Акефу и ожидание урожая
Основная статья: The Wonder of You (Your Miraculous Love) (сюжетная арка)
Джоске и компания.как-то не могут догнать старого главврача

Джоске, Ясухо и Мамедзуку проверяют журнал входа в лабораторию и обнаруживают предполагаемого оставшегося члена Организации Локакака: Сатору Акефу, главного врача университетской больницы TG. Вопреки инстинкту Ясухо, они упорствуют в этом. Не имея возможности найти фотографию доктора, группа пытается преследовать его, но неизвестный стенд не позволяет им добраться до Акефу, который в конце концов убегает. Более того, группа пересекалась с Тору, бывшим парнем Ясухо.Тору пытается возродить пламя между ним и Ясухо, вызывая немало ревности и подозрений.

Преследуя Акефу, Джоске выглядит как преступник, когда у человека ломается шея после того, как он вступил с ним в драку. Затем Ясухо оказывается одна, поскольку Мамедзуку и Джоске теперь должны разобраться с последствиями смерти этого человека. Группа распадается, потому что Рай и Джоске считают, что у Акефу есть филиал, но Ясухо считает, что он находится в поместье Хигашиката.

По мере того, как новая Локакака взрослеет, кажется, что Акефу продолжает скрываться рядом с Мицубой, и семья Хигашиката начинает страдать от череды неудач.В школе Цуруги обвиняют в том, что он закрыл железные двери школы перед одноклассником, а Мицуба выступает против одной из матерей: Маако Китани. Когда Маако возвращается в свой дом и разглагольствует о Хигашикатах, ее бойфренду Одзиро Сасаме вспоминается Локакака. В конце концов ему удается войти в дом Хигашиката и украсть фрукты в горшке. Джобин использует своего Короля Скорости, чтобы убить злоумышленника и Маако, и позже Нориске делает ему выговор за свои действия, когда он узнает о смерти Маако и Оджиро.Подозрения Мицубы в отношении происходящих событий растут, когда она узнает о последствиях борьбы за новую Локакаку. В какой-то момент каменная болезнь Цуруги выходит из-под контроля, и на данный момент он прикован к постели, что беспокоит всю семью своим состоянием.

Тем временем Джоске и Мамедзуку пытаются обдумать свой следующий план. Рай узнает из газеты, что Акефу будет присутствовать в больнице через два дня, чтобы прочесть лекцию. Более того, дуэт в конечном итоге выясняет, что Стенд Сатору Акефу должен спровоцировать неудачу, как только они подумают о преследовании Акефу.На заднем сиденье бесшумно появляется Стенд. Джоске пытается атаковать его серией ударов со своего стенда, но не может нанести удар. У Джоске нет другого выбора, кроме как позволить себе быть тяжело раненным из-за способности вражеского стенда быть доставленным в больницу и приблизиться к Акефу, но полиция доставляет Рая в тюрьму.

Проводя некоторое время с Тору, Ясухо показывает фотографию Сатору и Мицубы Хигашиката, подразумевая, что они знакомы. Ясухо решает исследовать дом Хигашиката, все еще уверенный, что новая Локакака там.

День урожая
Основная статья: The Wonder of You (Your Miraculous Love) (сюжетная арка)
Основная статья: Go Beyond (сюжетная арка)
Холи спасает Джоске до потери сознания

Два дня спустя Джоске приходит в себя в больнице. Пока Сатору Акефу читает лекцию о своем новом лекарстве Locacaca6251, Джоске пытается встать с постели, но его желудок разрывается, когда на него падает оглушенный им полицейский. Поскольку способность Сатору вызывать бедствия кажется непреодолимой, Джоске внезапно встречает Холи Джостар-Киру.Холи приводит его в секретную лабораторию, где хранятся образцы Locacaca6251, и исцеляет его. Кроме того, Холи раскрывает ему подробности об Организации Локакака и советует не преследовать главврача. Затем она теряет сознание, когда масса окаменевшей плоти достигает ее головы. С обновленной решимостью Джоске решает завершить план, который заставит Акефу прийти к нему. Джоске связывается с журналистом с разоблачающими доказательствами незаконных испытаний Locacaca6251 на людях на Холи, журналист противостоит Акефу по этому поводу, и главный врач убивает журналиста, прежде чем прийти к Джоске.Мамедзуку также сбегает из тюрьмы и прибывает в университетскую больницу TG как раз вовремя, чтобы присоединиться к Джоске и противостоять вместе с ним Сатору Акефу.

Бедствие обрушивается на Хигашиката, Нориске тяжело ранен, а Джобин вскоре после этого следует его примеру.

Тем временем Ясухо Хиросе прибыл в дом Хигашиката и начал проникать в дом, чтобы найти новую Локакаку, отправив в парк Пейсли и спрятав его в мобильном телефоне Джошу. Она находит прикованного к постели Цуруги Хигашиката, но затем Джобин ловит Пейсли Парк и бросает мобильный телефон в унитаз, угрожая утопить Ясухо.Хуже того, Мицуба решает встать на сторону своего мужа и пытается помочь Джобину убить ее. Сатору Акефу появляется возле дома, и Ясухо теряет руку, но его способность приносить бедствия также предупреждает остальных членов семьи Хигашиката и выводит Локакаку из укрытия. Нориске противостоит Джобину, и спор вырождается, пока Джобин не чувствует, что вынужден вызвать у Нориске тепловой удар, шокировав всю Семью. К счастью, Джошу использует замешательство, чтобы хотя бы спасти Пейсли Парк. Затем стенд главврача действует и вызывает бедствие, в результате которого Джобин истекает кровью мертвым в коридоре, а горшок, который он принял, катится возле гаража.Ясухо позвал Тору на помощь, но вместо этого «молодой человек» предпочитает прятаться и наблюдать за ситуацией, и выясняется, что он враг.

Джоске и Рай противостоят Чуду У, истинной форме Главного Доктора.

Вернувшись в университетскую больницу TG, выясняется, что Сатору Акефу на самом деле является стендом под названием Wonder of U. Wonder of U чувствует, что Джоске расставил ловушку, и не полностью входит в лабораторию. Вместо этого он натравливает на Джоске каменного насекомого по имени Дододо Де Дадада. Дододо Де Дадада почти убивает Джоске своей силой асбеста, но Рай убивает его и противостоит Сатору.Главный врач, удивленный тем, что Рай сумел подойти к нему так близко, насмехается над Раем по поводу «неудачной» смерти его родителей, подразумевая, что он приложил к этому руку. Рай злится и атакует, но тяжело ранен секретными пузырями, которые Джоске развернул по чистой случайности. Тем не менее, Рай видит некоторую надежду в пузырях Джоске и показывает, что пузырь Джоске может развернуть Спин.

В доме Хигашиката внезапно появляется Джошу с Локакакой в ​​горшке и заявляет, что спасет Ясухо.Несмотря на опасения Ясухо, Локакака кажется ее единственным способом спастись. Ясухо объясняет Джошу, как работает эквивалентный обмен, но он теряется в собственных фантазиях об обмене и толкает себя на встревоженного Ясухо. В то же время Тору решает позволить обмену произойти, чтобы подтвердить силу плода. Он издает несколько слабых звуков, прячась в чаще, и это заставляет Ясухо понять, что Тору, должно быть, является вражеским пользователем стенда, поскольку он был рядом с ней с самого начала погони героев за Сатору Акефу.Ясухо выполняет эквивалентный обмен с Джошу и исцеляет ее руку. Вспоминая, что однажды она встретила Тору молодой девушкой и помогла ему выдать себя за настоящего Сатору Акефу, Ясухо противостоит Тору, который остается скрытым в зарослях, и предупреждает ее о преследовании его. Невозмутимо, она берет телефон Джошу и связывается с Кеем Ниджимурой, хотя это активирует способность Wonder of U. Джошу сходит с ума и нападает на Ясухо, чтобы вернуть ему руку. Кей получает призыв Ясухо о помощи и начинает искать Джоске в лаборатории Локакака.

В повествовании зловеще упоминается, что из-за аварии самолета в небе над Морио панель самолета упала в сторону города. В поместье Хигашиката Джошу спотыкается и падает на землю, позволяя Ясухо продолжить свой звонок. Она объясняет ситуацию Кей и предупреждает ее о разрушительной силе врага. В лаборатории Джоске пытается заманить Чудо U поближе, пытаясь уничтожить запас Locacaca6251. Однако сила бедствия главврача работает против него.Несмотря на свои усилия, Джоске не может причинить вред вражескому стенду и по иронии судьбы пронзает себя обломками хранилища. Однако Рожденный Таким образом внезапно вмешивается, когда Кей входит в комнату. Его леденящий ветер замораживает пузыри и сдувает их в сторону Wonder of U, слегка ранив голову Стенда и вызывая кровотечение Тору. Таким образом, Wonder of U понимает, что в пузырьках Soft & Wet действительно есть скрытый потенциал.

Успешные атаки на Wonder of U были достигнуты ценой того, что сломанная трость застряла в глазу Кея.Она падает в обморок, но Джоске может взять ее телефон, чтобы связаться с Ясухо. Ясухо рассказывает Джоске все о Тору, в то время как Тору решает заставить Чудо U отступить и выходит из-за деревьев, чтобы противостоять ей. Тору говорит Ясухо дать ему Локакаку, чтобы предотвратить ее разрушение в надвигающемся бедствии, которое постигнет ее. Джошу безуспешно пытается защитить ее и спотыкается о Ясухо, что позволяет Тору захватить Локакаку. Увидев, что на нее падает что-то большое, Ясухо рассказывает об этом Джоске, заставляя его снова преследовать Чудо U.Вспоминая слова Мамедзуку о скрытой силе его пузырей, Джоске стреляет одним пузырем в сторону Чудо U. Внезапно из его родинки Джостара выходит сфера, похожая на пузырь.

Тору делает эквивалентный обмен с Цуруги

Джоске стреляет своим пузырем, но Чудо U вызывает новое каменное насекомое по имени «Облади Облада». Он отклоняет пузырь и цепляется за Джоске, размножаясь и покрывая его тело. Благодаря помощи Пейсли Парка у Джоске есть еще один выстрел в главного врача, но Облади Облада встает на пути, и Джоске промахивается во второй раз.Однако затем Пейсли Парк переносит невидимый пузырь, вышедший из родимого пятна Джоске, обратно в Дом Хигашиката по мобильному телефону, и пузырь летит прямо к Тору. [3] Тору получает удар и отбрасывается на пути падающей панели. У Wonder of U нет другого выбора, кроме как изогнуть путь бедствия, и Ясухо избавлен от слайд-панели. Вместо этого панель врезается в дом. Джоске удается найти душевую и ныряет в бассейн, чтобы избавиться от Облади Облады.Тору съедает последний Локакака и пытается прикоснуться к Ясухо, чтобы выполнить еще один эквивалентный обмен, но Джоске стреляет еще одним пузырем, который попадает в него, отправляя его в заднюю часть гаража. Внезапно Каато Хигашиката появляется в слезах. [4] Каато раскрывает свой стенд Space Trucking, но, несмотря на насмешки Тору, она не собирается нападать на него. Вместо этого она ловит Тору, используя свои карты, чтобы прижать его конечности к земле. Она вытаскивает Цуруги из своей колоды и бросает его на Тору, совершая эквивалентный обмен. [5] Тору пытается атаковать Каато, используя Чудо U, но Чудо U распадается. В то время как Цуруги навсегда излечивается от каменной болезни, Тору умирает в результате обмена. К сожалению, Каато получает ранение пилой в живот и падает на пол. [6]

Пока они вызывают скорую помощь, Цуруги поднимается наверх в офис Нориске и несет его тело в гараж. [7] Кажется, что борьба закончилась и что проклятие, постигшее семью Хигашиката, теперь снято, но Ясухо обнаруживает, что энергия бедствия главврача вторглась в тело Нориске и усугубляет его раны.К счастью, появляется Джоске и навсегда уничтожает бедствие последним выстрелом пузыря. Джоске и Ясухо воссоединились. [6]

Эпилог: Инцидент с Radio Gaga

Основная статья: Инцидент с Radio Gaga (сюжетная арка)

Действие происходит где-то в 1941 году. Люси Стил приезжает из Америки в Южный Город, чтобы исследовать странное место. Она знакомится с мальчиком по имени Фуми, который решает остаться с Люси после того, как вор украл его бумажник. Фуми видит, куда идет Люси, и предупреждает ее об «инциденте с Radio Gaga».Это легенда о девушке, которая услышала странный голос у ограждения и стала следовать за ним и раздеваться. Позже она исчезла, оставив только свою одежду и ногу. Люси и Фуми прибывают к саду фруктовой компании Хигашиката, где то же самое происходит с их водителем. Внезапно Люси тоже начинает слышать голоса, и ее начинает засасывать в ограждение, Радио Гага. Фуми спасает Люси от ограждения, но сам начинает засасываться. Он использует свой стенд, чтобы спастись, и убегает с Люси от ограждения.Выясняется, что Фуми — это Джозеф Джостар и отец Холи Джостар-Кира.

Вернувшись в настоящее, Джоске и Ясухо оказываются без Локакака, чтобы вылечить Холи Джостар-Киру. Они сталкиваются с Киёми Куджо и узнают, что она не забыла о своем сыне. Тем не менее, Джоске чувствует, что он не Джозефуми и не Кира, и не приближается к Киёми. Затем Джоске и Ясухо направляются во фруктовую лавку Хигашиката. Семья пытается выбрать торт на завтра, чтобы как следует отпраздновать выписку Нориске из больницы, но их всех одолевают эмоции.Поэтому они просят Джоске выбрать торт. Увидев, что Джоске нашел свою семью, Ясухо покидает гостиную, плача от радости.

Персонажи и стенды

Персонажи ДжоДжолиона

Главный герой

Союзник

Союзник

Союзник

Первичный антагонист

Союзник

Союзник (бывший Нейтральный)

Союзник

Союзник (бывший злодей)

Союзник

Нейтральный (бывший Злодей)

Нейтральный (бывший союзник)

Нейтральный

Союзник

Посмертно

Посмертно

Главный антагонист

Первичный антагонист

Первичный антагонист

Злодей

Злодей

Злодей

Нейтральный (бывший Злодей)

Злодей

Злодей

Злодей

Злодей

Злодей

Злодей

Злодей

Злодей

Злодей

Нейтральный

Нейтральный

Нейтральный

Нейтральный

Нейтральный

Нейтральный

Нейтральный

Посмертно

Посмертно

Посмертно

Нейтральный

Битвы

локаций

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

Галерея

Мелочи

  • Согласно примечанию Араки во втором томе, -лев в названии ДжоДжолиона происходит от древнегреческого εὐαγγέλιον ( евангелион ), относящегося к Евангелиям. » Объединив это слово с «ДжоДжо», я хотел, чтобы название обозначило существование главного героя «Джоске» в этом мире «. [8]
  • По прошествии 10 лет сериализация ДжоДжолиона в настоящее время является самой длинной из всех частей ДжоДжо, название, которое ранее принадлежало Steel Ball Run .

См. также

Ссылки

Навигация по сайту

Двойник каждого персонажа в «Невероятных приключениях Джоджо, часть 8»

По мере того, как «Невероятные приключения ДжоДжо» развивались, сериал в конечном итоге расширился, чтобы посмотреть на альтернативную непрерывность, где события из оригинальной серии разыгрываются немного по-другому.Однако недавно завершившаяся восьмая часть, Джоджолион , происходит в том же городе Морио, что и четвертая часть, и в результате некоторым персонажам удается появляться в обеих — или, по крайней мере, в их альтернативных вселенских аналогах. В то время как некоторые персонажи, такие как Йошикаге Кира, имеют одно и то же имя, у других произошли некоторые изменения в их именах, стендах, внешности или даже во всех трех.

Джоске Хигашиката: Джозефуми Куджо

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

Связанный: Как причудливые приключения ДжоДжо, часть 9, могут вписаться в серию

Вопреки вражде между Джоске и Йошикаге Кирой в части 4, Джозефуми и Кира являются друзьями детства в результате того, что Кира и его мать, Холли Джостар-Кира, спасли ему жизнь.Джозефуми, кажется, не знал об убийственных наклонностях Киры, но был вовлечен в другие незаконные дела с ним, что в конечном итоге привело к их смерти до начала Джоджолион .

Юкако Ямагиши: Карера Сакунами

Среди многих пользователей стенда, замеченных в Морио во время части 4, есть Юкако Ямагиши, молодая женщина с длинными черными волосами, которая становится одержимой другом Джоске, Коити.У Кареры, ее двойника в Джоджолион , также длинные черные волосы, и она была одержима Джозефуми Куджо. И у Юкако, и у Кареры есть стенды, которые включают в себя манипулирование волосами: стенд Юкако называется Love Deluxe и работает с ее собственными волосами, а стенд Кареры — Love Love Deluxe, который работает с волосами других людей, еще больше укрепляя связь. У них обоих также есть розовая тема: топ Юкако украшен рисунками из роз, а у Кареры шляпа с розовыми цветами. Юкако изначально является врагом в части 4 из-за ее одержимости, но когда у нее и Коичи развиваются настоящие отношения, она становится на сторону Джоске и компании против Киры.Точно так же Карера — друг Джозефуми и Киры, работает с ними в их заговоре с контрабандой и едва выживает. Обе женщины не заботятся об общепринятой морали и готовы совершать самые разные этически сомнительные действия, такие как промывание мозгов и мошенничество.

Похоже, некоторые проступки Юкако снова стали преследовать Кареру.В то время как Юкако в какой-то момент использует свой стенд, чтобы поджечь девушку в части 4, Карера ненадолго подожжена стендом злодея в части 8.

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

Коичи Хиросе: Ясухо Хиросе

Однако некоторые персонажи претерпели гораздо более значительные изменения, чем другие.В части 4 Коичи Хиросе — первый союзник Джоске и первый персонаж, с которым он взаимодействует, и только позже он получает Стенд. Все это также можно сказать о Ясухо Хиросе в части 8, помимо фамилии, которая у них общая. Забавно, что в то время как Коичи и Джоске просто близкие друзья, Ясухо выступает в качестве основного любовного интереса для Джоджолиона из Джоске. Оба персонажа обладают невинной наивностью, которая, кажется, привлекает к ним неприятности (например, нежелательное внимание Юкако, о котором говорилось ранее).Хотя их способности стендов сильно различаются, оба считаются стендами дальнего действия. И Коичи, и Ясухо активно вовлечены в историю из-за своих отношений с Джоске и должны стать сильнее и компетентнее, чтобы пережить опасности, которые это несет с собой.

Как и Джозефуми, мать Ясухо немного бездельница, в отличие от любящей матери, которая была у ее коллеги из 4 части.

Джотаро Куджо: Кей Ниджимура

Возможно, самое существенное изменение между итерациями происходит с Джотаро, главным героем Stardust Crusaders (часть 3), который возвращается в 4 части в качестве второстепенного персонажа.Джотаро — высокий, мужественный молодой человек, чей дизайн был специально разработан, чтобы подражать персонажам Клинта Иствуда, обычно крутым немногословным людям. Кей Ниджимура, с другой стороны, — женщина, которая работает горничной в семье Хигашиката в своих первых появлениях. Выяснилось, что Кей Ниджимура была вымышленным именем (вдохновленным Кейчо Ниджимурой из части 4), и что она на самом деле Кей Кира, дочь Холли Джостар-Кира. Мать Джотаро в части 3 зовут Холли Куджо, она полностью взяла фамилию своего мужа в этой вселенной, а не через дефис.Элементы дизайна Кей также вдохновлены одеждой Джотаро, например, ее черные волосы и странная шляпа. Ее отношения с семьей Хигашиката в Джоджолион имеют некоторое сходство с отношениями Джотаро и Джоске в части 4, поскольку и Кей, и Джотаро принадлежат к другой ветви генеалогического древа, чем другие персонажи Джостара, на которых сосредоточено внимание в сериале.

Связанный: Первый ДжоДжо в «Причудливых приключениях Джоджо» мог быть буквально Иисусом

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

Эти обратные вызовы и ссылки на предыдущую преемственность стали важной частью альтернативной преемственности частей 7, 8 и вскоре 9.Они подбадривают самых преданных поклонников, не позволяя сериалу слишком увязнуть в своих собственных знаниях, чего многие опасались, когда часть 6, Каменный океан , подошла к концу. Глубокая абсурдность Невероятные приключения Джоджо распространяется даже на его собственную историю, что является лишь одной из особенностей, которые помогли этой серии выстоять на протяжении десятилетий.

Далее: Матрица встречает причудливые приключения ДжоДжо в фан-арте

Победитель конкурса фан-арта Nightwing заставит вас прослезиться в четырех панелях

Об авторе Карлайл Эдмундсон (опубликовано 193 статьи)

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

Другие работы Карлайла Эдмундсона

Эпизод 8 «Возвращение» — один из самых страшных телевизионных эпизодов всех времен

Жанр ужасов, безусловно, расширился за десятилетия истории телевидения, от странных и экзистенциальных, таких как «Сумеречная зона» (см.: Двойник) до от сверхъестественных культовых классиков, таких как Баффи, истребительница вампиров (см.: Джентльмены) и Доктор Кто (см.: Плачущие ангелы), до популярных современных ужасов, таких как Американская история ужасов (см.: Twisty) Клоун) и Призраки дома на холме (см.: Леди с изогнутой шеей).

А еще есть Твин Пикс , культовая классика 1990 года, созданная совместно Дэвидом Линчем ( Голова-ластик ) и Марком Фростом , которая бросила вызов масштабам того, что могло сделать телевидение — шоу, которое каким-то образом существует как его собственный жанр, смесь ужасов, мистики и мыльной оперы в одном.

Когда было объявлено, что Твин Пикс вернется, 25 лет спустя, в 18-серийном ограниченном сериале на Showtime, один из самых больших вопросов, который возник, заключался в том, как Линч и Фрост изобразит Убийцу БОБа, демоническую межпространственную сущность из оригинальный двухсезонный сериал, который овладевает людьми и питается болью и печалью (также известный как «гармонбозия»).К сожалению, актер, сыгравший БОБа в 1-м и 2-м сезонах ( Фрэнк Сильва ), умер в 1995 году, заставив фанатов задаться вопросом, смогут ли Линч и Фрост переделать культового злодея.

К счастью, Сильву не заменили; скорее, БОБ в основном появлялся в форме злого двойника агента Дейла Купера ( Кайл Маклахлан ) (далее известного в этой статье как «Злой Куп»). Сильвы, безусловно, не хватало в возрождении, но тревожное присутствие БОБа все же сумело проникнуть в каждый угол Твин Пикс: Возвращение , не только через Evil Coop, но и через характерное для шоу пробуждение беспокойства, зная, что БОБ все еще там, скрываясь и кормясь.

Твин Пикс: Возвращение расширил вселенную за пределы БОБа, Лоры Палмер ( Шерил Ли ) и агента Дейла Купера, открыв дверь в новый вид ужасов. Вот где начинается часть 8, сюрреалистический шедевр Линча о вселенной Твин Пикс .

Чтобы напомнить ключевые моменты сюжета, часть 8 начинается со Злого Купа/БОБа и его помощника Рэя Монро ( Джордж Гриффит ) за рулем. Они останавливаются в укромном месте, где Злой Куп/БОБ пытается выстрелить в Рэя из пистолета, который он нашел в бардачке Рэя.Рэй, который уже планировал это, оставил ружье незаряженным. Он стреляет в Evil Coop/BOB. Однако после выстрела происходит нечто странное. Теневые люди (официально называемые Лесниками), грязные и бородатые, появляются, мерцая, как мираж. В ужасающей, почти сказочной последовательности Дровосеки роятся вокруг тела Злого Купа/БОБа, разрывая его и размазывая его кровь, пока БОБ не появляется из двойника в форме шара.

После задающего настроение выступления Nine Inch Nails с песней «She’s Gone Away» в «Доме у дороги» Evil Coop внезапно просыпается очень живым.

СВЯЗАННЫЙ: Кайл Маклахлан рассказывает о «Тесле», еще о «Твин Пикс», «Дюне» и Оливере Стоуне

Остальная часть эпизода происходит в прошлом, начиная с 16 июля 1945 года в Уайт-Сэндс, штат Нью-Мексико, на месте ядерных испытаний Тринити. После первого в мире взрыва атомной бомбы — хаотического погружения в холст сюрреалистических образов — мы видим белую гуманоидную фигуру (которая может быть, а может и не быть таинственной сверхъестественной сущностью Джуди или Джоудей), плывущую по космосу и изрыгающую шар. с лицом БОБа, что является первым настоящим каноническим объяснением происхождения Убийцы БОБа.

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

Затем мы возвращаемся в пустыню Нью-Мексико, 5 августа 1956 года, где из яйца вылупляется странное, похожее на лягушку существо.Затем мы видим мальчика и девочку, проезжающих мимо заправочной станции, которые целуются, прежде чем девушка войдет в свой дом. (Многие зрители предположили, что безымянная девушка на самом деле является молодой Сарой Палмер ( Грейс Забриски ), матерью Лауры.) Вскоре после этого с воздуха спускаются Лесники. Один, в частности, забредает на радиостанцию ​​KPJK с сигаретой, торчащей изо рта, и спрашивает администратора: «Есть прикурить?» прежде чем сломать ей череп. Затем он прерывает диск-жокея, который играет падающий в обморок сингл The Platters «My Prayer».Он обрывает запись, и, сжимая голову диджея руками, Дровосек берет микрофон и транслирует следующую мантру: «Это вода, а это колодец. Напиться и спуститься. Лошадь — это белок глаз и темнота внутри». Когда он повторяет мантру, все, кто слушает трансляцию, теряют сознание, включая молодую девушку из предыдущего. Во сне странное, похожее на лягушку существо заползает девушке в рот. Эпизод заканчивается тем, что Дровосек разбивает череп диск-жокея, его кровь брызжет на землю, а на заднем плане слышно ржание лошади.

То, что делает часть 8 такой пугающей, не то, что происходит , а то, как это происходит. Лучше всего это можно описать как нападение на чувства, практически без какого-либо внятного объяснения. Это понимается как часть привлекательности франшизы «Твин Пикс » — ужаса, который невозможно объяснить, но который настаивает на том, чтобы его испытали. Возвращение , в частности, поднимает ставки, разветвляясь на тип ужаса, который не может быть четко отслежен до известного монстра или существа, а скорее вводит ужас неизвестного.В первых сезонах 1 и 2 мы, по крайней мере, могли найти какое-то подобие утешения в том, что, несмотря на то, что Линч никогда не собирался давать нам все ответы, мы могли, по крайней мере, проследить ужасы до самого БОБа. Мы не знали, был ли БОБ настоящим демоном или, возможно, проявлением самого Зла, но, по крайней мере, мы могли связать ужасы в городе Твин Пикс с БОБом.

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

Часть 8 — это портрет обращения Линча к сюрреализму, наполненный визуальными эффектами, столь же мистическими и прекрасными, сколь и ужасающими.Сопоставление хаотического взрыва и гладкой потусторонней тишины, когда белая гуманоидная фигура извергает БОБа, является ярким примером фирменного мечтательного сюрреализма Линча, как и «Лесники». Лесники действительно обладают традиционными чертами ужаса, сокрушением черепов и брызгами крови, что опять же является еще одним тревожным визуальным и звуковым опытом, но они также нервируют в классической линчевской манере. Визуально и акустически они представляют собой сюрреалистический сон (или, возможно, кошмар), особенно когда они мерцают в беспокойном существовании за пределами круглосуточного магазина и постоянно повторяют: «Есть свет?» голосом, настолько резким в эпизоде, часто прерываемом тишиной, что кажется, будто под ногами осколки стекла.

Лесники больше всего похожи на поддающихся определению «монстров» в Части 8, но даже в этом случае их присутствие никак не поддается определению, за исключением того факта, что они кажутся приспешниками БОБа. «Монстр» в 8-й части Твин Пикс: Возвращение — само Зло. Коллективный взрыв хаоса от каждой, казалось бы, диссонирующей сцены в этом эпизоде ​​сплетается в гобелен, который может служить только топливом для самого ужасающего из вообразимых кошмаров.Восьмая часть Твин Пикс: Возвращение не имеет себе равных, визуальный опыт, который бросил вызов жанру ужасов и, несомненно, останется в умах поклонников Твин Пикс на долгие годы.

ПРОДОЛЖАЙТЕ ЧИТАТЬ: самые страшные телесериалы

Как смотреть «Сирано»: где прямо сейчас можно посмотреть романтический мюзикл с Питером Динклейджем в главной роли

Музыка, романтика и драма XVII века!

Читать Далее

Об авторе Рэй Торрес (опубликовано 38 статей)

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

Более От Рэй Торрес

Пятница, 13-е Часть VIII: Джейсон покоряет Манхэттен

Массовый убийца Джейсон Вурхиз (Кейн Ходдер) воскрес со дна Хрустального озера.После того, как он убивает пассажиров проходящей мимо лодки, он прячется на круизном лайнере, заполненном выпускниками средней школы, направляющимися в Нью-Йорк. Учитель биологии Чарльз МакКаллох (Питер Марк Ричман) находится на борту вместе со своей племянницей Ренни (Дженсен Даггетт), которая видит, как Джейсон тонет в детстве. Они избегают его кровавого буйства на борту корабля, но когда Ренни и Чарльз достигают Манхэттена, Джейсон оказывается рядом.

  • Рейтинг:

    Р

  • Жанр:

    Фильм ужасов

  • Исходный язык:

    английский

  • Директор:

  • Производитель:

  • Писатель:

  • Дата выхода (в кинотеатрах):

     в ширину

  • Дата выпуска (потоковая передача):

  • Кассовые сборы

    (США):

    14 долларов.3М

  • Время выполнения:

  • Дистрибьютор:

    Парамаунт Пикчерз

  • Звуковой микс:

    Объемный звук, стерео, моно, ультрастерео

  • Посмотреть коллекцию:

Задачи обработки естественного языка | Руководство по мастеру НЛП (часть 8)

Эта статья была опубликована в рамках блога Data Science Blogathon

Введение

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

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

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

Содержание

1. Текстовая классификация

  • Анализ настроений
  • Борьба со спамом

2. Текстовое совпадение или сходство

  • Расстояние Левенштейна
  • Фонетическое соответствие
  • Соответствие гибкой струне
  • Подобие косинуса

3. Машинный перевод

4. Разрешение базовой ссылки

  • Обобщение текста
  • Вопрос-Ответ

5. Другие важные задачи НЛП

Текстовая классификация

Классификация текстов — одна из классических задач НЛП. Сюда входят несколько примеров, некоторые из которых упомянуты ниже:

  • Идентификация спама по электронной почте,
  • Тематическая классификация новостей,
  • Классификация настроений,
  • Организация веб-страниц поисковыми системами и т. д.

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

Обычно классификатор естественного языка состоит из следующих двух частей:

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

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

                                                        Источник изображения: Google Images

Анализ настроений


                                                       Источник изображения: Google Images

Анализ настроений — еще одно важное применение НЛП.Как следует из названия, анализ настроений используется для определения настроений среди нескольких документов. Этот анализ также помогает нам определить настроения, в которых эмоции не выражены явно.

В основном основанные на продуктах Компании, такие как Amazon , используют анализ настроений для определения мнений и настроений своих клиентов в Интернете. Это поможет этим крупным продуктовым компаниям понять мнение клиентов о продуктах и ​​услугах, предоставляемых этой компанией.

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

Борьба со спамом


                                              Источник изображения: Google Images

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

Система фильтрации спама может быть разработана с использованием функций NLP с учетом основных ложноположительных и ложноотрицательных проблем.

Существующие модели NLP для фильтрации спама

Вот некоторые из существующих моделей НЛП, используемых для фильтрации спама:

N-грамм Моделирование

Модель N-грамм определяется как N-символьный срез более длинной строки.В этой модели мы использовали одновременно несколько N-грамм разной длины при обработке и обнаружении спам-писем.

Чтобы узнать больше о N-Gram, обратитесь к нашим предыдущим статьям.

Синтез слов

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

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

Байесовская классификация

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

Текстовое соответствие или сходство

Сопоставление текстовых объектов для поиска сходства — одна из важных областей НЛП.Вот некоторые из важных применений сопоставления текста:

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

В зависимости от требований существует ряд доступных методов сопоставления текста, но в этой статье мы подробно опишем только важные методы:

Расстояние Левенштейна

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

  • Вставка,
  • Удаление или
  • Замена одного символа.

Фонетическое соответствие

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

  • Для поиска больших текстовых корпусов (корпусов),
  • Исправление орфографических ошибок,
  • Сопоставление релевантных имен и т. д.

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

Соответствие гибкой струне

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

  • Точное соответствие строк,
  • Лемматизированное сопоставление,
  • Компактное сопоставление (учитывает пробелы, знаки препинания и т. д.).

Подобие косинуса

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

Машинный перевод


                                                Источник изображения: Google Images

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

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

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

                                              Источник изображения: Google Images

Типы систем машинного перевода

В основном существует два разных типа систем машинного перевода.

Двуязычная система машинного перевода

Эти системы производят переводы между двумя определенными языками.

Многоязычная система машинного перевода

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

Подходы к машинному переводу (MT)

Теперь давайте обсудим некоторые важные подходы к машинному переводу.

Прямой подход

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

Интерлингва Подход

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

                                              Источник изображения: Google Images

Транспортный подход

Этот подход к машинному переводу состоит из трех этапов:

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

Эмпирический подход MT

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

  • На основе аналогов,
  • На основе примера,
  • На основе памяти.

Разрешение базовой ссылки


                                              Источник изображения: Google Images

Это процесс нахождения реляционных связей между словами (или фразами) в предложениях. Рассмотрим следующее предложение:

  ”Чираг зашел в кабинет Кшитиза посмотреть новую ручку. Он смотрел на него целый час».  

Изучив приведенное выше предложение, люди могут легко понять, что «он» обозначает Чирага (а не Кшитиза), а «оно» обозначает ручку (а не кабинет Кшитиза).

Итак, Coreference Resolution — это компонент НЛП, который выполняет эту работу автоматически.

Используется во многих приложениях, включая:

  • Автоматическое суммирование текста,
  • Ответ на вопрос,
  • Извлечение информации и т. д.

Для коммерческих целей Stanford CoreNLP предоставляет оболочку Python.

Автоматическое суммирование текста


                                                 Источник изображения: Google Images

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

В эпоху цифровых технологий самое ценное — это данные или информация. Теперь вопрос, который приходит на ум:

Действительно ли мы получаем какое-то полезное и необходимое количество Информации?

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

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

Вопрос-Ответ


                                                Источник изображения: Google Images 

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

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

.
  • Лексический пробел,
  • Неоднозначность,
  • Многоязычие и др.

Другие важные задачи НЛП

Вот некоторые другие важные задачи НЛП:

Генерация и понимание естественного языка

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

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

Оптическое распознавание символов

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

Документ к информации

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

На этом мы заканчиваем восьмую часть серии блогов по обработке естественного языка!

Другие сообщения в моем блоге

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

Предыдущие записи блога Data Science.

LinkedIn

Вот мой профиль Linkedin на случай, если вы захотите связаться со мной. Я буду счастлив быть связанным с вами.

Электронная почта

По любым вопросам вы можете написать мне на Gmail .

Конец Примечания

Спасибо за внимание!

Надеюсь, вам понравилась статья. Если вам это нравится, поделитесь им с друзьями тоже. Что-то не упомянуто или хотите поделиться своими мыслями? Не стесняйтесь комментировать ниже, и я свяжусь с вами. 😉

Медиафайлы, показанные в этой статье, не принадлежат Analytics Vidhya и используются по усмотрению Автора.

Связанные

МЕМЫ, Часть 8: Крик

Эмори: Приближался полдень, и улица была заполнена сторонниками Трампа с плакатами, протестующими и звуками помпы и обстоятельств.

Джесс: И у них были эти огромные динамики по всей улице. Я имею в виду, мы чувствовали себя так, как будто мы были в чертовой нацистской Германии или что-то в этом роде. Это было похоже на то, что внезапно это был просто звук этих голосов, доносившихся над всем. Это было похоже на: «Теперь вы будете слушать нас, потому что мы все контролируем». О, да, хахаха.

Эмори: Но как только начались настоящие инаугурационные процедуры, внутри Джесс что-то начало назревать.

Джесс: Честно говоря, я даже не помню, что это было, но кто-то говорил.Я просто подумал, что мы так облажались, это так плохо. Мы так глубоко.

Бен: Сенатор от штата Миссури Рой Блант начал церемонию приведения к присяге.

Джесс: Пожалуйста, встаньте на инаугурацию, бла-бла-бла. И я просто в своей голове подумал: о, черт возьми, нет. Я подумал, что если есть что-то, что я могу сделать прямо сейчас, так это не терпеть этого ублюдка, верно? Я сел.

Мартин Гейсслер: Впервые я заметил Джесс всего за несколько секунд до того, как Дональд Трамп собирался принести присягу.

Эмори: Это Мартин Гейсслер.

Мартин: И я работаю ведущим на BBC . Но во время инаугурации Дональда Трампа я был иностранным корреспондентом ITV News , одной из главных новостных программ телевизионной сети в Великобритании.

Эмори: Мартин и его оператор путешествовали по США три или четыре недели подряд в преддверии дня инаугурации, документируя надежды и страхи людей на президентство Трампа.И вот, день — и момент — настал, и у некоторых эмоции были на высоте.

Мартин: Я посмотрел примерно в пяти футах вправо и увидел, что кто-то стоит на коленях на земле, обхватив голову руками.

Джесс: Быть свидетелем этого ужасного момента — это все, что я могла сделать. Поэтому я просто сидел с закрытыми глазами.

Мартин: И было совершенно ясно, что этот человек собирался отреагировать. Так что я похлопал своего оператора по плечу, указал вниз и сказал: «Смотрите, снимайте их».И как только присяга закончилась, комментатор сказал: «Дональд Дж. Трамп теперь президент Соединенных Штатов». И это был момент.

Джесс: И я просто. Это только что вышло.

Мартин: Это был момент, когда Джесс издала такой первобытный крик

Джесс: Примерно так и произошло, когда я закричала, и они меня поймали. ***. Хахаха.

Бен: Я Бен Брок Джонсон.

Эмори: я Амори Сивертсон, а это Бесконечная нить.

Бен: Мы идем к вам из WBUR, бостонской станции NPR. А сейчас мы говорим о мемах.

Амори: их культурное, историческое и личное влияние.

Джесс: И я буквально хотела исчезнуть.

Бен: Сегодня…

Эмори: Крик.

Эмори: 25 марта 2021 г.: мы встречаем Джесс, которая впервые рассказывает нам свою историю о крике, который напугал их четыре года назад.

Бен: Джесс появляется в толстовке Black Lives Matter.Их ярко-розовые волосы были зачесаны набок. Им за 40, но в них есть что-то вроде панк-рока и юношеской энергии. Они показались удобными, но нервы определенно есть.

Джесс: У тебя есть что-то вроде плана, например, начинать с вопросов и вести беседу?

Эмори: Да. Да.

Джесс: Да. Фигурный.

Эмори: Придерживаемся мы их или нет — это уже другая история.

Бен: Место, где мы встретились, было самым дальним местом от Пенсильвания-авеню в день инаугурации. Мы были в лесу, в отдалении, недалеко от того места, где живет Джесс.

Эмори: Джесс — художница, живущая на северо-востоке. И есть причина, по которой мы не раскрываем их настоящее имя и личные данные. Джесс в основном скрывалась с 2017 года, и в тот момент на инаугурации президента Дональда Трампа, который привел к тому, что их кричащее лицо было облеплено в Интернете.

Бен: Возможно, неудивительно, что Джесс не большой любитель мемов.

Эмори: Удивительно, но это не , а , потому что они стали одним целым.

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

Эмори: Но даже когда Джесс не понимает шутки конкретного мема — что, Джесс, я чувствую тебя — они понимают, что происходит в основе.

Джесс: Как художник, я могу ценить создание изображений и обмен ими, их изменение и игру друг с другом, когда изображения играют друг с другом.

Бен: Именно так контент становится мемным. Помните нашу группу экспертов по мемам… которую мы называем «Хором мемов»? Они много говорили об этом.  

Сара Лайола: Они взлетают так, что их можно воспроизвести.

Джанлука Стрингини: Итак, мы не говорим об одном и том же изображении, которым делятся снова и снова, но это его вариация.

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

Kenyatta Cheese: Тогда кто-нибудь может пойти и сказать: «О, я могу сделать свою собственную версию». Я знаю, как на самом деле участвовать в этом меме.

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

Бен: Одно дело участвовать в шутках.  Быть шутка другая. Определенное чувство, о котором все знают определенные субъекты мемов. И Джесс тоже собиралась учиться. Но сначала они обдумывали возвышение Дональда Трампа и то, что с этим делать.

Джесс: Как странный человек, как человек в женском теле, как человек с белой кожей, как художник, я задавался вопросом и боролся с тем, как мне что-то изменить? Потому что я вырос в окружении большого количества политической активности, и я действительно долгое время думал, что мне нужно сделать что-то вроде мыльницы. И теперь я думаю, знаете, «вы что, не понимаете?!» как такая энергия типа «ты не понимаешь?!» И я такой, знаешь что? Это просто не я.

Бен: Итак, когда друг Джесс спросил, не хотят ли они поехать в округ Колумбия, чтобы протестовать в день инаугурации…

Джесс: Я сказал, что нет. Позвольте мне подумать об этом на секунду… НЕТ.

Эмори: Но потом они подумали о том, почему они уходят…

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

Эмори: Итак, вернемся к тому моменту в день инаугурации.

Бен: Море людей, стоящих в зоне протеста, слушают, как Дональд Трамп приводится к присяге в качестве 45-го президента Соединенных Штатов. Но Джесс сидит . Скрестив ноги на холодном жестком асфальте, в неоново-зеленой куртке.

[ Джон Робертс : Пожалуйста, поднимите правую руку и повторяйте за мной. Я, Дональд Джон Трамп, торжественно клянусь.] 

[Дональд Трамп: Я, Дональд Джон Трамп, торжественно клянусь.]

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

[ Робертс : Сохранять, защищать и защищать.Трамп: Сохраняйте, защищайте и еще раз защищайте. Робертс: Конституция Соединенных Штатов. Трамп: Конституция Соединенных Штатов. Робертс: Так помоги мне, Боже. Трамп: Так помоги мне, Боже. Роберт: Поздравляю, господин президент.]

Джесс: Нет, нет, нет, нет, нет, нет, нет, нет.

Бен: Но в , в этот самый момент , в день инаугурации 2017 года, это «нет», которое кипело внутри Джесс, вышло… по-другому.

[Джесс: НЕЕЕЕТ .] 

Бен: А потом опять всплыло.

[Джесс: НЕЕЕЕЕЕЕТ .] 

Эмори: И снова.

[Джесс: НЕЕЕЕЕЕЕЕЕТ .] 

Джесс: Мне казалось, что Земля открылась и послала через меня это «НЕТ», это было так. Это нужно услышать в данный момент на этой планете.

Джесс: Позже люди говорили мне, что их было около 12, я думаю, подряд.

[Джесс: НЕЕЕЕЕЕЕТ .] 

Бен: К третьему «нет», излившемуся из Джесс, они уже вытянули руки в стороны, растопырив пальцы, как будто давая команда.

Джесс: Мне казалось, что я произношу какое-то заклинание. Это было похоже на то, что я собираюсь просто вытолкнуть эту энергию «нет» и сказать: «Ты больше не можешь этого делать».

Эмори: Но это было всего лишь начало президентства Трампа, и чего-то еще, чего Джесс так и не предвидела.

Джесс: Итак, я открыл глаза и увидел — то, что я испытал — море видеокамер.

Бен: То, что произошло дальше, заставило Джесс скрыться на добрых четыре года.

Эмори: Еще, через минуту.

[СПОНСОРСКАЯ ПЕРЕРЫВ]

Бен: репортер ITV News Мартин Гайсслер был среди толпы камер, запечатлевших Джесс и их крик. Он смотрел с благоговением.

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

Эмори: Но не слишком далеко назад, потому что Мартин и его оператор были заняты всем этим.

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

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

[ Джесс : Мне очень жаль. В мой мир. Мне так жаль мой мир. Это не то, чего мы хотим. В этом одном моменте так много потенциала для красоты и разрушения, что просто почти непостижимо, что они могут существовать прямо сейчас. Это так, так близко.]  

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

Бен: Когда продюсеры видео находятся в полевых условиях, они часто получают разрешение от своих субъектов на использование отснятого материала. И к тому времени, когда продюсер Мартина подошел, чтобы спросить, могут ли они использовать отснятый материал, Джесс была истощена и ошеломлена, и не придала этому особого значения. Они все равно не знали, что такое ITV.

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

Бен: В данном случае это означало, что крик Джесс раздавался в сети, чтобы мог найти любого .

Мартин: Не помню, писал ли я это в Твиттере. О, я думаю, что я, вероятно, сделал.

Эмори: И почти сразу люди его нашли.

Мартин: Мы вернулись в офис и начали монтаж, чтобы собрать фильм для ночных новостей.И я думаю, что в какой-то момент продюсер подошел и сказал: «Послушайте, вы видели, как это сходит с ума».

Джесс: Я получил это сообщение от кого-то, кого я не очень хорошо знал, знаешь, от знакомого. «О, вы в Вашингтоне на акции протеста? Ты в зеленом пальто? И я думал. «Ни за что он здесь. Он увидел меня.» Я ответил, знаете, «Вы были здесь?» И он не ответил. И я был просто типа, хорошо, что угодно. А потом кто-то еще, опять же, которого я не очень хорошо знаю, но я знаю, написал мне, это было даже позже той же ночью, и это было что-то вроде: «Знаешь ли ты это, как будто ты онлайн?» и я такой: «О чем ты говоришь?» И она такая: «Да, как твое видео, видео с тобой.Типа и меня тошнило.

Бен: Было уже довольно поздно. Джесс гостила у подруги в Вашингтоне, и их подруга уже спала… но Джесс начала паниковать. Поэтому они спустились вниз, где мама их друга смотрела телевизор.

Джесс: Я вхожу и спрашиваю, мне нужно типа: «Можно с тобой поговорить?» И, вы знаете, она из тех, кто в свое время провел много акций протеста и все такое, и она такая: «Ну, вы знаете, это не похоже на то, что это будет в The Washington Post.Вам не о чем беспокоиться».

Эмори: Вот это странное утешение. Хотя мама друга была права. Это не было The Washington Post, о котором Джесс нужно было беспокоиться. Это была всемирная паутина. Твиттер. Фейсбук. Реддит. Реальные новостные сайты. Фейковые новостные сайты. Крик распространялся.

Бен: На ​​следующий день Джесс была на Женском марше в своей зеленой куртке среди беспорядка розовых шляп, когда они услышали от еще одного друга .

Джесс: И она такая: «Это уже посмотрели более пяти миллионов человек.«И мой мозг просто *PEW*. Например, я не могу понять это число. Что это хотя бы значит? Его уже посмотрели пять миллионов человек. И что они просмотрели?

Бен: Джесс описала чувство комы, когда они кричали «НЕТ». Так что воспоминание о том, что это произошло, может быть, но они точно этого не видели. Но к тому времени это сделали миллионы других людей.

Мартин: Это был момент дня — большого дня — и он подытожил для меня то, что чувствовала огромная часть Америки в тот день.Так что я не удивлен, что это стало вирусным.

Бен: Из виральности он превратился в полноценный мем. Люди делали это по-своему, добавляя фальшивые подписи к крику в разделе комментариев. Что-то вроде: «Веганы, когда узнают, что сделаны из мяса».

Эмори: И «Когда люди из Британии узнают, что веб-сайты используют файлы cookie вместо печенья».

Бен: И «Люди с непереносимостью лактозы, когда понимают, что живут в Млечном Пути». Многие из этих вещей — вы должны признать — довольно забавны.Но когда ваш конкретный мем носит политический характер, люди используют вас для собственных насмешек, что может отличаться от других видов шуток с мемами.

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

[YouTube видео : Не унывайте, снежинка. Все будет хорошо. Принесены вам людьми, которые устали от ваших быков ***.]

Бен: Путешествие еще дальше и быстрее, возможно, было GIF-файлами и скриншотами… скримшотами?… эпоса «НЕТ».

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

Эмори: Люди нарисовали лицо Джесс. Они прифотошопили себе на голову шляпу MAGA. Другие показали, что Трамп обнимает Джесс или, что еще хуже, сзади. Есть бесконечные итерации.Многие из них испортились. Жестокий.

Бен: Джесс говорит, что у них была классическая реакция на автомобильную аварию на натиск онлайн-ответов. Вы хотите отвести взгляд, вы должны отвести взгляд

Джесс: Но я не могла перестать смотреть, это было похоже, о Боже мой, есть еще один мем. И я бы прочитал все комментарии, и это было бы просто так. Я имею в виду, что некоторые вещи, я буквально даже не буду повторять, это так заводит. И я такой: да, я об этом и говорю. Мол, вот так.Вы только что доказали, почему я все это сказал.

Бен: Джесс почти ничего не говорила об этом ощущении — о том, как она прикована к наблюдению за тем, как то, что они делают, искажается, превращается в оружие, экспоненциально высмеивается по мере того, как это распространяется по Интернету. Кроме того, они сказали, что это действительно ужасно, что люди скажут, превратив вас в мем.

Эмори: Есть и одна итерация , которую Джесс на самом деле оценила. И, к счастью, именно он поднялся на вершину, чтобы дать мему его официальное название в онлайн-циклопедии мемов «Знай свой мем».

Джесс: Люк Крайуокер.

Бен: Если вы недавно вынырнули из-под настоящего камня, скажем, с 1980 года, мальчик, у нас есть для вас чумовой спойлер из «Звездных войн»…

Джесс: Вот сцена, где Люк находит что Дарт Вейдер — его отец, и он кричит «нет» вот так, как я кричу «нет!»

[Звездные войны клип : Дарт Вейдер: Исследуй свои чувства, ты знаешь, что это правда.] 

[Люк Скайуокер: Неееееееееееет.] 

Эмори: Итак, конечно, кто-то смешал эти два понятия.

Джесс: И я подумал, что это чертовски блестяще. Я имею в виду, это забавно, да? Потому что это похоже на то, что Трамп похож на Дарта Вейдера. «Неееет. Это не может быть мой папа. Это не может быть моим президентом». Это невозможно.

Бен: Джесс также была в восторге от более тонкого аспекта прозвища Люка Крайуокера…

Джесс: Они не смогли определить мой пол. А я гендерквир. Типа, я небинарный. И поэтому мне нравилось, когда люди были похожи на этого человека или просто думали, что они были такими злыми, когда говорили: «Это была девушка? Я не знаю.» Это как, ха-ха. Ага. Вы не знаете, не так ли?

Эмори: Уловка гендерного джедая. Но, как знает любой настоящий фанат «Звездных войн», слабость Люка — страх.

[ Йода : Страх – это путь на темную сторону.Страх приводит к гневу. Гнев приводит к ненависти. Ненависть приводит к страданию.] 

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

Эмори: Трудно описать, каково это быть героем мема, который взрывается. Люди сразу же начинают пытаться понять, кто вы.

Бен: И , где ты.

[YouTube видео : Если кто-нибудь знает, где этот крикун с инаугурации, пожалуйста, опубликуйте его ниже.]

Бен: В зависимости от их мотивации, вы можете не хотеть, чтобы люди вас нашли. Но люди пытались найти Джесс. Докс Джесс. Может быть, сделать хуже, чем уже было сделано.

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

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

Джесс: Частью процесса для меня была попытка осознать тот факт, что это была не я. Это был человек, который кричал «нет». Как будто это не была личная идентичность чего-то конкретно обо мне, что стало вирусным. И потому что в течение долгого времени это было как, о, как, о Боже, это так подло или эти комментарии такие жестокие. Было похоже, что я чувствовал себя как друзья и семья, и мой терапевт, и люди продолжали говорить: «Тебе нужно отделить себя от этого образа.” 

Эмори: Джесс не знала, как это сделать. Некоторое время они вели список всех различных мемов Крика, с которыми они сталкивались. Они подумали, что, может быть, они смогут превратить его в своего рода произведение искусства.

Бен: Но даже это казалось непреодолимым. Джесс не могла использовать это в своих интересах. Это было слишком. Что было очевидно для окружающих Джесс.

Эмори: Мы поговорили с несколькими друзьями Джесс, и все они говорили об одном и том же: Джесс стала более робкой, более осторожной, более избирательной в том, с кем они разговаривают и чем они готовы поделиться.Джесс не изобретала себя заново, не перестала заниматься искусством и не стала отшельницей. Они ушли в более эмоциональное укрытие. И в результате свет Джесс просто… потускнел.

Бен: Что-то, что было на самом деле довольно примечательно, в эпоху бесконечного подключения к Интернету: люди, ищущие Джесс, не могли их найти.

[YouTube видео : Но дело в том, что мы знаем о ней? Кажется, она полностью исчезла с лица планеты с того дня, когда она прославилась.]

Бен: Это ютубер, который все еще позирует по поводу образа Джесс в 2020 году почти через три года после того, как их крик стал мемом.

Эмори: Джесс испытывает некоторое сожаление по поводу того, что после всего этого уклонялась от публичного внимания, но это не имеет никакого отношения к деньгам.

Джесс: Я не чувствовала, что во мне это есть. Буквально, у меня не было жизненной силы, энергии во мне, чтобы идти лицом к лицу с любым, кто хотел прийти ко мне по этому поводу. И я действительно чувствовал себя очень плохо из-за того, что на самом деле в течение долгого времени говорил: «На самом деле, как будто вам просто дали платформу.Вы можете сказать: «Эй, это был я. И вот что я имею в виду». И я собираюсь сказать еще одну вещь, и я собираюсь указать на эту вещь, и я буду типа, ура-ура-мыльница. Правильно, 15 минут. Я понял. И я ничего с этим не делал.

Бен: Джесс не особо ищет второй шанс в эти 15 минут. Как мы сказали, это интервью с нами? Это первое, что они сделали после разговора с ITV News 4 года назад в разгар инаугурации Дональда Трампа. И их уже спрашивали.Это большое дело для Джесс, и большой шаг . Тот, который Джесс чувствует себя готовым принять участие из-за прозрения, которое у них было недавно о мемах.

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

Джесс: Я думаю, что это так сильно говорит о недостатках нашей культуры, это похоже на то, что любой, кто заступается за неудачника, любой, кто заступается за себя, любой, кто хочет высказаться о чем-то аморальном, это как, о, давайте пристыдим их, чтобы мы не выглядели плохо. И я думаю, что в корне всего этого есть что-то похожее на то, как люди теряют доступ к своей собственной силе. Это похоже на то, что если у вас нет доступа к вашему собственному «НЕТ» или вашей собственной силе, и вы пытаетесь отнять чужое и их «нет» или их «да», что бы это ни было, и их силу, это похоже на тьму. .

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

Бен: Протестующие сторонники Трампа, многие из которых вооружены, некоторые из них демонстрируют образы превосходства белых, штурмовали Капитолий США и разграбили здание, что привело к уничтожению имущества и совершению действий, которые в настоящее время преследуются как нападение и заговор.Свидетельские показания в суде показали, как бунтовщики избивали полицейских и выкрикивали угрозы смертью. Что-то вроде: «Убей его из его же пистолета». Некоторые называют эти действия государственной изменой. Как бы вы это ни называли, это далеко не крик Джесс, который в некотором смысле был криком покорности, а не насильственным сопротивлением новому режиму. Крик Джесс никому не причинил вреда. Но опять же, этот напряженный политический момент, когда одна большая группа стала группой IN, а другая группа почувствовала, что стала группой OUT — и была этому недовольна — привела к мемам.

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

Бен: Здесь есть параллели, даже если трудно сравнить вооруженное нападение на столицу с криком Джесс «НЕЕЕЕТ».

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

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

Мартин: Этот разговор заставил меня задуматься об этой истории больше, чем когда-либо за последние пять лет. В смысле, расскажи мне о Джесс. Знаешь, как Джесс после всего этого. И какое влияние это оказало на нее? Потому что у меня никогда не было возможности узнать.

Эмори: Через пруд Мартин Гейсслер — журналист, который заснял крик — не следил за мемом и его многочисленными итерациями. Но он также не упускал из виду, что без него ее может вообще не быть.

Мартин: Да, это большая этическая и моральная дилемма для нашей отрасли, не так ли?

Эмори: Это есть интересно подумать: какую ответственность несут люди, которые, возможно, не создают мемы, но которые делают их возможными, в своем существовании? То, к чему Мартин приземляется как журналист, на самом деле довольно простое.

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

Эмори: Мартин делал свою работу. Предлагая окно в инаугурацию — нефильтрованное, не прошедшее цензуру, не продезинфицированное. В тот день Джесс принесла туда их камеру, чтобы сделать то же самое. Они просто никогда не видели себя в центре внимания. И ни Мартин, ни Джесс не могли представить себе последствий. Но чтобы ответить на вопрос Мартина о том, как сегодня поживает Джесс?

Джесс: Честно говоря, такое ощущение, будто я попала в серьезную аварию, и мои кости зажили. Это как «ОК», так что я всегда могу немного хромать по этому вопросу, но я не хочу ничего не делать со своей жизнью из-за того, что это произошло.Я действительно, я хочу двигаться дальше.

Эмори: Интернет — это . Не верите нам? Погуглите: «инаугурационный мем». Что вы получаете?

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

[ Берни Сандерс : В Вермонте мы одеваемся тепло. Мы кое-что знаем о холоде и не столько заботимся о моде, сколько хотим согреться.] 

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

Эмори: Джесс может даже стряхнуть пыль со старой ярко-зеленой куртки.

[КРЕДИТЫ]

Эмори: Бесконечная нить является производством WBUR в Бостоне.

Бен: Хотите ранние билеты на мероприятия, сувениры, бонусный контент, фотографии овсянки Эмори или мой бутерброд на завтрак? Присоединяйтесь к нашему списку адресов электронной почты! Вы найдете его на wbur.org/бесконечная нить.

Эмори: Кроме того, мы хотим знать, какой мем вы считаете самым недооцененным. Позвоните нам. Да, возьми трубку. 857-244-0338. Или, что еще лучше, запишите голосовую заметку и отправьте ее по электронной почте на адрес:[email protected] Мы просто можем включить вашу голосовую заметку и ваше предложение в шоу.

Бен: Большое спасибо нашему хору мемов:

Сара Лайола преподает цифровую культуру и дизайн в Университете Прибрежной Каролины.

Джоан Донован — директор по исследованиям Центра Шоренштейна при Гарвардской школе Кеннеди.

Джанлука Стрингини изучает дезинформацию по онлайн-безопасности и разжигание ненависти в Бостонском университете.

У Аманды Бреннан очень крутой титул интернет-библиотекаря.

Кеньятта Чиз стал соучредителем сайта «Знай свой мем», главным редактором которого является Дон Колдуэлл.

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

Эмори: Наш сериал и наше шоу созданы продюсерами Дином Расселом, Норой Сакс и Куинси Уолтерсом. Мы организованы вместе с нами… Эмори Сивертсон

Бен: И Бен Брок Джонсон.Этот эпизод был отредактирован Морин МакМюррей.

Amory: Сведение и звуковой дизайн Пола Вайткуса. Оригинальная музыка в этом выпуске также написана Полом Вайткусом.

Бен: Особая благодарность и дополнительная производственная работа от Джоша Крейна, Фрэнка Эрнандеса, Кристин Торрес, Софи Коднер и Рэйчел Карлсон.

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

Основы Redux, часть 8: современный Redux с помощью Redux Toolkit

  • Как упростить логику Redux с помощью Redux Toolkit
  • Следующие шаги для изучения и использования Redux

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

Если вы хотите напомнить о том, что мы рассмотрели до сих пор, взгляните на это резюме:

Резюме: что вы узнали
  • Часть 1: Обзор:
    • что такое Redux, когда/ зачем его использовать и основные части приложения Redux
  • Часть 2: концепции и поток данных:
    • Как Redux использует шаблон «одностороннего потока данных»
  • Часть 3: состояние, действия, и Редюсеры:
    • Состояние Redux состоит из простых данных JS
    • Действия — это объекты, описывающие события «что произошло» в приложении
    • Редюсеры принимают текущее состояние и действие и вычисляют новое состояние
    • Редюсеры должны следовать таким правилам, как «неизменяемые обновления» и «без побочных эффектов»
  • Часть 4: Магазин:
    • API createStore создает хранилище Redux с функцией корневого редуктора
    • Магазины можно настраивать с помощью «усилителей» и «промежуточного ПО»
    • Расширение Redux DevTools позволяет вы видите, как ваше состояние меняется со временем
  • Часть 5: Пользовательский интерфейс и React:
    • Redux отделен от любого пользовательского интерфейса, но часто используется с React
    • React-Redux предоставляет API, позволяющие компонентам React общаться с хранилищами Redux
    • useSelector считывает значения из состояния Redux и подписывается на обновления
    • useDispatch позволяет компонентам отправлять действия
    • обертывает ваше приложение и позволяет компонентам получать доступ к хранилищу
    • ПО промежуточного слоя Redux позволяет писать логику с побочными эффектами
    • ПО промежуточного слоя добавляет дополнительный шаг к потоку данных Redux, позволяя использовать асинхронную логику Стандартные шаблоны Redux:
      • Создатели действий инкапсулируют подготовку объектов действий и переходов
      • Мемоизированные селекторы оптимизируют вычисления преобразованных данных
      • Статус запроса следует отслеживать с помощью значений перечисления состояния загрузки
      • Нормализованное состояние упрощает поиск элементов по идентификаторам

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

    Вот почему команда Redux создала Redux Toolkit : наш официальный, самоуверенный набор инструментов «с батарейками» для эффективной разработки Redux.

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

    Из-за этого Redux Toolkit является стандартным способом написания логики приложения Redux . «Рукописная» логика Redux, которую вы написали до сих пор в этом руководстве, является реальным рабочим кодом, но вам не следует писать логику Redux вручную — мы рассмотрели эти подходы в этом руководстве, чтобы вы поняли, как Редукс работает.Тем не менее, для реальных приложений, вы должны использовать Redux Toolkit для написания своей логики Redux.

    Когда вы используете Redux Toolkit, все концепции, которые мы рассмотрели до сих пор (действия, редукторы, настройка хранилища, создатели действий, преобразователи и т. д.), все еще существуют, но Redux Toolkit предоставляет более простые способы написания этого кода .

    Redux Toolkit Только охватывает логику Redux — мы по-прежнему используем React-Redux, чтобы позволить нашим компонентам React общаться с хранилищем Redux, включая useSelector и useDispatch .

    Итак, давайте посмотрим, как мы можем использовать Redux Toolkit для упрощения кода, который мы уже написали в нашем примере приложения todo. В первую очередь мы будем переписывать наши файлы «срезов», но мы должны иметь возможность сохранить весь код пользовательского интерфейса одинаковым.

    Прежде чем продолжить, добавьте пакет Redux Toolkit в ваше приложение. хранить.В настоящее время это выглядит так:

    src/rootReducer.js

      FiltersSlice '

    const rootorducter = коммерческие комбинации ({

    Todos: todosreducer,
    фильтры: filterreduciver
    })

    Экспорт rootreducter по умолчанию
    копия

    SRC / Store.js

      Импорт {CreateStore, ApplyMiddleware} из' redux 
    import thunkMiddleware from 'redux-thunk'
    import {composeWithDevTools} from 'redux-devtools-extension'
    import rootReducer from './reducer'

    const составить Enhancer = composeWithDevTools(applyMiddleware(thunkMiddleware))

    const store = createStore(rootReducer, составной Enhancer)
    экспортировать хранилище по умолчанию
    Копировать

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

    • Объединить редьюсеры слайсов вместе, чтобы сформировать корневой редуктор
    • Импортировать корневой редуктор в файл хранилища
    • Импортировать промежуточное ПО thunk, applyMiddleware и composeWithDevTools API
    • промежуточное ПО и инструменты разработки
    • Создание хранилища с корневым редьюсером

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

    Использование

    configureStore

    Redux Toolkit имеет configureStore API, который упрощает процесс настройки магазина . configureStore обертывает ядро ​​Redux createStore API и автоматически обрабатывает большую часть настройки магазина. Фактически, мы можем сократить его до одного шага:

    src/store.js

      import { configureStore } from '@reduxjs/toolkit' 

    import todosReducer from './features/todos/todosSlice'
    import filterReducer from './features/filters/filtersSlice'

    const store = configureStore({
    reducer: {

    todos: todosReducer,
    фильтры: filterReducer
    } 9000 }
    } default store
    Copy

    Этот вызов configureStore сделал всю работу за нас:

    • Он объединил todosReducer и filterReducer в функцию корневого редюсера, которая будет обрабатывать корневое состояние, которое выглядит как 9206 {9206 { todos, filter}
    • Он создал хранилище Redux, используя этот корневой редюсер
    • Он автоматически добавил преобразователь промежуточного программного обеспечения
    • Соединение Redux DevTools Extension

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

    Давайте посмотрим, что произойдет, если мы случайно изменим часть состояния. Что, если мы изменим редюсер «todos loading» так, чтобы он напрямую изменял поле состояния, а не неизменно делал копию?

    src/features/todos/todosSlice

      функция экспорта по умолчанию todosReducer(state = initialState, action) { 
    switch (action.type) {

    case 'todos/todosLoading': {

    state.status = 'loading'
    состояние возврата
    }
    по умолчанию:
    состояние возврата
    }
    }
    Copy 9006 U Все наше приложение просто разбилось! Что случилось?

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

    Package Cleanup

    Redux Toolkit уже включает в себя несколько используемых нами пакетов, таких как redux , redux-thunk и reselect , и повторно экспортирует эти API. Итак, мы можем немного подчистить наш проект.

    Во-первых, мы можем переключить импорт createSelector на '@reduxjs/toolkit' вместо 'reselect' . Затем мы можем удалить отдельные пакеты, которые мы перечислили в нашем пакете .json :

      npm uninstall redux redux-thunk reselect 
    Копировать

    Чтобы было ясно, мы все еще используем эти пакеты и должны их установить . Однако, поскольку Redux Toolkit зависит от них, они будут установлены автоматически, когда мы установим @reduxjs/toolkit , поэтому нам не нужно, чтобы другие пакеты были конкретно перечислены в нашем файле package.json .

    Запись фрагментов​

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

    В Redux Toolkit есть API createSlice , который поможет нам упростить логику и действия редуктора Redux . createSlice делает для нас несколько важных вещей:

    • Мы можем написать редьюсеры case как функции внутри объекта, вместо того, чтобы писать оператор switch/case
    • Редьюсеры смогут писать более короткие неизменяемые обновления логика
    • Все создатели действий будут сгенерированы автоматически на основе предоставленных нами функций редуктора строка, которая будет использоваться в качестве префикса для сгенерированных типов действий
    • initialState : начальное состояние редуктора
    • редуктора : объект, в котором ключи являются строками, а значения являются функциями «редуктора регистра», которые будут обрабатываться конкретные действия

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

    CreateSlice Exammer

      Импорт {CreateSlice} из '@ reduxjs / toolkit' 

    const nationsitate = []

    const todosslice = createSlice ({
    Имя: 'ToDos',
    Инициализируют
    Редукторов: {
    toDedded ( состояние, действие) {

    state.push(action.payload)
    },
    todoToggled(состояние, действие) {
    const todo = state.find(todo => todo.id === action.payload)
    todo. завершено = !todo.завершено
    },
    todosLoading(state, action) {
    return {
    ...state,
    status: 'loading'
    }
    }
    }
    })

    export const { todoAdded, todoToggled, todosLoading } = действия

    export default todosSlice.reducer
    Copy

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

  • createSlice автоматически возвращает существующее состояние в случае по умолчанию
  • createSlice позволяет нам безопасно «мутировать» наше состояние!
  • Но мы также можем создавать неизменяемые копии, как и раньше, если захотим

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

Так как же выглядят эти автоматически сгенерированные объекты действий? Давайте попробуем вызвать один из них и зарегистрировать действие, чтобы увидеть:

  console.log(todoToggled(42)) 

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

Внутри сгенерированной функции редуктора createSlice проверит, соответствует ли action.type отправленного действия одному из сгенерированных имен. Если это так, он запустит эту функцию редуктора. Это точно такой же шаблон, который мы написали сами, используя оператор switch/case , но createSlice делает это за нас автоматически.

О «мутационном» аспекте также стоит поговорить подробнее.

Неизменяемые обновления с помощью Immer​

Ранее мы говорили о «мутации» (изменение существующих значений объекта/массива) и «неизменяемости» (обработка значений как чего-то, что нельзя изменить).

В Redux наши редукторы никогда не могут изменять исходные / текущие значения состояния!

Итак, если мы не можем изменить оригиналы, как нам вернуть обновленное состояние?

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

  
return {
...state,
value: 123
}
Copy

Как вы видели в этом руководстве, мы можем писать неизменяемые обновления вручную, используя операторы расширения массива / объекта JavaScript и другие функции, которые возвращают копии исходных значений. Однако написать неизменяемую логику обновления вручную сложно, а случайное изменение состояния в редьюсерах — единственная наиболее распространенная ошибка, которую допускают пользователи Redux.

Вот почему функция createSlice Redux Toolkit позволяет проще писать неизменяемые обновления!

createSlice использует внутри библиотеку под названием Immer.Immer использует специальный инструмент JS под названием Proxy для переноса предоставленных вами данных и позволяет вам писать код, который «мутирует» эти упакованные данные. Но Immer отслеживает все изменения, которые вы пытались внести, а затем использует этот список изменений, чтобы вернуть безопасно неизменяемое обновленное значение , как если бы вы написали всю неизменяемую логику обновления вручную.

Итак, вместо этого:

  функция рукописного редьюсера (состояние, действие) { 
return {
...состояние,
first: {
...state.first,
second: {
...state.first.second,
[action.someId]: {
...state.first.second[action.someId],
четвертый: action.someValue
}
}
}
}
}
Копировать

Вы можете написать такой код:

  function reducerWithImmer(state, action) { 
state.first.second[action.someId].fourth = action. someValue
}
Копировать

Читать намного легче!

Но вот что очень важно помнить:

Вы можете написать только «мутирующую» логику в Redux Toolkit createSlice и createReducer , потому что они используют Immer внутри! Если вы пропишете мутирующую логику в редюсерах без Immer, она изменит состояние и вызовет ошибки!

Immer по-прежнему позволяет нам писать неизменяемые обновления вручную и самим возвращать новое значение, если мы этого хотим.Вы даже можете смешивать и сочетать. Например, удаление элемента из массива часто проще сделать с помощью array.filter() , поэтому вы можете вызвать это, а затем присвоить результат state , чтобы «мутировать» его:

  
state.todos = state.todos.filter(todo => todo.id !== action.payload)
Копировать

Преобразование редуктора Todos​

Давайте начнем преобразовывать наш файл слайса todos, чтобы вместо него использовать createSlice . Сначала мы выберем пару конкретных случаев из нашего оператора switch, чтобы показать, как работает процесс.

src/features/todos/todosSlice.js

  createSlice({ 
name: 'todos',
initialState,
reducers: {
todoAdded(state, action) {
const todo = action.payload
state.entities[todo.id] = todo
},
todoToggled(state , действие) {
const todoId = действие.Полезная нагрузка
const todo = state.entiesties [toDoid]
todo.complended =! todo.com do.com})
}
})
}
})

Export Const {ToDakded, toDotoggled} = todosslice.actions

Экспорт по умолчанию toStosslice.reducer
Копировать

Редуктор todos в нашем примере приложения по-прежнему использует нормализованное состояние, вложенное в родительский объект, поэтому код здесь немного отличается от миниатюрного примера createSlice , который мы только что рассмотрели. Помните, как раньше нам приходилось писать множество вложенных операторов распространения, чтобы переключать эту задачу? Теперь тот же самый код на лот короче и легче читается.

Добавим к этому редюсеру еще пару кейсов.

src/features/todos/todosSlice.js

  const todosSlice = createSlice({ 
name: 'todos',
initialState,
reducers: {
todoAdded(state, action) {
const to dodo state.entities[todo.id] = todo
},
todoToggled(state, action) {
const todoId = action.payload
const todo = state.entities[todoId]
todo.complete = !todo.completed
},
todoColorSelected: {
reducer(state, action) {
const { color, todoId } = action.payload
state.entities[todoId].color = color
},
prepare(todoId , цвет) {
return {
payload: { todoId, color }
}
}
},
todoDeleted(state, action) {
delete state.entities[action.payload]
}
}
})

export const { todoAdded, todoToggled, todoColorSelected, todoDeleted } =
todosSlice.действия

экспортировать по умолчанию todosSlice.reducer
Копировать

Создатели действий для todoAdded и todoToggled должны принимать только один параметр, например, весь объект задачи или идентификатор задачи. Но что, если нам нужно передать несколько параметров или выполнить некоторую логику «подготовки», о которой мы говорили, например создание уникального идентификатора?

createSlice позволяет нам справляться с такими ситуациями, добавляя к редюсеру «подготовить обратный вызов». Мы можем передать объект, у которого есть функции с именами , reducer, и , prepare .Когда мы вызываем создателя сгенерированного действия, функция prepare будет вызываться с любыми параметрами, которые были переданы. Затем она должна создать и вернуть объект, который имеет поле полезной нагрузки (или, необязательно, мета и ошибка полей), что соответствует соглашению о стандартном действии Flux.

Здесь мы использовали обратный вызов prepare, чтобы позволить нашему создателю действия todoColorSelected принимать отдельные аргументы todoId и color и объединять их как объект в действии .полезная нагрузка .

Между тем, в редюсере todoDeleted мы можем использовать оператор JS delete для удаления элементов из нашего нормализованного состояния.

Мы можем использовать эти же шаблоны, чтобы переписать остальные наши редукторы в todosSlice.js и filterSlice.js .

Вот как выглядит наш код со всеми преобразованными слайсами:

Запись санков

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

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

Redux Toolkit имеет новый API для получения данных RTK Query .RTK Query — это специально созданное решение для извлечения и кэширования данных для приложений Redux, и может устранить необходимость в записи любых преобразователей или редукторов для управления выборкой данных . Мы рекомендуем вам попробовать его и посмотреть, поможет ли он упростить код выборки данных в ваших собственных приложениях!

Вскоре мы обновим учебники Redux, чтобы включить разделы по использованию RTK Query. До тех пор см. раздел RTK Query в документации Redux Toolkit.

Используя

createAsyncThunk

Давайте заменим наш преобразователь fetchTodos , сгенерировав преобразователь с createAsyncThunk .

createAsyncThunk принимает два аргумента:

  • Строка, которая будет использоваться в качестве префикса для сгенерированных типов действий. Это часто записывается с использованием синтаксиса async/await , поскольку функции async автоматически возвращают обещание.

src/features/todos/todosSlice.js

  import { createSlice, createAsyncThunk } from '@reduxjs/toolkit' 



export const fetchTodos = createAsyncThunk('todosThunk)
константный ответ = ожидание клиента.get('/fakeApi/todos')
return response.todos
})

const todosSlice = createSlice({
name: 'todos',
initialState,
reducers: {

},
extraReducers: builder =>
builder
.addCase(fetchTodos.pending, (состояние, действие) => {
state.status = 'загрузка'
})
.addCase(fetchTodos.fulfilled, (состояние, действие) => {
const newEntities = { }
действие.полезная нагрузка.forEach(todo => {
newEntities[todo.id] = todo
})
state.entities = newEntities
state.status = 'idle'
})
}
})


Copy 9 ‘todos/fetchTodos’ в качестве префикса строки и функцию «создатель полезной нагрузки», которая вызывает наш API и возвращает обещание, содержащее извлеченные данные. Внутри createAsyncThunk создаст три создателя действий и типов действий, а также функцию thunk, которая автоматически отправляет эти действия при вызове.В этом случае создатели акции и их типы:

  • FetchTodos.pending : TODOS / FetchTodos / Pending
  • FetchTodos.fulfulled : TODOS / Fetchtodos / Выполнен
  • FetchTodos.rejected : todos/fetchTodos/rejected

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

createSlice также принимает опцию extraReducers , где мы можем заставить один и тот же редуктор слайсов прослушивать другие типы действий . Это поле должно быть функцией обратного вызова с параметром builder , и мы можем вызвать builder.addCase(actionCreator, caseReducer) для прослушивания других действий.

Итак, здесь мы вызвали builder.addCase(fetchTodos.pending, caseReducer) . Когда это действие будет отправлено, мы запустим редьюсер, который устанавливает state.status = 'loading' , так же, как это было раньше, когда мы писали эту логику в операторе switch. Мы можем сделать то же самое для fetchTodos.fulfilled и обработать данные, которые мы получили от API.

В качестве еще одного примера давайте конвертируем saveNewTodo . Этот преобразователь принимает текст нового объекта todo в качестве параметра и сохраняет его на сервере.Как мы справляемся с этим?

src/features/todos/todosSlice.js

  

export const fetchTodos = createAsyncThunk('todos/fetchTodos', async () => {
const response = await client.get('/fakeApi/todos')
return response.todos
})

export const saveNewTodo = createAsyncThunk('todos/saveNewTodo', async text => {
const initialTodo = { text }
const response = await client.post('/fakeApi/todos', { todo: initialTodo })
вернуть ответ.todo
})

const todosSlice = createSlice({
name: 'todos',
initialState,
reducers: {

},
extraReducers: builder => {
builder
.addCase(fetchCase(fetchCase) action) => {
state.status = 'загрузка'
})
.addCase(fetchTodos.fulfilled, (state, action) => {
const newEntities = {}
action.payload.forEach(todo => {
новые сущности[todo.id] = todo
})
state.entities = newEntities
state.status = 'idle'
})
.addCase(saveNewTodo.fulfilled, (state, action) => {
const todo = action.payload
state. entity[todo.id] = todo
})
}
})


Копировать

Процесс для saveNewTodo такой же, как мы видели для fetchTodos . Мы вызываем createAsyncThunk и передаем префикс действия и создателя полезной нагрузки.Внутри создателя полезной нагрузки мы делаем асинхронный вызов API и возвращаем значение результата.

В этом случае, когда мы вызываем dispatch(saveNewTodo(text)) , значение text будет передано создателю полезной нагрузки в качестве первого аргумента.

Хотя здесь мы не будем более подробно рассматривать createAsyncThunk , несколько других кратких заметок для справки:

  • При отправке преобразователю можно передать только один аргумент. Если вам нужно передать несколько значений, передайте их в одном объекте
  • Создатель полезной нагрузки получит объект в качестве второго аргумента, который содержит {getState, dispatch} и некоторые другие полезные значения
  • Преобразователь отправляет Ожидание действия перед запуском создателя полезной нагрузки, затем отправляет либо выполнено , либо отклонено в зависимости от того, успешно или неудачно возвращено Promise

Нормализация состояния​

хранение элементов в объекте с идентификаторами элементов.Это дает нам возможность искать любой элемент по его идентификатору без необходимости перебирать весь массив. Однако писать логику для обновления нормализованного состояния вручную было долго и утомительно. Написание «мутирующего» кода обновления с помощью Immer делает это проще, но, вероятно, все еще будет много повторений — мы можем загружать в наше приложение много разных типов элементов, и нам придется каждый раз повторять одну и ту же логику редуктора.

Redux Toolkit включает API createEntityAdapter , который имеет предварительно созданные редьюсеры для типичных операций обновления данных с нормализованным состоянием .Это включает в себя добавление, обновление и удаление элементов из среза. createEntityAdapter также создает несколько мемоизированных селекторов для чтения значений из хранилища .

Использование

createEntityAdapter

Давайте заменим нашу нормализованную логику редуктора сущностей на createEntityAdapter .

Calling CreateentityAdapter дает нам «адаптер» объекта, который содержит несколько предчувственных функций редуктора, в том числе:

  • Addone / Addmany : добавить новые элементы в штате
  • UPSERTONE / UPSERTMANY : добавить Новые товары или обновление существующих
  • UPDATEMONE / UPDATATEMANY / UPDATATEMANY : обновить существующие элементы, поставляя частичные значения
  • Removeone / Removemany : удалить элементы на основе IDS
  • Setall : заменить все существующие элементы

Мы можем использовать эти функции как редукторы регистра или как «мутирующие помощники» внутри createSlice .

Адаптер также содержит:

  • getInitialState : возвращает объект, который выглядит как { ids: [], entity: {} } , для хранения нормализованного состояния элементов вместе с массивом всех идентификаторов элементов
  • GethSelectors : генерирует стандартный набор функций селектора

Давайте посмотрим, как мы можем использовать их в нашем ломтике Todos:

SRC / Особенности / TODOS / TODOSSLICE.JS

  Import {
CreateSlice,
Createasynckunk,
createEntityAdapter
} from '@reduxjs/toolkit'


const todosAdapter = createEntityAdapter()

const initialState = todosAdapter.GetInitialState ({
Статус: '{
})



const todosslice = createslice ({
Имя:' todos ',
Инициализированные,
Редукторы: {


Тододер: ToSadapter.removeOne,
Завершен. действие) {
const CompleteIds = Object.values ​​(state.entities)
.filter (todo => todo.completed)
.map (todo => todo.id)

todosAdapter.removeMany (state, CompleteIds)
}
},
extraReducers: builder => {
builder
.addCase(fetchTodos.pending, (состояние, действие) => {
state.status = 'загрузка'
})
.addCase(fetchTodos.fulfilled, (состояние, действие) => {
todosAdapter.setAll(состояние, действие. полезная нагрузка)
state.status = 'idle'
})

.addCase(saveNewTodo.fulfilled, todosAdapter.addOne)
}
})


Копировать разные функции в зависимости от редьюсера

, всего в акциях.полезная нагрузка . Функции «добавить» и «upsert» принимают один элемент или массив элементов, функции «удаления» принимают один идентификатор или массив идентификаторов и так далее.

getInitialState позволяет нам передавать дополнительные поля состояния, которые будут включены. В этом случае мы передали поле status , что дало нам окончательное состояние слайса todos {id, entity, status} , как и раньше.

Мы также можем заменить некоторые функции выбора задач.Функция адаптера getSelectors будет генерировать селекторы, такие как selectAll , который возвращает массив всех элементов, и selectById , который возвращает один элемент. Однако, поскольку getSelectors не знает, где находятся наши данные во всем дереве состояний Redux, нам нужно передать небольшой селектор, который возвращает этот фрагмент из всего дерева состояний. Давайте переключимся на их использование. Поскольку это последнее серьезное изменение в нашем коде, на этот раз мы включим весь файл среза todos, чтобы увидеть, как выглядит окончательная версия кода с помощью Redux Toolkit:

src/features/todos/todosSlice.js

  import { 
createSlice,
createSelector,
createAsyncThunk,
createEntityAdapter
} from '@reduxjs/toolkit'
import { client } from '../../api/client' 9000 import { StatusFilters ../filters/filtersSlice'

const todosAdapter = createEntityAdapter()

const initialState = todosAdapter.getInitialState({
status: 'idle'
})


export const fetchTodos = () => {
константный ответ = ожидание клиента.get('/fakeApi/todos')
return response.todos
})

export const saveNewTodo = createAsyncThunk('todos/saveNewTodo', async text => {
const initialTodo = { text }
const response = await client. post('/fakeApi/todos', { todo: initialTodo })
return response.todo
})

const todosSlice = createSlice({
name: 'todos',
initialState,
reducers: {
todoToggled(state, действие) {
const todoId = действие.полезная нагрузка
const todo = state.entities[todoId]
todo.completed =! [todoId].color = color
},
prepare(todoId, color) {
return {
payload: { todoId, color }
}
}
},
todoDeleted: todosAdapter.removeOne,
allTodosCompleted(state, action) {
Объект.values(state.entities).forEach(todo => {
todo.completed = true
})
},
completeTodosCleared(state, action) {
const CompleteIds = Object.values(state.entities)
.filter(todo => todo.completed)
.map(todo => todo.id)
todosAdapter.removeMany(state, CompleteIds)
}
},
extraReducers: builder => {
builder
.addCase(fetchTodos.pending, (state , действие) => {
состояние.status = 'загрузка'
})
.addCase(fetchTodos.fulfilled, (state, action) => {
todosAdapter.setAll(state, action.payload)
state.status = 'idle'
})
.addCase( sevenewtodo.fulfulled, todosadapter.addone)
}
})
}
})
}
})

Export Const {
AlltodoScompleted,
Завершентодоспокоительно,
Todoadded,
TODOCLORSELUCTED,
TODodeleted,
Tootoggled
} = toStosslice.actions

Экспорт по умолчанию toStosslice.редуктор

export const { selectAll: selectTodos, selectById: selectTodoById } =
todosAdapter.getSelectors(state => state.todos)

export const selectTodoIds = createSelector(

selectTodos,

=> todo.id)
)

export const selectFilteredTodos = createSelector(

selectTodos,

state => state.filters,

(todos, фильтры) => {
const { статус, цвета } = фильтры
const showAllCompletions = status === StatusFilters.Все
if (showAllCompletions && colors.length === 0) {
return todos
}

const completeStatus = status === StatusFilters.Completed

return todos.filter(todo => {
const statusMatches =
showAllCompletions | | todo.completed === CompleteStatus
const colorMatches = colors.length === 0 || colors.includes(todo.color)
return statusMatches && colorMatches
})
}
)

export const selectFilteredTodoIds = createSelector(

selectFilteredTodos,

filteredTodos => фильтрованныеTodos.map(todo => todo.id)
)
Копировать

Мы вызываем todosAdapter.getSelectors и передаем селектор state => state.todos , который возвращает этот фрагмент состояния. Оттуда адаптер генерирует селектор selectAll , который, как обычно, берет все дерево состояний Redux и перебирает state.todos.entities и state.todos.ids , чтобы дать нам полный массив todo. объекты. Поскольку selectAll не говорит нам , что мы выбираем, мы можем использовать синтаксис деструктуризации ES6, чтобы переименовать функцию в selectTodos .Точно так же мы можем переименовать selectById в selectTodoById .

Обратите внимание, что другие наши селекторы по-прежнему используют selectTodos в качестве входных данных. Это потому, что все это время он по-прежнему возвращает массив объектов todo, независимо от того, сохраняли ли мы массив как весь state.todos , сохраняя его как вложенный массив или сохраняя его как нормализованный объект и конвертируя в массив. . Несмотря на то, что мы внесли все эти изменения в способ хранения наших данных, использование селекторов позволило нам сохранить остальную часть нашего кода прежней, а использование запоминаемых селекторов помогло пользовательскому интерфейсу работать лучше, избегая ненужных повторных рендерингов.

Чему вы научились

Поздравляем! Вы завершили учебник «Основы Redux»!

Теперь у вас должно быть четкое представление о том, что такое Redux, как он работает и как его правильно использовать:

  • Управление глобальным состоянием приложения
  • Сохранение состояния нашего приложения в виде простых данных JS
  • Написание объектов действий которые описывают «что произошло» в приложении
  • Использование функций редуктора, которые смотрят на текущее состояние и действие и неизменно создают новое состояние в ответ
  • Чтение состояния Redux в наших компонентах React с помощью useSelector
  • Диспетчерские действия из компонентов React с помощью useDispatch

Кроме того, вы увидели, как Redux Toolkit упрощает написание логики Redux и почему Redux Toolkit является стандартным подходом для написания реальных приложений Redux .Увидев сначала, как писать код Redux «вручную», должно быть ясно, что API-интерфейсы Redux Toolkit, такие как createSlice , делают для вас, поэтому вам не нужно писать этот код самостоятельно.

Для получения дополнительной информации о Redux Toolkit, включая руководства по использованию и справочники по API, см.:

Давайте в последний раз взглянем на завершенное приложение todo, включая весь код, который был преобразован для использования Redux Toolkit:

И мы сделаем последний обзор ключевых моментов, которые вы узнали в этом разделе:

  • Redux Toolkit (RTK) — это стандартный способ написания логики Redux
    • RTK включает API, которые упрощают большую часть кода Redux И включает в себя другие полезные пакеты
  • 3

  • ConfigureStore Настраивают магазин Redux с хорошими по умолчанию
    • автоматически сочетают в себе редукторы нарезки для создания корневого редуктора
    • автоматически устанавливают расширение Redux Devtools и отладки Middleware
  • createSlice упрощает написание действий и редукторов Redux
    • Автоматически создает средство создания действий S на основе ломтика / редукторов
    • редукторы могут «мутировать» состояние внутри CreateSlice с использованием Immer
    • Createasynckunk генерирует TUNKS для асинхронизации
      • Автоматически генерирует Thunk + в ожидании / выполнении / отклонено Action создатели
      • Отправка санка запускает создателя полезной нагрузки и отправляет действия
      • Действия санка можно обрабатывать в createSlice.Экстраведущие
  • создают редукторы + селекторы для нормализованного состояния
    • включает в себя функции редуктора для общих задач, таких как добавление / обновление / удаление элементов
    • генерирует меменные селекторы для Selectall и SelectbyID

    Следующие шаги по обучению и использованию Redux​

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

    Этот учебник «Основы» посвящен низкоуровневым аспектам Redux: написанию типов действий и неизменяемых обновлений вручную, тому, как работает хранилище Redux и промежуточное ПО, и почему мы используем такие шаблоны, как создатели действий и нормализованное состояние. Кроме того, наше приложение-пример todo довольно маленькое и не предназначено для использования в качестве реалистичного примера создания полноценного приложения.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован.