• Строго о новой системе единиц СИ

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

    Статья будет посвящена разъяснению базовых вещей. В качестве источников я использовал знания по физике и химии, полученные в школе, статьи из Википедии, действующий СИ (8-е издание) и черновик нового СИ (9-е издание), который собираются принять. Я постараюсь быть объективным, я просто объясню то, что физики уже знают.

    Не используйте упомянутую статью от alizar в качестве источника информации. В ней неверно первое же предложение (точнее, подпись к первой картинке: «Сфера из кремния-28 с чистотой 99,9998% может быть принята как эталон единицы измерения количества вещества»), к нему мы ещё вернёмся (UPD от 2017-11-05 19:30: исправлено). В качестве хороших источников информации предлагаю статью в английской Википедии о новом СИ, оригинальную статью Nature, старый СИ, черновик нового СИ, FAQ о новом СИ.
    Читать дальше →
  • UNIX-подобные системы содержат кучу костылей. Крах «философии UNIX»

      UPD от 2017-03-04: кто-то выполнил английский перевод. Обсуждение на Hacker News.

      В первой части статьи перечислю кучу костылей UNIX, и вообще разных недостатков. Во второй — про «философию UNIX». Статья написана наскоро, «полировать» дальше не хочу, скажите спасибо, что написал. Поэтому многие факты привожу без ссылок.

      Костыли в UNIX начали возникать ещё с момента появления UNIX, а это было ещё раньше появления не только Windows, но даже вроде бы Microsoft DOS (вроде бы, мне лень проверять, проверяйте сами). Если лень читать, хотя бы просмотрите все пункты, что-нибудь интересное найдёте. Это далеко не полный список, это просто те косяки, который я захотел упомянуть.
      Читать дальше →
    • Как создавать, собирать, устанавливать и использовать пакеты с программами и библиотеками для UNIX-подобных систем

      • Tutorial
      Речь пойдёт о программах и библиотеках для UNIX-подобных систем, распространяемых в виде исходного кода (в том числе в виде тарболлов), написанных обычно на C и C++ (хотя этот же порядок работы может применяться к софту на любом языке). Многие вещи в этой статье написаны применительно конкретно к GNU/Linux, хотя многое из статьи может быть обобщено и на другие UNIX-подобные ОС.

      Под словом «пакет» я понимаю в этой статье пакет с исходными текстами, причём не пакет конкретного дистрибутива GNU/Linux, а просто пакет, исходящий от оригинальных авторов софта (UPD от 2017-02-09: кроме тех случаев, где из контекста ясно, что слово «пакет» употреблено в другом смысле).

      В этой статье я разберу следующие вопросы:

      • Вот скачал программу или библиотеку. Как её собрать и установить? Как воспользоваться библиотекой?
      • Что такое префикс (prefix) установки? В чём разница между сборкой и установкой? Куда обычно устанавливают программы?

      Я разберу только совсем базовые вещи. Те, которые типичные участники сообщества свободного ПО, программирующие на C и C++ под UNIX-подобные системы, обычно уже знают. Как создавать тарболлы (на примере «голого» make) и как устанавливать чужие тарболлы. Advanced советы по созданию «хороших» пакетов я не дам. «Продвинутые» вещи читайте в документации систем сборки, в замечательной статье «Upstream guide» от Debian (в её конце есть ещё куча ссылок о создании «хороших» пакетов). Многое в этой статье можно было сделать по-другому, моя цель: дать хотя бы один способ, не пытаться объять необъятное.
      Читать дальше →
    • В C++17 до сих пор нет нормальных многомерных массивов, которые были в Fortran начиная с Fortran 90

        Это статья про многомерные массивы. А ещё про ключевое слово restrict, до появления которого в C язык Fortran был быстрее C. Немного про то, зачем я это написал, см. в конце.

        Многомерные массивы. Начну с многомерных массивов. Допустим, вам нужно максимально эффективно работать с большими квадратными матрицами в C++ (скажем, умножать их друг на друга). Причём размер матриц становится известен лишь в runtime. Что делать?

        Всякие double a[n][n] и std::array<std::array<double, n>, n> не сработают, т. к. порядок матрицы (n) будет известен лишь в runtime. new double[n][n] не сработает по этой же причине (лишь первое измерение массива, создаваемого new, может быть runtime-выражением). Попробуем так:

        double **a = new double *[n]; // Массив длины n указателей на double
        for (int i = 0; i != n; ++i)
          {
            a[i] = new double[n];
          }
        
        Читать дальше →
      • Повсеместное внедрение HTTPS вместо HTTP, возможно, опасно

        Сразу предупрежу: будет политота. Не нравится — не читайте. И предупрежу, что я не уверен в своих выводах, я лишь хочу показать альтернативную точку зрения.

        Последнее время многие компании продвигают повсеместное использование https и отказ от http. В первую очередь Google. Моя версия Google Chromium (53.0.2785.143) показывает букву i в кружке в строчке браузера, если сайт открыт по http, а не https. Дальше — больше. Google собирается со времнем отображать http-соединение как всё более небезопасное, пугая пользователей «опасным» http всё больше: www.opennet.ru/opennews/art.shtml?num=41263 (новость, правда, от 2014-го года, но по сути, как мне кажется, ничего не поменялось, там есть ссылка на английский оригинал от Chromium).

        Недавно появился HTTP/2.0. Он был создан на основе SPDY, который был создан Google. «Несмотря на то, что спецификация допускает создание нешифрованных соединений, разработчики Firefox и Chrome намерены обеспечить работу HTTP/2.0 только поверх TLS» ( www.opennet.ru/opennews/art.shtml?num=41684 ). Напомню, что TLS — это современное развитие SSL. https сейчас обычно работает поверх TLS.

        Недавно Google создал QUIC. И опять-таки, шифрование в QUIC обязательно. «Why does QUIC always require encryption of the entire channel?» — цитата из QUIC FAQ (ссылка с блога Chromium). В этом же посте в блоге написано, что QUIC даёт «High security similar to TLS», что в свете постоянных уязвимостей в HTTPS/SSL/TLS и его реализациях выглядит иронией.
        Читать дальше →
      • Wolfram Language (Mathematica) — это просто игрушка

          Я засомневался в своей точке зрения, см. подробнее в одном из UPD.

          Хочу поговорить о Wolfram Language (далее WL). Прошу прощения за сумбурность изложения, пост вырос из попытки ответить на этот коммент от Nilis.

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

          Лет 6-10 назад, когда я учился в школе, я знал лишь BASIC, Pascal/Delphi, C/C++ и WL. Из ОС имел дело лишь с Windows. Не знал, что такое скриптовые языки (perl, python, bash), не знал самого понятия «скрипт». Думал, что командный интерфейс — это устаревший интерфейс и что единственный правильный интерфейс программы — это графический. Программировал я на Delphi и WL. Программы на Delphi всегда были графическими. За исключением олимпиадного программирования, там в требованиях к программам было, что они должны быть текстовыми, я их писал на Delphi и C++. Когда я узнал о WL, я был им очарован, также как и вы. Потому что код на WL был гораздо короче, чем на Delphi/C++. И вообще, потому что WL был совершенно не похож на Delphi и C++. Потому что там была возможность программировать функционально. Я познакомился с функциональным программированием на примере WL, я не знал, что существуют «стандартные» функциональные языки — Haskell, Lisp и ML.
          Читать дальше →
        • Указатели, ссылки и массивы в C и C++: точки над i

          • Tutorial
          В этом посте я постараюсь окончательно разобрать такие тонкие понятия в C и C++, как указатели, ссылки и массивы. В частности, я отвечу на вопрос, так являются массивы C указателями или нет.

          Обозначения и предположения


          • Я буду предполагать, что читатель понимает, что, например, в C++ есть ссылки, а в C — нет, поэтому я не буду постоянно напоминать, о каком именно языке (C/C++ или именно C++) я сейчас говорю, читатель поймёт это из контекста;
          • Также, я предполагаю, что читатель уже знает C и C++ на базовом уровне и знает, к примеру, синтаксис объявления ссылки. В этом посте я буду заниматься именно дотошным разбором мелочей;
          • Буду обозначать типы так, как выглядело бы объявление переменной TYPE соответствующего типа. Например, тип «массив длины 2 int'ов» я буду обозначать как int TYPE[2];
          • Я буду предполагать, что мы в основном имеем дело с обычными типами данных, такими как int TYPE, int *TYPE и т. д., для которых операции =, &, * и другие не переопределены и обозначают обычные вещи;
          • «Объект» всегда будет означать «всё, что не ссылка», а не «экземпляр класса»;
          • Везде, за исключением специально оговоренных случаев, подразумеваются C89 и C++98.


          Указатели и ссылки


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

          int x;
          int *y = &x; // От любой переменной можно взять адрес при помощи операции взятия адреса "&". Эта операция возвращает указатель
          int z = *y; // Указатель можно разыменовать при помощи операции разыменовывания "*". Это операция возвращает тот объект, на который указывает указатель
          

          Читать дальше →
        • Авторское право, свободные лицензии и GPL с нуля

          В этом посте я дам метаинформацию об авторском праве и свободных лицензиях. Т. е. то, что должен знать каждый, кто пишет свободное ПО. Я не буду останавливаться на конкретных примерах таких лицензий, это вы сможете найти где-нибудь ещё в интернете. Также, я немного поговорю о GPL. Сразу скажу, что я не юрист, и мог где-то ошибиться. Весь этот пост применим почти ко всем развитым странам, в том числе к России и Америке (правда, к сожалению, авторизированного перевода GPL на русский язык нет, а потому она недействительна в России). Везде, где я говорю про GPL, я имею в виду GPL третьей версии, хотя почти вся эта информация применима и к GPL 2, и, скорее всего, будет применима к последующим версиям. (Ещё раз скажу: я плохо разбираюсь в теме, см. UPD от 2016-11-10 в конце статьи.)

          Авторское право


          Любой продукт интеллектуального труда автоматически становится объектом авторского права. Всевозможные «Copyright», «All right reserved», «©» и т. д. не обязательны. Регистрация авторского права не нужна, однако, она может пригодиться, чтобы потом доказать, что вы действительно являетесь владельцем авторских прав, например, в суде. Т. е. если вы, например, написали программу, выложили её в интернет, не подписались, не написали «Copyright» и т. д., то вы всё равно являетесь владельцем авторских прав на неё. Но вот далеко не факт, что у вас получится, в случае чего, это доказать.

          Что значит авторское право? Кто-то может подумать, что это право брать денежные отчисления за использование произведения. Да, это так, но авторское право включает в себя не только это. Авторское право — это право устанавливать любые ограничения и условия (т. е., собственно, лицензию) на использование произведения, в том числе право требовать отчисления. Например, какой-нибудь программист может потребовать, чтобы его программу использовали только стоя на одной ноге. И он будет прав. И любой, кто не подчинится этому условию, будет нарушать закон.
          Читать дальше →
        • Бизнес — это закономерный этап в карьере специалиста

            <UPD>Спасибо огромное за отрезвляющие комменты. В общем, я понял, что моя статья — полная ерунда. Не надо было мне соваться в это дело, поучать других и позориться. Если хотите, можете прочитать мою статью, но только вместе с комментами — в них вся мякотка.</UPD>

            В этой статье слово «программист» можно заменить на любую другую специальность.

            Раньше я думал, что «работа на дядю» и бизнес — это совершенно разные вещи. Что для них требуются совершенно разные знания. Что опыт наёмной работы никак не поможет в бизнесе. Что в бизнесе можно заработать гораздо больше денег, чем работая по найму. Что работа по найму увеличивает капитал в арифметической прогрессии, а бизнес — в геометрической.
            Если не знаете, что такое прогрессия, нажмите сюда
            Арифметическая прогрессия — это значит, что в первый год у вас (условно говоря) 100 рублей, во второй — 200 рублей, в третий — 300 рублей, и так делее.
            Геометрическая — это в первый год 100 рублей, во второй — 200, в третий — 400, в четвёртый — 800, то есть каждый год (например) в два раза больше, чем в предыдущий.

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

            Но при этом я для себя решил, что я бизнесом заниматься не буду, так как:
            1. У меня (как я думал) нет бизнес-хватки.
            2. В России (как я думал) честный бизнес невозможен, а я честный и из России уезжать не собираюсь.

            Поэтому я собрался всю свою жизнь заниматься наёмным трудом (а точнее, работать программистом). Работа программиста мне нравится, но, как я думал, никогда не принесёт мне столько денег, сколько принёс бы бизнес. Я смирился с тем, что буду заниматься приятным, но не слишком прибыльным делом, т. е. богачём не стану.

            Единственный вид бизнеса, который (как я решил) является для меня приемлимым — это игра на бирже, то есть трейдинг. А также инвестирование. Правда, всё это не совсем бизнес, но всё же увеличивает капитал в геометрической прогрессии. Для него не так сильно нужна бизнес-хватка и вполне можно зарабатывать деньги честно. Поэтому я решил, что буду работать программистом и параллельно заниматься трейдингом. При этом я рассуждал так: работа увеличивает деньги арифметически, а трейдинг — геометрически. Значит, в какой-то момент трейдинг начнёт приносить гораздо больше денег, чем работа. И в этот момент работу можно будет бросить.

            Но однажды всё изменилось. Один мой знакомый сказал мне, что 150 000 рублей — это потолок для программиста в Москве. Другой сказал, что работать программистом в одной узкой специальности всю жизнь — это глупо, нужно всегда учиться чему-то новому, расширять кругозор и в какой-то момент стать менеджером (у других программистов), либо заняться консалтингом или бизнесом (опять-таки, IT-бизнесом).

            Что ж, потолок в 150 000 меня совсем не устраивал и это заставило меня задуматься. Я подумал и понял всё. Итак, бизнес — это закономерный этап в карьере специалиста.
            Читать дальше →
          • Сказка про Skype, free-speech, Балмера и Столлмана



              Стив Балмер вышел на сцену, достал ноутбук и привычным энтузиастским тоном начал: «Сегодня я вам представлю наш замечательный продукт — Skype, мы его недавно купили». Ему не впервой, он уже который раз представляет очередной продукт с горящими глазами и размахивая руками. «Начнём с названия. Skype — это короткое, запоминающееся слово, которое ничего не означает, поэтому его невозможно перепутать ни с чем другим. Маркетологи потратили целый год, чтоб подобрать нужную комбинацию букв, которая была бы наиболее приятна для уха. А дизайнеры старательно рисовали логотип, подбирая цвет каждого пиксела, чтобы он радовал глаз. Но самое главное — это, конечно, сама программа. Она красива и удобна, всё делает в пару кликов».
              Читать дальше →
            • Оказывается, в Windows тоже есть перенаправления, пайпы, свой /dev, /dev/null, /etc/fstab, grub.cfg

              Разделы можно пропускать без ущерба для понимания, ровно как и любые непонятные/неинтересные места в них.

              Перенаправления


              Как обычно:

              echo foo > bar
              echo foo 2> bar
              echo foo > bar 2>&1

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