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

Компания Маклауд временно не ведёт блог на Хабре

Сначала показывать

Mathcha — внебрачный сын Word и Latex

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


Некоторое время назад у меня возникла потребность писать несложные тексты, которые включали в себя математические рассуждения, формулы и вычисления. С помощью примеров и гайдов из интернета я смог освоить самые основы TeX и выполнять поставленные задачи. Но меня не покидала мысль о том, что я стреляю из пушки по воробьям, поэтому я очень обрадовался, когда один знакомый показал мне редактор Mathcha, который включал в себя возможности Word и TeX одновременно. Я считаю, что этот сервис слишком недооценён, и многим он понравится, поэтому я делаю обзор на него.


Дисклеймер: данный обзор основан на опыте работы автора с инструментом и не является рекламой сервиса Mathcha.io

Читать дальше →
Всего голосов 23: ↑22 и ↓1+27
Комментарии13

Карманная книга по TypeScript. Часть 3. Сужение типов

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

image


Мы продолжаем серию публикаций адаптированного и дополненного перевода "Карманной книги по TypeScript".

Другие части:



Обратите внимание: для большого удобства в изучении книга была оформлена в виде прогрессивного веб-приложения.


Предположим, что у нас имеется функция под названием padLeft:


function padLeft(padding: number | string, input: string): string {
 throw new Error('Еще не реализовано!')
}

Если padding — это number, значит, мы хотим добавить указанное количество пробелов перед input. Если padding — это string, значит, мы просто хотим добавить padding перед input. Попробуем реализовать логику, когда padLeft принимает number для padding:


function padLeft(padding: number | string, input: string): string {
 return new Array(padding + 1).join(' ') + input
 // Operator '+' cannot be applied to types 'string | number' and 'number'. Оператор '+' не может быть применен к типам 'string | number'
}
Читать дальше →
Всего голосов 16: ↑14 и ↓2+15
Комментарии4

“Прыгни со скалы!”: взлеты и падения легендарного геймдизайнера Уоррена Спектора

Время на прочтение11 мин
Количество просмотров6.2K
image

Будь у игровой индустрии “зал славы”, почетное место там занял бы Уоррен Спектор. Человек-легенда, визионер, автор культовых Deus Ex и System Shock, основоположник жанра immersive sim, давший игрокам неслыханную свободу выбора. Кажется, что с таким авторитетом и признанием открываются все двери и любая идея находит поддержку. Но, увы, не всё так просто, и биография Спектора тому подтверждение: много раз он “прыгал со скалы”, пытаясь сделать игру своей мечты, — и почти всегда сталкивался с неразрешимыми проблемами и непониманием инвесторов. Давайте вместе с журналистом Джейсоном Шрайером проследим тернистый творческий путь легенды геймдева.

От настолок — к созданию Deus Ex


С самого детства Уоррен был одержим созданием интерактивных историй. Он рано увлекся настольными ролевыми играми, а когда переехал в 22 года в Остин (штат Техас), присоединился к компании приятелей, регулярно играющих в Dungeons & Dragons. Любопытный факт — одна из игровых сессий продлилась 10 лет, а гейм-мастером был будущий корифей жанра киберпанк Брюс Стерлинг. В Техасском университете Спектор изучал кинематограф, писал диссертацию и преподавал, чтобы было чем оплачивать счета, — пока в один прекрасный день его не уволили. Спустя некоторое время друг пригласил его поработать редактором настолок в компанию Steve Jackson Games. Скромная зарплата Уоррена не смущала: тогда, по его словам, он был геймером-любителем, и такая работа давала возможность создавать собственные игровые системы и кампании.
Читать дальше →
Всего голосов 24: ↑22 и ↓2+28
Комментарии6

Я исследовал закон Паркинсона и теперь меня уволят

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

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

Первый закон Паркинсона: работа заполняет время, отпущенное на неё.

Не правда ли, формулировка отдаёт какой-то безнадёгой? Старайся, планируй, работай над эффективностью, не отвлекайся, будь осознанным – толку ноль. Всё равно весь день просидишь. Меня такое положение дел не устраивало, и я, вдохновлённый энтузиазмом, кинулся ломать закон Паркинсона.

