Category: еда

Category was added automatically. Read all entries about "еда".

404

ура, покрыл

Я, кажется, покрыл все кейсы для getPath (прямые, кривые двух видов, круги, эллипсы, что-попало-для-дискретизации, fill). В свете этого я понял, что ошибался с моделью для класса path (M - move - это первый глагол для любой формы, которая не вырождается в другие теги (circle)).

Теперь надо понять, как это аккуратно закодить. С линией было всё просто - первая точка, M, дальше линии (L). А вот эллипс задаётся, например, двумя дугами (arc), которые тоже начинаются с M.

В класс "path" я заложил идею, что он сам знает, кто там 'M', а кто 'L'. Это сильно упрощает циклы в остальном коде, которым не надо теперь отдельно обрабатывать первую точку. Но у нас есть 'A' и прочие сложности....

Пожалуй, я оставлю этот принцип. add_line_point надо будет вызывать всегда в начале (для задачи 'M'), даже для дуг и кривых. Первая line_point (я правильно назвал это 'line point'?) становится 'M', остальные превращаются в 'L'.

... Второй вариант: add_line_point -> add_point(type, value), либо набор add_line_point, add_quardatic_point, add_arc_point, add_smooth_quadratic, etc. Первая точка всегда превращается в 'M' вне зависимости от типа.

.. Второй момент: есть места, где мне передают пачку точек. Может быть, я всегда буду принимать в класс список, а если кому-то надо передать одно значение - пусть [] его? Или добавить магии с автоопределением?

Пока что буду переписывать на add_?_points, видимо. Автодетект - вопрос открытый.

Отдельные две боли для меня:
1) Возврат круга как - в принципе, это же проблема getPath, а не Path. Ну будет у меня класс circle. Делать ли там общий класс над ними - вопрос открытый, ибо целиком libsvg я писать не собираюсь. И у меня батхёртит от отсутствия алгебраических типов в питоне. return -> Either(Circle, Path), ну круто же....

2) Кусок кода с определением "старая версия библиотеки". Буду химичить на тестах. Сейчас эта ветка вообще не может работать, потому что я случайно не добавил нужный импорт при переносе из Draft.py в getSVG.py.

UPD: В процессе борьбы за clarity, всё стало просто. Каждый метод называется по спекам (moveto, lineto, elliptical_arc, smooth_quadratic_bezier_curveto), у каждого своя конвенция по аргументам, но все они пишут в общий self.data. Поддерживается суммирование путей. Чуть-чуть сахара - первый lineto конвертируется в moveto автоматически. На выходе из контекстного менеджера проверяется, что есть moveto.

Вот код класса. За вычетом "pass" кусков, я открыт к предложениям.

https://github.com/amarao/FreeCAD/blob/3905d8974186aba43c90f429baa46a3fb8c1ad20/src/Mod/Draft/getSVG.py#L12
404

греческий

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

404

semantic flow control

Когда нас учили программированию, наиболее революционная вещь была в циклах. Нам показывали, что если мы хотим что-то сделать 5 раз, то нам надо сделать переменную, и плюсовать её пока не нарушится условие "переменная меньше пяти". Более того, нам показывали, что цикл N-раз можно реализовать с помощью примитивов while и until (условие в начале и в конце цикла). А ещё нам показывали паттерн с бесконечным циклом у которого в условии было написано "всегда", а реальный выход был с помощью break по условию. etc.

Почему оно было революционно? Потому что нас учили как семантическую конструкцию редуцировать до синтаксической. Мы хотим что-то сделать 5 раз? Вот такая версия for. Мы хотим делать пока не получится но не более N попыток? Так это тот же for, но с break'ом. Мы хотим "для каждого элемента массива"? Так это тот же for, но c length и индексом (и упаси вас боже играться с размером массива внутри цикла).

Более того, существовала внутренняя гордость: смотрите, мы не используем goto, мы используем бохатый синтаксис.

А реальность же такова, что не смотря на то, что все они редуцируются к for, и, по совести говоря, к goto, они все различны. Это различные процессы на семантическом уровне, и сводить их к "это же for" всё равно, что сводить удар шпагой, мазок кистьсю и переворачивание котлет на сковородке к одному и тому же движению "с некоторыми вариациями".

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

