Как стать автором
Обновить

Комментарии 46

Корпус выглядит непрочно. :( Для логгеров на ММБ я использовал напиленную квадратную ПВХ трубу 60*60 мм, стенка 6 мм — ее только танком раздавить можно… И стоит она недорого, но надо брать сразу 6 м. Могу поделиться остатками…
Насчет добавить EEPROM — возможно, стоит сразу уж FLASH — тоже недорого, объем памяти сильно больше, интерфейс SPI. Например, я себе накупил W25Q32FVSSIG — 4Мб по 5р/шт в ЧипДипе…
По софту — я могу помочь — в последннее время насобачился на С# несложные прикладные программки для работы с устройствами по COM/USB…
Да, корпус довольно дешевый и не очень крепкий. Удара молотком или массивным поленом, пожалуй, не выдержит. Но очень он удобный по размерам, как раз подходит. Корпус хочется, конечно и покрепче, но прежде всего хочется какой-нибудь более влагозащищенный корпус или продумать какую-нибудь систему прокладок, чтобы всё делать без компаунда. Труба 60*60, наверное, будет довольно габаритным вариантом.
Память можно, в принципе и flash, но там получается сложнее с прошивкой, и питания она требует большего. А 32kb eeprom хватит с избытком, отметка времени занимает 4 кб, хватит на 8000 отметок. Тут уже возникает проблема с извлечением информации без разбора станции, на чипы, которые я использую влезает 768 байт, чтобы передать информацию с помощью них придётся делать несколько заходов.
Кстати, насчет софта — можно попробовать приспособить мой старый проект, сделанный в Visual C# для настройки сканеров ММБ:
github.com/realtim/mmb/tree/master/bc_reader/application_software_examples/BC_Logger_control_win
самые свежие исходники и бинарник:
BC_Logger_control_win.rar
BC_Logger_control_1_0_0_9.rar
выше в проекте есть и очень простенький вариант под Android…
Да, выглядит хорошо. Что-нибудь подобное и хотелось бы. Можно попробовать сделать на основе этого.
Самое главное отличие EEPROM от FLASH в том что у последней минимальная единица записи — страница. Т.е. если нам надо перезаписать маленькую порцию данных надо будет выгрузить целую страницу, модифицировать её в контроллере и записать обратно в флеш. Помимо необходимости для этого иметь достаточный объём RAM в контроллере будет сильно страдать ресурс перезаписей ячеек которые будут чаще дёргать не по делу. Для малых порций данных лучше всего подходит EEPROM с индивидуально перезаписываемыми ячейками. Или вовсе чип FRAM, хотя он несомненно будет сильно дороже.
После предыдущей статьи смотрел вариант записи по две станции на блок в чипе + коды хеминга для защиты от ошибок, не стал Вам писать до окончания МЛ, что бы узнать какова надёжность изначальной системы. Вижу что Вы использовали этот подход, мне казалось логичнее в блоке 0-1 сначала писать номер чипа, а потом номер последней станции. Или номер последней станции вообще писать в блок 0-2, это приведёт к незначительному увеличению времени отметки, но номер чипа не будет перезаписываться при каждой отметке, что теоретически повысит надёжность.
Мне кажется тросик закреплён плохо, так как есть возможность оторвать станцию от тросика без повреждения самой станции. Посмотрите как обычно сделано крепление kensington lock, сама петля обычно не сильно крепкая, но закреплена она на критически важном элементе, к примеру на материнской плате ноутбука. При вырывании плата повреждается ноутбук поэтому кража ноутбука с вырыванием замка лишена смысла.
Николай Сытов (главный судья ММ) рассказывал что станции воруют обычно местные жители ради батарейки и светодиода, если для кражи станции её корпус нужно будет сломать на месте, то вероятность кражи уменьшится.

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

По закреплению станции. Бегал "Новую Москву", там кто-то не сломал, а просто сжёг станцию. Я обнаружил только остатки платы с антенной, каркас от призмы и пепел. Принёс плату судье, чтобы доказать. КП засчитали.

А как засчитывали следующим участникам? Они прибегали и не могли найти никаких следов станции.

Я в этом месте был почти последний, было полчаса до истечения контрольного времени. Вероятность, что кто-то будет после меня, крайне низка.
Расчет был на то, что судья, увидев плату, поверит не только мне, но и всем тем другим, кто утверждает то же, что и я. (Хотя Артём и без того верил.)
Ну и еще оставались остатки корпуса и призмы, я не все остатки забрал.

Номер чипа, в принципе дублируется информацией из UID, можно, в принципе, и её использовать.

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

По поводу сжигания станции, так в ней и литиевая батарейка могла коротнуть, станция тогда сгорит сама по себе.
В целом, да, согласен. Станции желательно чтобы были более крепкими и монолитными. И идея с каналом под тросик хорошая, но так возникают дополнительные трудозатраты.
Жуть какая, неужели кому-то придёт в голову что-то разломать, чтобы своровать вещь, явно кому-то принадлежащую и нужную (да ещё и с надписью)?
Дикость какая-то…
Пардон за пару ошибок:
1) труба полипропиленовая — www.rospolymerplast.ru/polypropylene-profile
2) W25Q32FVSSIG — 50 р./шт. У китайцев еще дешевле…
И, как правильно написал ниже true_alex, профиль просто проткнуть насквозь металлической трубкой — это обеспечит герметичность и вандалоустойчивость канала для тросика.
Насчет питания я так же советую попробовать LiFePo4 аккумуляторы — они есть и в АА формате (размер 14500) — должны выдерживать мороз (судя по тестам — 50% емкости при -20 — mysku.ru/blog/others/13323.html )
Посмотрел трубы. В принципе, по габаритам подходит Профиль ПП 50х35х2,5 мм. Возникает вопрос как это всё аккуратно скрутить и загерметизировать. Наверное, можно на торцы соответствующие размером прокладки и пропустить винты вдоль всего устройства, туда же встроить трубку для канала под тросик. Спасибо, подумаю над этим вариантом
.
LiFePO4 да, довольно хороши. Но и ёмкость у них значительно ниже простых литиевых. Когда хотел делать от аккумуляторов считал варианты и получается, что литиевый хоть и просаживается значительно, но за счёт своей большой изначальной емкости не сильно проигрывает LiFePO4. Лучше всего, конечно литий-тионихлоридные батареи (какие и стоят в Si и SFR), они не теряют свои характеристики в холод, но довольно дорогие, требуют периодической депассивации.
Но все варианты с аккумуляторами мне не очень нравятся тем, что их придётся заряжать в больших количествах. А при нынешнем потреблении станций, и 3-х пальчиковы обычных батарей хватит на год активного использования.
Я больше хочу уменьшить габариты устройства, сейчас смотрю в сторону литиевых батареек CR123, они тоже хорошо выдерживают холод.
Ещё есть вариант Energizer Ultimate Lithium, долго хранятся, имеют большую ёмкость (1200мАч ААА, 3000 мАч АА) и отличный температурный диапазон (-40 до 60°С). Отпугивает нестандартное напряжение 1,8 В, в холостом режиме и стоимость от ~120 руб за штуку, но CR123 выйдет в сравнимые деньги.
Да, конкретный вариант батарейки уже будет зависеть больше от корпуса, какой найду для компактного варианта. Скорее всего питание будет от одной батарейки с повышением напряжения.
Для нынешнего варианта да, три штуки Energizer Lithium решат проблему работы в холоде, да и продлят общую работу устройства раза в два по сравнению с обычными батарейками, но и повысят стоимость собранной станции в полтора раза.
Я бы попробовал написать себе концепцию проекта — список приоритетных направлений. Без этого много метаний может случиться…
Например, когда я делал логгеры для ММБ я себе поставил несколько целей:
1) максимальная дешевизна
2) блочное и ремонтопригодное исполнение
3) простота использования
4) вандалозащищенность
… все они определялись исходя из надежды на применение приборов не только на ММБ, а на разных любительских соревнованиях, а так же возможность изготовления приборов силами не очень квалифицированных людей, имеющих ограниченный доступ к разнообразию электроники и прочих запчастей — т.е. чтобы любой любитель соревнований, где нужно отмечать уходящих/приходящих спортсменов (ориентирование, бег и т.п.) даже в заштатном Урюпинске мог по списку заказать запчасти на АлиЭкспресс и спаять бытовым паяльником за вечер готовый аппарат за минимальные деньги…
В результате мне было понятно, что я не буду сильно париться объемом и энергосбережением, зато мне нужна надежность и взаимозаменяемость составляющих, в т.ч. сканеров. Поэтому все внутри было на разъемных соединениях, все комплектующие были самыми дешевыми и вся сборка сводилась к пайке материнской платы навесным монтажом.
Касательно текущего проекта — а на самом ли деле так важен размер блока? Чем плох большой (в разумных пределах) корпус?
По батарейкам… А надо ли их уменьшать? Если электроника все равно залита компаундом, то не наплевать ли на герметичность блока? Сами батарейки, обычно, конденсата не боятся.
По зарядке батарей — для того, чтобы корпус не разбирать и не ставить хлипких разъемов можно просто вывести на корпус 2 контакта (вплавить 2 проволочки на сквозь) — тогда весь корпус можно ставить в крэдл для зарядки, как у раций и складских ТСД. Так же можно и слив данных организовать — еще пару контактов для UART…
Да, вся разработка велась с поиском компромисного решения. Более компактный и легкий корпус тоже хорошо, будет меньше привлекать посторонних, постановщику носить их будет легче, да и просто более эстетично. Мои станции весят 160 г, но когда их много и все они с тросиками, то уже не очень приятно все их таскать, ставить и снимать, с мослайта возвращался с 8 кг станций в рюкзаке). Поэтому хочется вариант покомпактнее, но это на неопределенное будущее.
Да, основной целью я ставил сделать доступный дешевый вариант отметки, который можно сделать самим на местах. Навесной монтаж, конечно, требует меньше навыка чем поверхностный, но тут дело желания, можно денёк потратить на оттачивание навыка, а дальше уже с поверхностным будет всё собираться быстрее.
Но идея конструктора тоже хорошая. Да и габариты многих не пугают, а где-то они совсем не важны. Может сделаю вариант станций, который будет собираться из готовых блоков на материнской плате, благо они все есть — arduino pro mini, часы ds3231, rfidrc522.
Про станции на аккумуляторах с выводными контактами думал и даже сделал несколько, которые и сейчас работают. Проще уж вытащить аккумулятор и зарядить его как обычно, чем думать над выводными контактами и док-станцией. Благо сейчас энергопотребление маленькое, делать это надо раз в год-два.
Если энергопотребление маленькое… не задействовать ли солнечную панель? Ночью ими врятли кто пользоваться будет. Небольшого аккумулятора должно хватить для форс-мажоров, а основная работа при свете от панели.
Станции часто закрепляются в неприметных местах, на стволе дерева, под кустом, на коряге, солнца там нет, а соревнования бывают многодневными и ночными.
На самом деле, вполне можно и так сделать. какого-нибудь аккумулятора на 100-200 mah вполне хватит для поддержания работы в ночное время и пасмурное время. И устройство будет работать пока аккумулятор не деградирует. Буду этот вариант иметь в виду на будущее. Но, в нынешнем форм-факторе, с батарейками будет проще.
Кстати, трубка под тросик не обязательно должна быть металлической, она внутри, нагрузки на боковые стенки небольшие (от изгиба тросика), т.е. сверлится отверстие по диаметру трубки вставляется трубка заливается клеем-герметиком соединение. В принципе сложность изготовления увеличивается не сильно.
Металлическая трубка (алюминий из Леруа) сильно проще в монтаже — ее можно просто разогреть и вплавить в корпус. Для 100% надежности можно дополнительно облить внутри стык клеем. Пластиковую сложнее будет вклеивать… К тому же, ПП корпус не очень хорошо клеится…
Молодец, сам занимаюсь ориентированием, и выдумываю как удешевить отметку, у тебя получилось и не обращай внимание на всяких писак червей, которые не знают, что это такое. Данное разработанное тобой оборудование имеет вид на дальнейшую жизнь, и может быть даже коммерческий вид по своей дешевизне. Данный проект могут использовать маленькие клубы и спорторганизации для проведения мини (средних) соревнований не только в ориентировании, туризме а и других видах спорта где необходима эл. отметка.