Хотел доказать самому себе, что могу управлять структурой и объемом работы так, чтобы она не занимала всё моё время. Что вышло, и к чему я в итоге пришёл – за разворотом.

Разворот
Всего голосов 110: ↑91 и ↓19+101
Комментарии107

Как учить протоколы без чтения RFC: как сэкономить время при разработке

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


Если вы разрабатывает приложение, работающее по сети, или проводите отладку работы такого приложения, доскональное знание работы сетевых протоколов сильно облегчит вашу задачу. Первоисточником подобного знания являются RFC и, к счастью, они с давних времен находятся в открытом доступе. Более того, прочитать их можно даже консольных браузером links, так как кроме текста в них ничего не содержится.

Тем не менее, скорее всего большинство читателей Хабра никогда не читали полностью текст хотя бы одного RFC, даже RFC-2616. Помимо зубодробительного стиля бюрократических документов, помехой может служить языковой барьер. К тому же чаще всего нужно понять какой-то определенный аспект архитектуры протокола: длину и тип полей, код возврата, расположение внутри заголовка. Для этого вовсе не обязательно читать все от корки до корки.

Как раз для этого случая написан Protocol, довольно простое консольное приложение, написанное на Python. Оно имеет двоякое назначение.

  • Предоставить разработчикам и инженерам возможность легко и просто увидеть диаграмму заголовков самых распространенных сетевых протоколов прямиком из командной строки.
  • Предоставить исследователям и инженерам возможность быстро создавать ASCII диаграммы заголовков, для своих собственных пользовательских протоколов.
Читать дальше →
Всего голосов 26: ↑21 и ↓5+22
Комментарии19

Синхронный АМ приёмник Полякова

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

Владимир Тимофеевич Поляков (RA3AAE) широко известен в нашей стране как разработчик любительской радиоэлектроники. Его конструкции всегда отличались простотой и хорошей повторяемостью. Ещё в них всегда присутствовала какая-то «сумасшедшинка».

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

Речь идёт о синхронном АМ приёмнике, схема которого была опубликована в журнале «Радио» №8 за 1984 год.
Читать дальше →
Всего голосов 60: ↑60 и ↓0+60
Комментарии33

Откровения пьяного старшего инженера

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

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

  • Лучший способ достичь карьерного роста — сменить компанию.
  • Стек технологий на самом деле не имеет значения, потому что в моей области есть примерно 15 базовых шаблонов разработки программного обеспечения. Я работаю с данными, поэтому они не будут такими же, как веб-разработка или embedded. Но все области имеют около 10-20 основных принципов, и технический стек просто пытается упростить эти вещи, так что не переживайте.
  • Есть причина, по которой люди рекомендуют искать работу. Если я недоволен работой, наверное, пора уходить.
  • У меня появилось несколько хороших друзей на всю жизнь в компаниях, с которыми я работал. Мне не нужно это от каждого места, где я работаю. Я был совершенно счастлив, работая в тех местах, где у меня не складывались дружеские отношения с моими коллегами, и я был несчастен в местах, где у меня было несколько хороших друзей.
Читать дальше →
Всего голосов 186: ↑153 и ↓33+170
Комментарии177

Неполнота науки: как жил и что доказал Курт Гёдель?

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

«Достижения Курта Гёделя в современной логике уникальны и монументальны. Определенно, это — нечто большее, нежели памятник ученому, это — путеводная звезда, свет которой продолжит распространяться в пространстве и времени вечно». 

Джон фон Нейман

Накануне гибели Австро-Венгерская империя подарила человечеству немало великих умов. Такие громкие имена, как Эрвин Шрёдингер, Зигмунд Фрейд и Стефан Цвейг известны, пожалуй, каждому, включая даже тех, кто бесконечно далек от мира физики, психоанализа или классической литературы. С работами же Курта Гёделя знакомы не многие, хотя масштаб его вклада в математическую науку сопоставим с достижениями Эйнштейна в области физики. Ведь если теория относительности и квантовая теория помогли человечеству взглянуть под совершенно иным углом на законы мироздания, то теоремы Гёделя заставили ученых пересмотреть свои представления о научной методологии и принципах работы человеческого разума.

Логика, как образ жизни


