Такты, стеки, два колеса
1.35K subscribers
487 photos
26 videos
4 files
342 links
О технологиях, научной фантастике, программировании и схемах.

Навигация по каналу: https://t.me/clockstackwheels/3

Чат канала: https://t.me/joinchat/VNhNF1NF70dkFgUX
Download Telegram
Есть такое понятие Liminal Space — пространство, являющееся переходным между двумя другими. Как правило это пустой коридор, пустая проходная комната, большой пустой двор и так далее. Такие места вызывают у людей определённые эмоции, поэтому за данным понятием стоит целая визуальная эстетика. Есть сабреддит по теме, и из него данные публикуются в твиттер аккаунт Liminal Spaces, у которого более 800 тысяч подписчиков (по меркам Твиттера это как на ютубе 20 млн).

Эстетика сама по себе интересная, но сегодня хочу рассказать вам об игре Superliminal, на которую недавно наткнулся. Она из тех игр, что целиком продают себя своей идеей, и вообще, строятся вокруг неё. Посмотрите на видео ниже, и сразу станет понятно, в чём прикол. Помимо классной идеи не могу не отметить техническую реализацию: мне страшно даже представить, с каким количеством сложностей и краевых случаев столкнулись разработчики. Там дальше по игре вообще такие выверты пространства идут, что авторы Portal нервно курят в сторонке. И да, игра активно использует концепцию Liminal Space. Под конец даже слишком.

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

Тем не менее, очень яркое и запоминающееся видеоигровое впечатление. Рекомендую.

#games
👍3
Американский философ и когнитивист Дэниел Деннет одним из первых приравнял религию и вирус. Я уже об этом как-то рассказывал: вирус это неодушевлённая конструкция, которая сбивает работу поражённой системы так, чтобы:
1. Нарушать естественные функции этой системы
2. Способствовать самораспространению

Нельзя сказать, что вирус думает или что-то делает специально. У него нет концепции зла и агрессии. Это просто механизм, который -- чаще всего из-за случайного совпадения обстоятельств -- способствует разрушению и копированию. Представьте, что вы подбрасываете в воздух детали от Лего, и они по каким-то странным законам при падении соединяются в случайную конструкцию. Вы делаете это очень много раз, вариантов конструкций тоже очень много. В какой-то момент среди прочих конструкций получается робот, который собирает из окружающих его деталей свои копии. Но при этом остальные конструкции он ломает, нарушая их функции. Очевидно, довольно быстро такие роботы потратят всё доступное Лего на себя, и давать им новое Лего будет опасно.

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

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

К сожалению, иногда сам базис идеологии заражён. Это может приводить к тому, что человек даже на самые чудовищные события выдумывает оправдательные объяснения, которые идеологию выгораживают. Я уверен, в стране не сотни и даже не тысячи, а куда больше людей, которые смотрят телевизор, верят пропаганде и объясняют себе сегодняшние события каким-то оправдывающим образом. Например, у меня есть гипотеза, почему старшее поколение может так сильно вестись на откровенно нелепую пропаганду: сознание уже пережило крах идеологии в 91 году и защищается от того, чтобы пережить его снова. Звучит парадоксально: люди уже совершенно точно знают, что по телевизору могут десятилетиями лгать и выдавать ложную картину действительности, и именно из-за этого эти же люди не видят сейчас того же самого.

Воспринимайте это как форму болезни. Постарайтесь не ссориться со своими друзьями и близкими. Они могут быть глубоко не правы, а их неправота -- часть общей проблемы, которая привела к сегодняшнему дню. Но они не понимают. Функции их сознания отключены или искажены вирусом пропаганды в комбинации с личными страхами. Их не убедит курс доллара, записи о гибели людей, потеря работы. Даже новая волна пустых полок в магазинах не убедит. Даже понимание того, что их дети уже живут в мире, где возможна война.

#life
👍8😢51
Получил ответ на одну из двух жалоб через «Госуслуги Решаем Вместе». Я изначально отправил не только ту жалобу про двор, о которой вам писал, но и вторую: про заброшенную подземную парковку, с которой никто ничего не делает, поэтому вандалы её изрисовали, а бомжи сломали дверь, чтобы бухать внутри.

Ожидаемо получил ответ в духе "Я не я, хата не моя". Фирма-банкрот уже год ведёт "инвентаризацию", ага. А у нас, похоже, реально такие законы, которые позволяют купить у города землю рядом с жилыми домами и превратить её в свалку на много лет. Посмотрел бы я на такую заброшку напротив квартиры Беглова.

#life
Мой VPN-провайдер Surfshark при подключении по-умолчанию ищет ближайшую страну с нормальным интернетом.

