Это только присказка сказка впереди высоцкий слушать

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

— На прошедших уроках мы с вами
очень много узнали о сказке. Так, например, мы узнали, что ….(ответы ребят).

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

Чтение статьи в хрестоматии.

Запись в тетради:

Композиция – построение художественного произведения.

Сюжет – последовательность событий, происходящих в произведении.

— Давайте разберемся с этими
понятиями и сначала посмотрим, как же построены волшебные сказки, с чего
начинаются, как продолжаются  – т.е. с
чем сначала разберемся? (с композицией сказки).

— Так как обычно начинается
сказка?

— Правильно, чаще всего мы встречаем именно эти слова —
«жили-были». Но мудрые сказочники обычно начинали сказку с присказки. Вот,
например, так: «Было это далеко, на море, на океане на острове Кидане стоит
дерево золотые маковки, по этому дереву ходит кот Баюн – вверх идет – песню
поет, вниз идет – сказки сказывает. Вот было бы любопытно и занятно посмотреть.
Это еще не сказка, а  присказка, а сказка
вся впереди! Будет эта сказка сказываться с утра до после обеда, поевши мягкого
хлеба. Тут и сказку поведем…».

— Как вы думаете, а зачем нужна
была присказка?

— Затрудняетесь ответить? А
когда лучше слушать сказку? В какой обстановке?

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

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

— А вот присказка дразнящая и
сулящая: «Начинается сказка от сивки, от бурки, от вещей каурки. На море, на
окиане, на острове Буяне (кстати, а что это за острова Буян, Кидан, которые
встречаются в присказках? – если кого-то заинтересовал этот вопрос, я могу
подсказать, где можно найти информацию и поделиться ею с ребятами). Итак, на
море, на окиане, на острове Буяне – стоит бык печеный, возле него лук толченый,
а у него в боку нож точеный, сейчас нож вынимается – изволь кушать… И это еще
не сказка, только присказка; а кто мою сказку будет слушать, так тому соболь и
куница, и прекрасная девица, сто Рублев на свадьбу, а пятьдесят на прогулянье»
.

А это означает: приготовься ко
всему и не смей перебивать; тогда все сам увидишь…

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

Иными словами: перестраивай
душевный лад, сходи с обыденного ума, ко всему приготовься, ничему не
удивляйся; тогда все и узнаешь…

А вот присказка
сумбурно-драчливая: «Жили-были два крестьянина: один – Антон, другой – Агафон.
«Послушай, брат! – говорит Антон. – Бедовая туча к нам несется», — а сам как
лист трясется. «Ну, что ж за беда!» — «Да ведь град пойдет, весь хлеб побьет!»
— «Какой град! Дождь будет». – «Ан град! Ан дождь!» — «Не хочу говорить с
дураком!» — сказал Антон да хвать соседа кулаком. Ни град, ни дождь нейдет, а у
них из носов да ушей кровь льет. Это еще не сказка, а присказка, сказка будет
впереди – завтра после обеда, поевши мягкого хлеба…»

А это значит: вот смешаю тебе
все карты, опрокину тебя в бессмыслицу, так после этого ты в сказкины
небывальщины лучше поверишь…

А вот еще сказка, вводящая и
вкрадчива: «В то давнее время, когда мир божий наполнен был лешими, ведьмами да
русалками, когда реки текли молочные, берега были кисельные, а по полям летали
жареные куропатки, в то время жил-был царь, по имени Горох, с царицей
Анастасиею Прекрасною…»

Эта присказка как будто берет
душу слушателя за ее детскую ручку и ведет ее с распевным уговором прямо туда,
куда надо – в мир древний и дивный, к самому царю Гороху… Сказка уж такая: она
уводит, развязывая и окрыляя воображение, а потом…. потом приводя назад
концовкой: «Я там был, мед-пиво пил; по усам текло, а в рот не попало…» Или еще
выразительнее: «на том пиру и я был, мед-пиво пил, по усам текло, да в рот не
попало; тут меня угощали; отняли поханку от быка, да налили молока , потом дали
калача. Я не пил, не ел, вздумал утираться; со мной стали драться. Я надел
колпак, стали в шею толкать».

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

— Итак, сказка начинается? ….
(присказкой), а кончается? (концовкой)

— А между присказкой и концовкой
– зачин и развитие действия.