Курт Фридрих Гёдель родился 28 апреля 1906 года в австро-венгерском городе Брюнн (ныне — статутный город Чешской Республики Брно), в семье австрийского коммерсанта Рудольфа Августа Гёделя, управляющего крупной текстильной фабрикой. Хотя Курт с детства демонстрировал недюжинные способности к языкам (еще в ранней юности он освоил английский и французский, научившись изъясняться на них не хуже, чем на родном немецком), однако карьера лингвиста его не прельщала. Окончив в 1923 году школу, молодой человек поступил в Венский университет, первые два курса которого посвятил изучению физики, однако затем переключился на математику, чему во многом способствовало прочтение книги Бертрана Рассела «Введение в философию математики».


Молодой Курт Гёдель, 1925 год
Читать дальше →
Всего голосов 60: ↑59 и ↓1+72
Комментарии99

Как самостоятельно собрать жидкостную линзу с настраиваемым фокусным расстоянием

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

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

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

Шаг 1: Справочная информация



Прежде чем мы начнем, позвольте нам сначала немного рассказать об оптике!

Свет меняет свое направление, проходя через разные среды (явление, называемое преломлением). В линзах мы тщательно контролируем угол, под которым свет проходит из одной среды (воздуха) в другую (стекло или пластик, из которого состоит линза) и обратно, чтобы сфокусировать или иным образом видоизменить свет. Большинство объективов камер состоят из ряда отдельных элементов, которые работают совместно для коррекции различных типов аберраций (оптических ошибок) и создания плоского сфокусированного изображения на плоскости изображения (датчик камеры). Но если все элементы объектива имеют фиксированный размер и форму, как объективы камеры фокусируют или масштабируют изображение? Когда объектив камеры меняет масштаб или фокус, он перемещает отдельные элементы объектива (или группы элементов) вперед и назад по отношению друг к другу внутри объектива.
Всего голосов 35: ↑35 и ↓0+35
Комментарии42

Уютный VPS-сервер для маленьких проектов: как настроить

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

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

Если вам тоже хочется создать в сети свое личное пространство, но вы не знаете, с чего начать, или вам просто интересны такие замечательные программные продукты как Docker, Portainer, Traefik – добро пожаловать под кат.

Введение


Признаться честно, я не очень люблю командную строку. То есть, мне нравится сама идея легкого минималистичного универсального интерфейса, практически не требующего ресурсов, но черное окно с мигающим курсором вызывает у меня фрустрацию и чувство беспомощности. И я даже знаю откуда это у меня. 
Читать дальше →
Всего голосов 47: ↑36 и ↓11+32
Комментарии31

Карманная книга по TypeScript. Часть 2. Типы на каждый день

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

image


Мы продолжаем серию публикаций адаптированного и дополненного перевода "Карманной книги по TypeScript".

Другие части:



Обратите внимание: для большого удобства в изучении книга была оформлена в виде прогрессивного веб-приложения.


Примитивы: string, number и boolean


В JS часто используется 3 примитива: string, number и boolean. Каждый из них имеет соответствующий тип в TS:


  • string представляет строковые значения, например, 'Hello World'
  • number предназначен для чисел, например, 42. JS не различает целые числа и числа с плавающей точкой (или запятой), поэтому не существует таких типов, как int или float — только number
  • boolean — предназначен для двух значений: true и false

Обратите внимание: типы String, Number и Boolean (начинающиеся с большой буквы) являются легальными и ссылаются на специальные встроенные типы, которые, однако, редко используются в коде. Для типов всегда следует использовать string, number или boolean.

Читать дальше →
Всего голосов 28: ↑23 и ↓5+25
Комментарии1

Карманная книга по TypeScript. Часть 1. Основы

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

Обратите внимание: для большого удобства в изучении книга была оформлена в виде прогрессивного веб-приложения.



С сегодняшнего дня мы начинаем серию публикаций адаптированного и дополненного перевода "Карманной книги по TypeScript".


Каждое значение в JavaScript при выполнении над ним каких-либо операций ведет себя определенным образом. Это может звучать несколько абстрактно, но, в качестве примера, попробуем выполнить некоторые операции над переменной message:


// Получаем доступ к свойству `toLowerCase`

// и вызываем его

message.toLowerCase()

// Вызываем `message`

message()

