Обновить
137.09

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

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

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

TailwindCSS – очередной фреймворк или новый шаг эволюции?

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

Лид-изображение


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


Тех, кто еще не знаком с TailwindCSS, я постараюсь завербовать в ряды его поклонников. Тех, кто против него, я постараюсь заставить в этом усомниться и пересмотреть своё мнение.


Я также хотел узнать ваше мнение по этому поводу. TailwindCSS – это шаг вперед, назад или просто топтание на месте? Свой ответ вы можете оставить в опросе в конце статьи. А если вам есть, что добавить по теме, пожалуйста, сделайте это в комментариях.

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

Logical FizzBuzz

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

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


В реализации на Скала я увидел операцию "(value % n)" и пояснение, что значения value,n -это: type class "Integral" требующий от типа "T" возможности вычислять остаток от деления и иметь значение "zero".


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

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

Занимательный JavaScript: Почти линейное уравнение

Время на прочтение6 мин
Охват и читатели8.1K
Что если взять замечательную математику (а именно линейные уравнения) и наш не менее замечательный JavaScript, а потом наложить одно на другое? То в условиях ограничений и специфики js-среды простая математическая задача может обернуться весьма любопытной и полной подводных js-камней проблемой. На прошедшей конференции HolyJS 19 в Москве одно такое линейное уравнение (среди прочих задач от компании SEMrush) наделало не мало шума.



И да, это снова рубрика Занимательного JavaScript'а: прошу под кат всех неравнодушных.
Читать дальше →

На пути к долговечным приложениям на примере генератора статических сайтов ПСКОВ

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

Псковское вече


Здравствуйте, меня зовут Михаил Капелько. Занимаюсь профессиональной разработкой ПО более 10 лет, в свободное время разрабатываю игры и средства для их создания.


В этой статье я расскажу о своём первом долговечном приложении для настольных ПК — генераторе статических сайтов ПСКОВ.


Долговечность


Под долговечным приложением я понимаю такое приложение, которое работает без единого изменения на операционных системах, выпущенных в период 2010-2030 годов. Иными словами, долговечное приложение обладает 10-летней обратной совместимостью и 10-летней прочностью. Впрочем, ПСКОВ работает даже на Windows 2000, так что у него 19-летняя обратная совместимость.

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

Создание системы формальной верификации с нуля. Часть 1: символьная виртуальная машина на PHP и Python

Время на прочтение10 мин
Охват и читатели6.8K
Формальная верификация — это проверка одной программы либо алгоритма с помощью другой.

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

Более подробное описание формальной верификации можно увидеть на примере решения задачи о Волке, Козе, и капусте в моей предыдущей статье.

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

Для этого я написал свой аналог виртуальной машины, на символьных принципах.

Она разбирает код программы и транслирует его в систему уравнений (SMT), которую уже можно решить программным способом.

Так как информация о символьных вычислениях представлена в интернете довольно обрывочно,
я вкратце опишу что это такое.
Читать дальше →

Генератор больших графов транзакций с паттернами преступной деятельности

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

Доброго времени суток.


Network

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

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

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

Пасхальные яйца и Open Source

Время на прочтение2 мин
Охват и читатели5.7K
«Пасхальное яйцо» (англ. Easter Egg) — секрет в компьютерной игре, фильме или программном обеспечении, заложенный создателями. Отличие пасхального яйца в игре от обычного игрового секрета состоит в том, что его содержание, как правило, не вписывается в общую концепцию, выглядит в контексте неправдоподобно, нелепо, и зачастую является внешней ссылкой. Пасхальные яйца играют роль своеобразных шуток для внимательных игроков или зрителей. (wiki)

Пасхальные яйца бывают разные. Например широко известна команда apt-get moo, которая рисует корову в консоли:


         (__) 
         (oo) 
   /------\/ 
  / |    ||   
 *  /\---/\ 
    ~~   ~~   
...."Have you mooed today?"...

Пожалуй все согласятся с тем, что apt-get moo не является деструктивной функцией. Эта пасхалка может показаться смешной, или же нет, а то и вовсе неуместной, но она наверняка вам ничего не сломает. Также можно посмотреть некоторые другие пасхалки в linux.


В этой статье я бы хотел остановиться на одной конкретной пасхалке. А конкретно о "christmas" в ant-design. Это неплохая UI библиотека контролов для React-экосистемы. Про неё можно было бы написать отдельную статью, но сейчас не об этом.

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

Занимательный JavaScript: Снежный день

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

Image


Очередная надуманная задачка по ненормальному программированию на JavaScript. В этот раз по случаю грядущего Нового 2019 года. Надеюсь, будет так же интересно решать, как мне было интересно придумывать. Любопытных прошу под кат. Всем шампанского и всех с наступающим!

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

Ленивые вычисления в быту

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

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

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

Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 4.3

Время на прочтение13 мин
Охват и читатели5.5K
Продолжаем приключения.

Краткое содержание предыдущих частей


Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. Включена своя реализация nullptr, которая подбирается на этапе компиляции.

Настало время type_traits и всей этой «особой шаблонной магии». В предыдущих частях данной главы мы рассмотрели мою реализацию базовых шаблонов стандартной библиотеки и в данной части речь пойдет про комбинацию техники SFINAE с шаблонами и немного о кодогенерации.

Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:
Коммиты и конструктивная критика приветствуются
Больше шаблонов C++ под катом.
Читать дальше →

Завтра ICFP Contest 2018, ура! (+полезное для участвующих в первый раз)

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

Привет! Завтра в 16:00 (UTC) стартует ICFP Contest 2018 — ежегодное 72-часовое командное соревнование для программистов, посвящённое решению единственной, но интересной и заковыристой задачи.


punters
Картинка, вызывающая ностальгию у участников ICFPC 2017.


Уже участвовали в ICFPC? Тогда вам и объяснять ничего не надо. Вы уже собрали любимую команду или нашли новую, подписались на твиттер, IRC-канал и репозиторий организаторов, поучаствовали в перекличке на Reddit и запланировали хорошенько выспаться перед пятницей.


Ни разу не участвовали? Тогда самое время проделать всё вышеперечисленное, потому что участие в ICFP Contest — это лучшее, что может с вами случиться в ближайшие три дня. Если сомневаетесь, то у меня для вас кое-что есть:

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

Низкоуровневая оптимизация кода на платформе Эльбрус: векторное сложение uint16_t с помощью интринсиков

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


В этой статье мы расскажем про более низкоуровневые оптимизации, которые можно делать на процессорах Эльбрус.

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

Однако в текущей версии EML мы не нашли некоторых интересных нам функций, поэтому приняли решение написать их сами.
Читать дальше →

Открытая научная школа хакатона DeepHack.Babel

Время на прочтение3 мин
Охват и читатели2.5K
image

Перед новым годом мы рассказывали, зачем нужен хакатон по машинному переводу. Уже на следующей неделе 50 участников, прошедших отбор, приедут в Долгопрудный, чтобы поучаствовать в обучении системы на непараллельных данных. Помимо многочасового брейншторминга в поиске решения поможет научная школа — серия лекций от ведущих мировых специалистов по машинному переводу. Хабр, приглашаем тебя посетить интересующие выступления! Они пройдут на Физтехе с 29 января по 4 февраля, не забудьте зарегистрироваться. Ну, а если в морозный зимний вечер выходить из дома не хочется, то можно посмотреть трансляции на канале DeepHack.
А пока рассказываем о ключевых спикерах

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

Отвлеченно о входных/выходных аргументах

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

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


и немного рефлексии

Собственная платформа. Часть 0.2 Теория. Интерпретатор CHIP8

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

Введение


Здравствуй, мир! Сегодня у нас перевод спецификации языка CHIP8. Это статья содержит только теоретическую часть.


*COSMAC ELF во всей красе*

COSMAC ELF


Что такое CHIP8?


CHIP8 это интерпретируемый язык программирования, который был разработан Джозефом Вейзбекером (прим. перевод Joseph Weisbecker) в семидесятых для использования в RCA COSMAC VIP. В дальнейшем был использован в COSMAC ELF, Telmac 1800, ETI 660, DREAM 6800. Тридцать одна (35?) инструкция давали возможности для вывода простого звука, монохромной графики в разрешении 64 на 32 пикселя, а также позволяло использовать 16 пользовательских кнопок. Сегодня CHIP-8 часто используется для обучения базовым навыком эмуляции (не интерпретации). Интерпретаторы CHIP-8, часто по ошибке называемые „эмуляторами“, существуют на все более расширяющемся множестве платформ. Это обилие интерпретаторов связано со сходством дизайна интерпретатора CHIP-8 и эмулятора системы. Те, кто хочет разобраться в эмуляторах, нередко начинают с написания интерпретатора CHIP-8.


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

Отражение динамики в модели СКУД

Время на прочтение9 мин
Охват и читатели4.7K
В предыдущей статье рассматривалась структурная модель СКУД как совокупности ролей объектов и двойных связей между ними. Такая модель позволяет отразить результаты всех интересующих нас процессов, протекающих в системе. Процессы в системе выражаются через взаимодействия объектов, а результаты взаимодействий запоминаются в связях. Можно сказать, что связи — это память о взаимодействиях, но сами процессы взаимодействия в структурной модели никак не отражаются. Наблюдатель видит взаимодействия через изменения в поведении или изменения в состоянии объектов, которые мы будем называть устройствами. Например, при поднесении карты c RFID меткой к считывателю последний сообщает о считывании звуковым сигналом и миганием светодиода. Это может интерпретироваться как изменение состояния физического считывателя, при этом само взаимодействие между картой и считывателем, собственно чтение, не рассматривается. Предполагается, что считыватель проходит через ряд дискретных состояний. Такие дискретные состояния удобно моделировать при помощи машин состояний, но для этого нужно установить канал между физическим миром и виртуальным миром (компьютерной моделью). Такой канал, управляемый контроллером канала, передает физические сигналы от устройства, которые специальным модулем связи преобразуются в сигналы, управляющие машиной состояний устройства. Канал может быть двухсторонним:


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

[The Methanum project] Создание инструментария для построения распределенных систем с топологией “Звезда”

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


Звезда — на сегодняшний день самая распространенная топология компьютерных сетей. Такая структура обладает рядом преимуществ: легкостью масштабирования, надежностью (выход из строя одной машины не сказывается на других) и простота администрирования. Конечно это решение из физического уровня давно реализовано и на программном уровне. Тем не менее, представляю на суд читателей свою версию инструментария .Net для построения распределенных систем с топологией звезда.
Читать дальше →

Вперед, на поиски палиндромов 2

Время на прочтение5 мин
Охват и читатели6.6K
Не так давно прочитал на хабре статью grey_wolfs «Вперед, на поиски палиндромов» о решении и оптимизации любопытной конкурсной задачки с весьма лаконичной формулировкой:

«The decimal number 585 is 1001001001 in binary. It is palindromic in both bases. Find n-th palindromic number». Или, по-русски: «Десятичное число 585 в двоичной системе счисления выглядит как 1001001001. Оно является палиндромом в обеих системах счисления. Найдите n-й подобный палиндром».
Подробности

Дизайним прототипы ячеек в одном XIB-е с UITableView

Время на прочтение5 мин
Охват и читатели7.7K
А заодно раз и навсегда решаем проблему автоматической калькуляции высоты ячеек.

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

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


Читать

LINQ конвертер между римскими и арабскими числами

Время на прочтение4 мин
Охват и читатели14K
Сложилось, что разбирал со студентами LINQ, а со школьниками преобразование между римской и арабской системой счисления. В итоге, мысли заплелись и получился интересный код конвертера, который жалко схоронить в локальных архивах. Пример сгодится в качестве упражнения для понимания LINQ.

Итак, нам понадобится словарь, сопоставляющий элементы римских чисел с арабскими.
Подробности

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