Search
Write a publication
Pull to refresh
2
0

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

Send message

Хабрастатистика: анализируем комментарии читателей

Reading time4 min
Views10K
Привет Хабр. В предыдущей части была проанализирована популярность различных разделов сайта, и параллельно возник вопрос — какие данные можно извлечь из комментариев к статьям. Также хотелось проверить одну гипотезу, о которой скажу ниже.


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

Моделирование состояния приложения с использованием объектов Store в SwiftUI

Reading time4 min
Views6.8K
На этой неделе я хочу поговорить о моделировании слоя данных в SwiftUI. Я уже закончил работу над своим самым первым приложением, которое я создаю используя только SwiftUI. Теперь я могу поделиться способом создания слоя модели с использованием объектов Store, которые я использовал при разработке приложения NapBot.

Объект Store


Объекты Store, отвечают за сохранение состояния и предоставлении действии по его изменению. У вас может быть столько объектов Store, сколько вам необходимо, желательно чтобы они были простыми и отвечали за небольшую часть состояния вашего приложения. Например, у вас может быть SettingsStore для сохранения состояния пользовательских настроек и TodoStore для сохранения пользовательских задач.
Читать дальше →

Ретро-компьютер в корпусе NLX

Reading time5 min
Views13K
В девяностые на компьютерном рынке было очень много производителей, очень много форматов и очень много попыток сделать новый стандарт чего-нибудь. Обычно получалось как на той карикатуре.

С год назад мне достался компьютер где-то конца девяностых в очень компактном корпусе. Это не первый компактный компьютер из тех времён, который я встречаю, но это была первая встреча с форм-фактором NLX — попыткой создать новый стандарт компактных корпусов.



Расскажу немножко про формат, а потом и про сам компьютер.

Правильная передача цветов ретроконсолей в эмуляторах

Reading time4 min
Views8.2K


Почти все игровые ретроконсоли генерируют цвета в каком-нибудь из вариантов RGB-кодирования.

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

Самым распространённым сегодня видом дисплеев являются ЖК-панели (LCD). Они известны тем, что имеют очень плохие уровни чёрного. Различия между TN, PVA и IPS не слишком на это влияют.

Отдельные фанаты играют на ЭЛТ-мониторах, и всё большую популярность набирают OLED-экраны, особенно на телефонах и планшетах. Но в этой статье мы в основном будем рассматривать ЖК-экраны, хотя данная методика важна для дисплеев любого типа.

Точность цвета


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

Например, Sega Genesis кодирует 9-битные цвета, что даёт по 3 бита на канал.

Самым наивным решением было бы поместить 3 бита в самые старшие 3 бита вывода, а младшие 5 бит оставить пустыми, но при этом белый цвет становится немного серым.
Читать дальше →

Инвентаризация от И до Я. Считаем лицензии на ПО

Reading time3 min
Views6.8K
Инфраструктура и программное обеспечение — столпы, на которых держится ИТ. И то и другое можно посчитать в Quest KACE. В статье разберёмся в возможностях этого инструмента применительно к инвентаризации и управления лицензиями на программное обеспечение. Инвентаризацию инфраструктуры рассмотрим в следующих статьях.


World of Warcraft, который не был обнаружен в нашей тестовой лаборатории. А жаль.

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

Новое доказательство решает вопрос аппроксимации таких чисел, как пи

Reading time9 min
Views19K

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



Двоичная запись π бесконечна. Но бесконечное число дробей могут приближаться к этому числу со всё возрастающей точностью.

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

Доказательство разрешает задачу почти 80-летней давности, известную, как гипотеза Даффина-Шаффера. Тем самым оно даёт окончательный ответ, занимавший математиков с древних времён: при каких условиях возможно представлять иррациональные числа, длящиеся бесконечно долго – типа числа пи – простыми дробями типа 22/7? Доказательство устанавливает, что ответ на этот довольно общий вопрос обнаруживается в результате единственного вычисления.
Читать дальше →