На первой строке мы получаем доступ к свойству toLowerCase и вызываем его. На второй строке мы пытаемся вызвать message.


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


  • Является ли переменная message вызываемой?
  • Имеет ли она свойство toLowerCase?
  • Если имеет, является ли toLowerCase вызываемым?
  • Если оба этих значения являются вызываемыми, то что они возвращают?

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

Читать дальше →
Всего голосов 27: ↑22 и ↓5+25
Комментарии18

Чем опасен космический мусор и как его уничтожают

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

По разным оценкам, количество космического мусора на орбите Земли варьируется от 220 до 300 тысяч объектов. При этом, объекты, размером в поперечнике более 1 см, составляют от 20 до 33% (от 60 тыс. до 100 тыс) всего космического мусора. Только представьте, какой эффект может оказать «астрономическая пуля» на пролетающий мимо космический корабль. Конечно, в масштабах нашей орбиты это кажется несущественным, но по мнению ученых, после 2055, в результате взаимного саморазрушения уже имеющегося на орбите мусора, проблема космического мусора станет серьезным препятствием для дальнейшего освоения космоса. Теперь подробнее об этом и других возможных последствиях.

Суть проблемы


Угроза физического столкновения


Собственно, самая очевидная угроза, исходящая от космического мусора, — это угроза физического столкновения. На текущем уровне развития технологий не существует какого-либо способа защитить космические аппараты от небольшого объекта, размером с пулю, движущегося со скоростью 10 км/с. Ну а про защиту от более крупных объектов и заикаться не приходиться, хотя на орбите их существенно меньше. Помимо угрозы повреждения и уничтожения объектов, стартующих с Земли, на орбите находится огромное количество различных спутников, необходимые для работы разных служб. GPS, метеорология, да куча всего в общем. Уничтожение одного из них не сделает всю систему нежизнеспособной, но в условиях увеличения количества мусора в будущем это может серьёзно повлиять на работоспособность этих систем. Помимо прогнозов на будущее, в настоящем и прошлом есть примеры столкновения космических аппаратов с мусором:
Читать дальше →
Всего голосов 24: ↑18 и ↓6+19
Комментарии7

«Швейцарский нож» науки: как методы Computer Science используются в других дисциплинах

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

Математику часто называют «языком науки». Она хорошо приспособлена для количественной обработки практически любой научной информации, независимо от ее содержания. А при помощи математического формализма ученые из разных областей могут в какой-то степени «понимать» друг друга. Сегодня похожая ситуация складывается с Computer Science. Но если математика — это язык науки, то CS — её швейцарский нож. Действительно, трудно представить современные исследования без анализа и обработки огромных объемов данных, сложных вычислений, компьютерного моделирования, визуализации, применения специального ПО и алгоритмов. Разберем несколько интересных «сюжетов», когда разные дисциплины используют методы CS для решения своих задач. 

Биоинформатика: от чашек Петри к биологии In silico


Биоинформатику можно назвать одним из самых ярких примеров стыка CS и других дисциплин. Эта наука занимается анализом молекулярно-биологических данных при помощи компьютерных методов. Биоинформатика как отдельное научное направление появилась в начале 70-х годов прошлого века, когда впервые были опубликованы нуклеотидные последовательности малых РНК и созданы алгоритмы предсказания их вторичной структуры (пространственного расположения атомов в молекуле).

С проекта «Геном человека» по определению последовательности нуклеотидов в ДНК человека и идентификации генов в геноме началась новая эра биоинформатики. Стоимость секвенирования ДНК (определение последовательности нуклеотидов) упала на несколько порядков. Это привело к колоссальному увеличению числа последовательностей в публичных базах данных. На графике ниже изображен рост количества последовательностей в публичной базе данных GenBank с декабря 1982 года по февраль 2017 в полулогарифмическом масштабе. Чтобы накопленные данные стали полезными их нужно каким-то образом проанализировать.
Читать дальше →
Всего голосов 20: ↑18 и ↓2+22
Комментарии0

Виртуалка-камуфляж: Вредоносный подход к виртуализации

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


Виртуализация – это палка о двух концах 

