Как стать автором
Обновить
3
0

Пользователь

Отправить сообщение

Rust: состояния типов

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

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


Прошу под кат.

Читать дальше →
Всего голосов 31: ↑31 и ↓0+31
Комментарии15

Система типов в математике

Время на прочтение11 мин
Количество просмотров16K
Время от времени мне встречаются вопросы по математике, которые в каком-то смысле можно назвать «грамматически неверными».

Пример. «Интервал $[0, 1]$ является замкнутым или открытым?»
Пример. «Является ли $\{ 1, 2, 3 \}$ группой?»
Пример. «Каков ряд Фурье для $\sin x + \sin \pi x$

А вот ещё более глупые примеры.

Пример. «Является ли прямоугольник простым?»
Пример. "$17 \in 3$?"
Пример. «Каков ряд Фурье для пустого множества?»

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

Математические объекты обычно не воспринимаются явно как имеющие типы в том же смысле, что и объекты в языках программирования с системой типов. Предполагается, что обычная математика должна формализироваться в системе Цермело — Френкеля (ZF), возможно, с аксиомой выбора, а в ZF каждый математический объект конструируется как множество. В этом смысле все эти объекты имеют одинаковый тип. (В частности, вопрос "$17 \in 3$" вполне логичен в ZF! И это одна из причин, по которой стоит не любить ZF в качестве основы для математики.) Однако, мне кажется, что на практике математические объекты неявно воспринимаются, как имеющие типы, и такой образ мышления математики усваивают, но не часто обсуждают.
Читать дальше →
Всего голосов 40: ↑40 и ↓0+40
Комментарии13

Танчики в консоли, статья первая: «От спора к написанию кода»

Время на прочтение5 мин
Количество просмотров12K
Пожалуй нужно начать с небольшой предыстории: сижу я как-то на паре и решили мы с одногруппником поспорить о возможности создания простейших танчиков в консоли (по типу дендивских), но для игры по сети.

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

Ну что, все готовы? Начинаем!


Эта статья будет короткой, но информативной (для новичков, как я).

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

C# — клиент (так как самый лёгкий в изучении язык)
Rust — сервер (так как самый безопасный и быстрый)
Php/html/css/javascript — сайт (который мы ВОЗМОЖНО будем делать)
Читать дальше →
Всего голосов 31: ↑19 и ↓12+7
Комментарии38

Флаги в аргументах функций

Время на прочтение9 мин
Количество просмотров27K
Вы когда-нибудь сталкивались с таким кодом?

process(true, false);

Эта функция, судя по названию, что-то обрабатывает (process). Но что означают параметры? Какой параметр здесь true, а какой false? По вызывающему коду об этом нельзя судить.

Нам придется заглянуть в объявление функции, которое дает подсказку:

void process(bool withValidation,
             bool withNewEngine);

Очевидно, автор использует два параметра типа bool как флаги (toggles). Реализация функции может быть похожа на это:

void process(bool withValidation,
             bool withNewEngine)
{
  if (withValidation)  // используется 1-й флаг
    validate(); // % подтвердить
 
  do_something_toggle_independent_1
 
  if (withNewEngine)   // используется 2-й флаг
    do_something_new();
  else
    do_something_old();
 
  do_something_toggle_independent_2();
}

Назначение флагов очевидно, поскольку каждый из них имеет осмысленное название. Проблема возникает в вызывающем коде.
Читать дальше →
Всего голосов 22: ↑21 и ↓1+20
Комментарии22

Готовый шаблон сайта с регистрацией, юзерами и админами на Flask с базами SQL или MongoDB

Время на прочтение3 мин
Количество просмотров52K
flask

Бывает, приходится делать сайты на flask, у которых есть пользователи и админы. Чисто для себя решил как-то это стандартизировать и, главное, не терять время, когда такая задача появляется. Цель — в несколько команд получить рабочий сайт у которого есть:

  • Регистрация
  • Email подтверждение
  • Авторизация
  • Выход (logout)
  • Администраторы и роли администраторов
  • Административная, пользовательская и публичная часть сайта
  • Возможность юзера менять пароль
  • Восстановление пароля
  • Локализация для иностранных языков
Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии10

Релиз первой беты кросс-платформенного XAML UI-тулкита Avalonia

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

Состоялся релиз первой бета-версии Авалонии.