Запустил вот его сейчас (нужно нажать на картинку, чтобы стало понятно):
😁6
Новый любопытный фантастический сериал Severance. По сюжету люди могут добровольно пойти на операцию: им в голову встраивают чип, который на работе отрезает доступ ко всем личным воспоминаниям, чтобы не отвлекаться, а дома отрезает доступ ко всем рабочим воспоминаниям.

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

Конечно, сама идея в таком виде абсурдна — никто не согласится жить на работе и не знать вообще никакой жизни, кроме своего офиса. Всё-таки на работе нам важно понимать, ради чего мы зарабатываем эти деньги. Да и в обычной жизни важна идентификация себя, как профессионала в какой-то сфере.

Но мне нравится новизна идеи и нравится то, в каком виде через призму фантастики предлагается поразмышлять о work / life balance. Пока вышло три серии — сериал неспешный и не сказать что переполненный событиями, явно на любителя. Тем не менее, на мой взгляд внимания заслуживает.

#fiction
👍7
Сопоставление с образцом (pattern matching) — сильный механизм языков программирования, который, к сожалению, встречается не так часто. Причём, как в коде разработчиков, так и в поддержке со стороны самого языка.

Разработчики на функциональных языках используют этот механизм довольно часто, потому что у них вообще многое определяется статически через правильный подход к системе типов. Разработчики же на императивных языках очень любят огромные многоуровневые ветвления. Есть даже такое понятие «Спагетти-код» — раньше его применяли к коду, перегруженному операторами перехода, но в современном виде это скорее об избытке операторов условия.

Pattern matching позволяет накладывать на объекты некоторый трафарет и смотреть, попадают ли они под него. Это не только выглядит лаконичнее и короче, чем дерево условий, но ещё и понятнее с точки зрения восприятия человеком: вот у нас заказ содержит более 10 элементов и при этом стоит более 1000 долларов, значит делаем на него скидку 10 центов. При этом трафарет работает как сортировщик монеток: самая маленькая проваливается в первый паз, следующая по размеру в следующий итд, применение условий идёт сверху вниз. Есть и неявный плюс: такой подход автоматически провоцирует разработчиков проводить проверку на null. Ведь null не может подходить под трафарет «содержит более 10 товаров».

К счастью, в C# этот механизм в последних версиях активно развивают и совершенствуют. И это одно из многочисленных преимуществ C# над Java.

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

Моё поколение застало, как измеряли давление наши родители: манжета на плечо, которую не всегда легко затянуть одной рукой. Необходимость вручную накачать её грушей, а усилие для этого требуется немаленькое — удивительно, как бабушки справлялись. Затем нужно правильно закрепить головку стетоскопа на сгибе локтя. И слушать, параллельно следя за аналоговой стрелкой и стравливая воздух в нужном темпе.

Технологии в этом отношении сделали гигантский шаг в плане удобства. Хотя ничего принципиально магического в современном тонометре нет: и электрический компрессор и возможность прибором определить сердцебиение были и раньше. Но развитие вот таких бытовых вещей в целом идёт по пути автоматизации и уменьшения размеров. Можно попредставлять, какая техника сейчас не слишком удобна, и куда её будут улучшать. Хотя, конечно, где-нибудь в пределе ТРИЗ намекает нам о том, что решать задачу нужно совсем иначе — например, собрать человеку новое тело, вообще не нуждающееся в измерении давления. Но это уже другая история.

#gadgets #life
В Питерлэнде обнаружил, что при ходьбе по светлым плиткам мои сапоги очень сильно и неприятно скрипят своей подошвой. А при ходьбе по темным нет.

Я так и знал, что умение ходить только по определённым клеточкам пригодится! Не зря тренировался всё детство.
😁12👍7
Сервисы вопросники вроде TheQuestion и Яндекс.Кью не слишком честно обращаются с экспертами. Вот ты регистрируешься как, например, программист. Тебе там сразу рассказывают о том, как много людей ждёт именно твоих ответов на их вопросы. «Наконец-то я смогу поделиться своими знаниями с миром!» — думаешь ты.

На деле большинство вопросов (по крайней мере по программированию) делятся на два вида:

1. Какая-то абсолютно невежественная дичь, типа «Как взломать QR код с помощью логарифмов?»

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

В итоге настоящего «Поделиться знаниями» так и не происходит. Я вот получил ещё в прошлом году статус эксперта на Кью, и забил. Вопросы очень скучные.

#web
Посоветую вам YouTube-канал Stuff Made Here (в свете событий можно скачать все ролики с него и потом ностальгировать по ютубу вечерами).

Пожалуй, это самый крутой инженерный видеоблог, который я встречал. У автора целый подвал роботизированных станков за миллионы баксов (просто несбыточная мечта гика). И он с их помощью городит электронно-механические конструкции, которые совмещают в себе сложное программирование и вполне очевидную практическую цель, как правило недостижимую или труднодостижимую без длительных тренировок. Вот я прикладываю видео, где он делает бильярдный стол и роботизированный кий, который позволяет не промахиваться.

Продемонстрированы все стадии разработки: неудачные прототипы, подбор алгоритма, проверка гипотез. При этом подано всё в довольно понятном и динамичном стиле. с хорошим юмором. Ролик длиной 20-30 минут обычно содержит недели и месяцы разработки.

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

#dev #gadgets

https://www.youtube.com/watch?v=vsTTXYxydOE
👍8
Лигатура — это символ в типографике, образованный слиянием двух (или более) других символов. Например, в скандинавских языках есть символ Æ — он хранится и печатается как один символ, неразрывно, но, очевидно, образован совмещением букв A и E.

В программировании тоже есть лигатуры. Если у вас мощная среда разработки и подходящий шрифт, то вы, как правило, можете их включить. И тогда ваш текстовый редактор будет отображать некоторые парные и тройные символы, как один. Например, последовательность -> может превратиться в символ →. Это нужно только для отображения, на содержимое настоящего текстового файла настройка никак не влияет, потому что компилятор или интерпретатор языка ждёт именно ->.

Я категорический сторонник использования лигатур в IDE. Если вы никогда не пробовали, рекомендую включить и поработать с ними несколько дней, а может даже недель. Посмотрите на две конструкции ниже. Символы => и <= очень похожи между собой визуально, но при этом их суть принципиально разная. Включение лигатур позволяет отразить эту суть и избежать некоторых возможных ошибок (например, путаницу между >= и =>).

#dev
👍5
Уже понятно, что сегодняшний день не привёл к изменению ситуации. Это будет второй и последний пост по данной теме. В дальнейшем я продолжу вести этот блог как чисто бытовой, так, будто бы жизнь продолжается. Поэтому отписывайтесь все те, кто считает это неадекватной реакцией.

1. У меня нет иллюзий по поводу того, кто именно что начал. Но паники и нервов было и без того с избытком за последнюю неделю. Поэтому данный текст будет холоден, не обессудьте.

2. Мы с этим ничего не могли сделать. Я бы сказал, что прогрессивная часть населения в плену у «империалистической» части населения, которой большинство. Этой большей части не нужны технологии, бизнес, комфорт и удобные сервисы. Не нужно развитие науки, рост экономики, международное уважение. Зато им нужны лозунги и формальные названия. У этих людей другие ценности, а наши ценности они считают детскими капризами. Это массовое явление, и мы действительно с этим ничего не могли сделать никак, хотя пытались. Людям на полном серьёзе важнее жить в коробке от холодильника, но зато «независимыми». Возможно, поколение наших детей переломит эту ситуацию.

3. Запад не враг, но и не особо друг. Массовая русофобия не только лицемерна по своей природе, но и не учитывает пункт 2. Если уход физических магазинов ещё можно объяснить отсутствием физической возможности дальше вести бизнес, то отключение сервисов — особенно IT-сервисов — это умышленная попытка причинить вред. Самое главное, что бьёт это как раз по той самой прогрессивной прослойке, которая сделала больше всего за последние годы, чтобы не допустить происходящего. Ватный алкоголик Петя не будет страдать от отключения Microsoft и PlayStation, а вот гики и айтишники — будут. И именно они в меньшей степени поддерживали события, которые привели к текущему результату.

4. Примерно треть моих друзей заграницей рассказывают о боязни говорить по-русски или даже каких-то реальных инцидентах, связанных с претензиями к ним. Хотя уж к ним то вообще претензий не должно быть. США — единственная страна в мире, использовавшая ядерное оружие против людей, сотни тысяч погибших, но я что-то не вижу, чтобы американцев по всему миру чурались просто за факт рождения в Америке. Лицемерие как оно есть, здесь у меня точка зрения однозначная.

5. Мне не стыдно, что я русский. Я не отвечаю за действия политиков даже косвенно (см п.2). Я не буду извиняться за чужие поступки, если это не поступки моих несовершеннолетних детей. Коллективная ответственность — просто повод для нанесения умышленного вреда (см п.3).

6. Я не уезжаю из страны. Я не хочу оставлять здесь родителей. И я буду помогать другим, кто не смог или не захотел уехать, восстанавливать всё из руин. Мир несправедлив — политики сломали жизнь обычным людям, а чинить её придётся нам самим. Но за нас этого никто не сделает.

