Пару недель назад стали мы тут счастливыми заводчиками двух милейших сирийских хомяков.
Вот они.
Дочь назвала их Рыжик и Серик.
И внезапно оказалось, что они очень любят бегать! Никогда бы не поверила, если бы сама не увидела.
Мы повесили им в клетку колесо, и вот в 8 часов вечера хомяки просыпаются (они кстати ночные животные), выходят из своего домика, потягиваются, умываются, завтракают
и по-тихоньку идут на беговую дорожку.
Но сразу марафонскую дистанцию не бегут: сначала немного разомнутся, сменят друг друга, походят по клетке... а потом как втопят... Только лапки мелькают.
GIF
И вот так бегают попеременно до утра с перерывами на перекус и попить.
Супруг прикрепил к колесу два магнита и велокомпьютер, который считывает число оборотов колеса. И оказалось, что хомяки напару за ночь пробегают 13-14 км.
То чувство, когда даже хомяк бегает, а ты -нет
Сначала напрочь не могла понять их мотивацию. Зачем?? Потом почитала, и оказалось, что в природе хомяки постоянно бегают марафоны, спасаясь от хищников и в поисках еды. Бег способствует выработке хомячиного эндорфина и снижает уровень стресса.
Поэтому наши хомяки через какое-то время уверенно подходят к занятому колесу и прямо настойчиво требуют пустить их черёд побегать.
GIF
Так что всем желаю брать пример с хомяков и больше двигаться.
А засим низкий поклон всем прочитавшим, бодрости духа и здоровья.
Слово ивента такое, что как не крути, а на памятники или достопримечательности не налезет, при этом поучаствовать хочется. Посему решено в виде исключения притянуть актуалочку, а именно процедуру выборов папы римского.
Все начинается с того, что папское кресло становится вакантным, причем не обязательно в связи со смертью прежнего папы: в истории трижды бывали случаи, когда глава Католической церкви добровольно покидал престол (последним это в 2013 году сделал Бенедикт XVI, а предыдущая «отставка» папы произошла в 1415 году). Затем на Генеральную конгрегацию в Ватикане собирается коллегия кардиналов. Они обсуждают общие вопросы и будущих кандидатов.
Следующий этап — конклав. Он начинается спустя 15–20 дней
после смерти или отставки папы — в конце апреля стало известно, что в
2025 году конклав соберется 7 мая. Согласно действующим правилам,
принимать в нем участие могут только члены коллегии кардиналов моложе 80
лет. Таким образом, избирать преемника Франциска имеют право 135
кардиналов, представляющие около 90 стран, что делает грядущий конклав
самым представительным в истории.
Формально
стать римским папой может любой дееспособный мужчина-католик, вне
зависимости от сана (необязательно даже его наличие), однако на практике
понтифика выбирают из числа участников конклава.
Практика выборов нового понтифика на конклавах появилась гораздо
позже, чем институт папства. Предположительно, считающийся первым папой в
истории Святой Петр, а также несколько понтификов, занимавших Святой
престол после него, сами назначали своих преемников. Однако так
продолжалось недолго — вскоре понтифика стал избирать местный клир, так
же, как епископа любого другого города.
После
легализации христианства в Римской империи в IV веке ее правители
неоднократно вмешивались в процедуру выборов папы, а в VI веке император
Византии Юстиниан I
постановил, что новый понтифик не может быть возведен в сан без
одобрения светской власти. Этим правом пользовались как его преемники на
троне Византии, так и императоры Священной Римской империи. В X–XI вв.
Оттон I и Генрих III и вовсе назначали римских пап.
Отон I Великий точно знал кто в Риме "папа"
К идее проведения выборов понтифика на конклаве Церковь пришла спустя почти 100 лет, после того как в 1268 году скончался папа Климент IV. Тогда в расположенный к северу от Рима город Витербо, где была резиденция покойного понтифика, съехались 19 кардиналов, чтобы избрать его преемника. Ожидалось, что выборы продлятся не более нескольких недель, но в итоге они растянулись на два года и девять месяцев. Вероятно, кардиналы спорили бы еще долго, но раздраженные жители города решили ускорить процесс. Сперва они замуровали двери и окна во дворце, где заседали кардиналы, и ограничили рацион церковных иерархов хлебом и водой. Когда голод так и не привел к избранию папы римского, со здания сняли крышу. Наконец, в сентябре 1271 года продрогшие и голодные прелаты избрали папой участника Крестовых походов епископа Леона Теобальдо Висконти, принявшего имя Григория X. Двое кардиналов не дожили до этого события. Спустя три года созванный Григорием Второй Лионский собор одобрил процедуру избрания понтифика на конклаве, в целом дошедшую до наших дней и предусматривающую строгую изоляцию кардиналов, ежедневные голосования и ограничения в материальных благах до тех пор, пока не будет избран новый папа.
Перед началом конклава в соборе Святого Петра проводится
торжественная месса, а голосование кардиналов по традиции проходит в
Сикстинской капелле Апостольского дворца, которая тщательно проверяется
на наличие подслушивающих устройств. Перед тем как войти внутрь,
участники конклава торжественно клянутся, что процедура будет проходить в
атмосфере полной секретности.
Сикстинская капелла, (мечтаю побывать), не самое плохое место для заседаний
После того как прозвучат слова распорядителя extra omnes
(«всем выйти»), относящиеся ко всем, кроме кардиналов с правом голоса,
двери Сикстинской капеллы закрываются. Согласно действующим правилам,
внутри также могут находиться несколько священнослужителей,
сопровождающие кардиналов, медсестры и пара врачей.
В
первый день конклава может пройти один тур голосования, но он не
является обязательным — кардиналы могут посвятить этот день обсуждению
кандидатур. Во все последующие дни проводится до четырех туров
голосования: по два утром и днем. Для волеизъявления кардиналы получают
бюллетени с напечатанной фразой Eligo in summum pontificem («Я
избираю верховным понтификом»), под которой выборщики должны вписать
одно имя. На время заполнения бюллетеней помещение покидают все, кто не
обладает правом голоса.
Заполненные и сложенные бюллетени
кардиналы в порядке старшинства опускают в стоящую у алтаря чашу под
надзором трех членов счетной комиссии, состоящей из девяти кардиналов.
Состав этой комиссии определяется путем жеребьевки, которая проводится
ежедневно перед утренними и дневными турами голосования.
Прежде
чем опустить бюллетень, каждый кардинал, призывая в свидетели Христа,
клянется, что выбрал угодного Господу кандидата. Затем в чашу
отправляются бюллетени находящихся в Сикстинской капелле кардиналов,
которые не в состоянии сами отнести их к алтарю (это делает член счетной
комиссии), а также на всякий случай пересчитанные бюллетени из
переносной урны, с которой три других члена счетной комиссии обходили
комнаты кардиналов, не присутствовавших в капелле в момент голосования
по состоянию здоровья. Сегодня, как и в XII веке, стать новым понтификом может только кандидат, набравший не менее двух третей голосов участвующих в конклаве кардиналов. Если после четырех дней конклава, в течение которых могут пройти 6 или 7 туров, определить победителя не удается, в голосовании объявляется перерыв на день, который кардиналы должны посвятить молитве. Также к ним с призывом выбрать понтифика обращается кардинал-протодьякон. После следующих семи туров ситуация повторяется, но кардиналов вразумляет уже кардинал-протопресвитер, а если и следующие семь туров не помогают выявить победителя — кардинал-протоепископ.
Затем проводятся еще семь туров голосования. Если и они оканчиваются безрезультатно, то в гонке остаются только два кандидата, набравшие наибольшее число голосов в последнем проведенном туре. Сами они уже не могут принимать участие в голосовании, а победитель по-прежнему должен получить хотя бы две трети голосов, так что голосование продолжается до победного конца. Правила 1996 года позволяли выбрать папу простым большинством голосов после 33 (или 34, если голосование проводилось и в первый день) туров, но в 2007-м это послабление было отменено.
Бюллетени и другие документы, касающиеся каждого тура голосования на конклаве, отправляются в печь Сикстинской капеллы. Их сжигают немедленно после голосования в первый день, если оно проводится, и после каждой пары туров во второй и последующие дни конклава. О том, был ли избран новый папа, собравшиеся на площади Святого Петра католики узнают по цвету дыма, который идет из трубы Сикстинской капеллы: черный дым означает, что кардиналы не смогли выбрать достойнейшего, а белый возвещает об успешном окончании выборов.
А трубу то устанавливают совсем по простецки
Ранее для придания дыму нужного цвета использовали сухую или сырую солому, но теперь в печь подкладывают смесь серы, перхлората калия и антрацена для получения черного дыма и смесь канифоли, лактозы и бертолетовой соли, если дым должен быть белым. Однако при плохой погоде даже это не гарантирует, что цвет дыма можно будет определить однозначно. Во избежание конфузов с 2005 года в честь избрания папы тут же начинают звонить колокола собора Святого Петра.
дым можно делать по разному
По завершении последнего тура выборов декан коллегии кардиналов
спрашивает победившего кандидата, согласен ли он стать новым папой
римским и какое имя (в случае согласия) намерен принять. После этого
кардиналы клянутся в послушании новому главе Католической церкви,
которого отводят в смежную Комнату слез, где облачают в белые сутану и
шапочку пилеолус и в красные туфли. Чтобы одежда пришлась впору, портные
Ватикана заранее готовят три комплекта облачения разных размеров.
В это время кардинал-протодьякон выходит на балкон собора Святого Петра и произносит фразу Annuntio vobis gaudium magnum: habemus Papam
(«Возвещаю вам великую радость: у нас есть папа»). Следом на балконе
появляется и новый понтифик в белых одеждах, который обращается к
собравшимся на площади верующим с традиционным торжественным
благословением под названием Urbi et orbi («К городу и к миру»).
Пока искал информацию вспомнил о том, что после избрания папы проходили важную процедуру идентификации как мужчины
Будущего понтифика провожали в специальную комнату,
где его переодевали в простую белую рубаху. Затем его вели в зал, где
стоял тот самый знаменитый стул – Sella Stercoraria.
Процедура проверки имела два варианта исполнения.
По
первой, более публичной версии, избранный папа должен был сесть на
мраморное кресло с отверстием в центре сиденья. Камерарий, которому
выпадала эта деликатная миссия, должен был просунуть руку под сиденье и
нащупав соответствующие части тела, громко провозгласить историческую
фразу: "Mas nobis dominus est!" ("Наш господин – муж!"). После этого все
присутствующие кардиналы разражались аплодисментами и радостными
возгласами "uovo" ("ово"), что, по одной из версий, и дало начало слову
"овация".
По
другой версии, все кардиналы, присутствовавшие на церемонии избрания
Понтифика, должны были подойти и пощупать гениталии нового Папы
Римского. После этого провозглашались такие слова:
"Подтверждаю, яйца и пенис есть! ("Habet duos testiculos et bene pendentes")
Жаль что эта необычная процедура, которая просуществовала несколько столетий, была отменена
папой Львом X в начале XVI века. К тому времени она стала
восприниматься как архаичная и унизительная для достоинства папского
престола. Более того, сама легенда о папессе Иоанне, послужившая
причиной появления этой традиции, к тому времени уже подвергалась
серьёзным сомнениям.
Всем здравствовать! Сегодня по быстрому подведём итоги и выберем новое слово недели. Что-то как-то неожиданно много работы навалилось. Не забывайте, пожалуйста, переходить по ссылкам, все они кликабельны. Читайте, оценивайте, комментируйте, всё-таки народ не зря старается. 1. Фаерстартером прошлой недели, как ни странно, стал Генерал которого все знают, ну или почти все.
Ну вы, блин, даёте!
2. Вторым, на этот раз, стал наш мастер резьбы по дереву @kaktusovoe с его грустящим бабайкой. А почему он загрустил?
3. @dewqas напомнил нам про ещё одного генерала, оплота порядка и точности. Кто знает что за генерал?
4. А вот здесь, Ещё одно упоминание генерала! наш уважаемый @dewqas предлагает посмотреть КВН и немного погрустить от того, куда катится этот мир юмор.
7. А тут я попытался в электронную музыку, но как-то не особо получилось.
8. А вот наш товарисч @lovefst последовал моей рекомендации и влился в ивент с Генералами песчаных карьеров. Там не только клип, но и небольшая историческая справка.
10. Наш не частый, но всегда желанный участник ивента @Forest.river рассказала нам про свою нелегкую женскую долюнеравную борьбу с пассифлорами. Кто такие и чем закончилось знаете?
13. Пословицы, поговорки и цитаты от @ElenaSalut второй пост от новичка в этом деле (ивент Вомбата) Добро пожаловать! Только часть заснял, остальное лучше прочесть самостоятельно.
15. Да, генералами могут быть не только люди, но и поезда, например. А в качестве доказательства читайте Паровоз Генерал от @UrmasTormas Краткий экскурс в историю. Там ещё и видео прилагается.
А на этом всё, расходимся.
Ах да, нужно же новое слово выбрать. Барабанная дробь! Точно, оно же в заголовке прописано... нужно что-то придумать, не люблю спойлеры.
Ну всё, новое слово выбрали. Ждём множество новых историй с приятными или наоборот процедурами, а ведь тут не только массажные или медицинские процедуры можно притянуть ;-) Я серьёзно, давайте, давайте! Не стесняйтесь! Вливайтесь в наш Ивент Вомбата, вместе веселее!
Напоминаем правила ивента: 1. Раз в неделю, по понедельникам случайно генерится слово. Это слово будет основой для ваших постов. Неважно что вы сделаете, слепите, нарисуете, напишите стих с этим словом, расскажете анекдот, свою историю с этим словом, даже с помощью генератора мемов можно, абсолютно неважно.
2. Ивент с данным словом длится до следующего понедельника, когда будет озвучено новое, случайно сгенерированное слово.
3. Необязательно чтобы выпавшее слово было лейтмотивом. Ну например выпадет слово кит - может быть картинка загадка о морских существах, на которой изображен один кит, а найти надо дельфина. Или созданный комикс/мем, в котором вообще речь о другом, но на пряжке у героя изображен кит. Или может у вас завалялась история из жизни, где кит просто был второстепенным объектом, или названием бара где все происходило. Т.е. слово обязательно должно присутствовать в работе, но может не являться ее заглавной темой. А может и являться.
4. Все посты публикуйте под тегом "Ивент Вомбата" и "Процедура".
@vombat Ваша помощь требуется. Закрепите, пожалуйста, пост в соответствующем месте, а то у меня стремянка коротковата.
8:00. Звоню на 122. Отвечает голосовой помощник: "Здравствуйте, то-сё, какой у вас вопрос". И тут я простодушно допускаю ошибку №1: говорю, что хочу вызвать врача на дом.
Искусственный интеллект бодро переключает меня на автоответчик с алгоритмом создания заявки вызова врача на дом. И дальше эта срань, простите за мой китайский, медленно и подробно выспрашивает меня про номер полиса, ФИО заболевшего, дату рождения, ФИО законного представителя, адрес проживания, подъезд, этаж, домофон, симптомы, имеются ли какие-то ограничения по здоровью и прочее. Всё это каждый раз с повторным прослушиванием и моими многократными подтверждениями.
Потом, вдоволь наговорившись, ИИ переключает меня (!) на живого Оператора. Трубку берет женщина, которая выспрашивает у меня всё то же самое, один в один, опять-таки каждый раз требуя подтверждения. К концу 20 минуты разговора тётка задает свой коронный вопрос: имеются ли у заболевшего какие-то ограничения для самостоятельного похода в поликлинику? "У 4 летнего ребенка с температурой 38?" - уточняю я. "Да, инвалидности и прочие ограничения". Я чувствую подвох, но как честная говорю - таких ограничений нет. И дальше она выдаёт: перевожу вас на скорую помощь, досвидания. Типа, если очень надо, вызывайте их, а врача из поликлиники вам не положено.
Изрядно удивившись, извиняюсь перед скорой и объясняю, что нам неотложка не нужна и вообще это какая-то ошибка.
Опять звоню 122. Только теперь на все попытки ИИ узнать про мою проблему отвечаю: "Оператор", и через пару минут, снова пройдя верификацию 16 цифрами полиса, наконец слышу новую женщину-оператора.
В голове крутится мысль: как же пройти этого боса.. но на ум ничего дельного не приходит и снова следуют 10 минут подробного опроса. В финале коронная фраза: имеются ли у заболевшего какие-то ограничения для самостоятельного похода в поликлинику?
Тут я понимаю, что меня опять готовятся кинуть, и кричу, что нам просто нужен врач из поликлиники, почему вы это снова спрашиваете, зачем нужны были вопросы про адреса, телефоны и фамилии? И если нам врач не положен, то так и скажите, зачем морочить голову. Но женщина изворачивается, и снова три раза повторяет свой последний вопрос, уверяя, что это такая форма для выдачи заявки. Я опять говорю, что нет ограничений, женщина быстро произносит фразу про скорую и досвидания, и переключает меня дальше, в трубке щёлкает, и я отменяю вызов.
Ровно 30 минут разговоров с ботами впустую. Ощущаю себя, тем мужиком из мема, который кидается песком на пляже.
Дальше неожиданный хэппи энд. Звонит скорая. Спрашивают, что случилось, я объясняю, что 2 раза пыталась вызвать врача из поликлиники. Они задают ещё пару вопросов про самочувствие ребёнка и говорят, что вызовут нам участкового врача сами (у них есть такая возможность). И ещё добавляют, что сейчас творится что-то странное.
Мне приходит смс:
И днем приходит врач. Классный квест?
А вы говорите скучно жить в цифровом мире. Да обхохочешься.)))
Как ни удивительно, но развал СССР дал сильный толчок к развитию в РФ и странах СНГ методам криптоанализа, которые превзошли зарубежные аналоги.
При этом данные процедуры хорошо были изложены в учебной литературе для ВУЗов господином П.А. Трушевым.
К сожалению книга очень и очень дефицитная - ознакомится не удалось
Данные отечественные средства имеют высокую степень успешного взлома всех криптоалгоритмов, таких как DES, 3DES, AES, Blowfish, Twofish, Serpent, Кузнечик, Магма, ГОСТ 28147-89 и даже "одноразовый блокнот". Вероятность успешного взлома достигает 99.9%, причём одна десятая процента неудачных взломов образуется исключительно на подготовительных этапах - выбор носителя ключевой информации и выбора самой процедуры.
Что самое примечательное, то оборудование, необходимое для проведения данных процедур стоит копейки и реализуется через обычную розничную сеть:
Его величество ЭПСН 100ВТ 220В выполненный по ГОСТ 7219-83 "Терморектальный криптоанализатор, устройство, принципы действия, технические условия производства".
Различают два способа проведения процедуры криптоанализа:
1. Терморектальный криптоанализ - прибор непосредственно применяется к «цели» УЖЕ прогретым до рабочих температур, что обеспечивает высокую скорость и точность взлома шифра, однако в этом методе имеется недостаток - носитель криптоключа будет значительно повреждён и в некоторых случаях это может привести к его непреднамеренному уничтожению до окончания процедуры взлома.
2. Ректотермальный криптоанализ - тот же прибор изначально вводится в "целеуказатель" и только потом начинается его прогрев. Применяется при работе со старыми, имеющими дефекты вспомогательных систем (сердце, сосуды и т.п.), т.е. там, где есть риск непреднамеренного уничтожения носителя ключевой информации, работая по первому способу. При этом эффективность несколько ниже, а время проведения криптоанализа увеличивается.
Замечено множество случаев, когда при проведении этих процедур добывалась ключевая информация даже если носитель ею не обладал.
Некоторые факты о б этом приборе:
* При использовании терморектального криптоанализатора скорость перебора пароля прямо пропорциональна квадрату температуры.
* В отличие от разработок западных ученых, использующих для взлома пароля сложные технические изделия, терморектальный криптоанализатор использует обычную бытовую сеть 220 Вольт/50 Герц и не требует специальной технической подготовки оператора.
* Сложность задачи в случае использования криптоанализатора не зависит от длины ключа и типа используемого алгоритма шифрования.
* Есть свидетельства успешных взломов даже если носитель ранее не обладал ключевой информацией, изучив данные свидетельства Донецкий завод паяльников выпустил новую и улучшенную серию полиграфов «Электровспоминатель-3000».
Зарубежные системы криптоанализа не так эффективны и сложны технически, доказательство ниже:
Информация, представленная в этом посте получена из достовернейших источников: 123
Пришла мне недавно новая деревяшка с которой ранее я не работал. Называется криптомерия.
Это вечно-зеленое дерево из семействах кипарисовых.
Вот такой кусок приехал
А тут у меня как раз просили сделать хомяка, который, как я думал уйдет в долгий ящик, но тут хотелось попробовать новую деревяшку на зуб, и в итоге вот он хомяк, готовенький.:)
Сама порода, кстати, не трудная, но и приятной назвать не могу, мягкая, как сосна и слоистая, как сосна со всемя вытекающими отсюда сложностями, но за счет этого и текстура в итоге офигенная
Мне уже сказали пара человек, что это медведь, которого покусали пчёлы, а не хомяк, а я все равно в нем медведя не вижу, и в целом доволен результатом, что бывает не часто:)
Косматый хомяк — это не тот жалкий зверёк, что прячется в уголке клетки и клянчит морковку. Он бродит по лесу как хозяин положения, ведь даже леопарды не рискуют с ним связываться! Всё потому, что это единственный в мире ядовитый грызун. Один раз попробуешь его укусить — и вот уже вегетарианство не кажется такой плохой идеей.
Косматый хомяк, или хохлатая крыса — название своё он вполне оправдывает. Это достаточно крупная для своего семейства зверушка, весом чуть меньше килограмма. Выглядит он как нечто среднее между дикобразом, скунсом и чем-то из страшилок про «не гладь — рука отвалится!». Густой чёрный мех с продольными белыми полосами торчит во все стороны, будто зверек уснул с мокрой головой. Но не ведитесь на его неряшливо очаровательный вид: природа серьёзно вооружила эту мохнатую подушку с глазками.
Хомяк никогда не нападает первый, строить из себя героя он тоже не станет. Грызун просто повернется боком и подождет, когда глупый хищник сам себя отравит. Всё потому, что у хомяка нет ядовитых когтей или клыков для активной обороны. У него ядовитая... шерсть! И бонусом очень толстая плотная кожа. Грызун специально подставляет бочок, ведь он точно знает, что первый укус станет и последним.
Шубка хомяка пропитана токсичными гликозидами. Попадая в организм, яд заставляет сердце хищника выпрыгивать из груди. Не из жалости, а в буквальном смысле: сердечный гликозид уабанин нарушает работу главного насоса в организме, сбивает его ритм, а потом и вовсе вызывает остановку. На сдачу идут тошнота, затруднённое дыхание, падение давления и судороги.
Токсинов из меха вполне достаточно, чтобы убить взрослую собаку крупных размеров. С леопардами, конечно, таких экспериментов не проводили, но, судя по всему, большой кот не станет рисковать своим сердцем ради ядовитого куска меха и килограмма костистого мяса. Единственные хищники косматых хомяков — это совы. То ли яд на них не действует, то ли они просто умеют снимать шкурку перед едой, но факт остаётся фактом.
Истинно-ядовитых млекопитающих можно пересчитать по пальцам одной руки. Вырабатывать отраву муторно, а использовать — не всегда эффективно. Но косматые хомяки решили играть по-своему: они не тратят энергию на выработку яда, они его берут взаймы. Животинки жуют кору токсичного дерева акокантера и потом слюнявят свою шерсть на боках и спине. Волоски в этих местах имеют особую пористую структуру, они как губка впитывают токсичные соединения и хранят его, пока кто-то не покусится на хомячиий бочок.
При этом сами грызуны достаточно милые и спокойные. Они живут в тихой глуши, в глубине восточноафриканских лесов. Жуют себе листики-цветочки, ловят сонных насекомых и собирают сладкие плоды — график скорее для пенсионерки, чем для токсичного рокера-металлиста, коим зверь кажется на первый взгляд.
Даже семейная жизнь у хомяка образцово-прилежная. Это один из немногих грызунов, у которых образуются постоянные моногамные пары. Звери живут семейными группами из мамы, папы и дочек-сыночек. Их, кстати, появляется совсем немного: в одном помете всего 1-3 детенышей. Малышня медленно растёт и долго остаётся с родителями.
Для людей косматые хомяки не представляют большой угрозы, если не пытаться их облизывать, конечно. В остальном это тихие и милые зверушки, которым наоборот, угрожаем мы. Хомяки медленно размножаются и сильно зависят от деревьев. С современными темпами вырубки леса и всем остальным антропогенным вмешательством грызуну от этого не очень хорошо, хотя сейчас виду ничего не угрожает.
Не рекомендуется принимать данную статью близко к сердцу или как истину в последней инстанции. Скорее как научпоп-грелку для мозгов. Тут довольно много упрощений, упущений или просто странно написанных моментов. Если что-то объяснено совсем криво, то добро пожаловать в комментарии.
Все сказанное далее применимо везде, но детали описаны для защищенного режима x86 (только я опустил префиксEдля регистров) и языков семейства C (в основном C и C++, местами C#). Для понимания рекомендуется знать про указатели и базово представлять, что происходит в процессоре.
Приятного чтения.
Думаю все помнят, что такое функция в математике
Начнем со сложного
Глоссарий
Чувствую, что большинство не имеет ни малейшего представления об указателях
В части про x86 я упоминал о том, что процессор представляет из себя бешенный самоуправляемый калькулятор, которому указом может быть разве что хранилище кода, аппаратный сброс и немаскируемое прерывание. И что у него есть системная шина, состоящая из шины адреса, шины данных и шины управления, к которой подключена память, хранящая данные и код.
А память это огромная одномерная полоска, в которой каждая ячейка имеет свой порядковый номер от 0 до 2^(разрядность шины адреса)-1. И указатель представляет из себя самую обычную численную переменную, хранящую номер (адрес) любой ячейки.
Я не понимаю, почему для многих это настолько сложная тема, а существенное количество новичков забрасывают изучение C после встречи с ними. Они в своей сути максимально элементарны (до тех пор, пока не нужно исправлять уязвимости и ошибки, которые появились в результате злоупотребления или неполного понимания нюансов).
Также существуют ссылки, так или иначе представляющие из себя подвид указателей, но обычно с запретом на арифметику с ними (основная сложность и опасность указателей) и/или подсчетом количества активных ссылок для сборки мусора.
Все языки или имеют указатели (Pascal, C, C++, блоки unsafe в C# и Rust), или являются ссылочными (Java, C#, Python, JS, т.д. (почти все современные языки)). С++ тоже имеет ссылки, но как синтаксический сахар над указателями, призванный упростить их передачу в функции и избавиться от проблемы нулевых указателей.
Ассемблер - если вы даже примерно не знаете, что это такое, то первую часть статьи вероятно можно пролистать и перейти на обсуждение парадигм.
Регистр - именованная численная переменная внутри процессора. Может иметь особое предназначение, а может просто использоваться для хранения любых чисел и арифметики. Их немного.
Инструкция - одиночная команда, представляет из себя последовательность из нескольких байт со специальным значением. Любая программа представляет из себя последовательность инструкций внутри памяти. Указатель на инструкцию, которая будет выполнена следующей, содержится в регистре IP, который сам увеличивается после выполнения каждой инструкции. По-хорошему стоило нарисовать пошаговую наглядную анимацию с демонстрацией всех регистров и куском ассемблерного кода, но мне лень, а в гугле я ничего толкового не нашел.
Метка - константа, содержащая адрес чего-либо. К примеру процедуры или глобальной переменной. Примерно как метка для goto в высокоуровневых языках, но универсальнее. Применяются при написании на ассемблере, в процессоре как таковые не существуют и разрушаются до обычных чисел при ассемблировании и линковке.
Разыменование - операция над указателем, когда тот превращается в переменную с адресом, который был записан в указателе (своеобразный пульт Д/У для переменной).
Парадигма - "стиль" написания и постройки архитектуры программы, частично определяется языком. Технически на том же C можно писать в практически любой парадигме (через костыли можно писать в стиле ООП, через макросы реализовать метапрограммирование, а через нестандартные расширения вообще ядерный бред), но родная для него - процедурная. А Go, к примеру, хоть и имеет недоклассы и методы, но лишен практически всех благ ООП и не сильно далеко ушел от C.
Синтаксический сахар - необязательная возможность, которая сокращает количество кода, повышает его читаемость или удобство поддержки
Стек
Большинство процессоров Фон-Неймановской архитектуры в своей конструкции предлагают механизмы стека. Кто играл в покер должны вспомнить стеки фишек. То есть некие значения, сложенные друг на друга (обычно это переменные, в частности адреса в памяти). При этом основными операциями являются добавление фишки на вершину (инструкция PUSH) и ее снятие (инструкция POP). Еще можно косвенно читать и заменять (перезаписывать) фишки относительно вершины (на вершину указывает регистр SP, неявно обновляется через POP и PUSH) или основания (указывает регистр BP) вглубь.
Стеки можно переключать (но не в MOS6502), это нужно для многозадачности
Помимо хранения локальных переменных стек позволяет делать довольно интересную вещь: мы можем положить на стек все необходимые аргументы (x в математике, но их может быть несколько), адрес следующей инструкции (взяв из указателя инструкции IP, это будет адрес возврата), после чего совершить прыжок на какой-нибудь другой адрес (сохранение адреса и прыжок делаются инструкцией CALL).
А на этом адресе может быть функция. Сначала она кладет текущий BP на стек, после чего приравнивает основание к вершине (BP к SP), тем самым создав для себя "новый стек" сразу после предыдущего (это еще называется стековым кадром), в котором якобы лежит только значение старого основания стека (BP), чтобы можно было восстановить его перед возвратом.
Серое это стековый кадр от предыдущей функции
После чего функция может прочитать переданные ей аргументы относительно основания своего стека вниз (технически это будет выход за границы текущего стека), выполнить с этим какие-либо действия (записать в файл, вывести в консоль, просто перемножить) и сохранить результат (обычно результат сохраняется не на стек, а в регистр AX).
После чего функция восстанавливает старое значение BP, сняв его со стека, и выполняет команду RET, которая снимает со стека адрес возврата и совершает переход на него, тем самым переключившись на инструкцию сразу после CALL.
И эта система так или иначе перекочевала в большинство высокоуровневых языков начиная с FORTRAN. К примеру в C CALL превратился в круглые скобки, RET в return, а адреса и метки в имена (при этом без скобок они все еще являются указателями, то есть адресами).
Пример кода (к сожалению, штатного форматирования не предусмотрено):
#include <stdio.h> int pow2(int x) { return x * x; } int main() { int y = pow2(16); // Вызов функции. В y будет сохранено число 256 printf("%p", pow2); // Без скобок вместо вызова просто выведет адрес функции return 0; // Возврат нуля из главной функции означает отсутствие ошибок. }
Такой стиль программирования называется процедурным (выделение кода в блоки называется структурным). А вот называть процедурный язык функциональным совершенно неправильно, ибо функциональное программирование ≠ процедурное, они даже в разных категориях (императивное и декларативное).
А теперь скомпилируем этот код и разберем ассемблерный листинг
Важно понимать, что стек в большинстве архитектур традиционно растет от больших адресов к меньшим (и в x86). То есть для того, чтобы отодвинуть его вершину вверх, от регистра SP нужно отнимать значения, а вот для ужимания и съедания ненужных значений к указателю на вершину значения прибавляют. И для доступа к значениям относительно основания или вершины это тоже важно учитывать. Это может звучать запутанно, но через время привыкаешь и всё становится очевидным.
Надеюсь это возможно будет разобрать. Код скомпилирован MSVC v19.28 для x86 со стандартными настройками в Godbolt
Post scriptum
Это всё довольно упрощенно. Как минимум, в защищенном режиме используется больше 5 разных соглашений о вызове, которые отличаются деталями реализации. Это было описание для cdecl, обычно используемого в C. Еще часто используются соглашения pascal, fastcall, thiscall, winapi и другие. Fastcall, к примеру, избегает хранения аргументов на стеке, если их возможно передать через регистры, что улучшает производительность. А winapi отличается от cdecl тем, что функция сама очищает стек от аргументов для себя при возврате. А еще я упустил, к примеру, сохранение регистров, которые функция может перезаписать и испортить, а потому обязана предварительно сохранить и перед возвратом восстановить, передачу переменного количества аргументов (как в printf) и возврат значений шире 32 бит (которые не влезут в EAX).
Плюс сейчас мало кто компилирует ПО под защищенный 32-битный режим, а в длинном режиме (AMD64) используется пара других соглашений, основанных на fastcall и имеющих несколько отличий друг от друга.
Так процедура или функция? Или подпрограмма?
Процедурное программирование предлагает делить код на подпрограммы, которые принято называть функциями и процедурами (функция обычно является наиболее понятным, частым и обобщенным названием, поэтому я его использую).
Процедура от функции отличается только тем, что функция возвращает какое-то значение (как в математике), а вот процедура этого не делает. Не во всех языках явно есть процедуры (в Pascal есть, но не в C). В таком случае их заменяют функции, возвращающие ничего (void, Unit, undefined, None).
Хотя и тут есть свои особенности. К примеру функция, возвращающая void в C и Java является прямым аналогом процедур, как-либо использовать возвращенное значение из такой функции невозможно, ибо его нет физически. А вот Unit в Kotlin это синглтон (а-ля единственная и уникальная константа уникального типа), ссылку на который можно присвоить в переменную, но в этом особого смысла нет. Undefined в JS и None в Python тоже уникальные константы специальных типов.
Но не тут-то было
Вроде бы процедура никогда не может ничего вернуть...
Только она этого никогда не делает напрямую. При она этом может записать результат в глобальную переменную, а еще часто принимает в себя указатели или ссылки, по которым может записать результат. Это еще удобно тем, что можно "вернуть" несколько значений. Пример:
void procedure(int x1, int *x2, int *x3) { // Функция ничего не возвращает, то есть это процедура *x2 = x1 * x1; // Разыменовываем указатель и записываем по его адресу результат. *x3 = x1 * x1 * x1; // Разыменовываем другой указатель и записываем по его адресу результат. } int y1, y2; procedure(16, &y1, &y2); // В y1 оказался результат, аналогичный прошлому примеру. А в y2 куб числа.
PS: оператор звездочка при указании типа превращает его в тип-указатель, а при применении на переменную-указатель разыменовывает ее до изначальной переменной. Амперсанд превращает переменную в указатель на нее (иногда еще называется оператором получения адреса).
То есть мы вернули сразу 2 разных значения из процедуры, которая якобы ничего не возвращает. Чудеса. Подобные чудеса есть в том числе в Pascal с явным делением на процедуры и функции (плюс там это сделано немного удобнее). Хотя механизм тут отличается от того, который используется в возврате значения из функции и совпадает с механизмом передачи обычных аргументов, поэтому никакой магии.
Еще про связь с математикой
Главное отличие функций в программировании от функций в математике в том, что они могут делать что-то на стороне и не обязаны возвращать одинаковый результат при одинаковых аргументах.
К примеру функция получения случайного числа по определению не может существовать в математике, если она не принимает в себя предыдущее случайное число или зерно для его видоизменения. Или функция записи в файл, возвращающая 0 в случае успеха и другое число при провале. Ко всему прочему, такая функция имеет побочный нематематический эффект, то есть запись в файл, что тоже недопустимо традиционной математикой без высоких абстракций.
Поэтому придумали чистые функции. По сути это ограничитель, которые делают функцию полным отражением таковой в математике. Им запрещено возвращать разные значения при одинаковых аргументах (точнее запрещено всё, что может такое позволить сделать), запрещено обращаться к нечистым функциям, запрещено обращаться к тому, что не является аргументом или локальной переменной, запрещены вообще любые действия, которые могут сделать что-то на стороне (даже функция sin() в C не всегда является чистой, ибо может зависеть от состояния FPU).
Чистые функции через ключевое слово pure явно есть в D и FORTRAN (проверка на чистоту во время компиляции), а также являются основой функционального программирования.
Чистая процедура тоже имеет право на жизнь, используя механизм со ссылками (на счет указателей не уверен из-за возможности арифметики над ними).
Функциональное программирование
Это очень сложная категория, которую постоянно путают с процедурным программированием. А еще это де-факто противоположный стиль: декларативный. Традиционное императивное программирование детально описывает процесс получения результата, а декларативное сам результат, без деталей реализации (хотя разделение обычно довольно нечеткое). При этом второй типичен для языков разметки типа HTML и CSS. То есть, условно, как одна и та же операция могла бы выглядеть в императивном и декларативном стиле:
document.tags.A.color = "blue" /* Императивный (JSSS). Сделать ссылки синими */
a { color: blue } /* Декларативный (CSS). Ссылки должны быть синими */
Почувствуйте разницу.
И функциональное программирование я никогда не изучал и слишком мало о нем знаю. Так что готовьтесь к ошибкам и не воспринимайте всё за чистую монету.
Внутри чистого функционального программирования
Основано полностью на математике, все функции обязаны быть чистыми. Операция присваивания запрещена (разрешены константы), переменных в привычном виде нет. Прикольно? Очень!
Во многих процедурных языках функции и процедуры являются объектами второго класса (не путать с классами из ООП), что не позволяет их свободно присваивать в переменные, передавать как аргументы в другие функции или возвращать из них (только через указатели). Функциональные языки расценивают функцию как объект первого класса, то есть их можно, а часто нужно передавать в другие функции напрямую.
Это дает некоторые преимущества, особенно в плане безопасности и при работе с многопоточностью (по причине неизменяемости данных и отсутствия глобального состояния), но вся концепция имеет один фатальный недостаток: вы мало чего полезного можете сделать, ибо что ввод, что вывод являются математически нечистыми, а потому запрещены. Вот такое вот гениальное изобретение безумных математиков.
Функциональное и процедурное программирование. Холст, масло
Каждый чисто функциональный язык выкручивается из этого по-своему, к примеру через монады. Это позволяет им существовать вне шуток и даже использоваться на практике.
Это не все особенности функциональных языков, но одни из самых важных. Самый известный такой язык: Haskell. Функциональные F#, Lisp, ML и многие другие не являются 100% чистыми.
Смешанное функциональное программирование
Последнее время часто используются смешанные языки, к примеру вместе с процедурным или объектно-ориентированным программированием, что избавляет от ограничений математики, но дает гибкость в том, что функциями можно оперировать как с любыми другими типами данных, а еще дает много очень удобного сахара вроде замыканий и лямбд. Это C#, Python, JS, частично Java и C++ (в них нужны костыли в виде интерфейсов из одного метода или оберток над указателями).
Особенности
Функции как объект первого класса. К примеру в C# это реализовано через систему делегатов, которые представляют из себя тип-обертку для функций:
Action<string> printer = Console.WriteLine; // Action<string> - тип-делегат. Неявно создаем его объект и присваиваем туда функцию printer("Hello, World!"); // Вызываем функцию через делегат
Локальные функции: как обычные, только вложенные в другую функцию (объявленные внутри нее)
void Func1() { // Глобальная функция void Func2() { // Локальная функция Console.WriteLine("В локальной функции"); } Func2(); }
Лямбды: возможность объявить безымянную функцию посреди кода (часто удобнее локальных)
var pow2AsLambda = x => x * x; // => - оператор лямбда-выражения pow2AsLambda(5); // Вернет 25
Замыкания (можно использовать вместе с лямбдами и локальными функциями):
int someValue = 42; var pow2AsLambda = x => x * x + someValue; // someValue будет захвачено замыканием, хотя напрямую не передано pow2AsLambda(5); // Вернет 67
Особенность замыканий в том, что они могут захватить локальную переменную родительской функции внутрь себя, продлевая ей время жизни за пределы блока с кодом. После чего такую лямбду можно передать в другую функцию, которая просто так не имеет доступа к someValue (в обычных условиях someValue вообще уже будет уничтожен), а вот переданная лямбда сможет ее прочитать или записать всегда и откуда угодно. И самое интересное то, что значение этой переменной будет сохранятся между вызовами к замыканию. То есть она становится глобальной, но видимой только из функции-замыкания.
ООП
Посмотрим на индекс TIOBE по популярности языков. Фиолетовым я пометил чистые функциональные языки. Языки, имеющие возможности, присущие функциональным языкам (смешанные) - синим, процедурным - красным, а объектно-ориентированным (ООП) - зеленым. Языки, в которых нельзя объявить функцию, принадлежащую самой себе или модулю, процедурными считать не совсем корректно (Java).
Не претендую на 100% точность
Видите фиолетовые точки? И я не вижу. А вот синих 12. В то же время красных и зеленых по 16. При этом реально применяемый чисто процедурный язык всего 1: С. Остальные имеют какую-либо встроенную поддержку других парадигм.
И сейчас практически всё большое ПО пишут в ООП. Ибо позволяет хоть как-то сдерживать структурированность кода после перехода с десятков тысяч строк к сотням (и миллионам).
Внутри
ООП является развитием идеи процедурного программирования. Проблема была в том, что помимо кода в программе существуют еще и данные, которые было бы неплохо связать с соответствующим им кодом. И через некоторое время после появления процедур появились структуры (они же записи в Pascal, не путать со структурным программированием).
Структуры были удобным способом объединить несколько переменных в единое целое. Пример:
typedef struct user_struct { char *username; int userid; int reputation; } user_t; user_t someuser = { "IvanKr08", 17002, 253 }; // Инициализируем значениями someuser.reputation += 10; // Обращаемся к полю
(Вместе с этим объявляем структуру новым типом через typedef, что не делается по умолчанию в C, в отличии от C++. Один из ярких примеров несовместимости C и C++):
После чего user_t превращается в новый тип, как int или char. Можно создать полноценную переменную типа user_t (или массив такого типа), а потом обратиться к какой-нибудь ее части (полю) через оператор точки (.). Можно сделать функцию, которая будет принимать или возвращать переменную типа user_t (к примеру someuser). Можно сделать указатель на user_t, тогда для обращение к полю используется оператор стрелки (->). Или можно встроить переменную типа одной структуры в другую, это тоже не запрещено. Внутри структурная переменная представляет из себя последовательно слепленные поля в одно целое.
Если поля разного размера, то часто добавляют пустоты между полей в целях выравнивания по размеру наибольшего поля и улучшения производительности, но это сложная тема
Возвращаемся к ООП
Суть ООП в том, что помимо полей структуры могут содержать процедуры и функции. Такая структура называется классом, переменная класса - объект, а процедура класса - метод.
Метод принципиально ничем не отличается от любой процедуры или функции, кроме того, что неявно принимает в себя специальный аргумент this (в Python это делается явно, в некоторых языках вместо this может быть self). Он содержит в себе ссылку/указатель на объект класса, от которого был вызван. Пример:
class User { public: char *username; int userid; int reputation;
void print() { printf("Пользователь \"%s\" (%i). Репутация: %i\n", this->username, this->userid, this->reputation); // Постоянно писать this-> не обязательно. Если локальной переменной с таким именем нет, то будет произведен доступ к полю } }; User someuser = { "IvanKr08", 17002, 253 }; // Инициализируем значениями someuser.print(); // Вызвали метод, print() неявно получил в себя указатель this, который указывает на someuser someuser.reputation += 10;// Обращаемся к полю someuser.print(); // Теперь вывод поменяется
Да, никто не мешает объявить обычную функцию, которая будет явно принимать в себя указатель на User и ничего не поменяется, и так повсеместно делают в C (тот же WinAPI на этом построен целиком и полностью), но ООП на самом деле крайне сложная, большая и холиварная тема, которая развивалась на протяжении 60 лет в разных направлениях и которую поднимать тут глупо. Только опишу еще несколько разновидностей методов:
Статичный метод - как обычный метод, только не получает в себя this и вызывается от имени класса, а не объекта (не someuser.method(), а User::method()). Зачем это нужно и в чем отличие от просто функции? Статичный метод можно спрятать за инкапсуляцией, плюс он привязан к классу, а не болтается в глобальном пространстве имен.
Конструктор - автоматически вызывается при создании нового объекта. Может иметь аргументы, тогда обязан явно вызываться как функция с именем класса, т.е. User("IvanKr08", 17002, 253)
Деструктор - есть в C++. В C# называется финализатором и имеет несколько важных отличий. Автоматически вызывается перед уничтожением объекта (к примеру выход из области видимости, явное удаление оператором delete или удаление сборщиком мусора в C#). Не может иметь аргументов.
Свойство - есть в Delphi и C#, куда перешел от первого. С точки зрения синтаксиса это поле, которое можно читать и записывать, только вместо прямого обращения в память вызываются соответствующие методы (set и get). Пример: ... int SomeProperty{ get =>42; set => Console.WriteLine("Set"); } ... test.SomeProperty = 10; // Значение никуда не сохранится, будет выведено "Set" в консоль Console.WriteLine(test.SomeProperty); // Всегда будет 42
Перегрузка оператора - специальный метод, который позволяет переопределить стандартные операции для типа. К примеру нельзя сложить два объекта User или User и число, но если перегрузить оператор +, то можно будет определить свою логику для этого (не обязательно, чтобы оно что-то реально складывало. Это может быть любое действие).
Индексатор - синоним перегрузки оператора квадратных скобок. Объект начинает вести себя как массив.
Функтор - перегрузка оператора круглых скобок (иначе называется перегрузкой оператора вызова функции). Позволяет "вызывать" объект так же, как и функцию. Звучит запутанно, но можно погуглить. Есть в C++. Также бывает функтор в функциональном программировании, но он не имеет ничего общего с функтором в C++.
Виртуальная функция (метод) - самый интересный и сложный тип, составляет основу полиморфизма. Вкратце объяснить его невозможно, но одним из ключевых принципов ООП является наследование, то есть один класс (наследник) копирует в себя все поля и методы другого класса (родитель), и может добавить новые. И суть в том, что указатель (ссылка) на объект класса-наследника может быть присвоен в переменную-указатель родительского типа. А самое интересное то, что любые обращения (к примеру вызовы методов), сделанные через родительский указатель, будут вести себя аналогично обращениям, сделанным напрямую через указатель с типом наследника. Это называется полиформизмом. Но это было бы не слишком полезным, если бы не возможность объявить метод в родительском классе виртуальным, а в наследнике полностью переопределить его код.
И то, что я забыл
Послесловие
Если вы осилили эти 3000 слов и даже смогли что-то понять, то найдите и распечатайте себе утешительную грамоту. А я устал и пойду искать смысл жизни...
UPD: исправлены косяки форматирования, очепятки, добавлено еще пару пунктов про разновидности методов и функциональное программирование.
Исследователям из Токийского университета удалось перенести хлоропласты из растительных клеток в живые клетки хомячка.
Честно говоря, они сами не особо верили, что у них всё получится. Японцы ожидали, что животные клетки переварят растительные запчасти за несколько часов, но те продержались более 2 суток. И они даже выполняли свои функции! Теперь учёные поставили перед собой задачу увеличить срок работы хлоропластов внутри животных клеток.
Такие гибридные клетки никогда не смогут прокормить животное – слишком уж низкая скорость синтеза сахаров. Но они могут увеличить срок жизни искусственных тканей, дать им больше времени для «врастания» в организм.
В московском Люблине ввели карантин из-за вспышки бешенства у животных. Ветеринары объяснили, что причиной проблемы стали два домашних хомяка, которых ей купил отец в зоомагазине 15 сентября. Грызунов привезли в Москву из Краснодарского края, сообщает сайт MK.Ru со ссылкой на хозяйку хомяков Машу.
Хомячки Нэззи и Питча обошлись по 550 рублей каждая. Вторая, по словам девочки, изначально была вялая и сонная, но в магазине утверждали, что хомячиха воспрянет духом, если Маша будет заботиться о ней. Хозяйка со всей ответственностью подошла к вопросу: вымыла клетку, кормила и поила подопечных, а также купила песок, которым они чистятся.
Поникшая хомячиха с течением времени не становилась веселее — не хотелось даже крутиться в колесе вместе с Нэззи. Однажды поздно вечером девочка услышала истошный визг из клетки. Прибежав на хомячий крик, она увидела Питчу и ужаснулась.
У неё вся мордочка в крови, судороги, реально, как будто бы её изнутри что-то разрывает… она язык себе откусила. Я испугалась и маму позвала. Мы срочно ночью вызвали частного ратолога (ещё никто ехать особо не хотел) за 16 тысяч рублей, он осмотрел Питчу и сказал, что ничего страшного и у неё аллергия на песок
Хомячихе назначили курс лечения, от которого ей стало только хуже. 16 октября у неё начала выпадать шёрстка, а затем она стала от чего-то мокреть и вдвое уменьшилась в размерах. Спустя некоторое время Питча умерла, после чего её отдали в лабораторию. Через несколько дней подтвердился факт наличия у грызунов бешенства. Всей семье сделали прививки. Специалисты начали искать всех владельцев «заражённой партии» хомяков, однако из более 80 особей нашли лишь 20.
Хорошо, что у меня мама врач и вовремя забила тревогу. А кто-то просто возьмёт и выкинет умершего хомячка на помойку, а там собаки, крысы и кто угодно вообще
Как создать себе проблемы на пустом месте и поучаствовать в куче процедур. Пост из серии «могу, умею, практикую!». Когда я увидела слово «процедура» - сразу же запахло больницей и вспомнилась эта история.
Начните день с опоздания на экзамен, который не удался накануне. Осознайте, стоя в пробке, что вы не успеваете доехать до места. Припаркуйте машину прямо там, где вы стоите в пробке, просто свернув в ближайший двор, на единственное (пусть и подозрительно) свободное место на парковке.
Бегите бегом. Успейте во время, сдайте экзамен (пока все хорошо и день обещает быть отличным). Осознайте, что ноет зуб мудрости. Дозвонитесь до своего стоматолога и узнайте, что эта замечательная женщина в отпуске. Найдите другого доктора по рекомендации. Запишитесь к проверенному доктору.
Поймите, что у вас есть целый час до ужаса ужасного, примите решение выпить кофе и почитать книгу, позавтракать, чтоб не умереть от страха перед болью в Кресле дантиста в ближайший час.
Дойдите до машины - вуаля,магическим образом на стене метрах в четырех от земли заметьте его, знак - ♿️-подло притаившийся в недоступном для взгляда водителя месте (и да, вас эвакуировали).
Побегайте в панике и криками «что делать? Куда бежать?», ведь до этого вас ни разу не эвакуировали (мы же не нарушаем ПДД, я серьезно, не нарушаем).
Прогуляйтесь до ГАИ, осознайте что все документы в бардачке, а твоя дырявая голова не содержит файла с пометкой «номер моей машины». Да, я девочка, и машинка у меня «зелененькая».
Приехать на штрафстоянку под мостом возле ТЦ. Ведь добрый дяденька в ГАИ сказал, что с той улицы всех коней отвозят сюда. На штрафстоянке вежливый сотрудник тебе скажет, что у них нет такой машины («зелененькой»), «но вы походите, найдёте наверно».
В процессе безрезультатных поисков расплакаться (я в конце концов девочка, хочу новое платье и на ручки- а не вот этот вот всё!), так громко, что не менее вежливый сотрудник ДПС (стоящий в паре километров, благо под мостом, где этот филиал ада - отличное эхо) стал звонить своим и выяснять, где твой конь верный...
Выяснить, что конь совсем на другой штрафстоянке, и они его не потеряли...
Не забыть про чудесную уральскую погоду и самый милый пункт- вымокнуть до нитки (зонтик надо хранить в машине, вместе с документами, ведь в 9:30 светит солнце, а по прогнозу гроза будет только в 16:00)
Ещё прибавим к этому высокий каблук и поверхность с ямами и лужами таких размеров, что Марс и прочие планеты люто завидуют «асфальту» штрафстоянок.
Схватить документы и мчать в ГАИ.
Посидеть в очереди час или полтора (меньше не интересно получается), наслаждаясь зубной болью.
Получить штраф на 5000₽, рвануть под ещё одним ливнем, с уже прихваченным зонтом (хотя когда поток воды по щиколотку- смысл зонта туманно растворяется, а платье ещё не высохло от прошлого полива) на очередном такси на штрафстоянку.
Порадоваться, что есть безнал и не надо искать банкомат.
Забрать любимого бедного коняшку и добраться до стоматологии (по пути предстоит выяснить, что какого-то черта геолакация в твоём телефоне глючит, и добираться придётся без навигатора, а в середине пути телефон вообще сказал - «разбирайся сама, я спать!» Предатель и сволочь по моему личному мнению)
Осознать весь ужас ситуации - зуб глубоко, далеко, под десной и костью. А проверенный врач уже закончила смену (последнюю смену перед отпуском, да, я иногда везучая чтопипец) и передала меня следующему доктору.
Начать икать от страха перед предстоящей операцией; попытаться упасть в обморок, когда после нескольких попыток не увенчавшихся успехом, тебя переводят реально из хирургического кабинета в операционную.
Дальнейшие подробности часа из моей жизни я пожалуй опущу, разве что добавлю, что стоить потерять голос и охрипнуть, потому что я трусиха и не выношу боли (как будто того факта что я не смогу разговаривать 2-3 дня мало) и отметить тот факт, что два бородатых дяденьки загадочным образом исчезли из коридора. Наверно их забрали в другие кабинеты, или они малодушно сбежали - я так и не узнала.
Где-то во время того, как тебе зашивают нижнюю челюсть, вспомнить, что тебе сегодня удалось только попить водички утром (конечно, ведь был же целый час перед посещением стоматологии - как раз на завтрак и кофе и книжку)
Осознать что времени уже три - а ближайшие два часа (хотя по болезненным ощущениям и два месяца, если не года) есть нельзя.
Посмотревшись в зеркало - отметить, что у тебя такой вид будто ты проиграла битву даже не с пчёлами, а как минимум с шершнями( а гримерам из фильмов ужасов далековато до моего внешнего вида...
Доехать до дома, медленно, но весело прихрамывая (дождь+кожаная обувь на каблуке= идеальный рецепт для стертых ног)
Доползти да ближайшей аптеки и все таки ещё раз попытаться грохнуться в обморок, причём немного более успешно, чем в первый раз..
Ощутить,как медленно, но верно, уходит анестезия (я даже ухо не чувствовала, не говоря уже про пол лица - безмерно благодарна доктору, реально золотые руки и щедрость на анестезию)...
Мучаться болями еще пару месяцев, попутно обходя всевозможных профильных и не очень челюстных хирургов, побывав в самых невероятных клиниках и институтах, включая рентген, 3д, и бог знает каких еще процедур, питаясь детскими пюре и похудев на 10 кг (вот тут прям спасибо, но пожалуй, больше я таким спососбом худеть не буду). В общем беда была в том, что удаляя зуб (его дробили чтоб достать частями), мне сломали челюсть, и осколки от перелома давали воспаление в десне, оперировать в 3 раз на том же месте все дружно отказались, так я и маялась в общей сложности 3 месяца, пока осколки не вышли из десны сами.
К чему это я?
Будьте внимательны выбирая места для парковки, коварный знак может притаится, где угодно! Даже в 4 метрах над вашей головой)
Комментарии