Обновить
180.55

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

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

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

Эксперимент: генерация веб-форм для 1С по текстовому описанию

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

Привет, хабр! В прошлой статье мы говорили о применении языков разметки для описания графических артефактов, идее языка разметки для аналитиков и приложении для генерации макетов UI и BPMN схем.

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

Читать далее

Пользователь как сервер или «Request-Based» архитектура на примере Open Source Блокнота

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

Привет, меня зовут Саша и я Android-разработчик :)

Разрабатывая мобильные приложения я обратил внимание что все операции которые делает приложение - это по сути запросы данных от разных источников.

Часто источниками данных являются: человек, сервер и устройство (User, Server, Platform).

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

Подобно тому как вызовы функций вкладываются друг в друга:

Читать далее

Вайб-кодинг как хобби. Генератор вопросов

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели1.4K

С появлением нейросетей, я смог реализовать свою небольшую мечту, а именно написать нагенерировать свою собственную программу, а точнее игру-викторину - Human vs AI. Которая не только запускается и работает, но и люди в нее играют.

Читать далее

Думает ли искусственный интеллект о коте Шрёдингера? История о том, как я внедрял в алгоритм идею параллельных вселенных

Уровень сложностиСредний
Время на прочтение127 мин
Охват и читатели1.2K

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

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

Читать далее

Один за всех, и этого достаточно: мой эзотерический язык программирования Single

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели1.4K

Годами люди писали программу «Hello world!» на языке Unary, но сегодняшнего дня появился новый односимвольный язык программирования! Односимвольный? Достойная замена Unary? Конечно! Представляю вам Single.

Читать далее

«Вредные советы» или еще несколько приемов работы с XWiki

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели868

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

Мы рассмотрим три приема работы с XWiki, которые скорее всего выбиваются из хорошей практики, но могут быть полезны в ваших экспериментах. В любом случае, если вы пересели с иглы Confluence на его open source аналог (со слов разработчиков). То вам, точно не помешает знать о возможностях доработки его напильником.

Начнем мы с получения доступа к командной оболочке прямо из XWiki, а закончим обхождением ограничений CORS с помощью скрипта на Python.

Как говорится: «Милости прошу под кат»

Читать далее

identity functions являются описаниями типов

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели676

Добрый день. Меня зовут Тимур и я программист.

На днях я закончил одну фичу связанную с хромиумом (пробросил disk_cache в webextensions api, это дает прямой доступ как к http кешу так и к code cache и многим другим - первый шажок к антидетект браузеру), но перед тем как писать статью на эту тему решил взять паузу и немного остудить мозг. Обычно я в таких ситуациях устраиваю ревизию своих записей, спорю с самим собой из прошлого, иногда я его побеждаю иногда он меня, ниже один из таких этюдов, предлагаю обсудить.

Давайте поговорим об identity функциях. Да, именно так, во множественном числе.

Читать далее

Что такое Python и с чем его едят

Время на прочтение4 мин
Охват и читатели3.8K

Поговорим о том кто такие Python-разработчики, чем они занимаются и как ими вообще стать? В этой статье будет информация о...

Изменить своё будущее

KatWalk C2: ч.4: поиграемся с прошивкой

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

Для тех, кто только подключился -- я рассказываю про платформу для VR игр, как с ней интегрироваться и как добраться до ее сенсоров напрямую.

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

Давайте что-нибудь в нём пропатчим!

Реализация динамического списка на WL

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели810

Это тематическое продолжение моей предыдущей статьи, которая описывала реализацию связанного списка на Wolfram Language. На этот раз мы будем делать динамический список. Где-то его называют просто список либо динамический массив. В C# эта структура представлена типом List<T>, а в Java наиболее похожим классом является ArrayList, хотя насколько я помню называют его динамический массив.

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

Ниже реализация динамического массива/списка на Wolfram Language.

Читать далее

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

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

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

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

Читать далее

DI в JS: идентификаторы зависимостей

Время на прочтение9 мин
Охват и читатели4.6K

В предыдущих публикациях (раз, два) я рассматривал возможности использования внедрения зависимостей в чистом JavaScript (без TypeScript, аннотаций и транспиляции). В данной публикации я продолжаю погружаться в вопросы использования DI в JS и более пристально рассматриваю роль идентификатора зависимости в создании объектов контейнером.

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

Читать далее

Неожиданная проблема с макросами (точнее без макросов)

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

image


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


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


Если же говорить о простых реализациях макросов, например как для языков С и С++, то умные люди и умные книжки советуют избегать использования макросов и по возможности заменять их шаблонами, константами и inline-функциями. Ведь с помощью макросов можно не только упростить код, но и не менее изящно стрелять в ноги себе или своих товарищей.


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

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

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

FizzBuzz по-взрослому

Время на прочтение90 мин
Охват и читатели6.2K

Тема эта стала неинтересной, всё то же и так же из раза в раз

Сеньоры начинают и проигрывают пенсионерам.

Это уже третий раз и должны уже наверно свыкнуться. ))

FizzBuzz по-сениорски

FizzBuzz по-пенсионерски

Продолжаем разгонять FizzBuzz

FizzBuzz по-македонски

Немного лирики. Хабр из места, где пишут в стиле "смотрите коллеги, можно и так ..." превратился в место хвастовства и рекламы. Пенсионеры хорошо знают, что невозможно написать код, который нельзя улучшить. И реальные сеньоры только рады, когда им пишешь про то, как можно улучшить их код. Я проверял ))

Читать далее

Обработка текста с помощью textutils с примерами

Время на прочтение8 мин
Охват и читатели3.6K

Набор утилит для потоковой обработки текста появился уже в первых версиях Unix и доступен практически везде. Это такие команды как cat/tac, head/tail, cut, grep, sed, sort, uniq, wc, nl, fmt. Каждая из этих утилит выполняет свою простую обработку текста, но комбинируя их в конвейере, т.е. передавая стандартный вывод одной команды на вход следующей, можно обрабатывать тексты произвольного размера или быстро решить некоторые задачи.

Для этого нужно усвоить несколько приемов

Как сделать Змейку на чекбоксах и не только

Время на прочтение8 мин
Охват и читатели6.9K

В допандемическом 2020 Брайан Браун отправился на неделю в Recurse Center и разработал Checkboxland. Эта библиотека JavaScript отображает текст и анимацию на сетке флажков. 

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

Пока у нас начинается курс по Frontend-разработке, делимся сразу двумя материалами о чекбоксах.

Читать далее

Inertia.js – современный монолит

Время на прочтение4 мин
Охват и читатели32K

Inertia – современный монолит


Вы знаете, как пишутся SPA на Laravel? Если коротко, не очень удобно. Конечно, можно использовать любой фронтенд-фреймворк. Традиционно принято работать со связкой Laravel + Vue.js.


Мы пишем весь фронтенд на Vue.js в resources/js, а Laravel используем как API.


Примерно вот так:


Vue.js


// resources/js/pages/Users.vue
<template>
    <div v-for="user in users" :key="user.id">
        <a :href="`/users/${user.id}`">
          {{ user.name }}
        </a>
        <div>{{ user.email }}</div>
    </div>
</template>

<script>
    export default {
        data() {
            return {
                users: []
            }
        },
        methods: {
            async loadUsers() {
                const { data } = await this.$axios.get('/api/users');.
                this.users = data;
            }
        },
        async beforeMount() {
            await this.loadUsers();
        }
    }
</script>

Laravel


// routes/api.php
Route::get('/users', function index(User $user) {
    return $user->all();
});

То есть сначала мы создаем на бэкенде эндпоинт, а затем на фронте получаем с него данные через AJAX-запрос.


Удобно ли это? Смотря для кого. Фронтендерам не привыкать. AJAX на сегодня – самый классический способ получения данных с сервера. Но, если вы до этого много работали с Blade, вы понимаете, насколько это больше телодвижений.

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

Портируем старую игру в жанре «shoot 'em up» на JavaScript на коленке

Время на прочтение12 мин
Охват и читатели3.4K

Имеется древняя игрушка LaserAge, которая написана на Flash (на очень древнем Macromedia Flash 4) и работает только под Windows. В детстве она мне очень понравилась, поэтому я решил для души портировать её, чтобы можно было играть с браузера со всех устройств.


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


При уничтожении всех противников на уровне происходит переключение на следующий уровень. Всего 100 уровней.


В терминах игры уровень — волна (Wave), а несколько волн объединены в большой уровень (Level), который представляет из себя просто смену заднего фона, т.е. всего 4 больших уровня в каждом из которых 25 волн. В последней волне большого уровня обычно бывает босс — противник с огромным значением жизни и мощным оружием.


https://github.com/EntityFX/laseroid/blob/master/doc/LaserAgeNext.png?raw=true

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

CoreData модель из кода. Или «Как обойтись без .XCDataModel» (Часть 1)

Время на прочтение7 мин
Охват и читатели2.9K

Если вам по какой-то причине не нравится процесс создания coreData-модели с помощью графического интерфейса XCode, или вы такой же ненормальный программист как я и хотите, чтобы ваше приложение избавилось от .XCDataModel файлов и запускалось чуть быстрее, тогда добро пожаловать под кат.

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

Julia. Строки и Метапрограммирование

Время на прочтение8 мин
Охват и читатели4.7K


Продолжаем изучение молодого и перспективного языка общего назначения Julia. На этот раз уделим больше внимания строкам, начнем робкие шаги в мир метапрограммирования и научим интерпретатор производить символьные операции (Под катом всего две картинки, зато много синтаксического сахара)

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

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