Интересный проект!
Хотя память расходуется нерационально, уменьшая количество отметок и увеличивая объём передаваемых данных.
Какова частота опроса станции и максимальное время отметки на станции?
Не думал насчёт совместимости с SFR?
Спасибо!
Единица объема передаваемых данных на чип Mifare Classic 1k — 16 байт, поэтому даже если нужно передать 1 бит, писать придется 16 байт и ещё позаботится о том, чтобы не стереть уже имеющиеся данные. А так да, память можно использовать более экономно. Даже если оставить шифрование по Хэммингу, можно записывать три отметки в одну страницу и тогда будет хватать чипа на 138 отметок. Но вот только нужно ли усложнять? Сейчас можно записать 92 отметки, чего хватит в большинстве случаев.

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

С SFR моя система не совместима, у них другие поддерживаемые стандарты передачи данных.
Может я что-то не понимаю в организации подобных соревнований, но если кому-то мало 92 отметки — можно выдавать по два чипа разных цветов. Ну и на станции использовать цветную бумагу для печати номера.
Первая часть маршрута одного цвета, попалась станция с другим цветом — убрал первый чип, достал второй и дальше используются только второй чип.
На переходной станции можно сделать отметку двумя чипами. На крайний случай можно переходную станцию не прятать и даже человека приставить что бы помогал участникам соревнований. Все таки после большой нагрузки можно не сразу сообразить что надо чипы поменять.
Думаю для тех редких случаев где не хватит отметок — это будет проще. Ну и количество отметок теоретически становится неограниченным. Главное чтобы чипов хватало.
Хочется совсем наоборот: чипы на деревьях, 5-10 штук (дублирование) в ближайшей окрестности точки, а станция у ориентировщика. Так решится масса проблем и расширится область применения, пишу с точки зрения организатора и судьи трофи-рейдов (ориентирование на внедорожниках).
Есть системы, основанные на данном принципе, например ibutton, emit.
В принципе, если для трофи рейда, где вес станции не является критичным, всё можно реализовать и с помощью железа, которое я разрабатываю, только переделать прошивку. Можно даже упростить и немного удешевить конструкцию станций, ведь серьёзной герметизации уже не требуется.
В общем, вариант имеет право на жизнь. Поставлю в список задач разработать такую прошивку, спасибо.
Основная проблема таких систем «разбег времени». в классической системе (если ее так можно назвать) таймеров (тикающих часов) по количеству станций, а если «переворачивать» систему то таймер будет у каждого спортсмена свой, со своей погрешностью и вытекающими отсюда проблемами. поэтому конечно и одно и другое имеет право на жизнь. но если говорить про ориентирование — ко классическая система более приемлема. для трофи — да… но собственно у ребят внутри станции память имеется, поэтому ни кто не мешает «перевернуть» систему и перемещаться со станциями.

Другое дело, что ребята в начале пути и им еще со многим придется столкнуться (с герметизацией, если они будут использовать аккумуляторы) с термокомпенсацией кварца (особенно актуально если станция будет использоваться несколько дней в резкие перепады температуры) с энергосбережением и т.д. Я желаю им успехов — дело хорошее.
Разбег? пару секунд в сутки это в ХУДШЕМ случае. При необходимости можно хранить калибровочную константу и корректировать часы по мере выгрузки данных.
Кварцы есть с нулевым ТКЧ. Термостабилизация нужна будет только при необходимости поддержания стабильности частоты порядка 10E-8...10E-12(как пример — генератор ГИАЦИНТ) а это порядка 1мс разницы в сутки.
Алексей, даже если пару секунд в сутки если говорить о хронометраже, не думаю что это хороший показатель. представьте себе ситуацию, у вас станция стоит в лесу, в межсезонье перепад температур градусов 30… -15+15 :) у вас стоит 2 станции на кп. один отметился в одной другой в другой… в итоге один другому проиграл… а это был промежуточный финиш. ну а дальше разборки я точно был раньше… а вы доказываете что система обмануть не может.
Обычные часы, «электроника» белорусского производства — коррекция хода +-0.1сек/сутки. Уже давно не ношу, просто достал через год сверил с GPS уход около 30 секунд. Кварц надо подобрать с ТКЧ в районе нуля, и останется единственная проблема — определить и ввести корректирующий коэффициент. А это либо 10 дней для точности 0.1сек/сутки либо поверенный частотомер с 6-ю значащими разрядами и более.
Да, и правильно запитать кварц — значение имеют компенсирующие ёмкости, их надо использовать номиналом с даташита на кварц а не от фонаря. Впрочем, наверно проще использовать кварцевый генератор а не голый кварц. Например, в старых мобилах используют генератор на 10Мгц для DDS с точностью и стабильностью в 7 знаков в широком диапазоне температур, любители часто их используют в своих частотомерах.
Алексей, все верно. но часы живут на руке, где температура более или менее стабильна. а станции в суровых условиях, это нужно учитывать. ну а так — да, Вы правы, если много вариантов как добиться приемлемого результата. TCXO самый лучший, но очень дорогой вариант. тут нужно понять для каких задач Вы делаете устройство, если не Чемпионат Мира, то и требования меньше.
А нужно ли об этом сейчас думать, постоянно участвую в ММ, раньше, когда был перевод часов, часы на станциях переводились раз в пол года, сейчас часы на станциях не переводят и не корректируют, за год уход до 30 секунд (связан с садящимися батарейками), и это у самых простых SI при «суровой» эксплуатации. Это уход меньше 0.1 секунды в сутки. Может быть прежде чем ввязываться в увеличение точности стоит провести тестирование и выявить а нужно ли сейчас тратить на это силы? Взять 2-3 станции выставить на них точное время и вынести на балкон на пару месяцев (в чёрный пакет и на место куда попадает солнце, что бы был побольше перепад температур), потом посмотреть средний суточный уход.
Да, длительное тестирование на этот фактор я ещё приведу. Но после двухнедельного тестирования, в том числе на улице в условиях перепада температур, уже могу сказать, что часы в моих станциях могут уходить до 2 секунд в сутки. По документации, такая погрешность у них должна быть за месяц, у часов есть встроенный термометр и кварц, и они должны проводить коррекцию частоты кварца. Возможно, дешевые часы из Китая, которые я использую, не совсем соответствуют документации, поэтому и стоят в 5 раз дешевле чем в России.

