Обновить
152.59

Ненормальное программирование *

Извращения с кодом

Сначала показывать
Порог рейтинга
Уровень сложности

Решаем головоломки и настраиваем среды Kubernetes: подборка новых языков программирования

Время на прочтение5 мин
Количество просмотров3.1K

В блоге beeline cloud мы уже делились дайджестом свежих DIY-материалов о контейнерах, DevOps и архитектуре. Сегодня расскажем, кто и зачем разрабатывает новые языки программирования — выбрали те, что появились на свет за последние три года. Некоторые из них написаны энтузиастами для решения головоломок на конкурсах, а другие — разработчиками крупных организаций для боевых задач.

Читать далее

Программирование для народа

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров8.6K

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

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

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

И потому возникает естественная мысль — передать такие вещи тому, кому больше надо, заодно разгрузив от них себя.

Читать далее

Один день из будущего

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров5.4K

Он проснулся от звонка будильника на часах. Взгляд на часы одним глазом, отключение будильника и погружение обратно в сон. Ему всегда не хватало совсем чуть-чуть, чтобы выспаться. Так же, как вечером еще чуть-чуть, чтобы досмотреть очередную серию бесконечного сериала.

Полчаса безуспешных попыток вернуть прерванный сон, и он встал с кровати, обреченно побрел в ванную. Сегодня был решающий день. Ему нужно было довести дело до конца. Он не хотел торопиться, ко всему относился с ленцой. Считал, что лучше всё тщательнее продумать и сделать, чем двигаться по недоконченному плану, но время поджимало. Сейчас его проект был почти идеален, не хватало самой малости, которая никак не давала ему покоя.

Заварив чашку ароматного Турецкого чая и разжарив пару яиц на сале, он удобно расположился за кухонным столом. Снял часы, поставил на зарядку, затем открыл ноутбук и увидел список новостей из различных источников. Лента была единой и собрана из новостей RSS, сообщений банков, писем из налоговой, а также сообщения от Виктора: “Серёга, срочно посмотри — пока не удалили” и ссылка на страницу с видео. Сообщение было отправлено уже ночью, вероятность, что видео уже удалено, была очевидной.

Сергей ткнул на сообщение, оно открылось на весь экран. Удивительно, но видео проигрывалось даже без загрузки. В ролике был очередной обзор о проблемах на Новой Марсианкой Колонии. И хоть новость с видео действительно уже удалили со всех серверов федерации, видео было доступным. Разгадка была простой, он был одним из немногих, кто своевременно осознал ценность данных. Одним из первых, кто смог отказаться от вендорских экосистем и подходов изоляции данных. Данные должны быть свободны! Разработка этой концепции заняла долгое время, а ещё больше — разработка первого сервиса и доведения концепции до ума. Сейчас, когда эта концепция уже работала, это помогало ему постоянно.

Читать далее

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI?

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров16K
image


Зачастую в процессе разработки собственных устройств или моддинга уже существующих, встаёт задача выполнения стороннего кода: будь то ваши собственные программы с SD-флэшек, или программы, написанные другими пользователями с помощью SDK для вашего устройства. Тема компиляторов и кодогенерации достаточно сложная: чтобы просто загрузить ELF или EXE (PE) программу, вам нужно досконально разбираться в особенностях вашей архитектуры: что такое ABI, релокации, GOT, отличие -fPIE от -fPIC, как писать скрипты для ld и т. п. Недавно я копал SDK для первых версий Symbian и основываясь на решениях из этой ОС понял, каким образом можно сделать крайне «дешевую» загрузку любого нативного кода практически на любом микроконтроллере, совершенно не вникая в особенности кодогенерации под неё! Сегодня мы с вами: узнаем, что происходит в процессе загрузки программы ядром Linux, рассмотрим концепцию, предложенную Symbian Foundation и реализуем её на практике для относительно малоизвестной архитектуры — XTensa (хотя она используется в ESP32, детали её реализации «под капотом» для многих остаются загадкой). Интересно? Тогда добро пожаловать под кат!
Читать дальше →

Маг молний

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров5.3K

Когда-нибудь задумывались над тем, чем, в сущности, является программирование?

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

Читать далее

Начинаем продолжать: обработка исходников с помощью ИИ в оффлайне

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров14K

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

