• Откровения трезвого инженера

    • Перевод
    image

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

    … Я выскажу свое мнение и значительно короче, наверное.

    1. Работа в нашей отрасли полностью построена на порочных стимулах.
    2. Лучший способ продвинуться по карьерной лестнице — это смена компании. Компании, в которых вы работаете, будут вознаграждать хорошую работу большей работой и ответственностью, а не большим количеством времени и/или денег. Компании, в которые вы переходите, вознаградят вашу предыдущую хорошую работу в других компаниях большими деньгами. На самом деле это не имеет смысла… См. Пункт №1.
    3. Каждый раз, когда я меняю работу, я сокращаю свои обязанности на 50% и увеличиваю зарплату на 50%. На моей первой работе я был очень раздражен, когда новые сотрудники, которые были на моем уровне квалификации, зарабатывали больше, чем я. Теперь другие старожилы в моей компании с таким же уровнем квалификации раздражаются, когда я зарабатываю намного больше, чем они (обратите внимание, что количество смен работы >= 3). На самом деле это не имеет смысла… См. Пункт №1.
    Читать дальше →
  • Mathcha — внебрачный сын Word и Latex


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


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

      Читать дальше →
      • +23
      • 2,8k
      • 8
    • Карманная книга по TypeScript. Часть 3. Сужение типов

      • Перевод

      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'
      }
      Читать дальше →
    • “Прыгни со скалы!”: взлеты и падения легендарного геймдизайнера Уоррена Спектора

        image

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

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


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

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

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

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

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

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



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

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

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

            • Предоставить разработчикам и инженерам возможность легко и просто увидеть диаграмму заголовков самых распространенных сетевых протоколов прямиком из командной строки.
            • Предоставить исследователям и инженерам возможность быстро создавать ASCII диаграммы заголовков, для своих собственных пользовательских протоколов.
            Читать дальше →
          • Синхронный АМ приёмник Полякова


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

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

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

              • Перевод
              image

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

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


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

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

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

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


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


                Молодой Курт Гёдель, 1925 год
                Читать дальше →
              • Как самостоятельно собрать жидкостную линзу с настраиваемым фокусным расстоянием

                • Перевод

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

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

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



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

                Свет меняет свое направление, проходя через разные среды (явление, называемое преломлением). В линзах мы тщательно контролируем угол, под которым свет проходит из одной среды (воздуха) в другую (стекло или пластик, из которого состоит линза) и обратно, чтобы сфокусировать или иным образом видоизменить свет. Большинство объективов камер состоят из ряда отдельных элементов, которые работают совместно для коррекции различных типов аберраций (оптических ошибок) и создания плоского сфокусированного изображения на плоскости изображения (датчик камеры). Но если все элементы объектива имеют фиксированный размер и форму, как объективы камеры фокусируют или масштабируют изображение? Когда объектив камеры меняет масштаб или фокус, он перемещает отдельные элементы объектива (или группы элементов) вперед и назад по отношению друг к другу внутри объектива.
                Читать дальше →
              • Уютный VPS-сервер для маленьких проектов: как настроить


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

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

                  Введение


                  Признаться честно, я не очень люблю командную строку. То есть, мне нравится сама идея легкого минималистичного универсального интерфейса, практически не требующего ресурсов, но черное окно с мигающим курсором вызывает у меня фрустрацию и чувство беспомощности. И я даже знаю откуда это у меня. 
                  Читать дальше →
                • Карманная книга по TypeScript. Часть 2. Типы на каждый день

                  • Перевод

                  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
                  Читать дальше →
                • Карманная книга по TypeScript. Часть 1. Основы

                  • Перевод

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


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


                  // Получаем доступ к свойству `toLowerCase`
                  
                  // и вызываем его
                  
                  message.toLowerCase()
                  
                  // Вызываем `message`
                  
                  message()
                  

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


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


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

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

                  Читать дальше →
                • Чем опасен космический мусор и как его уничтожают


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

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


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


                    Собственно, самая очевидная угроза, исходящая от космического мусора, — это угроза физического столкновения. На текущем уровне развития технологий не существует какого-либо способа защитить космические аппараты от небольшого объекта, размером с пулю, движущегося со скоростью 10 км/с. Ну а про защиту от более крупных объектов и заикаться не приходиться, хотя на орбите их существенно меньше. Помимо угрозы повреждения и уничтожения объектов, стартующих с Земли, на орбите находится огромное количество различных спутников, необходимые для работы разных служб. GPS, метеорология, да куча всего в общем. Уничтожение одного из них не сделает всю систему нежизнеспособной, но в условиях увеличения количества мусора в будущем это может серьёзно повлиять на работоспособность этих систем. Помимо прогнозов на будущее, в настоящем и прошлом есть примеры столкновения космических аппаратов с мусором:
                    Читать дальше →
                    • +19
                    • 4,7k
                    • 6
                  • «Швейцарский нож» науки: как методы Computer Science используются в других дисциплинах


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

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


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

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

                      • Перевод


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

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



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

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

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

                        • Перевод

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




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

                        Дистрибутив Kali включает множество инструментов, каждый из которых имеет открытый исходный код. Достаточно запустить установку дистрибутива и все эти инструменты будут доступны из коробки.
                        Читать дальше →
                        • +12
                        • 5,1k
                        • 3
                      • 14 Python-пакетов, про которые вы скорее всего не знали


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

                          Читать дальше →
                          • +30
                          • 14,5k
                          • 5
                        • Наиболее полное руководство по практическому использованию Web Speech API


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


                            Введение


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


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


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



                            Читать дальше →
                            • +20
                            • 2,5k
                            • 1

                          Самое читаемое