Массовые атаки: особенности противодействия на опыте последних лет

Reading time6 min
Views4.8K
Многие центры безопасности смыслом своей работы, а то и жизни делают борьбу с хакерами и атаками. Дело действительно важное и интеллектуально очень емкое. Исследуем данные Threat Intelligence, собираем атрибуцию на группировки и её TTP (tactics, techniques and procedures), разрабатываем отдельные сценарии и правила выявления инцидентов, внедряем мощные технологические решения. Это огромный и важный кусок работы любой команды по безопасности, а уж тем более любого зрелого SOC.

image

Но периодически все классические подходы к безопасности через мониторинг просто умножаются на ноль, когда в жизнь приходит большая и неприятная массовая атака. Та самая, о которой узнаёт даже ваша бабушка. Условно назовем такую атаку медиакиберпандемией, чтобы не путать с регулярными рассылками Cobalt или хитрыми инструментами Silence (для бывалых они уже стали чем-то вроде белого шума). Речь о Heartbleed, Shellshock, WannaСry, уязвимости в оборудовании Cisco и прочих. Что их отличает от прочих кибердиверсий? Как в этом случае стоит (или не стоит) вести себя SOC и просто ИБ-службе компании? Давайте разбираться под катом.
Читать дальше →

Как не сделать самый быстрый strlen и найти недоработку в Visual Studio 2019 Community

Reading time8 min
Views9.6K
На размышления меня натолкнула статья об использовании «странной» инструкции popcount в современных процессорах. Речь пойдет не о подсчете числа единичек, а об обнаружении признака окончания Си строки (нуль-терминированная строка).
Нуль-терминированная строка — способ представления строк в языках программирования, при котором вместо введения специального строкового типа используется массив символов, а концом строки считается первый встретившийся специальный нуль-символ (NUL из кода ASCII, со значением 0).

Для определения длины таких срок применяется стандартная функция

size_t __cdecl strlen(char const* str)

Алгоритм работы которой можно описать на языке Си как:


size_t strlen_algo(const char* str)
{
	size_t length = 0;
	while (*str++)
		length++;
	return length;
}

Посмотрим, во что его превращает компилятор MS Visual Studio 2019 community (Release, x86):

08811F7h:
mov         al,byte ptr [ecx]  
inc         ecx  
test        al,al  
jne         main+0D7h (08811F7h) 
Читать дальше →

Когда стандарта HTTP мало. Коммитим в Micronaut

Reading time6 min
Views4.5K
Всем привет, меня зовут Дмитрий, и сегодня я расскажу о том, как производственная необходимость заставила меня стать контрибутором для фреймворка Micronaut. Наверняка многие о нём слышали. Если вкратце, то это легковесная альтернатива Spring Boot, где основной упор сделан не на рефлексию, а на предварительную компиляцию всех нужных зависимостей. Более подробное знакомство можно начать с официальной документации.

Фреймворк Micronaut используется в нескольких внутренних проектах Яндекса и зарекомендовал себя достаточно хорошо. Так чего же нам не хватало? Могу сказать сразу: из коробки фреймворк поддерживает, в принципе, все фичи, которые теоретически могут понадобиться программисту для разработки бэкендов. Однако есть редкие кейсы, которые из коробки не поддерживаются. Один из них — когда работать нужно не по HTTP, а с расширением HTTP. Например, с дополнительными методами. Таких случаев на самом деле гораздо больше, чем может показаться. Более того, часть таких протоколов является стандартами:

  • Webdav — расширение для доступа к ресурсам. Помимо стандартных методов, HTTP требует поддержки дополнительных методов типа LOCK, PROPPATCH и т. д.
  • Caldav — расширение Webdav для работы с событиями календарного типа. Данный протокол с большой долей вероятности есть в приложениях на вашем смартфоне: для синхронизации календарей, встреч и т. д.