Запись в тетради:

            Композиция волшебной сказки.

            — Присказка,

            — зачин,

            — развитие действия,

            — концовка.

— Разберемся теперь с сюжетом
волшебной сказки. Исходя из определения, в чем нам надо разобраться? (в
последовательности событий).

— Скажите, с какого события
начали разворачиваться события в сказке «Два Ивана крестьянских сына»? (с
момента, когда братья решили пойти в город на ярмарку, чтобы купить коней).

— А в сказке «Царевна-лягушка»?
(отец велел сыновьям пустить стрелы, чтобы найти невест)

— А в сказке «Гуси-лебеди»? (с
момента, когда гуси унесли братика)

— Что делали герои дальше во всех
этих сказках? (пускались в путь)

— Известный фольклорист
В.Я.Пропп, проанализировав структуру русских народных волшебных сказок,
убедился, что определенные герои (а их обычно в сказке не очень много)
совершают определенные поступки (их число тоже ограничено). Эти поступки он
называл функциями и говорил, что последовательность функций в сказках всегда
одинакова. Согласно системе В.Я.Проппа, этих функций действующих лиц – тридцать
одна. Они не в полном составе встречаются в каждой сказке, но основные сказочные
действия все же присутствуют. Так вот он отмечал, что в сказках обычно начинают
разворачиваться действия после нарушения какого-либо запрета. В каких известных
вам сказках был запрет, его нарушил главный герой и от того должен был
пуститься в путь-дорогу? («Гуси-лебеди» — запрет не ходить на улицу, а смотреть
за братцем; «Царевна-лягушка – нельзя было сжигать кожу). А вот в сказке «Два
Ивана крестьянских сына» запрета не было.

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

            Сюжет волшебной сказки

Основные функции
действующих лиц.

1.

Запрет, нарушение
запрета

2.

Отъезд или уход из
дома. Дорога.

3.

Задача, стоящая
перед героем.

4.

Встреча с
помощниками. Испытание героя. Волшебные дары.

5.

Появление сверхсильного
противника.

6.

Борьба с ним (три
раза). Победа.

7.

Возвращение домой.
Часто свадьба.

8. *

Ложный герой.

9. *

Вновь трудные
испытания.

10. *

Беда ликвидируется.
Узнавание истинного героя.

11. *

Ложный герой
наказывается.

12.

Свадьба.

Значком * обозначаются
функции, которые не всегда бывают в сказках.

Сказка «Два Ивана крестьянских сына»

1.

Седой старичок.
Отдача поклона. Дары: богатырские кони, сабли богатырские.

Встреча с
помощником-дарителем. Даритель испытывает героя.  Волшебные дары.

2.

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

Отъезд или уход из
дома. Волшебный предмет. Дорога.

3.

Один из братьев
женится, становится царевичем.

Свадьба

4.

Бедная старушка с
худой квартиркой.

Встреча с
помощником.

5.

Освободить город от
двенадцатиглавого змея.

Задача, стоящая
перед героем.

6.

Появление
двенадцатиглавых змеев. Борьба с ними (три раза). Победа.

Появление
сверхсильных противников. Борьба с ними (три раза). Победа.

7.

Водовоз наказан.

Ложный герой.
Узнавание истинного героя. Ложный герой наказывается.

8.

Красная девица –
страшная львица проглатывает царевича.

Появление
сверхсильного противника. Беда.

9.

Борьба Ивана
крестьянского сына со страшной львицей.

Борьба со
сверхсильным противником.

10.

Пир, счастливый
конец.

Пир

            Персонажи волшебной сказки.

            — Герой волшебной сказки: два брата,
любящие свою мать, почтительные к окружающим, особенно к старым людям; младший
сын (часто лентяй), младшая дочь, часто без матери, но любимая отцом.

            — Ложный герой*

            — Сверхсильный противник: Кощей
Бессмертный, Змей Горыныч, Баба-Яга, леший,

            — Помощники героя:

        Помощники-люди – старичок, бабушка
(которых встречают по дороге),

        Помощники-звери – волк, заяц, конь,
сивка-бурка, щука, медведь, жар-птица, утка, кошка и др.

        Помощники-предметы – клубок,
скатерть-самобранка, сапоги-скороходы, яблоко, зеркальце, перстень, дудочка и
др.

            Помощники-слова «заветные» — 1)