Avalonia — кроссплатформенный .NET UI-тулкит, вдохновлённый технологиями WPF и распространяемый под лицензией MIT. Он полностью поддерживает .NET Core 2.0, XAML, дата-биндинги, lookless-контролы и многое другое. Avalonia позволяет писать на C# приложения под Windows, Linux и Mac OS X. Возможность запуска на iOS и Android находится в экспериментальном состоянии.



Данная версия стабильна и имеет полное право называться бетой: тулкит не разваливается в руках и имеет приличный базовый набор контролов (см. видео). На нём создано два достаточно больших приложения с открытым исходным кодом: AvalonStudio — кроссплатформенная IDE для разработки на C# и C++ и Core2D — редактор 2D-схем и диаграмм.

Всего голосов 100: ↑97 и ↓3+94
Комментарии77

Файл-оборотень: образ картриджа NES и ZIP-файл в одном

Время на прочтение4 мин
Количество просмотров9.2K
Этот файл — ROM консоли NES. И одновременно ZIP-файл. Он одновременно полностью функционален и как NES ROM, и как ZIP-файл.

Что находится в этом ZIP-файле? Исходный код ROM.

Что случится, если скомпилировать этот исходный код? Он создаст NES ROM, который также является ZIP-файлом, содержащим исходный код этого NES ROM.


Запущенный ROM

Этот NES ROM можно «прожечь» на картридж NES и он будет работать на NES. Даже если конвертировать все данные с картриджа, образ NES всё равно будет ZIP-файлом.
Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии7

10 IT-героев по версии Кодабры: Веб-разработка

Время на прочтение7 мин
Количество просмотров5.1K
В этом году в преддверии весны, Кодабра совместно со школой «Летово» проводит конкурс, посвященный программированию, робототехнике и VR — «IT-герои». По этому замечательному поводу мы решили рассказать Хабру, кто же для нас самих является героем, на кого мы ориентируемся при обучении детей профессиям нового века, а перед кем снимаем шляпу за их вклад в популяризацию и развитие технологий.

Эта статья будет посвящена выдающимся людям, повлиявшим на становление Web 2.0 и его победное шествие по планете. Прежде всего веб-программистам и технологическим евангелистам, работой которых мы вдохновлялись. Обращаем ваше внимание, что этот рейтинг является полностью субъективным, а расположение тех или иных имен в списке выбрано скорее из художественных соображений, чем из их вклада относительно друг друга.
Читать дальше →
Всего голосов 16: ↑12 и ↓4+8
Комментарии6

Разработка игр под NES на C. Главы 4-6. Рисуем персонажа

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

В этой части рассмотрим работу с графикой: фон и спрайты персонажей.
<<< предыдущая следующая >>>

image
Источник


Что такое V-blank?


PPU — графический процессор — может или отправлять сигнал в телевизор, или получать информацию от процессора, но не одновременно. Так что единственное время для пересылки это V-blank, период кадрового гасящего импульса.


90% времени PPU отправляет пиксели в видеовыход, строка за строкой слева направо и сверху вниз. Внизу экрана делается пауза, и все повторяется снова. Это происходит 60 раз в секунду. Пауза после отрисовки кадра и есть V-blank. Это весьма короткий промежуток времени. В него реально вложить обновление 2-4 столбцов фоновых тайлов и обновление спрайтов. Обновление фона особенно критично для игр с прокруткой.

Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии2

Разработка игр под NES на C. Главы 1-3. От введения до Hello World

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

Впервые я задумался о том, как разрабатывают игры под приставки где-то через 20 минут после того, как в самый первый раз увидел Turbo Pascal. На глаза иногда попадался Subor с клавиатурой, и появилась мысль: "Наверное можно набрать какую-то программу, а потом в нее поиграть". Но интерес быстро затух, потому что абсолютно никакой информации по этой теме тогда не было доступно. Следующий раз эта же идея всплыла, когда увидел вполне играбельные эмуляторы старых консолей. Тогда стало ясно, что вбивать листинг в саму консоль и необязательно. Где-то очень потом появился Хабр с благожелательной аудиторией для таких вещей. В какой-то момент даже начал собирать разрозненную инфу чтобы написать мануал самому, и вот сегодня наткнулся на готовый учебник, который явно надо перевести.


Разработка под старые консоли документирована вдоль и поперек, но именно по NES 99% информации относятся к разработке на Ассемблере. Меня почему-то зарубило, что надо освоить именно работу с С.