И этим список не исчерпывается. Если вы заглянете в реестр HTTP-методов, то увидите, что HTTP-методов, лишь описанных стандартами RFC, на данный момент 39. А сколько ещё случаев, когда имеется самописный протокол поверх HTTP. Так что поддержка нестандартных HTTP-методов довольно распространена. Также часто бывает, что фреймворк, который вы используете, не поддерживает такие методы. Вот дискуссия на Stack Overflow для ExpressJS. А вот pull request на гитхабе для Tornado. Ну и поскольку Micronaut часто позиционируется как легковесная альтернатива Spring — то вот та же проблема для Spring.
Читать дальше →

Методы оптимизации кода для Redd. Часть 1: влияние кэша

Reading time10 min
Views2K
В первой статье цикла я активно продвигал идею, что разработка кода под Redd вторична, а первичен основной проект. Redd — вспомогательный инструмент, так что тратить на него уйму времени неправильно. То есть разработка под него должна идти быстро. Но это совсем не значит, что получившиеся программы должны быть неоптимальны. Собственно, если их совсем не оптимизировать, то просто мощности аппаратуры не хватит, чтобы реализовать нужную тестовую систему. Поэтому процесс, как я и сказал, должен быть быстрым и непринуждённым, но вот некоторые принципы оптимизации разработчик должен всегда держать в уме.



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

Лейся, Fanta: новая тактика старенького Android-трояна

Reading time16 min
Views13K


Однажды вы захотите продать что-нибудь на Avito и, выложив подробное описание своего товара (например, модуль оперативной памяти), получите вот такое сообщение:

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

Заложники COBOL и математика. Часть 1

Reading time8 min
Views22K
Посмотрим правде в глаза: никто не любит дробные числа — даже компьютеры.

Когда речь заходит о языке программирования COBOL — первый вопрос, который всплывает у всех в голове, всегда выглядит так: «Почему человечество всё ещё использует этот язык во множестве жизненно важных областей?». Банки всё ещё пользуются COBOL. Около 7% ВВП США зависит от COBOL в деле обработки платежей от CMS. Налоговая служба США (IRS), как всем хорошо известно, всё ещё использует COBOL. В авиации тоже используется этот язык (отсюда я узнала одну интересную вещь на эту тему: номер бронирования на авиабилетах раньше был обычным указателем). Можно сказать, что множество весьма серьёзных организаций, идёт ли речь о частном или государственном секторе, всё ещё используют COBOL.



Вторая часть

Автор материала, первую часть перевода которого мы сегодня публикуем, собирается найти ответ на вопрос о том, почему COBOL, язык, который появился в 1959 году, всё ещё настолько распространён.
Читать дальше →

Использование нативных Places от Apple

Reading time5 min
Views2.1K
imageНесколько лет назад я работал над проектом, который должен был иметь схожие функции со Snapchat и при этом быть узко тематическим Instagram-подобным приложением. Проект разрабатывался только под одну платформу — iOS. Естественно, во время разработки основной фичи — публикация фотографий, клиент внезапно захотел дополнительно добавить возможность отмечать место, где было сделано фото. В большинстве случаев, многие сразу вспоминают про Places API от Google и Facebook, но клиента не устраивал тот факт, что данные решения имели определенные лимиты. Поэтому после дополнительного ресерча, был найден еще один альтернативный вариант от Apple — CLPlacemark, который был бесплатным, и в документации на тот момент не было упоминаний о лимитах для ежедневного использования. Поскольку разработка для других платформ вообще изначально не планировалась, это казалось очень подходящим вариантом.
Читать дальше →

Введение в детерминированные сборки на С/С++. Часть 1

Reading time8 min
Views6.2K
Перевод статьи подготовлен специально для студентов курса «Разработчик С++».




Что такое детерминированная сборка?


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

Кластеризуем лучше, чем «метод локтя»

Reading time4 min
Views51K


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

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

Разработка Unix подобной OS — Виртуальное адресное пространство (6)

Reading time7 min
Views4.9K
В предыдущей статье мы рассмотрели основы работы в защищенном режиме IA-32. Сегодня пришла пора научиться работать с виртуальным адресным пространством.
Читать дальше →

Прионы, кальций, микробиота, пищевые гормоны и болезнь Альцгеймера

Reading time24 min
Views8.8K
Борьба со старением имеет несколько направлений. Одно из них – это возрастные нейродегенеративные патологии, болезни Альцгеймера и Паркинсона. Несмотря на активное изучение их молекулярных механизмов, противостоять им пока не научились. И это становится большой проблемой для пожилых людей, наиболее подверженных нейродегенерации. Неудачи с терапией, направленной против нейродегенерации, стимулируют учёных на поиск других ключевых факторов, участвующих в патогенезе нейропатологий. Некоторые из них мы и рассмотрим с этом обзоре.

Болезнь Альцгеймера (AD) является наиболее распространенной формой деменции у пожилых людей с клиническими проявлениями прогрессирующих когнитивных и функциональных нарушений. Сегодня только по официальным данным в мире насчитывается 47,5 миллионов человек с деменцией. Ежегодно регистрируется 7,7 млн. новых случаев заболевания. И ожидается, что число людей с деменцией увеличится до 75,6 млн. человек к 2030 году, а к 2050 — 135,5 млн. человек. На сегодня основным фактором повышения риска возникновения AD считается возраст.
Читать дальше →

Немного финансовой математики: расчёт инфляции и процентов

Reading time18 min
Views13K
Недавно мне пришлось проверить расчёты, которые выполняют коммунальщики моего города. Возник спорный вопрос, разрешить который можно только лишь проведя корректные расчёты. Забегая вперёд, скажу, что коммунальщики считают неправильно. Поэтому здесь мы рассмотрим, как правильно начислять инфляционные затраты и 3% годовых на долг по обязательствам, согласно ГК Украины.

Первая часть описывает расчёт инфляционных затрат, это специфично для Украины.
Вторая (большая) часть будет посвящена вопросу расчёта 3% годовых. Она также применима и к РФ, РБ и РК, но в этих странах ставка не является фиксированной, а зависит от ставки рефинансирования ЦБ. Остальные страны не смотрел.

Вторая часть очень близка к расчётам процентов по обычным кредитным сделкам (кредиты, ссуды, займы и пр.).

image alt

Сначала теория, в конце немного кода.

Всё это под катом.
Читать дальше →

Перепрограммируем кассу и печатаем на ней Киану Ривза. Часть 2. ПО для ПК

Reading time2 min
Views3.1K
В предыдущей статье я кратко описал свою прошивку для ККТ ШТРИХ-ФР-К, которая позволяет управлять термоголовкой, движками и соответственно выводить на печать все что угодно. В этой части я покажу как написать софт, который будет общаться с кассой и форматировать картинку для печати.

image

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

Reading time3 min
Views27K
Текст не берется из ниоткуда. Его придумывают они. Люди, благодаря которым вы запоминаете бренды, но чьих имен не знаете.

1. Альберт Ласкер


Лицо Альберта Ласкера было синонимом рекламы в США. До него реклама представляла собой нечто вроде «вот товар — вот его цена. Ну, покупайте». Как вы понимаете, покупали мало. Кто-то должен был это исправить. И Альберт Ласкер вызвался добровольцем.

С его помощью раскрутились не только обреченные на банкротство фирмы, но и малоизвестный копирайтер с известным именем — Джон Кеннеди. Вместе они вывели идеальную на то время формулу для рекламы: главное – заставить клиента купить.

И клиент покупал! Постеры с актрисами, элегантно держащими сигарету, продали пачки Lucky Strike миллионам американских женщин. Ведь сама Хеди Ламарр смотрела с вывески и говорила: «Хорошая сигарета — как хороший фильм: всегда приятна», а слоган «It’s Toasted» информировал, что табак обжаривается, а не сушится на солнце, как раньше. Ласкер показал, что курящая женщина выглядит сексуально — и это сработало.

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

Information

Rating
Does not participate
Registered
Activity