В этом году мы с товарищами (ForNever, Minoru, Hagane, grouzen) опять взялись участвовать в ICFPC. Если кто не в курсе, что это такое — см мой предыдущий пост или серию постов товарища adept.
В этот раз для разнообразия мы не писали AI для игрушки. Организаторы были из Японии, и поэтому мы весь уик-енд… складывали оригами. Кто-то из кода, а кто-то нет.
Задача состояла в том, чтобы из квадратного «листа бумаги» складывать разные (плоские) фигуры. В качестве задачи даётся описание нужной фигуры, а решение — набор складок на квадрате и описание, какие вершины в какие переходят при складывании. Первая сотня фигур была предложена организаторами, а дальше задачи могли отправлять участники, и за отправку задач тоже давали очки.
При этом, на самом деле, это было «не настоящее оригами». Были допустимы решения, невозможные с бумагой — части листа могли проходить друг через друга при складывании. При отправке решений чужих задач можно было даже «рвать бумагу» (при отправке своих задач — нельзя). Момент про разрешено ли разрезание мы уточняли долго и сложно.
Контест в этот раз проходил с утра пятницы по вечер воскресенья в моём часовом поясе.
В пятницу
с утра я «по-быстрому» написал скачивалку задач с сервера и закачивалку решений (на python, просто потому что там было REST API, а у меня уже был опыт использования для этого питоньей библиотеки requests). Ещё я написал парсер предложенного формата задач и рендерилку, которая рисует фигуры из задач в виде svg (на Haskell). Сразу пригодился хаскельный модуль Data.Ratio. Дело в том, что в задачах использовались координаты в виде рациональных чисел, причём размеры числителя и знаменателя не были ограничены. Так что быстро образовалась строчка type Number = Ratio Integer.
Потом я посмотрел на результаты рендера и увидел, что первые семь задач тривиальные (там просто квадрат, сдвинутый или повёрнутый, но не сложенный), решения для них легко написать вручную. Решил и залил.
Потом мы начали думать над задачей (я уже писал, у меня всегда так — сначала код, потом думать).
Когда нет ограничения на разрезание бумаги, задача сводится к тому, чтобы разрезать квадрат на эн многоугольников и сложить из них нужную фигуру. Насколько я знаю, подобные темы широко и глубоко изучены, но я не знаком с конкретными работами и алгоритмами. (в университете был даже какой-то спецкурс по оригами, как разделу геометрии, но я на него не попал). Поэтому я долго и упорно думал в эту сторону, но ничего не придумал.
В чате довольно быстро образовалось несколько идей:
- Разрезать требуемую фигуру на треугольники и попытаться из таких треугольников сложить квадрат.
- Какой-нибудь вариант генетических алгоритмов: разрезаем квадрат как попало и складываем как попало, оцениваем скор в соответствии с правилами организаторов.
- Быстро придумался простой алгоритм для складывания любого достаточно маленького выпуклого многоугольника: пройти по всем его рёбрам и сложить бумагу вдоль них. Если останутся торчащие «хвосты», то опять пройти по рёбрам и подвернуть вдоль них.
- Кроме силуэта фигуры, в задачах приводился её «скелет» — набор всех рёбер в положении после складывания. При этом, правда, было указание, что это только подсказка, складывать в соответствии с этим скелетом не обязательно. Так вот, появилась идея брать этот скелет и пытаться разворачивать его до квадрата.
Товарищ grouzen произвёл обширные изыскания существующих научных работ на тему оригами и около, и обеспечил нас пейперами для чтения на всю неделю. К сожалению, применить их мы не смогли.
Потом начался как всегда разброд и шатание, каждый стал заниматься чем-то своим.
Я решил начать с написания какого-никакого «фреймворка» для дальнейшей работы — набора функций для разрезания многоугольников, объединения и т.п. Некоторые из геометрических алгоритмов тривиальны (отражение многоугольника относительно прямой), зато другие зубодробительны (объединение произвольных многоугольников). Для таких алгоритмов я стал гуглить существующие реализации, по возможности на Haskell (т.к. парсер задач уже был на Haskell). Нашёл только clipper. Это биндинги к одноимённой библиотеке на C++. Сразу обнаружилась особенность: Clipper работает с целочисленными координатами (видим
Как закрыть папку паролем. Защита WordPress
Дошли слухи о том, что WordPress далеко не идеал безопасности. Хоть обновления выходят достаточно часто, но в систему все равно умудряются пролезть. Но судя по тому, что официальный плагин «jetpack» от WordPress заявил, что за 2 дня с момента его установки меня пытались сломать 32 раза, то я решил обезопаситься. Читать
Болят соски при кормлении: что делать?
Грудное вскармливание, особенно в самом начале, после первого прикладывания ребенка к груди часто сопровождается сильной болью в области сосков. Некоторые женщины, особенно, первородящие, воспринимают такую боль как норму. Но это не так – боли при кормлении ребенка быть не должно.
Почему могут болеть соски во время кормления ребенка
Сразу после родов при первых прикладываниях к груди соски болят из-за того, что кожа на них слишком тонкая и пока она не загрубеет, держится некоторая болезненность сосков. Но это быстро проходит.
Боль в сосках при кормлении ребенка чаще всего вызывается их травмированием с образованием на поверхности ссадин и трещин. Это может возникать при аномалиях развития сосков, когда они слишком плоские или втянутые и ребенок не может как следует ухватиться ротиком за такой сосок, то есть не может захватить околососковый кружок. В результате он привыкает к такому захватыванию сосков, и они травмируются постоянно.
Причиной появления трещин на сосках может быть и неправильный уход за молочными железами. Если перед каждым кормлением ребенка грудь мыть с мылом, то кожа на сосках станет сухой и потрескается при захватывании соска ротиком ребенка. Такая же ситуация возникает при обработке сосков спиртовыми растворами (спиртом, водкой, зеленкой).
Часто к травмам сосков приводит ношение «неправильного» белья: слишком сдавливающие грудь бюстгальтеры с жесткими швами, которые приходятся как раз на сосок. Нельзя кормящей матери также носить синтетические бюстгальтеры, которые могут вызывать аллергию и зуд в области сосков. Расчесывание кожи приведет в таком случае к ссадинам сосков, в которые легко может попасть инфекция.
Боли в сосках во время кормления ребенка грудью могут появиться при лактостазе – застое молока. К этому приводит неправильный режим кормления ребенка. Лактостаз – это как пороховая бочка – стоит только спичку поднести и взорвется. Роль спички могут выполнить микротравмы сосков, незаметные для самой матери – через них в молочную железу может попасть инфекция и начнется мастит. Первым признаком мастита является повышение температуры до высоких цифр на фоне застоя молока.
Основные правила кормления ребенка грудью
Прежде всего, не нужно нервничать, а просто придерживаться правильных принципов ухода за молочной железой. Перед каждым кормлением грудь нужно мыть теплой проточной водой без мыла. Женское молоко содержит биологически активные вещества, обладающие бактерицидным действием, поэтому нет необходимости мыть грудь много раз в день с мылом. Но раз в день нужно принимать душ и мыть с мылом или с нейтральным гелем всю поверхность тела. Не нужно только забывать тщательно смывать моющие средства с поверхности тела.
Ребенка нужно приучить правильно захватывать сосок – вместе с ареолой. Для этого грудь ребенку дают так: сосок держат у носика, а в рот подают сначала нижнюю часть ареолы и только потом сосок. Пока ребенок не научится брать правильно сосок, его нужно аккуратно удалять из ротика и вводить снова по всем правилам.
Если ребенок находится на смешанном вскармливании (то есть сосет еще и молочную смесь из бутылочки), то он может вначале правильно захватить сосок, а затем перейти на поверхностное сосание, удерживая во рту только сосок. Это происходит потому, что сосание груди и соски требует от ребенка разных движений, что мешает ему сосать, как грудь, так и соску. То же самое происходит и при сосании пустышки. В таком случае единственный выход – это отказаться от пустышки совсем, а докармливать ребенка с ложечки – в этом случае правильное сосание груди быстро восстановится.
Наконец, ребенка нужно правильно держать во время кормления, так, чтобы ему не приходилось все время находиться с повернутой на бок головкой – это утомительно и не позволяет правильно захватить сосок. Во время кормления ребенок на руках должен лежать боком, лицом к матери.
Если ребенок хорошо сосет грудь, то часто травмирование соска происходит в момент отнятия его от груди, когда мать насильно, преодолевая сопротивление, вытаскивает его из ротика ребенка. Вытаскивать сосок лучше слегка раздвинув пальцем десны – тогда сосок выскакивает сам.
Лечение микротравм сосков
Прежде всего, нужно избавиться от мокнутия кожи сосков. Для этого грудь нужно как можно чаще находиться открытой. До кормления ее нудно мыть теплой проточной водой без мыла, а после кормления молоко лучше не смывать и дать ему засохнуть на сосках. После кормления можно также смазывать соски гелем солкосерил – это гель, приготовленный на основе крови крупного рогатого скота, он восстанавливает целостность тканей и не требует смывания перед кормлением, прекрасно подсушивая при этом кожу сосков.
При значительных трещинах и ссадинах некоторое время лучше не давать грудь с травмированными сосками, но при этом нужно не забывать регулярно сцеживать молоко, иначе к тому времени, как пройдут трещины, молоко пропадет.
Без каких-либо травм сосков женщина обходится редко, самое главное при этом – правильное прикладывание ребенка к груди.
Очищение сосудов головного мозга
Норму дневную можно потихоньку увеличивать. Пьется очень приятно. Никакого дискомфорта.Можно делать этот рецепт и без луковой шелухи (но она очень полезна тем, у кого почки больные).



Нужно, прежде всего, все делать систематически, длительно. Каждое утро нужно съедать 1 мандарин, маленькую щепотку изюма и 3 грецких ореха.Вот именно в такой последовательности.
Все перемешать и принимать утром натощак за 30 минут до еды по 1 чайной ложке. Прекрасно очищает сосуды, устраняет головные боли, улучшает общее состояние.
Автор: Нина Карулина
Ссылки и ревизии статей в WordPress
Обычно работаю с 1С-Битрикс. Но решил сделать этот блог на WordPress, потому что задача стояла тривиальная — сделать блог и ничего больше. Как я уже писал в статье «На чём программируют программисты?» лучше выбрать самый простой инструмент для решения задачи. Нужен блог — берём WordPress. Читать
Как отобразить любой внешний RSS поток на своем сайте
Вы видели как у других блогеров отображается RSS поток у другого блога на своем сайте. Вы хотите сделать это для дополнительного продвижения и трафика. Ну вот учебник для вас. Просто вставьте следующий код в любом месте в вашей теме:
<?php include_once(ABSPATH.WPINC.'/feed.php');
$rss = fetch_feed('http://feeds.feedburner.com/andreyexru');
$maxitems = $rss->get_item_quantity(5);
$rss_items = $rss->get_items(0, $maxitems);
?>
<ul>
<?php if ($maxitems == 0) echo '<li>Не найдено.</li>';
else
// Loop through each feed item and display each item as a hyperlink.
foreach ( $rss_items as $item ) : ?>
<li>
<a href='<?php echo $item->get_permalink(); ?>'
title='<?php echo 'Дата публикации:'.$item->get_date('j F Y | g:i a'); ?>'>
<?php echo $item->get_title(); ?></a>
</li>
<?php endforeach; ?>
</ul>