следующая >>>
image

Читать дальше →
Всего голосов 52: ↑52 и ↓0+52
Комментарии6

Что действительно случилось с Vista

Время на прочтение27 мин
Количество просмотров29K
См. также: «Что действительно случилось с Vista: инсайдерская ретроспектива»

Я обычно пищу о вещах, которыми непосредственно занимался — или писал код, или управлял проектом. В этой статье я выбрал другой подход, чтобы написать о своём взгляде на глубинные причины фиаско Windows Vista (кодовое название Longhorn). Хотя это случилось более десяти лет назад, то был ключевой период по переходу на мобильные устройства — и те события вызвали долговременные последствия внутри Microsoft. Я нашёл, что многие попытки описать проблемы Microsoft, особенно в связи с переходом на мобильную платформу, неубедительны и не совпадают с моим пониманием того, что случилось. Статья в Vanity Fair «Потерянное десятилетие Microsoft» описывает бюрократическую гниль и подковёрную борьбу («жизнь… стала непрерывно жестокой») или культурную гниль из-за негативных последствий системы оценки рейтинга конкурентных стеков. Последующая статья в The Atlantic описывает ситуацию как классическую «дилемму инноватора».

Думаю, что ситуацию можно изложить иначе — с лучшей привязкой к конкретным фактам о проектах и истинными мотивами ключевых сторон. Это не попытка написать альтернативную историю — я понятия не имею, что бы случилось, не будь сделаны те ошибки. Но они определённо не помогли Microsoft пройти через этот переломный момент в компьютерной индустрии.
Читать дальше →
Всего голосов 38: ↑36 и ↓2+34
Комментарии62

Пар электронных сигарет спасёт 6,6 млн жизней курильщиков в США, хотя вызывает мутации в ДНК

Время на прочтение3 мин
Количество просмотров20K
В дыме обычных сигарет кроме никотина и его производных нитрозаминов содержится более 7000 других продуктов неполного сгорания, 70 из которых являются известными канцерогенами, плюс оксид углерода (СО), другие раздражители и аллергены. Согласно исследованием, сигареты с табаком раньше или позже приводят к преждевременной смерти более 50% курильщиков. Кроме того, у этого дыма очень неприятный запах. Таким образом, обычные сигареты одновременно чрезвычайно вредны для курильщика и неприятны для окружающих.

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

Хотя электронные сигареты намного безопаснее обычных, к сожалению, как показывают последние исследования, полностью безопасными их назвать нельзя.
Читать дальше →
Всего голосов 21: ↑17 и ↓4+13
Комментарии56

Модели информационной безопасности в работе Windows VPS

Время на прочтение7 мин
Количество просмотров21K
Му публикуем цикл статей об информационной безопасности клиентсокго оборудования и приобретаемых в аренду серверов VPS Windows. Это третья статья по теме «основы информационной безопасности». Описанные ранее вопросы:

  1. Часть 1: Виды угроз
  2. Часть 2: Информация и средства ее защиты
  3. Цена ошибки

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


Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Комментарии2

Реактивные приложения с паттерном RxPM. Прощайте​ MVP и MVVM

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

Уже продолжительное время я размышляю над паттерном RxPM и даже успешно применяю его в «продакшене». Я планировал сначала выступить с этой темой на Mobius, но программный комитет отказал, поэтому публикую статью сейчас, чтобы поделиться с Android-сообществом своим видением нового паттерна.


Все знакомы с MVP и MVVM, но мало кто знает, что MVVM является логическим развитием паттерна Presentation Model. Ведь единственное отличие MVVM от PM – это автоматическое связывание данных (databinding).


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


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



Читать дальше →
Всего голосов 23: ↑20 и ↓3+17
Комментарии42

Синдром самозванца

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

«Как часто вы ощущаете синдром самозванца?
Ежедневно / Каждую неделю / Раз в месяц / Никогда»

В апреле 2016 года Джессика Баркер провела в Твиттере опрос на тему, часто ли специалисты по информационной безопасности сталкиваются с «синдромом самозванца». Результаты этого опроса легли в основу доклада Джессики на SteelCon 2016.

Вряд ли один этот твит можно квалифицировать как полноценное исследование, однако в качестве беглого анализа он сгодится. Так вот, опрос показал, что 84% безопасников ощущают данный синдром не реже раза в месяц. Одно это позволяет классифицировать его как одну из наиболее актуальных психологических проблем, с которыми можно столкнуться в IT.

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

Попробуем разобраться в проблематике под катом.
Читать дальше →
Всего голосов 43: ↑40 и ↓3+37
Комментарии75

«Магическая константа» 0x5f3759df

Время на прочтение9 мин
Количество просмотров123K
В этой статье мы поговорим о «магической» константе 0x5f3759df, лежащей в основе элегантного алгоритмического трюка для быстрого вычисления обратного квадратного корня.

Вот полная реализация этого алгоритма:

float FastInvSqrt(float x) {
  float xhalf = 0.5f * x;
  int i = *(int*)&x;  // представим биты float в виде целого числа
  i = 0x5f3759df - (i >> 1);  // какого черта здесь происходит ?
  x = *(float*)&i;
  x = x*(1.5f-(xhalf*x*x));
  return x;
}

Этот код вычисляет некоторое (достаточно неплохое) приближение для формулы

image

Сегодня данная реализация уже хорошо известна, и стала она такой после появления в коде игры Quake III Arena в 2005 году. Её создание когда-то приписывали Джону Кармаку, но выяснилось, что корни уходят намного дальше – к Ardent Computer, где в середине 80-ых её написал Грег Уолш. Конкретно та версия кода, которая показана выше (с забавными комментариями), действительно из кода Quake.
В этой статье мы попробуем разобраться с данным хаком, математически вывести эту самую константу и попробовать обобщить данный метод для вычисления произвольных степеней от -1 до 1.

Да, понадобится немного математики, но школьного курса будет более, чем достаточно.
Читать дальше →
Всего голосов 212: ↑210 и ↓2+208
Комментарии188

Есть две функции

Время на прочтение16 мин
Количество просмотров53K
Привет

Есть две булевы функции n аргументов, одна — константная, другая — сбалансированная. На какую сам сядешь, на какую фронтендера посадишь? Вот только функции неизвестны, а вызвать их разрешается лишь один раз.

Если не знаешь, как решить подобную задачу, добро пожаловать под кат. Там я расскажу про квантовые алгоритмы и покажу как их эмулировать на самом народном языке — на Python.
Hello darkness, my old friend
Всего голосов 121: ↑115 и ↓6+109
Комментарии61

Классические алгоритмы генерации лабиринтов. Часть 1: вступление

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


Предисловие


На написание статьи меня сподвигло практически полное отсутствие материалов на русском языке про алгоритмы генерации лабиринтов. На Хабре, из того, что вообще есть по теме, можно отметить две статьи: раз и два. Ценность и пользу из которых несет лишь вторая. В первой – просто перевод формального алгоритма и небольшое его пояснение. Что, конечно, неплохо, но очень скудно и не вызывает желания изучать тему дальше.

Если моя статья Вам понравится, я продолжу писать о различных алгоритмах. Мы рассмотрим два самых примитивных и простых случая – генерация двоичного дерева и Сайдвиндер, который, по своей сути, просто чуть измененная версия двоичного дерева с одним заметным плюсом. ОСТОРОЖНО ТРАФИК.
Читать дальше →
Всего голосов 68: ↑68 и ↓0+68
Комментарии35

Классические алгоритмы генерации лабиринтов. Часть 2: погружение в случайность

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


Предисловие


Первая часть

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

В этой части мы поговорим о том, что же такое случайная и псевдослучайная генерации, какие алгоритмы могут дать нам равновероятно ничем не похожие друг на друга лабиринты и в чем их минусы. Героями нашего сегодняшнего приключения станут алгоритм Уилсона и алгоритм Олдоса-Бродера для создания случайного остовного дерева (Uniform Spanning Tree). ОСТОРОЖНО ТРАФИК.
Читать дальше →
Всего голосов 47: ↑47 и ↓0+47
Комментарии25

Russian AI Cup. Промежуточные итоги чемпионата

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


Вот уже месяц длится Russian AI Cup 2016. Это соревнование по программированию искусственного интеллекта, которое проходит в форме игры. Мы подробно рассказывали об идее и правилах нынешнего года здесь.

Но со старта чемпионата многое изменилось. Участникам пришлось попотеть, чтобы разобраться в непростых правилах игры, а нам — чтобы справиться с тестирующей нагрузкой. Редактировались правила, оптимизировался код, сменялись раунды и банились игроки. Рассказываем вам полную историю CodeWizards 2016.
Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии10

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность