Как стать автором
Обновить
15.9
Карма
0
Рейтинг
evilbloodydemon @evilbloodydemon

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

  • Подписчики 18
  • Подписки 13
  • Публикации
  • Комментарии

Simple English и Simple Wikipedia: как идея о простом английском стала реальностью

Блог компании EnglishDomИзучение языков

Английский язык — далеко не самый простой из существующих. А по количеству лексики он вообще один из лидеров. По исследованию Google и Гарвардского университета, на 2000 год в английском языке было уже около 1 022 000 слов.

В мировой истории был целый ряд попыток популяризовать английский язык в мире путем его упрощения и использования ограниченного словарного запаса. Самой современной попыткой можно считать Simple English Wikipedia, статьи в которой поймет даже студент с уровнем Pre-Intermediate. 

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

Читать далее
Всего голосов 9: ↑8 и ↓1+7
Просмотры6.3K
Комментарии 8

Смена работы тимлидом: как готовиться, как онбордиться, и что дальше

Блог компании PleskУправление разработкойКарьера в IT-индустрии

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

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

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

Читать далее
Всего голосов 31: ↑30 и ↓1+29
Просмотры8.5K
Комментарии 13

Принцип подстановки Барбары Лисков (предусловия и постусловия)

PHPПрограммированиеСовершенный кодПроектирование и рефакторингООП
Из песочницы

​Почему у многих возникают проблемы с этим принципом? Если ли более простое объяснение?

​️В данной статье мы НЕ будем рассматривать общие примеры данного принципа, о которых уже есть много материалов (пример с квадратом и прямоугольником или управления термостатами). Здесь мы немного подробнее остановимся на таких понятиях как «Предусловия», «Постусловия», рассмотрим что такое ковариантность, контравариантность и инвариантность, а также что такое «исторические ограничения» или «правило истории».

Интересно...
Всего голосов 22: ↑20 и ↓2+18
Просмотры7.6K
Комментарии 19

Микросервисы — не способ масштабироваться

Разработка веб-сайтовПрограммированиеАлгоритмыМикросервисы

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

Читать далее
Всего голосов 30: ↑15 и ↓150
Просмотры6.8K
Комментарии 51

Гайд начинающего тимлида

Управление разработкойУправление проектамиКарьера в IT-индустрии

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

Всё это я проговаривал на вебинаре в Хекслете тут https://www.youtube.com/watch?v=y_HkXvFovAc

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

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

Читать далее
Всего голосов 51: ↑49 и ↓2+47
Просмотры25K
Комментарии 16

Букварь по F# для любопытствующих C#-разработчиков

.NETC#F#
Перевод

Предисловие


Мой переход на F# в качестве излюбленного языка был слегка усеян препятствиями. Примерно через десять лет почти постоянного использования C# у меня пробудилось любопытство, когда я услышал об этом другом #-языке. Моя первая реакция была той, которую с тех пор видел у других C#-разработчиков — отрицание, — C# является хорошим языком, и мне с ним комфортно, так зачем тратить силы на изучение другого? Но любопытство осталось — и, по крайней мере, несколько раз выделил вечер, чтобы прочитать базовый вводный пост и попытаться написать каких-нибудь ката на F#. Это не прижилось, потому что я просто чувствовал себя потерянным и не мог воплотить свой опыт использования C# в ощущение даже отдаленного комфорта с F#. Достаточно легко опустить фигурные скобки, немного замяться, чтобы не забыть let вместо var — но как сделать то, что я хотел?


Тогда я этого не осознавал, но, на мой взгляд, наблюдал потенциальный недостаток в том, как F#-разработчики говорят, описывают и представляют свой язык внешнему миру. Существует обширная база материалов обо всех возможностях и функциональности F#: Algebraic Data Types, Exhaustive Matching, Type Inference и т.д. Есть много статей, посвященных тому, как решать широкий спектр задач с помощью F#. Но, как мне кажется, не хватает чего-то вроде следующего: некоторых указаний о том, как взять то, что вам уже удобно в C#, и перевести их на F#. Так что мне интересно, можем ли мы как-то закрыть этот недостаток.

Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Просмотры7.4K
Комментарии 13