Победоносное развитие облаков в последние годы можно связать с постепенным совершенствованием сразу множества технологий, относящихся как к аппаратному, так и к программному обеспечению. Но, наверное, наиболее известна технология, в которой две эти области смыкаются: речь о виртуализации. Упрощенно говоря, виртуализация – это акт абстрагирования аппаратных компонентов (например, процессора, памяти, дисковых приводов, т.д.) и представления их на программном уровне, который динамичнее аппаратного и лучше масштабируется. Данная ключевая характеристика виртуализации располагает к созданию заказных, надежных, высоко доступных онлайновых сервисов, используемых по требованию – сегодня это называется «облако».   
Читать дальше →
Всего голосов 19: ↑17 и ↓2+20
Комментарии2

Чем поживиться айтишнику на барахолке?

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


Приезжая в Питер, нужно обязательно посетить Эрмитаж, Русский музей и блошиный рынок на Уделке. Я бываю там не менее пары раз в год и хожу в это уникальное место, как в музей. Там можно найти не просто всё, а вообще всё, даже то, чего искать не собирался. Антикварную посуду и копаные старинные монеты, советские документы и виниловые пластинки, самовары и пионерские горны, а еще — кучу всевозможного барахла, которое слегка помятые граждане продают прямо с разложенных на земле клеёнок.

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

Читать дальше →
Всего голосов 88: ↑80 и ↓8+96
Комментарии120

Найти и не обезвредить: пишем пентесты с Kali Linux

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

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




Шило в мешке не утаить: по неведению (правда, в некоторых случаях — умышленно) даже крупные корпорации оставляют дыры в своей системе безопасности. Жизненно важно как можно быстрее (1) локализовать их и (2) пофиксить. К счастью, существует множество различных продуктов, которые помогают с первым пунктом. Среди них можно выделить Kali, дистрибутив Linux, разработанный для тестирования систем безопасности. В этой статье я расскажу, как использовать Kali Linux для исследования вашей системы и поиска слабых мест, имитируя атаку злоумышленника.

Дистрибутив Kali включает множество инструментов, каждый из которых имеет открытый исходный код. Достаточно запустить установку дистрибутива и все эти инструменты будут доступны из коробки.
Читать дальше →
Всего голосов 21: ↑14 и ↓7+12
Комментарии3

14 Python-пакетов, про которые вы скорее всего не знали

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


Язык Python предоставляет всем пользователям возможность создавать свои пакеты и делиться ими со всем сообществом. Так появлялись очень популярные библиотеки для работы с данными (Pandas, Numpy, Matplotlib), для машинного обучения (TensorFlow, PyTorch), для веб разработки. Но есть много смешных, полезных или интересных пакетов, про которые вы вероятно никогда не слышали. Именно про них и пойдёт речь дальше.

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

Наиболее полное руководство по практическому использованию Web Speech API

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

В этой статье я хочу поделиться с вами результатами изучения основных возможностей Web Speech API (далее — WSA).


Введение


WSA — это экспериментальная технология, состоящая из двух интерфейсов: SpeechSynthesis (интерфейс для перевода текста в речь) и SpeechRecognition (интерфейс для распознавания речи).


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


Что касается поддержки, то вот что об этом говорит Can I use:



Всего голосов 20: ↑18 и ↓2+20
Комментарии1

Как использовать GraphQL Federation для инкрементальной миграции с монолита (Python) на микросервисы (Go)  

Время на прочтение6 мин
Количество просмотров10K
Или как поменять фундамент старого дома, чтобы он не обвалился



Лет 10 назад мы выбрали 2-ю версию Python для разработки нашей обучающей платформы с монолитной архитектурой. Но с тех пор индустрия существенно изменилась. Python 2 был официально похоронен 1 января 2020 года. В предыдущей статье мы объясняли, почему решили отказаться от миграции на Python 3. 

Каждый месяц нашей платформой пользуются миллионы людей. 

Мы пошли на определённый риск, когда решили переписать наш бэкенд на Go и изменить архитектуру. 

Язык Go мы выбрали по нескольким причинам:

  1.  Высокая скорость компиляции.
  2. Экономия оперативной памяти.
  3. Достаточно широкий выбор IDE с поддержкой Go.

Но мы применили подход, который позволил минимизировать риск.
Читать дальше →
Всего голосов 17: ↑15 и ↓2+19
Комментарии6