На Хабре уже было довольно много интересных публикаций с неформальным использованием Экселя (списочек под катом). Этой статьёй мне хочется поделиться с сообществом красивыми результатами нашего французского коллеги. Автор, Тьерри Гасперм (Thierry Gasperment), создаёт подобную красоту на VBA под Excel / Access / Word и VB6. Увы, сайт на французском, а материалы, хоть и свободны для использования, но для просмотра и скачивания зачастую требуют регистрации. По этой причине я поместил наиболее интересные примеры на свой GitHub. Для тех, кто захочет "выйти за пределы шахматной доски", советую всё же потратить пару минут своего драгоценного времени и зарегистрироваться на сайте. Оно того стоит, так как количество и качество информации на сайте Тьерри заслуживают того. Для регистрации и просмотра рекомендую Chrome: автоматический перевод Edge порождает "гуртовщиков мыши" и прочие химеры вроде "glutMouseРазумный" и "Силовая установка" (PowerPoint).
Ненормальное программирование *
Извращения с кодом
Новости
Rust должен умереть, МГУ сделал замеры
В предыдущих сериях:
Медленно, но верно Раст проникает не только в умы сотрудников больших корпораций, но и в умы школьников и студентов. В этот раз мы поговорим о статье от студента МГУ: https://rustmustdie.com/.
Её репостнул Андрей Викторович Столяров, доцент кафедры алгоритмических языков факультета ВМК МГУ им. М. В. Ломоносова и по совместительству научрук студента-автора статьи.
Я бы сказал, что тут дело даже не в том, что он "неинтуитивный". Дело скорее в том, что компилятор раста сам решает, когда владение "должно" (с его, компилятора, точки зрения) перейти от одного игрока к другому. А решать это вообще-то должен программист, а не компилятор. Ну и начинается пляска вида "как заставить тупой компайлер сделать то, чего я хочу".
Бред это всё.
— А. В. Столяров
Pump Station Framework для ПЛК ОВЕН 110-32м2
Привет, Хабр! Это мой первый опыт написания здесь, если что, уж сильно не пинайте). Сам я программист самоучка. Новый язык Structured Text и среду разработки Codesys разбирал по мануалу и стандарту МЭК-61131-3. В статье будет рассматриваться легкий самописный фреймворк для быстрой сборки насосной станции реализованной на ПЛК 110-32м2 фирмы ОВЕН.
Игрушечный ЯП — Cockroach
Всем привет.
В школьном и более продвинутом курсе информатики есть учебный язык - Кукарача. Довольно удачный, для обучения детей программированию. Простой, понятный, визуальные результаты с первой строчки.
Авторы курса сделали только exe-шник под Windows. Когда младший сын начал требовать "Папа научи программировать" принял волевое решение - сделать свою имплементацию. И сделал.
FizzBuzz по-взрослому
Тема эта стала неинтересной, всё то же и так же из раза в раз
Сеньоры начинают и проигрывают пенсионерам.
Это уже третий раз и должны уже наверно свыкнуться. ))
Немного лирики. Хабр из места, где пишут в стиле "смотрите коллеги, можно и так ..." превратился в место хвастовства и рекламы. Пенсионеры хорошо знают, что невозможно написать код, который нельзя улучшить. И реальные сеньоры только рады, когда им пишешь про то, как можно улучшить их код. Я проверял ))
Почему аспирантура — это деньги и ̶в̶р̶е̶м̶я̶
Раз уж начали за упокой за аспирантуру и продолжили делиться своим мнением в ответных статьях, то есть смысл высказаться и мне, чтобы помочь читателю, ознакомившемуся с предыдущими двумя материалами, решить вопрос: "Как совместить такой реликт советского образования, как аспирантура, с работой в IT и преподаванием?".
Используем телетайп Consul 254 вместо клавиатуры для Arduino
Из документации:
Электрифицированная пишущая машина Consul 254 предназначена:
а) для ввода алфавитно-цифровой информации в ЭВМ при печатании оператора на клавиатуре машины
б) для вывода алфавитно-цифровой информации в порядке печати на лист или рулон бумаги по сигналам, посылаемым от ЭВМ
в) для применения в устройствах подготовки данных или в других устройствах, параметры которых соответствуют параметрам указанной машины
Сегодня мы займёмся пунктом "а" - будем читать данные с клавиатуры с помощью ЭВМ Arduino Uno.
http://http://http://@http://http://?http://#http://
Я опубликовал этот твит пару дней назад. И теперь, после огромного количества комментов и ретвитов, мне кажется, что я должен остановиться на этом подробнее. Правда ли это валидный URL? Как его распарсить?
Какие у нас есть клавиши в клавиатуре или как непрограммист язык разрабатывал
Несколько лет назад я решил под свои скромные производственные задачи сделать какую-то такую - не знаю какую - систему, но чтоб была похожа на таблички excel на стероидах.
На вторую неделю разработки нашего супер-пупер-проекта «базы данных для неразработчиков», ведущий разраб спрашивает меня — «ок, и как ты хочешь, в одной ячейке таблички вызывать другую? а если из другой таблицы? а как их складывать и умножать?».
Возник выбор — прикручивать JS и SQL (как это делают нормальные люди) или разрабатывать собственный синтаксис. Я недолго подумал и решил, что собственный синтаксис лучше.
Хочу рассказать про некоторые моменты, которые стали понятны в этом процессе — может, вы передумаете делать свой DSL 😅
Ферритовый ROM для самых маленьких
И снова здравствуйте, дамы и господа. Наш Отдел Перспективных Разработок продолжает свой цикл статей о древних технологиях и опять выходит на связь с очередным передовым творением нашего сумрачного разума приближающим трепетный момент всеобщей строггофикации.
Сегодня мы совершим небольшой экскурс в историю прошлого века и выдернем оттуда знания об артефакте, практическая пригодность которого на сегодняшний день такова, что перед ней спасует даже наша отдельная лаборатория, которая всем этим поделкам назначение придумывает. В смысле, нулевая практическая пригодность. Однако, вполне сгодится на лабораторную работу для школьника с ардуиной, или занятие на вечер для тебя, мой дорогой инженер с каждодневной работой, женой, дочкой, двумя котами и кризисом среднего возраста.
Итак, мы рассмотрим память на ферритовых кольцах, причем, даже не RAM, а ROM.
Примеры кошмарного программирования вокруг нас. Выученная беспомощность
Нет в мире совершенства. Куда ни глянь — всюду костыли и компромиссы. Вроде каждый в отдельности хочет сделать как лучше, но чем больше участников — тем сильнее хаос…
Возьмём классический пример — реестр Windows. Этот странный артефакт инженерной мысли представляет некое подобие иерархической БД для хранения абсолютно всех настроек — и системных, и приложений, и драйверов. Центральное бинарное хранилище заменило массу файлов .ini, разбросанных по всей системе и должно было упростить жизнь. Но вышло наоборот. И глядя на монструозный тормозящий конструкт, возникает только один вопрос: как это исправить? Ответ тоже простой: «Если вкратце, то никак». И так во всём. Мы создаём монстров, а потом не можем от них избавиться.
Подключение WIFI-ретромодема к компьютеру Z80-MBC2
Здравствуйте, дорогие мои любители программных археологических раскопок и аппаратных копролитов, утонувших во мраке веков.
Сегодня наш Отдел Перспективных Разработок представит вам свое новое детище, связанное с доработкой известного в узких кругах ультрабюджетного простейшего многоплатного восьмибитного компьютера Z80-MBC2 для подключения WIFI-модема с целью зайти через него, например, на BBS, или даже, в перспективе, создания подобия простейшего веб-браузера.
FizzBuzz по-македонски
Long story short
Сеньоры начинают и проигрывают
Тут как на олимпийских играх - быстрее, короче, изящней.
В продолжение увлекательной дискуссии
ESM. Выходим за рамки
Итак, работая над... ну не знаю... каким-нибудь замечательным генератором статики, вы, возможно, захотите импортировать в свой код зависимости напрямую из текстовых файлов, таких как: HTML, MD, CSS, SVG или JSON. Конечно, можно использовать бандлер с соответствующим лоадером. Но, допустим, ваш кодекс самурая велит вам - никаких лишних npm install xxx
и промежуточных билдов! Только хардкор! Что делать? Выход есть.
Можно, но лучше не стоит: разбираемся в связях между объектами, функциями, генераторами и сопрограммами
Давайте проведём исследование некоторых взаимосвязей функций, объектов, генераторов и корутин в Python.
На уровне теории, каждая из этих концепций очень сильно отличается от других; но динамическая природа языка позволяет им заменять друг друга на практике.
Предупреждаю: мы рассмотрим рабочие, но очень странные примеры кода; я не советую вам применять их в реальных проектах!
Мечтают ли разработчики о декларативных тестах — 2. Особое мнение
По непроверенным данным, половина несчастных случаев происходит после слов "смотри, как я умею", другая же половина — после "ерунда, смотри, как надо".
Тут один приятель, увидев фокус с тестами без тестов с использованием обобщенных аттрибутов из preview версии C# и особенностей экосистемы NUnit, отметил, что все сделано транс-ректально, а сам бы он применил Fody, и вышло бы гораздо лучше. Демонстрировать, к сожалению, ничего не стал. А мне вспомнился комментарий к описанию другого преодоления концептуального ограничения языка. Тогда руки не дошли попробовать, а сейчас вот решил глянуть, что это за птица, и проверить, поможет ли она написать более элегантное решение.
Нормальные алгоритмы Маркова как основание языка программирования
В этой статье хотелось бы поделиться мыслями о применении Нормальных Алгоритмов Маркова (далее по тексту: НАМ) в качестве основания для языка программирования.
Заранее скажу, что представленный концепт ЯП не претендует на решение каких-либо «мировых» проблем программирования, не представляет собой замену существующим инструментам, это результат моих скромных исследований в области проектирования ЯП.
Подбираем скины в Counter-Strike: Global Offensive в цвет сумочки
Многопользовательская Counter-Strike: Global Offensive наполнена различными раскрасками для оружия разной степени редкости и привлекательности. Некоторые игроки гонятся за уникальными скинами, а другие выбирают на основе субъективного вкуса. Помимо официальной торговой площадки Steam, скины можно купить на сторонних ресурсах, доверие к которым невелико. Но в обоих случаях нет фильтра по цвету.
Вручную перебирать все варианты раскраски для всех видов вооружений очень долго. К счастью, проблему можно автоматизировать. В статье я покажу, как извлечь необходимые ресурсы из игры, и еще раз поговорю про сложность определения схожести цветов.
Мечтают ли разработчики о декларативных тестах
Завершение работы над прошлой публикацией (читать которую для понимания этой совсем не обязательно) принесло мне не мир, но
[TestCase(typeof(Impl), "command")]
public void Test(Type impl, string cmd) =>
((I)Activator.CreateInstance(impl)).Do(cmd);
использовать
[TestCase<Impl>("command")]
public void Test<TImpl>(string cmd) where TImpl : I, new() =>
new TImpl().Do(cmd);
И он оказался ближе, чем я мог подумать. А дальше пошло-поехало…
Атака на String.hashCode: прообразы и коллизии
Как-то раз мне понадобилось несколько наборов строк с коллизией по хеш-коду. То есть таких, чтобы значение
String::hashCode()
совпадало для всех строк в наборе.Блуждание по интернету не дало результатов, примеров было мало и все они довольно однообразны. Поиск по словарям подарил забавную пару
"javascript's".hashCode() == "monocle".hashCode()
, но практической пользы не принёс. Полный перебор не рассматривался в виду скорой тепловой смерти вселенной.Тот самый случай, когда проще сделать всё самому. Стандартная хеш-функция строки в Java считается криптографически нестойкой, так что знаний из школьного курса математики должно быть достаточно.