Избушка, избушка, встань к лесу задом, ко мне передом и др. 2) Благословение
матери. 3) Наставление родителей.

  Домашнее задание: Расписать сюжет сказки «Царевна-лягушка»(1 вар.)
и                                                            сказки
«Гуси-лебеди» (2 вар.) 

На чтение 6 мин. Просмотров 1 Опубликовано

Текст “Владимир Высоцкий – Лукоморья Больше Нет (1967)”

Лукоморья больше нет, от дубов простыл и след, Дуб годится на паркет, так ведь нет – Выходили из избы здоровенные жлобы, Порубили все дубы на гробы. Припев: Ты уймись, уймись, тоска у меня в груди, Это только присказка, сказка впереди. Распрекрасно жить в домах на куриных на ногах, Но явился всем на страх Вертопрах, Добрый молодец он был – бабку-ведьму подпоил, Ратный подвиг совершил, дом спалил. Припев: Ты уймись, уймись, тоска у меня в груди, Это только присказка, сказка впереди. Тридцать три богатыря порешили, что зазря Берегли они царя и моря, Каждый взял себе надел, кур завел и в нем сидел Охраняя свой удел не у дел. Ободрав зеленый дуб, дядька ихний сделал сруб, А с окружающими туп стал и груб, И ругался день-деньской бывший дядька их морской, Хоть имел участок свой под Москвой. Припев: Ты уймись, уймись, тоска у меня в груди, Это только присказка, сказка впереди. А Русалка, вот дела – честь недолго берегла, И однажды, как смогла, родила, Тридцать три же мужика не желают знать сынка, Пусть считается пока сын полка. Как-то раз один колдун, врун болтун и хохотун, Предложил ей, как знаток бабских струн, Мол, русалка, все пойму и с дитем тебя возьму, И пошла она к нему как в тюрьму. Припев: Ты уймись, уймись, тоска у меня в груди, Источник Это только присказка, сказка впереди. Там и вправду ходит кот, как направо, так поет, А как налево – так загнет анекдот, Но ученый, с*кин сын, цепь златую снес в торгсин, А на выручку – один в магазин. Как-то раз за Божий дар получил он гонорар, В Лукоморье перегар на гектар, Но хватил его удар и чтоб избегнуть Божьих кар Кот диктует про татар мемуар. Припев: Ты уймись, уймись, тоска у меня в груди, Это только присказка, сказка впереди. А борадатый Черномор, лукоморский первый вор, Он давно Людмилу спер, ой, хитер! Ловко пользуется, тать, тем, что может он летать, Зазеваешься – он хвать – и тикать. А коверный самолет сдал в музей в запрошлый год, Любознательный народ так и прет, И без опаски старый хрыч баб ворует – хнычь, ни хнычь, Ой, скорей его разбей паралич! Нету мочи, нету сил – Леший как-то недопил, Лешачиху свою бил и вопил: “Дай рубля, прибью а то, я ж добытчик, али кто? А не дашь, тоды пропью долото!” “Я ли ягод не носил?”,- снова Леший голосил “А коры по сколько кил приносил! Надрывался издаля все твоей забавы для, А ты жалеешь мне рубля, ах, ты тля!” И невиданных зверей, дичи всякой нету ей, Понаехало за ей егерей, Так что значит не секрет – Лукоморья больше нет, И все, о чем писал поэт – это бред. Припев: Ты уймись, уймись, тоска, душу мне не рань, Раз уж это – присказка, значит дело дрянь. Обновить текст

Высоцкий Владимир – Лукоморья больше нет аккорды

Перевод “Владимир Высоцкий – Лукоморья Больше Нет (1967)”

Лукоморья больше нет, от дубов простыл и след, Дуб годится на паркет, так ведь нет – Выходили из избы здоровенные жлобы, Порубили все дубы на гробы. Припев: Ты уймись, уймись, тоска у меня в груди, Это только присказка, сказка впереди. Распрекрасно жить в домах на куриных на ногах, Но явился всем на страх Вертопрах, Добрый молодец он был – бабку-ведьму подпоил, Ратный подвиг совершил, дом спалил. Припев: Ты уймись, уймись, тоска у меня в груди, Это только присказка, сказка впереди. Тридцать три богатыря порешили, что зазря Берегли они царя и моря, Каждый взял себе надел, кур завел и в нем сидел Охраняя свой удел не у дел. Ободрав зеленый дуб, дядька ихний сделал сруб, А с окружающими туп стал и груб, И ругался день-деньской бывший дядька их морской, Хоть имел участок свой под Москвой. Припев: Ты уймись, уймись, тоска у меня в груди, Это только присказка, сказка впереди. А Русалка, вот дела – честь недолго берегла, И однажды, как смогла, родила, Тридцать три же мужика не желают знать сынка, Пусть считается пока сын полка. Как-то раз один колдун, врун болтун и хохотун, Предложил ей, как знаток бабских струн, Мол, русалка, все пойму и с дитем тебя возьму, И пошла она к нему как в тюрьму. Припев: Ты уймись, уймись, тоска у меня в груди, Источник Это только присказка, сказка впереди. Там и вправду ходит кот, как направо, так поет, А как налево – так загнет анекдот, Но ученый, с*кин сын, цепь златую снес в торгсин, А на выручку – один в магазин. Как-то раз за Божий дар получил он гонорар, В Лукоморье перегар на гектар, Но хватил его удар и чтоб избегнуть Божьих кар Кот диктует про татар мемуар. Припев: Ты уймись, уймись, тоска у меня в груди, Это только присказка, сказка впереди. А борадатый Черномор, лукоморский первый вор, Он давно Людмилу спер, ой, хитер! Ловко пользуется, тать, тем, что может он летать, Зазеваешься – он хвать – и тикать. А коверный самолет сдал в музей в запрошлый год, Любознательный народ так и прет, И без опаски старый хрыч баб ворует – хнычь, ни хнычь, Ой, скорей его разбей паралич! Нету мочи, нету сил – Леший как-то недопил, Лешачиху свою бил и вопил: “Дай рубля, прибью а то, я ж добытчик, али кто? А не дашь, тоды пропью долото!” “Я ли ягод не носил?”,- снова Леший голосил “А коры по сколько кил приносил! Надрывался издаля все твоей забавы для, А ты жалеешь мне рубля, ах, ты тля!” И невиданных зверей, дичи всякой нету ей, Понаехало за ей егерей, Так что значит не секрет – Лукоморья больше нет, И все, о чем писал поэт – это бред. Припев: Ты уймись, уймись, тоска, душу мне не рань, Раз уж это – присказка, значит дело дрянь. Обновить перевод

Было оно или не было,

правда ли то или нет

Послушаем лучше, что сказка сказывает…

Жила-была в тридевятом царстве,

В тридевятом государстве.

Девица – краса, длинная коса.

Сидела она у окошка,

Да сказки молвила.

Сказки старинные,

не короткие, не длинные.

Было это или не было,

Только говорят, вот как было…

Занавес открывается, сказка начинается

Вот ворота открываю, сказку сразу начинаю!

Когда это было – не помню я,

Где это было не ведаю.

Только дед мой рассказывал сказку эту

Всем на удивление, начинаем представление

За ступенькою ступенька – будет лесенка.

Слово к слову ставь складенько –

будет песенка.

А колечко за колечко – будет вязочка.

Сядь со мною на крылечко –

слушай сказочку

В  Сказке может все случится

Наша сказка впереди.

Сказка в гости к нам стучится,

Скажем сказке – заходи!

Из-за лесу с крутых гор едет дедушка Егор.

Сам на кобылке, жена на коровке.

Дети на телятках, внуки на щенятках.

Съехали с гор, развели костер,

Кушают кашку, слушают сказку

В некотором царстве,

 в некотором государстве,

Жил-был купец, именитый человек

Книжка открывается, сказка начинается.

Про зайчишку и  лису,

и про всех зверей в лесу

В некотором царстве,

в некотором государстве,

На ровном месте, как на бороне,

Верст за триста в стороне,

В месте именно в том,

В котором мы живем.

Жил был…

За морями за долами

Не на небе, на земле.

Жил старик в одном селе.

 Сочинял стихи и сказки

Про героев молодцов.

И одну из этих сказок

Вам поведать я готов

Дашенька-толстушка

Ехала к подружке,

А сказку услыхала

И в гости не попала.

Сказка всем известная,

Очень интересная

Курица-красавица у меня жила

Ах, какая умная курица была!

Шила мне кафтаны, шила сапоги.

Сладкие, румяные пекла мне пироги

А когда управится, сядет у ворот –

Сказочку расскажет, песенку споет

Друзья! Не будьте глухи.

Даны нам слушать уши,

Два уха и один язык,

Чтоб слушать больше,

Нежели говорить

Красна песня ладом,

А сказка складом.

Сядь со мною на крылечко

Слушай сказочку

Давно это было, старые люди этого не помнят, и рассказывают то, что они от отцов и дедов слыхали…

Книга открывается, Сказка начинается.

Я страницу открываю, сказывать я начинаю

Да князья послушайте, да бояре послушайте,

Да мужички-то земские,

да ребятушки махоненькие

Да крестьянушки пахотные,

Не шумите — послушайте,

Я вам старинушку скажу

Кто скажет было то, или не было,

Только верно то, что жил на свете…

Давно ль это было или недавно, так ли.

Было или не так – теперь никто уже о том не знает. Расскажу вам то, что деды своим внукам рассказывали, а внуки своим внукам

Всякое дело в мире творится,

Про всякое дело в сказке говорится…

Жили-были муж с женой.

Муж-то примется за шутки,

А жена за прибаутки,

Что на весь крещенный мир!

Это присказка ведется,

Сказка после начнется.

Красна песня ладом,

А наша сказка складом.

Сказка наша складка,

А послушать ее будет сладко

Послушайте, детки, сказочку,

Сказочку интересную,

Сказочку чудесную

Многому нас учит сказка

Доброте, терпенью, ласке.

Сказка мудрость, знанья свет!

Сказочный вам шлет привет

Начинаем представленье

Детворе на удивленье

Летела сова – веселая голова;

Вот она летела, летела и села.

Да хвостиком повертела,

Да по сторонам посмотрела.

И опять полетела, села,

Хвостиком повертела

Да по сторонам посмотрела…

Это присказка, сказка вся впереди…

На ровном месте – как на бороне

От всех дорог в стороне,

В глухой деревушке

Жили были старик со старухой

Начинается новая сказка,

Варится в печи кашка

Кашка упреет – и сказка поспеет

А будет эта сказка…

На море, на океяне

На острове Буяне

Живет кот воркот

Налево идет – песни поет,

Направо идет – сказки сказывает.

Только это не сказка, а присказка.

Посиди, да погоди –

Сказка будет впереди.

Начинается сказка, да сказывается.

Слушайте внимательно,

Слушайте да смотрите.

Смотрите, да запоминайте.

Говорят, что за горами,

да за синими морями

Чудо остров лежит, на нем царство стоит.

В том царстве жил-был царь,

Стороны той государь

Ой, ребята, та-ра-ра!

На лугу стоит гора,

А на той горе дубок,

А на дубе воронок.

Утром он в трубу трубит,

К ночи сказку говорит.

Собираются зверьки

Ворона послушать,

Пряники покушать

Про одно и тоже разные люди по разному сказки сказывают. А вот, что видел сам…

Посылали молодицу

Под горушку по водицу.

А водица – далеко,

А ведерко велико.

Это еще не сказка – присказка.

А сказка впереди

Прискакали Ермаки – золотые колпаки,

Приезжали ермошки – серебряные ножки.

Поели-попили – луком закусили,

Новой сказки запросили

Буду им рассказывать, и ты послушай…

Разожгу я печку, сяду посижу.

И ребятам нашим сказки расскажу

Расскажу вам сказку новенькую, из диковинок диковинку!

Расскажу вам деточки сказочку:

Недлинную, не короткую,

Не глупую, не умную,

А волшебную, преволшебную

Сказка из похождений слагается

Небылицами минувшего отзывается,

За былями не гоняется,

Тут занавес открывается

Слушайте все, кому охота

Славную сказочку вам расскажу.

В сказочке этой нет вранья,

А если есть, так слова два

Слушайте, послушайте,

Расскажу вам сказочку

Длинную – предлинную.

Хорошую – прехорошую,

Интересную — преинтересную

Свет погас, сейчас увидим,

Как горит перо жар-птицы.

Занавесь открылась, сказка появилась

Сказка эта переходила из уст в уста и дошла, наконец, до нас с вами. Слушайте ребятки…

Слушайте ребятки, сказку по порядку.

Слушайте, не перебивайте.

Что увидите — запоминайте

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

От начала начинается.

Запоминайте это правило обязательно.

И слушайте сказку внимательно

Сказка эта ходила из уст в уста

И, наконец, дошла до нас с вами.

Слушайте ребятки

Сказка начинается, до конца читается,

В середине не перебивается.

Запомните это правило обязательно

И слушайте сказку внимательно

Сядем рядком, да послушаем ладком.

Ляг брюшком, да послушай ушком

Слушайте люди добрые,

 Что у нас говорят,

 что сказывают

Какие сказки рассказывают

Слушайте, ребята, сказочку

Про то, что было давным-давно.

За семью горами,

За семью морями

В тридесятом царстве,

В тридесятом государстве…

Садитесь пироги с капустой кушать, да сказку бабушкину слушать

Слетались птицы с моря,

Садились у нас на заборе,

Пели птицы, сказывали птицы

Песни да сказки, были да небылицы.

А птица-синица села на кочку

И рассказывала про

Иванушку и царскую дочку

Сказка от начала начинается,

До конца читается

В середине не перебивается

За былями не гоняется,

Тут занавес открывается

Смотрите, кто там мчится?

Я к вам уже пришла,

И много-много сказок

В корзине принесла.

Одну я переняла,

Да вам привезла

Называется…

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

У нашего Петрушки –

бубенчик на макушке

И всех веселее он.

У нашего Петрушки –

бубенчик на макушке

И сказок миллион.

Волшебный ларец открывается

И сказка для вас начинается

Хочу я вам сказочку рассказать,

Да о старых временах поведать,

А сказки складывались тогда  необыкновенные,

Вот послушайте…

Хохлатые хохотушки хохотом хохотали,

Когда сказку услыхали, к нам прибежали

Да сказку сказывать стали

Шел тропинкой старичок,

старичок-лесовичок.

Весь мохнатенький, сучковатенький.

Нес он сказки в корзинке,

А куда свернул с тропинки

Мы и не заметили,

А вы его не встретили?

Эту сказку когда-то рассказала баба деду,

Дед – соседу, сосед – куме,

Кума – вороне да сороке.

Сорока жить не могла, покуда всем не разнесла!

От нее и я знаю, да и вам расповедаю

Это случилось очень давно, Когда деды наших дедов были маленькими мальчиками,

А бабушки наших бабушек – маленькими девочками

Я веселый майский жук,

Знаю сказки все вокруг,

А сейчас не откажусь,

Еще послушать хоть одну

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

0aouujyymmcbx hqzzlul s2o0

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

Меня это удручает. Давайте попробуем написать что-нибудь полезное и при этом показать вам, что можно и чего не нужно делать с достаточно новой технологией Microsoft под названием Blazor.

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

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

Проблемы начались со вторым реле. В нём запросы надо было посылать в виде ASCII строки. А третье реле вообще требовало бинарного ввода на порту. Все программы по миганию гирляндами начали обрастать каким-то нездоровым количеством логики и превращались в костыли.

Было решено реализовать следующую программу:

  1. У нас есть список моделей различных реле.
  2. В списке мы указываем тип передачи данных и список команд, доступный для каждой модели.
  3. Создаём список устройств. Каждое устройство имеет отдельный IP-адрес, имя и название модели.
  4. На основе этой информации создаётся строка управления для каждой команды, каждого устройства, которая выглядит следующим образом:
    http://control-center/control/relay-lobby/port-1-turn-on
    http://control-center/control/relay-lobby/port-1-turn-off
    http://control-center/control/relay-lobby/port-2-turn-on
    http://control-center/control/relay-lobby/port-2-turn-off
    http://control-center/control/relay-lobby/port-3-turn-on
    http://control-center/control/relay-lobby/port-3-turn-off
    

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

Ладно, отбираем самых продвинутых учеников и идём писать.

Работать будем с последней версией Blazor для .NET 6.

Создаём пустой проект и идём заниматься проектированием. В принципе, в ТЗ всё достаточно хорошо описано, есть база данных, в ней есть реле, тут всё просто. Для базы данных мы возьмёмся за Entity Framework Core и будем использовать Code-Frist подход (то есть сначала мы пишем код, после чего фреймворк генерирует на основании этого кода базу данных).

База данных

Модель доступна здесь.

public class DataModelContext : DbContext
    {
        public DataModelContext (DbContextOptions<DataModelContext> options)
            : base(options)
        {
        }

        public DbSet<Model> Models { get; set; }
        public DbSet<Device> Devices { get; set; }
        public DbSet<Command> Commands { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Model>().ToTable("Model");
            modelBuilder.Entity<Device>().ToTable("Device");
            modelBuilder.Entity<Command>().ToTable("Command");
        }
    }

    public class Model
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public ICollection<Command> Commands { get; set; }
        public ICollection<Device> Devices { get; set;}
    }

    public class Device
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Address { get; set; }
        public int Port { get; set; }

        public int ModelId {get;set;}
        public Model Model {get;set;}

    }


    public class Command
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public CommandType Type { get; set; }
        public string Payload { get; set; }
        public Model Model {get;set;}
    }

    public enum CommandType
    {
        AsciiString,
        UtfString,
        ByteArray,
        Binary,
    }

Если вы никогда не видели ничего подобного, то давайте остановимся и подтянем знания. Перед вами — Entity Framework. Это фреймворк, который позволяет ускорить разработку баз данных для приложений, написанных на платформе .NET. Приложения, в частности, написаны на языке C#. В основном потому что для того, чтобы вы могли добраться до данных, вам предложено использовать функцию языка под названием LINQ (Language-integrated query).

Чем всё это хорошо? Тем что вы можете заботиться о своём коде в первую очередь и не париться по поводу базы данных. EF Core позволяет подключить вашу программу к различным базам данных, и вам не нужно будет учить синтаксис. Всё можно сделать в самом языке.

Чем это плохо? EF Core позволяет подключить вашу программу к различным базам данных, и вам не нужно будет учить синтаксис. Всё можно сделать в самом языке. В интернете вы найдёте множество баталий по поводу того, что подобный подход может шибко отразиться на производительности. И действительно, Join в SQL может выглядеть очень красиво и передавать вам в ответ только те данные, которые вы запросили. Если вы напишете кривой запрос на Linq, то вы можете в одну строку увалить целый кластер.

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

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

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

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

Frontend

Для тех, кто здесь в первый раз, давайте подтянем теорию. Blazor — это относительно новый фреймворк для создания сайтов, разработанный компанией Microsoft на основе open-source лицензии.

Основной прикол Blazor заключается в том, что всю логику на сайте вы можете написать на C#, без использования Javascript (чем мы здесь и займёмся в показательных целях). Сайт будет скомпилирован в WebAssembly, и вы сможете выложить его на сервер. Для тех, кто никогда не работал с WebAssembly, рекомендую почитать информацию — здесь.

Что это значит для разработчиков? Сайт представляет из себя несколько файлов — пустой HTML, небольшой JavaScript, который будет управлять сайтом, и приличный кусок кода на C#, скомпилированный в WebAssembly файл. Подобная файловая структура не требует никакого специального сервера для работы. Вы можете выложить это всё в открытый доступ на статическом сервере, без какой-либо платформы Microsoft, и всё будет работать.

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

Идея номер один — сайт написан на Blazor и у вас есть отдельный сервер для API, который позволяет дёргать функции удалённо через Web.

Идея номер два — Blazor может и не делать всего этого WebAssembly. Можно скомпилировать ваш код в библиотеку .NET и запускать его, как в старом добром клиент-серверном приложении. Код будет выполняться на сервере, а клиент будет обновлять страницу на экране, отражая изменения.

Именно этим подходом мы и воспользуемся.

Тут надо заметить пару вещей.

В старые добрые времена ASP.NET мы всё делали так — клиент нажимает кнопку на сайте. Весь сайт, представляющий собою форму, отправляется на сервер со всеми данными на экране. Сервер этот сайт обрабатывает, меняет его и выплёвывает обратно на экран. Всё это занимает меньше 10-ти секунд, и все этому рады в 2002 году. Но у нас на дворе 2021, и это нам не подойдёт.

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

Всё намного быстрее и работает за доли секунды. Нам такой подход будет удобнее, и им-то мы и воспользуемся.

Основной плюс Blazor заключается в том, что вам не нужно морочить себя тем, как передавать сообщения с сервера и на сервер. Всё сделано автоматически. Даже если вам захочется переключить своё приложение из Server-Side в Web Assembly, вам всего-то нужно поменять один параметр в конфигах.

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

Backend

Теперь перейдём к Backend, с которым мы будем работать. Как я уже сказал, у нас на руках есть код, который будет брать определённые последовательности символов и передавать их на реле. Этот код будет использовать .NET TCPClient для отправки данных. Обычно таким сайты не занимаются.

Для создания этого контроллера мы воспользуемся технологией ASP.NET Core MVC.

В принципе, сам код MVC предельно прост:

[Microsoft.AspNetCore.Mvc.Route("api/[controller]")]
[ApiController]
public class SendController : Controller
{
    [Inject]
    private IDbContextFactory<DataModelContext> Context { get; set; }

    public SendController(IDbContextFactory<DataModelContext> dmc)
    {
        Context = dmc;
    }
    
    [HttpGet("{Device}/{Command}")]
    public JsonResult Get(string device, string command)
    {
        try
        {

            CommandRunner c = new(Context.CreateDbContext());
            var answer = c.Run(device, command);
            return Json(new { result = "success", device = device, command=command, payload = answer });

        }
        catch (Exception ex)
        {
            return Json(new { result="error", message= ex.Message });
        }
    }
}

Мы просто определяем путь [HttpGet("{Device}/{Command}")]. Если пользователь заходит на сайт по этому адресу, то мы подразумеваем, что первая часть команды будет идентификатором устройства, а вторая часть — идентификатором команды, которую нужно послать.

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

Как вы видите, у нас также есть класс CommandRunner, который как раз и выполняет команды на сервере, отправляя пакеты на устройства. Давайте заглянем в этот класс.

Код CommandRunner.Run достаточно прост:

public string Run(String Device, String Command)
{
    var dev = DbContext.Devices.Include(p => p.Model).ThenInclude(p => p.Commands).First(p => p.Name.ToLower() == Device.ToLower());
    var com = dev.Model.Commands.First(p => p.Name.ToLower() == Command.ToLower());

    var answer = Executor.Say(com.Payload, com.Type, dev.Address, dev.Port);

    return String.Join(", 0x", answer);
}

А код Executor.Say в свою очередь выполняет следующее:

public static Byte[] Say(string What, CommandType Type, string Address, int Port)
{

    Byte[] bt = Type switch
    {
        CommandType.AsciiString => System.Text.Encoding.ASCII.GetBytes(What),
        CommandType.UtfString => System.Text.Encoding.UTF8.GetBytes(What),
        CommandType.Binary => ProcessBinary(What, 8),
        CommandType.ByteArray => ProcessBytes(What),
        _ => Array.Empty<byte>()
    };


    using TcpClient t = new TcpClient(Address, Port);
    var s = t.GetStream();
    s.Write(bt, 0, bt.Length);
    return bt;
}

Здесь мы преобразовываем строку символов в последовательность битов, байтов, ASCII или Unicode символов, в зависимости от того, что принимает на вход наше устройство.

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

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

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

  static Byte[] ProcessBytes(string What)
        {
            if (What.Length % 2 == 1) What += "0"; //If user sent us uneven byte count
            List<Byte> ret = new(What.Length/2);
            foreach (String ch in What.SplitInParts(2))
            {
                var d1 = Convert.ToByte(ch[0].ToString(), 16);
                var d2 = Convert.ToByte(ch[1].ToString(), 16);
                d1 *= 0x10;
                d1 += d2;
                ret.Add(d1);
            }
            return ret.ToArray();
        }

        static Byte[] ProcessBinary(string What, int WordLength)
        {
            List<Byte> ret = new(What.Length);
            foreach (var ch in What.SplitInParts(WordLength))
            {
                ret.Add(Convert.ToByte(ch, 2));
            }
            return ret.ToArray();

        }

После чего мы просто выплёвываем эту последовательность на адрес устройства и считаем свою задачу выполненной.

Итак, что же нужно знать o MVC фреймворке?

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

Это только присказка, сказка впереди

Итак, у нас есть базовый концепт приложения.

Всё хорошо, вокруг прыгают пони и поют птички. Всё работает.

Ага, как бы не так.

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

А пока что вы можете полюбоваться исходными кодами здесь.


— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS
— 20% на выделенные серверы AMD Ryzen и Intel Core — HABRFIRSTDEDIC.
Доступно до 31 декабря 2021 г.

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