Рубрика «Блог компании Маклауд» - 5

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

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

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

Читать полностью »

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

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

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

Речь идёт о синхронном АМ приёмнике, схема которого была опубликована в журнале «Радио» №8 за 1984 год.
Читать полностью »

image

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

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.

Массивы

Для определения типа массива [1, 2, 3] можно использовать синтаксис number[]; такой синтаксис подходит для любого типа (например, string[] — это массив строк и т.д.). Также можно встретить Array<number>, что означает тоже самое. Такой синтаксис, обычно, используется для определения общих типов или дженериков (generics).

Обратите внимание: [number] — это другой тип, кортеж (tuple).

any

TS предоставляет специальный тип any, который может использоваться для отключения проверки типов:

let obj: any = { x: 0 }
// Ни одна из строк ниже не приведет к возникновению ошибки на этапе компиляции
// Использование `any` отключает проверку типов
// Использование `any` означает, что вы знакомы со средой выполнения кода лучше, чем `TS`
obj.foo()
obj()
obj.bar = 100
obj = 'hello'
const n: number = obj

Читать полностью »

История нефтеперевозок. От танкеров с бакинской нефтью до современных монстров - 1

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

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

Правда, новое производство Янга и его компаньонов Мелдрама и Бинни испытывало постоянные проблемы с поставками сырья, потому что «естественного просачивания нефти» было явно недостаточно для удовлетворения спроса на парафин. Янг проявлял чудеса изобретательности (например, догадался получать нефть из горючего сланца), но в конце концов новые фабриканты неизбежно встали перед проблемой завоза нефти.
Читать полностью »

Разукрашиваем вывод в консоли: теория и практика - 1

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

Читать полностью »

Игра в Нострадамуса - 1

Давайте спрогнозируем, сколько еще, как минимум, осталось жить масочному режиму, Интернету или Хабру? Прикинем на пальцах, ничего не зная, кроме того, сколько времени уже с нами эти явления, а обоснуем свои предсказания нехитрыми трюками из статистики и принципом Коперника.

Читать полностью »

image

Настоящий или реальный (real) DOM

DOM расшифровывается как Document Object Model (объектная модель документа). Проще говоря, DOM — это представление пользовательского интерфейса (user interface, UI) в приложении. При каждом изменении UI, DOM также обновляется для отображения этих изменений. Частые манипуляции с DOM негативно влияют на производительность.

Что делает манипуляции с DOM медленными?

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

Манипуляции с DOM являются сердцем современного интерактивного веба. К сожалению, они намного медленнее большинства JavaScript-операций. Ситуация усугубляется тем, что многие JavaScript-фреймворки обновляют DOM чаще, чем необходимо.

Допустим, у нас имеется список из 10 элементов. Мы изменяем первый элемент. Большинство фреймворков перестроят весь список. Это в 10 раз больше работы, чем требуется! Только 1 элемент изменился, остальные 9 остались прежними.

Перестроение списка — это легкая задача для браузера, но современные веб-сайты могут осуществлять огромное количество манипуляций с DOM. Поэтому неэффективное обновление часто становится серьезной проблемой. Для решения данной проблемы команда React популяризовала нечто под названием виртуальный (virtual) DOM (VDOM).

Читать полностью »

Радиоконструктор «Электронные кубики»: ностальгия по детству - 1

У меня есть очень любопытный радиоконструктор. Он был выпущен в 1977 году и стоил в ту пору 10 рублей. Из этого конструктора можно собрать 35 конструкций, причём, без пайки. В качестве элемента питания используется батарейка типа «Крона».

Конструктор c неизменным успехом был испытан на детях поколений X, Y и Z. В причине этого успеха мы попробуем разобраться дальше.
Читать полностью »

Как я влюбился в Rust и чего мне это стоило - 1

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

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

Хочу сразу заметить, что эта статья целиком и полностью — субъективное мнение автора, единственная цель которой — заинтересовать читателей, ценящих в программировании как хобби те же самые вещи, что и он сам, и речь в ней не пойдёт ни о быстродействии, ни о востребованности языка в сфере IT, ни о каких-либо других технических составляющих этой области, вокруг которой часто возникают разного рода споры. Я остановлюсь на том, что Rust — быстрый и безопасный компилируемый ЯП общего назначения. Об остальном — далее.

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js