Как пересчитать электронную таблицу

Open sourceАлгоритмыRustСофт
Перевод
Предположим, я заказываю буррито для двоих друзей и хочу рассчитать общую стоимость заказа:



Поток данных в этой таблице немного сложно проследить, поэтому вот эквивалентная диаграмма, которая представляет таблицу в виде графа:



Округляем стоимость буррито El Farolito super vegi до 8 долларов, поэтому при доставке стоимостью 2 доллара общая сумма составит 20 долларов.
Читать дальше →
Всего голосов 22: ↑21 и ↓1+20
Просмотры5.4K
Комментарии 6

Атаки на JSON Web Tokens

Блог компании AlexHostИнформационная безопасностьТестирование веб-сервисов


Содержание:


  • Что такое JWT?
    • Заголовок
    • Полезная нагрузка
    • Подпись
    • Что такое SECRET_KEY?
  • Атаки на JWT:
    • Базовые атаки:
      1. Нет алгоритма
      2. Изменяем алгоритм с RS256 на HS256
      3. Без проверки подписи
      4. Взлом секретного ключа
      5. Использование произвольных файлов для проверки
    • Продвинутые атаки:
      1. SQL-инъекция
      2. Параметр поддельного заголовка
      3. Внедрение заголовка ответа HTTP
      4. Прочие уязвимости

Что такое JSON Web Token?


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


  • Заголовок
  • Полезная нагрузка
  • Подпись

Заголовок


Это объект JSON, который представляет собой метаданные токена. Чаще всего состоит из двух полей:


  • Тип токена
  • Алгоритм хэширования

Официальный сайт предлагает два алгоритма хэширования:


  • «HS256»
  • «RS256»
Читать дальше →
Всего голосов 20: ↑12 и ↓8+4
Просмотры8.7K
Комментарии 25

Упрощаем юнит-тесты с помощью связки AutoFixture и xUnit

.NETTDDC#
Из песочницы
Все мы знаем, что юнит-тесты — это классно, что только коду, который так или иначе покрыт тестами, можно доверять и что если какой-нибудь неопытный senior developer старший программист что-нибудь сломает, тесты это сразу же покажут.

Тем не менее, написание тестов сложно назвать увлекательным процессом. Инициализация тестовых данных, инициализация моков, создание объекта тестирования… Пока доберешься до вызова метода, который ты собственно хотел проверить, тестировать уже и не хочется ничего. Я конечно утрирую, юнит-тест по своей природе не должен брать на себя слишком много и содержать пару сотен десятков строк инициализации (хотя и такое бывает), однако писать один и тот же код быстро надоедает. И вот уже появляются фабрики тестовых объектов, иерархия базовых классов для тестов и прочие ООП примочки, призванные «упростить» создание теста. Приводит это как правило к тому, что шансов быстро понять, что же делает тест, не путешествуя по этим самым объектам, практически не остается.

Собственно, инструмент, о котором я хочу рассказать, как раз и призван упростить, а в некоторых случаях и полностью убрать фазу инициализации или Arrange фазу теста.
Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Просмотры29K
Комментарии 3

Четырёхмерный лабиринт с видом от первого лица

ПрограммированиеРабота с 3D-графикойРазработка игр
Из песочницы

Существует более 30 игр с дополнительным пространственным измерением (список на википедии), которые разнообразными способами визуализируют и пытаются сделать доступной для понимания наличие четвёртой координаты. Но среди тех игр, с которыми я ознакомился, не нашел для себя такой, которая сочетала бы в себе следующие факторы:

- вид от первого лица

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

- простая и привычная графика, с текстурами и освещением

- отсутствие лишних геймплейных элементов и бóльшая направленность игры на исследование четырёхмерного мира

К тому же, было желание самому сделать нечто подобное, поэтому решил создать минимальную версию такой игры — процедурно генерируемый четырёхмерный лабиринт, с визуализацией 3D сечениями. О том, что из этого получилось, читайте далее.

Читать далее
Всего голосов 122: ↑122 и ↓0+122
Просмотры21K
Комментарии 72

Как мы находим, адаптируем и сохраняем IT-специалистов в кровавом энтерпрайзе

Блог компании HFLabsУправление проектамиРазвитие стартапаУправление персоналомIT-компании

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

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

Читать далее
Всего голосов 38: ↑31 и ↓7+24
Просмотры8K
Комментарии 50

Let's Encrypt и nginx: настройка в Debian и Ubuntu

Настройка LinuxNginxСерверное администрирование
Tutorial

image


Если вдруг вся эта история прошла мимо вас, Let's Encrypt — центр сертификации от некоммерческой организации ISRG, существующий при поддержке EFF и многих компаний, взявшей на себя миссию дать людям бесплатные SSL/TLS сертификаты для сайтов и серверов. Сертификаты от Let's Encrypt уже используются на более чем 10 миллионах доменов.


Кроме очевидной бесплатности у сертификатов от Let's Encrypt есть особое, отсутствующее у любых других коммерческих сертификационных центров, достоинство: если вы однажды получили сертификат от Let's Encrypt, то, при прочих равных, это навсегда. Не нужно раз в год-два вручную обновлять сертификаты. Не нужно вообще вспоминать что сертификаты где-то есть. Получил, настроил и забыл!


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


Организации автоматического обновления сертификатов в статье уделено пристальное внимание, с тем чтобы вы могли в полной мере оценить это принципиальное преимущество Let's Encrypt.

Читать дальше →
Всего голосов 48: ↑46 и ↓2+44
Просмотры222K
Комментарии 94

Пишем движок полнотекстового поиска на Go

Поисковые технологииGo
Перевод
Полнотекстовый поиск — один из тех инструментов, которые мы используем практически каждый день, когда ищем какую-то информацию в интернете. Full-Text Search (FTS) — это метод поиска текста в коллекции документов. Документ может ссылаться на веб-страницу, газетную статью, сообщение электронной почты или любой структурированный текст.

Сегодня мы собираемся написать собственный движок FTS. К концу этой статьи он сможет выполнять поиск по миллионам документов менее чем за миллисекунду. Начнём с простых поисковых запросов, таких как «Выдать все документы со словом cat», а потом расширим движок для поддержки более сложных логических запросов.

Примечание: самым известным движком полнотекстового поиска является Lucene (а также Elasticsearch и Solr, построенные на его основе).
Читать дальше →
Всего голосов 47: ↑46 и ↓1+45
Просмотры13K
Комментарии 23

Yet Another Производственный Календарь на MS SQL. ПО->ША->ГО->ВО

SQLMicrosoft SQL ServerSQLite
Написать свое решение меня подтолкнул пост на Хабре на аналогичную тему, в котором эта задача была решена «в лоб» — простым перечислением дней и флагом рабочий/выходной за весь диапазон жизнедеятельности системы, в которой этот календарь используется. В аналогичной ситуации я решил поступить немного хитрее, что в итоге оказывается и гораздо проще в поддержке. Если интересно, как это было сделано — welcome под кат:
Читать дальше →
Всего голосов 9: ↑7 и ↓2+5
Просмотры3.8K
Комментарии 0

Как x86_x64 адресует память

Блог компании Дата-центр «Миран»ПрограммированиеАлгоритмыКомпьютерное железоПроцессоры
Перевод
Сегодня я собираюсь поговорить про адресацию памяти: один, казалось бы, небольшой, и тем не менее удивительно непростой элемент семантики команд архитектуры х86_64. В особенности хочется поговорить про команду mov и то, как через только одну эту команду х86_64 пользователю становятся доступны различные методы адресации памяти.

Я не буду говорить про остальные затрагивающие память команды (то есть, благодаря CISC, почти все остальные), команды которые пишут массивные фрагменты памяти (это о тебе, fxsave), или иные касающиеся темы вопросы (модели кода, независящий от адреса код, и бинарная релокация). Я также не буду затрагивать исторические режимы адресации или режимы, которые активны при работе процессора x86_64 не в 64-битном режиме (т.е. любые отличные от long mode с 64-битным кодом).

Некоторые ограничения


Несмотря на кошмарное наследие кодирования команд х86_64, а может и благодаря ему, у адресации памяти есть некоторые ограничения.

Начнем с хорошего:

  • На достаточно высоком уровне в архитектуре х86_64 есть всего два режима адресации.
  • Все регистры в обоих режимах адресации должны быть строго одинакового размера. Другими словами, мы не можем странным образом смешивать 64, 32 и 16-битные регистры и получать актуальный адрес — в кодировании х86_64 для подобного маневра попросту нет места.
Читать дальше →
Всего голосов 35: ↑35 и ↓0+35
Просмотры19K
Комментарии 117

Дополняя SQL. Часть 1. Сложности парсинга. Истории о доработке ANTLR напильником

PostgreSQL.NETSQLMicrosoft SQL ServerРазработка под Windows
Публикую на Хабр оригинал статьи, перевод которой размещен в блоге Codingsight.

Что будет в этой статье?


Более пяти лет работаю в компании, что занимается разработкой линейки IDE для работы с базами данных. Начиная работу над этой статьей я и не представлял как много интересных историй получится вспомнить, потому когда закончил получил более 30 страниц текста. Немного подумав, я сгруппировал истории по тематике, а статью разбил на несколько.

По мере публикации буду добавлять ссылки на следующие части:
Часть 1. Сложности парсинга. Истории о доработке ANTLR напильником
Часть 2. Оптимизация работы со строками и открытия файлов
Часть 3. Жизнь расширений для Visual Studio. Работа с IO. Необычное использование SQL
Часть 4. Работа с исключениями, влияние данных на процесс разработки. Использование ML.NET

За время работы произошло много интересного: мы нашли несколько багов в .NET, оптимизировали некоторые функции во много раз, а некоторые лишь на проценты, что-то делали очень круто и с первого раза, а что-то у нас не получалось даже после нескольких попыток. Моя команда занимается разработкой и поддержкой языковых функций IDE, главная из которых автодополнение кода. Отсюда и название цикла статей. В каждой их частей я буду рассказывать несколько историй: некоторые об успехах, некоторые о неудачах.

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


Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Просмотры3.1K
Комментарии 16

PostgreSQL Antipatterns: насколько глубока кроличья нора? пробежимся по иерархии

Блог компании ТензорВысокая производительностьPostgreSQLSQLАдминистрирование баз данных
В сложных ERP-системах многие сущности имеют иерархическую природу, когда однородные объекты выстраиваются в дерево отношений «предок — потомок» — это и организационная структура предприятия (все эти филиалы, отделы и рабочие группы), и каталог товаров, и участки работ, и география точек продаж,…



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

Существует много способов хранения такого дерева в СУБД, но мы сегодня остановимся только на одном варианте:

CREATE TABLE hier(
  id
    integer
      PRIMARY KEY
, pid
    integer
      REFERENCES hier
, data
    json
);

CREATE INDEX ON hier(pid); -- не забываем, что FK не подразумевает автосоздание индекса, в отличие от PK

И пока вы всматриваетесь в глубину иерархии, она терпеливо ждет, насколько же [не]эффективными окажутся ваши «наивные» способы работы с такой структурой.


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

История потоковых мультипроцессоров Nvidia

Работа с 3D-графикойКомпьютерное железоВидеокартыПроцессоры
Перевод

Последние выходные я потратил на освоение программирования CUDA и SIMT. Это плодотворно проведённое время закончилось почти 700-кратным ускорением моего «рейтрейсера на визитке» [1] — с 101 секунд до 150 мс.

Такой приятный опыт стал хорошим предлогом для дальнейшего изучения темы и эволюции архитектуры Nvidia. Благодаря огромному объёму документации, опубликованному за долгие годы «зелёной» командой, мне удалось вернуться назад во времени и вкратце пройтись по удивительной эволюции её потоковых мультипроцессоров.

В этой статье мы рассмотрим:

Год    Поколение       Серия      Кристалл    Техпроцесс      Самая мощная карта
===========================================================================
2006    Tesla      GeForce 8          G80        90 nm             8800 GTX 
2010    Fermi      GeForce 400      GF100        40 nm              GTX 480
2012    Kepler     GeForce 600      GK104        28 nm              GTX 680
2014    Maxwell    GeForce 900      GM204        28 nm          GTX  980 Ti
2016    Pascal     GeForce 10       GP102        16 nm          GTX 1080 Ti
2018    Turing     GeForce 20       TU102        12 nm          RTX 2080 Ti

Тупик


Вплоть до 2006 года архитектура GPU компании NVidia коррелировала с логическими этапами API рендеринга[2]. GeForce 7900 GTX, управлявшаяся кристаллом G71, состояла из трёх частей, занимавшихся обработкой вершин (8 блоков), генерацией фрагментов (24 блоков), и объединением фрагментов (16 блоков).


Кристалл G71. Обратите внимание на оптимизацию Z-Cull, отбрасывающую фрагмент, не прошедший бы Z-тест.

Эта корреляция заставила проектировщиков угадывать расположение «узких места» конвейера для правильной балансировки каждого из слоёв. С появлением в DirectX 10 ещё одного этапа — геометрического шейдера, инженеры Nvidia столкнулись со сложной задачей балансировки кристалла без знания того, насколько активно будет использоваться этот этап. Настало время для перемен.
Читать дальше →
Всего голосов 26: ↑25 и ↓1+24
Просмотры9.3K
Комментарии 3

Лучшие вопросы средней сложности по SQL на собеседовании аналитика данных

Блог компании Дата-центр «Миран»PostgreSQLПрограммированиеSQLКарьера в IT-индустрии
Перевод
Первые 70% курса по SQL кажутся довольно простыми. Сложности начинаются на остальных 30%.

С 2015 по 2019 годы я прошёл четыре цикла собеседований на должность аналитика данных и специалиста по анализу данных в более чем десятке компаний. После очередного неудачного интервью в 2017 году — когда я запутался в сложных вопросах по SQL — я начал составлять задачник с вопросами по SQL средней и высокой сложности, чтобы лучше готовиться к собеседованиям. Этот справочник очень пригодился в последнем цикле собеседований 2019 года. За последний год я поделился этим руководством с парой друзей, а благодаря дополнительному свободному времени из-за пандемии отшлифовал его — и составил этот документ.

Есть множество отличных руководств по SQL для начинающих. Мои любимые — это интерактивные курсы Codecademy по SQL и Select Star SQL от Цзы Чон Као. Но в реальности первые 70% из курса SQL довольно просты, а настоящие сложности начинаются в остальных 30%, которые не освещаются в руководствах для начинающих. Так вот, на собеседованиях для аналитиков данных и специалистов по анализу данных в технологических компаниях часто задают вопросы именно по этим 30%.

Удивительно, но я не нашёл исчерпывающего источника по таким вопросам среднего уровня сложности, поэтому составил данное руководство.
Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Просмотры41K
Комментарии 17

X.509 своми силами в .Net Core

.NET

image


Некоторое время назад я задался вопросом, можно ли наладить фабрику сертификатов, не прибегая к утилите openssl. Как подвести «под кнопку» весь процесс от генерации ключей до проверки подлинности. Забегая вперед, скажу, что пространство System.Security.Cryptography в этом плане является вполне самодостаточным. В статье я рассмотрю этапы создания сертификатов, экспорт в форматы pem и pkcs12, хранение сертификатов в файловой системе, а также проверку подлинности, используя только классы из System.Security.Cryptography.

Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Просмотры7.5K
Комментарии 4

Информация

В рейтинге
Не участвует
Откуда
Ставропольский край, Россия
Зарегистрирован
Активность