Читать далее

Размышления о структурном программировании

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров24K


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


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


Все наверно помнят, что любой алгоритм можно представить в виде трех видов алгоритмических конструкций, следование, ветвление и повторения? А иногда еще добавляют, что эту теорему выдвинул и доказал Э. Дейкстра в 70-х гг. прошлого века, в том числе, включая широко распиаренный якобы запрет на использование операторов goto.

Читать дальше →

Управление памятью и разделяемыми ресурсами без ошибок

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров5.3K


Мельком пробежал статью Синхронизация операций в .NET на примерах / Хабр, после чего захотелось поделиться с пользователями Хабра некоторыми мыслями насчет синхронизации доступа к объектам в различных языках программирования.


Если честно, то большая часть моей статьи уже давно лежала в черновиках, но все не доходили руки её доработать, а тут такой хороший повод поделиться своими размышлениями на эту тему, оставалось просто дописать эту вводную часть :-)

Читать дальше →

Новый год и Atari 2600

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров5.1K

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

Например, «гифт» — поздравление с днём рождения. Или же более актуальное прямо сейчас: новогодние поздравления. Признаться, я и сам не раз делал подобные вещи. Например, в предыдущий раз я пожелал всем незабываемого нового 2020 года. И так как дата публикации очередной статьи пришлась на конец декабря, это прекрасный повод снова поздравить читателей таким образом, а заодно и рассказать о том, как это сделано.
Читать дальше →

И послала жена мужика из башни Вулыха со списком к празднованию Нового года

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.9K

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

Как и демотивированный программист, мужик подвержен прокрастинации. Поручение не выполнил и бесцельно обошел все что представляет хоть какой-то интерес в радиусе 1.5км от их квартиры в башне Вулыха. Нарисовать вероятный путь его праздношатания у дома достаточно просто...

Читать далее

Заглядываем в консоль: пасхалки и приглашения на работу, которые вы могли пропустить

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров7.6K
image

Это статья о поиске пасхалок в коде и о том, что мне удалось найти. Покажу, где были поиски, и на каких популярных сайтах их все-таки удалось найти. Погнали!
Читать дальше →

FizzBuzz for Senior

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров10K

Алоха всем.

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

А как быть интервьюерам? Какую задачу дать кандидату? Как понять сигналы, что кандидат «шарит»?

Я наткнулся на интересную статью по интервью на Senior инженера C++. Там у парня спрашивают базовую задачу FizzBuzz.

В этой статье мы рассмотрим бенчмарки различных решений на Java, начиная от простых вариантов и заканчивая многопоточными реализациями. Давайте разбираться вместе!

Читать далее как "Senior" решает FizzBuzz

CLI'нический парсинг

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.9K

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

Читать далее

Ближайшие события

Тестовое в Firefly Studios или игра за час

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров7.8K

Пару недель назад, на меня вышла HR "светлячков" и пригласила поговорить о позиции AI программера в их новую старую игру. Я был несколько удивлен, потому что знаком с парой ребят из студии и знаю, что найм у них сейчас остановлен. Но всегда интересно пообщаться с умными людьми, поэтому отказываться не стал. Первый созвон с HR вышел стандартный, где над чем работал, какие игры шипнул. Не очень понимаю зачем все это было спрашивать, если все это есть на линкедине подробно и с датами. Ну да ладно - видно такая их эйчарская доля по тридцать три раза переспрашивать. Или HR дальше второй страницы просто поленилась почитать.

Забукали время технического интервью. В полдень четверга на встречу приходит сотрудник студии и начинает просматривать резюмешку дальше второй страницы, где натыкается на скрин опенсорсного проекта StoneKingdoms, в который я некоторое время активно комитил. Проект, если что, получил благословение самого Simon Bradbury, так что проблем с правами на использование ресурсов из Stronghold нет. Посыпались вопросы, а что за проект? а как делаете? и что все на lua? а как же плюсы? Где-то на середине разговора к нам подключился другой разработчик "светлячков", с которым мое знакомство началось еще в 2010, когда он помогал восстанавливать исходники Caesar III и просто давал консультации как реализована игровая симуляция. Мы и сейчас иногда общаемся на форуме по ремейкам старых игр.

Как прошел собес...

Вся мощь паттернов в Wolfram Language

Уровень сложностиСредний
Время на прочтение32 мин
Количество просмотров5.2K

Редкая птица долетит до середины Днепра, не каждый разработчик осилит все паттерны в WL. Нет ему равных языков в паттерн-матчинге. Чуден и необычен язык этот. Изобилует он точками, подчеркиваниями, да запятыми так, что в глазах рябит, да разум мутнеет.

В этой статье я постараюсь сделать как можно более подробный обзор на механизм сопоставления с образцом в Wolfram Language (WL) и покажу реальные примеры, где я сам и мои товарищи его активно используют. А также я поделюсь всеми неочевидными тонкостями работы с шаблонами, с которыми лично я столкнулся в процессе написания кода на WL. По возможности я буду приводить примеры на других языках программирования - на Python и C#. Это позволит всем, кто не знаком с WL лучше понять код и сравнить синтаксис.

Читать далее

Магия swizzle из шейдеров в C++

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров6.5K

В шейдере мы можем написать vec3 v0 = v1.xxy * 2 и любую другую комбинацию x, y, z и w в зависимости от длины вектора. Я рассматриваю только размеры вектора до 4, как самые распространенные для использования. Полученный вектор может не иметь той же самой размерности, как в меньшую так и в большую сторону и его компоненты могут быть скопированы в произвольном порядке. Это операция называется "swizzle" и это чертовски удобно для различных операций с малоразмерными векторами, особенно если они представляют игровые сущности в виде позиций, размера или цветов. Вектора используются повсюду в игровых проектах (да и не только в игровых), и не только в шейдерах. В какой-то момент swizzle было решено затащить и в наш игровой движок в базовые классы vec2, vec3 и vec4. Возникли вопросы: как добиться такого же синтаксического и семантического поведения в C++ коде, при этом минимизируя потери производительности.

Swizzl'ить дальше

1000 и 1 способ инициализации типов в C# 12.0

Время на прочтение5 мин
Количество просмотров20K

Среди нововведений C# 12 было достаточно больше количество по-настоящему качественных и крутых фич (например дефолтные параметры лямбд).

Но речь сегодня пойдет о ложке дёгтя в бочке мёда - Primary Constructors.

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

Как говорится, воруй как художник? Думаю, что это не про Primary Constructors, потому что насколько плохо своровать фичу это надо было постараться.

Почему же в Kotlin эта фича имеет смысл, а в C# нет? Давайте разбираться.

Продолжение нытья без регистрации и смс

Конкурс для C++ программистов и их любимых багов

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров5.1K

Конкурс для C++ программистов и их любимых багов

Привет всем крутым C и С++ разработчикам! Команда PVS-Studio на связи. Новый год не за горами, поэтому мы подготовили вам новый конкурс с призами!

Читать далее

BASHUI

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров23K

BASHUI - это BASH + UI, а не то что вы подумали.

Начиная работать над sshto я решил не переизобретать велосипед, вернее не переизобретать велосипед целиком а только некоторые его части и в качестве "рамы с педалями" использовал dialog. Это значительно ускорило разработку, но идея написать свой UI на баше с блекджеком и всем остальным ни на секунду не покидала мой воспалённый мозг. Звёзды сошлись, и я решил воплотить этот проект в жизнь(в bash). Втречайте BASHUI!

нажми на кнопку

ООП в Wolfram Mathematica

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров3.2K

В комментариях к мой статье пользователь @Refridgeratorв ответ на мой вопрос написал, что в Wolfram Language (WL) не хватает следующего:

"ООП, перегрузки операторов, строгой типизации, событийно-ориентированного
программирования, дата-ориентированного программирования, параллельного программирования с примитивами синхронизации, средств отладки, скорости исполнения." (с) @Refridgerator

Я отлично понимаю, что вокруг Mathematica сложились некоторые исторические стереотипы. В них обычно WL представляется как калькулятор на стероидах или просто игрушка, или больше язык запросов, которым можно дополнительно решать уравнения и строить графики. Сегодня я попытаюсь показать, что в языке есть не только лишь графики, уравнения и интегралы. Вряд ли у меня хватит сил написать подробно касательно каждого пункта списка, но я постараюсь объяснить хотя бы часть.

Читать далее

Вклад авторов