7. У многих есть хобби, по которым ударили санкции. Кто-то любил путешествовать, сейчас это недоступно. Я люблю кино и видеоигры, люблю гаджеты. Буду искать способы, которые смогут мне это заменить, что-то близкое по эмоциям. А может и исследовать новые варианты. Я объективно смотрел слишком много ютуба и читал слишком мало книг, это возможность сдвинуть баланс.

8. У многих пострадала работа, или они даже её потеряли. Если у человека не было квалификации, и его работа не несла настоящей ценности (например, инстаграм-модель или видеоблогер), то ему может быть по-настоящему сложно сейчас. Ругайте меня, но такие случаи не вызывают во мне особенного сочувствия. Для людей же, которые что-то умеют делать, работа найдётся. На руинах нужны руки и мозги. Мужики, вспоминайте пайку, и вообще работу с инструментами.
👍488😢3
Сейчас уже её не продают, но если где-нибудь на барахолке найдете, посмотрите на настолку Factory Fun. Эта игра, в которой надо строить системы из труб для конверсии разных видов краски. Игровая механика провоцирует вас усложнять систему и применять разные изощрённые подходы. Чем-то похоже на программирование, без шуток.

Игра не без недостатков, конечно — иногда очередной ход вынуждает вас ломать всю систему и строить на её месте новую, а потом внезапно возвращать как было. Впрочем, возможно это часть её атмосферы :)

#games
👍10
Смотрите, как одна проблема компенсирует другую: в Питере неубранные глыбы льда помогают перешагивать через вездесущие не к месту построенные заборы. #life
😁10👍3
У гриля выпал винт в одной из петель крышки. Несовершенство конструкции или дефект сборки — он расшатался от вращения и постепенно выкрутился, потому что не был закреплён.

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

При этом вот эта вот накладка с надписью 180 снимается только изнутри, нужный мне выкрутившийся винт сразу за ней. А вот надевается она снаружи, там для этого защёлка есть.

То есть я разобрал практически половину всего гриля просто чтобы снять маленькую крышечку. Затем я собрал заново весь гриль, затянул винт и крышечку защёлкнул в последнюю очередь. Это напоминает мне уровни в видеоиграх, когда ты два часа добираешься по стенам и обломкам до какой-нибудь конструкции в дальнем углу, но зато потом с неё сбрасываешь лестницу и создаёшь себе таким образом короткий путь. Было увлекательно :)

У меня изначально был задуман тег #hobby. Сначала я хотел помечать им DIY, но последнее время подзабросил это дело. Давайте считать починку вещей и вообще возню со всякой инженерией тоже моим хобби — это очень близко к правде.
👍62
Ответили на мою жалобу на двор. Ничего интересного: «Там планируется школа, сейчас идут проектно-изыскательские работы, закончатся во втором квартале».

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

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

Ну и не ясно сколько это займет, особенно в текущих условиях. Могут пять лет эту школу делать. #life
Попробовали на работе предметно-ориентированное проектирование (Domain Driven Design). Это такой способ построения архитектуры, когда ты (чаще всего с помощью системы типов и ООП) описываешь физическую суть вещей, которые представлены в твоей программе.

Например, если в программе есть объект "Книга", то её нужно снабдить свойствами, которые бывают у книг в реальности: число страниц, автор, язык, тип обложки и т.д. При этом данные свойства должны быть такими, чтобы присвоить им нереалистичные значения было нельзя. Допустим, число страниц не может быть отрицательным (и скорее всего в реальном мире не может быть нулём). При попытке установить отрицательное число страниц программа должна выбросить исключение. А совсем в идеальном случае -- не дать этого сделать программисту на уровне статического анализа кода.

Описав все свойства книги, вы снабжаете её операциями, которые над ней можно сделать. Например, из книги можно вырвать страницу, и при этом число страниц уменьшается. Нет такого случая, когда можно вырвать страницу без изменения числа страниц. Вы строго программируете эту зависимость, делаете у книги метод "Вырвать страницу", а он уже уменьшает число. Кстати, свойство "Число страниц" при этом нельзя переназначить в уже созданной книге. Можно только создать книгу, передав в её конструктор (так называется в программировании функция создания объектов) заданное число страниц. Но поменять число страниц можно только специальными методами "Вырвать страницу" и "Вклеить страницу".

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

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

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

Но первый проект с этим подходом мы сдали хорошо, без багов. Лучше, чем многие предыдущие.

#dev
👍5
Несколько лет назад у моего друга Дениса Ольшина один знакомый уезжал из страны и оставил ему в подарок свой 3D-принтер.

Пару дней назад мой знакомый написал мне, что уезжает из страны, и оставил мне в подарок свой 3D-принтер. Спасибо ещё раз, если читаешь это :)

Вывод: Денисы получают 3D-принтеры в подарок от уезжающих.

#gadgets
👍18😁8