Для начала мы осознали, что "для каждого элемента" - это специальный случай, который не требует length и индекса. Почти все языки обзавелись for each или for x in. Более того, внимательная медитация над тем, что происходит в таких циклах дало нам map/filter/reduce/foldl/foldr/zip/enumerate, etc.

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

Но есть же и другие интересные случаи. Например, семантически "пробовать N раз пока не получится, а если не получится за N раз, то..." вполне распространённая конструкция, и я знаю как минимум две реализации, это flaky для py.test'а (оно специфично для тестов и реализует чуть-чуть другое), и ansible'овое retries. Которое until, со встроенным счётчиком и обработкой "не получилось" как ошибки.

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

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

И вот у меня есть ощущение, что среди всех отношений между объектами в программах, для циклов синтаксический сахар выражен наименее, хотя, в силу сложности понимания цикла (цикломатическая же сложность!), как раз на него должны быть направлены основные языковые усилия. ИМХО, конечно.
404

хитроу

Всё-таки это странно - целая страна с патетичным британским акцентом.

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

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

Разбираясь с формами

В настоящий момент, кроме общего "не точно рисую" (скилл "точно рисовать" не имеет верхней границы и должен совершенствоваться всё время), главной проблемой я ощущаю неспособность передавать форму через тон. Линейный рисунок ограничен в передаче сложных объектов, потому что многие объекты имеют мягкие формы, в которых невозможно показать "границу между планами" (попробуйте разобрать по планам куриное яйцо). При этом вполне возможно убедительно нарисовать его всего лишь срисовывая пятнышки, что работает только если эти пятнышки self-explained. Чем сложнее объект, тем больше там есть пятнышек, которые нужно "дорабатывать", показывая их реальную форму (пример: впадинка, освещённая спотлайтом - надо и впадинку показать, и спотлайт, а если пятнышки перерисовывать, будет чушь).

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

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

Пока что простейшие формы (пока сканил - обнаружил, что линейный рисунок "так себе", потому что перспектива местами сильно плывёт - халтура, да).
Collapse )
Следующее упражнение будет сложнее - два сглаженных угла. Потом, видимо, два разных сглаженных угла, с разным радиусом изгиба. Потом два одинаковых угла, но с разной степенью сглаженности.

(заметка для себя: не рисовать на офисной бумаге даже для "упражнений". Она отвратительна).
404

(no subject)

Когда киприоты говорят в отношении кофе half/half они имеют в виду 50% молока, 50% воды. Когда американцы говорят half/half, они говорят про 50% молока и 50% сливок. Nuf siad.

404

трушный кофе

Вот такую штуку купили:



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

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

Эта штука делает не паром, а ручной помпой (рычаг - он самый, сколько атмосфер выжмешь - все твои).

Абсолютный стимпанк, и каждый кусок хрома тут - по делу.

Купили БУшную, с небольшой ржавчиной на поддоне. Новая - 477, взяли за 180 (после торга, в ходе которого сбавили 20 евро).
404

animehistory.ru

Задумался, нужен он мне или нет. За все эти годы ничего толкового так и не начал делать, а 700р - это дороже самого понтового кофе в старбаксе.

Есть кто-то желающий или пустить в свободное плавание?
404

coffe shop

Первый раз забрёл в кофешоп местный. Меня предупреждали, я не послушался.

Разумеется, кофе ужасный. Это кипрский-то... Водянистый и никакой, прямо как у меня получается. Да ещё и по 2.20. Плюс курят и громкий футбол.

Скучное место.
404

Есть негде

Полная катастрофа с обеденными едальнями.

Текущий ассортимент:

Ланч меню в Bennigans
Ocean Basket
Ланч меню в Cozy Corner
Central Cafe
La Boka
Kiki
Баварцы
Peach-something (китайцы)

Спорные места:
ланч-меню в Rumors
Русское странное кафе "Yummy"
Burgerlabs
Каратисты (еда заканчивается к 12, а обед в час)

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

А я хочу обычного традиционного салата. Хорошо приготовленного. Днём. За разумные (~7€, чтобы на кофе осталось в лимите на 10€)

Какие есть версии?