Но, на самом деле, это не так страшно. По совету, данному мне в комментариях к прошлой статье, я присваиваю всем станциям свой «серийный номер», который записывается на чип при отметке вместе с задаваемым номером. Поэтому можно проводить корректировку даже если на кп стоит несколько дублирующих станций.
Проект, безусловно, хороший. И он найдет свою нишу. Для многих пользователей даже наша система крайне дорога, не говоря уже про SportIdent. И возможность вложить вместо денег свой труд, сделав все из набора готовых модулей, для многих окажется привлекательной. Например, у нас есть клиенты в Канаде и Австралии, сами делающие чипы. Со станциями в нашем случае не получится, а из готовых Arduino модулей — почему бы нет?
По практической части: от стандарта ISO 14443 мы отказались в самом начале работы в пользу ISO 15693 — в нем намного проще с эргономикой, эффективное расстояние в 4-7 см позволяет создать удобный чип. Но это не очень важно для «неспринтерских» видов. Зато плюсы — наличие готовых модулей, тогда их не было для обоих стандартов, что серьезно повлияло на выбор.
От чего хочу предостеречь:
1. Перезапись ранее записанных ячеек. По опыту, в одном случае на 10000 будет сбой — логически невосстановимый. Лучше все-таки одна ячейка — одна запись.
2. Мастер-чип должен быть «однократного действия». Увидев его, станция должна выполнить записанные в нем действия (изменение своего номера-времени), после чего сделать чип «обычным». Это убережет от случайного попадания мастер-чипа в общую корзину.
В общем, удачи!
Большое спасибо!
1. Да, про проблему перезаписи думал. В самом начале развития системы станции просто записывали информацию в страницу, определенную номером станции. Но в таком случае нужно продумывать логику повторного взятия того же кп в случае дистанций-бабочек. Перешёл на последовательное заполнение памяти чипа и тут уже сложно обойтись без перезаписываемого счётчика.
Про проблему с EEPROM памятью наслышан, особенно для дешевых китайских чипов. Решаю это тем, что самую важную информацию — последний записанный блок, номер чипа записываю в трех экземплярах, а информацию о временной отметке с использованием кода Хэмминга. Перед стартом все чипы проходят проверку (запись во все биты 1, затем 0).
Но спасибо за совет и за статистику, подумаю ещё как можно усилить надежность.
2. Да про эту проблему тоже в курсе, сейчас у меня мастер-чипы одноразовые.
Откажитесь от счетчика пока не поздно, он — зло :)
Если бы я создавал систему сейчас, его бы не было. В текущей прошивке нашей станции его запись оставлена для обратной совместимости, а чтение убрано совсем. Даже тупым методом половинного деления вы найдете последнюю запись за 6 операций чтения, а администрирование счетчика — как минимум чтение, чтение корреспондирующей, запись и чтение-верификация.
Да, действительно, так получится не сильно дольше, а может и столько же по времени. Спасибо за совет, попробую протестировать и этот вариант.
Плюсую отказ от счетчика, стоит распределить риск сбоя записи/чтения, который может произойти при непреднамеренном удержании чипа в зоне неуверенной связи. ISO14443 хоть и защищен контрольной суммой, но дело еще видимо, в запасе питания чипа — оно может просесть в неудачный момент. Так как единица записи — страница, риску сбоя подвержена она вся, сколько бы раз на ней не была дублирована информация. По той же причине, может стоит разнести блоки кода Хэмминга по 2-м страницам. Хотя бы один блок будет с большой вероятностью целый. Что вобщем, тоже не айс из-за слабой исправляющей способности — сбойная страница должна содержать не более 32 битовых ошибок и не более 1 в каждом из 4 битов — суровый челендж.
Спасибо за комментарии.
Да, от счетчика я уже отказался. Протестировал прошивку с поиском последней записанной страницы, по времени отметки примерно тоже, но надежность, действительно, сильно повысилась.
Осталась уязвимость при записи второй половины страницы с существующей отметкой в первой, но тут уже нужно уменьшать число отметок до 46. В принципе, для многих соревнований хватит и 46, думаю, реализую настройку для перевода станций в режим с записью каждой отметки в отдельную строку для надежности.

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

Спасибо!
Да, данные на картах не шифруются. Мастер-пароль хранится в закрытом виде, нужен он только для постановщика для корректировки времени, номера станции. При отметке участником никак не задействован.
Mifare Classic 1k поддерживает шифрование, можно сделать защиту на чтение/запись. Подробности есть в даташите на него, пункт 8.7
Библиотека, которой я пользуюсь, поддерживает шифрование, можно посмотреть в примерах, вроде там есть.
У меня защита от копирования довольно банальная — станции тоже пишут в себя отметившиеся чипы и потом можно легко сверить результаты.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории