• 3 минуты, позволяющие улучшить любую встречу

      У вас часто бывает, что вы забегаете на встречу (стендап, ретро, еженедельную встречу с коллегами, f2f с начальником — нужное подчеркнуть), а ваши мысли остаются где-то за пределами комнаты?

      От банального «а выключила ли жена утюг, когда мы выходили из квартиры» до «что же хотел сказать босс последним письмом». Рой мыслей в голове может быть инспирирован как давно произошедшими событиями, так и предыдущей встречей.
      Читать дальше →
    • Злоупотребление алкоголем — скорейший путь к слабоумию

        В журнале The Lancet Public Health на днях были опубликованы результаты масштабного исследования, целью которого было выяснить влияние употребления алкоголя на организм человека. Основной вывод можно назвать вполне ожидаемым — злоупотребление алкогольными напитками является одним из главных факторов появления слабоумия, всех его типов. Особенно это актуально для ранней формы слабоумия.

        По словам авторов, их исследование — крупнейшее среди всех работ по изучению влияния алкоголя на организм человека. В ходе реализации проекта ученые анализировали медицинские данные людей с разными формами слабоумия, деменции. Выборка данных — несколько десятков тысяч человек, как с симптомами слабоумия, так и без них.
        Читать дальше →
      • Индексы в PostgreSQL — 1

          Предисловие


          В этой серии статей речь пойдет об индексах в PostgreSQL.

          Любой вопрос можно рассматривать с разных точек зрения. Мы будем говорить о том, что должно интересовать прикладного разработчика, использующего СУБД: какие индексы существуют, почему в PostgreSQL их так много разных, и как их использовать для ускорения запросов. Пожалуй, тему можно было бы раскрыть и меньшим числом слов, но мы втайне надеемся на любознательного разработчика, которому также интересны и подробности внутреннего устройства, тем более, что понимание таких подробностей позволяет не только прислушиваться к чужому мнению, но и делать собственные выводы.

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

          В этой части мы поговорим про разделение сфер ответственности между общим механизмом индексирования, относящимся к ядру СУБД, и отдельными методами индексного доступа, которые в PostgreSQL можно добавлять как расширения. В следующей части мы рассмотрим интерфейс метода доступа и такие важные понятия, как классы и семейства операторов. После такого длинного, но необходимого введения мы подробно рассмотрим устройство и применение различных типов индексов: Hash, B-tree, GiST, SP-GiST, GIN и RUM, BRIN и Bloom.

          Индексы


          Индексы в PostgreSQL — специальные объекты базы данных, предназначенные в основном для ускорения доступа к данным. Это вспомогательные структуры: любой индекс можно удалить и восстановить заново по информации в таблице. Иногда приходится слышать, что СУБД может работать и без индексов, просто медленно. Однако это не так, ведь индексы служат также для поддержки некоторых ограничений целостности.
          Читать дальше →
        • Объясняя необъяснимое. Часть 2

          • Перевод
          Регистрация на конференцию PG Day’16 в разгаре, а мы продолжаем публиковать перевод статей Hubert Lubaczewski об explain и его основных компонентах.

          В прошлый раз я писал о том, что показывает вывод explain. Теперь я хочу больше поговорить о разных типах «узлов» / операций, которые вы можете встретить в планах explain.

          Читать дальше →
          • +26
          • 18,7k
          • 3
        • Объясняя необъяснимое. Часть 3

          • Перевод
          В рамках подготовки к конференции PG Day’16 мы продолжаем знакомить вас с интересными аспектами PostgreSQL. И сегодня предлагаем вам перевод третьей статьи из серии об explain.

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

          Сегодня мы перейдем к более сложным операциям.


          Читать дальше →
        • Объясняя необъяснимое

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



          Одна из первых вещей, которую слышит новоиспеченный администратор баз данных – «используй EXPLAIN». И при первой же попытке он сталкивается c непостижимым:

                                                                  QUERY PLAN
          ---------------------------------------------------------------------------------------------------------------------------
           Sort  (cost=146.63..148.65 rows=808 width=138) (actual time=55.009..55.012 rows=71 loops=1)
             Sort Key: n.nspname, p.proname, (pg_get_function_arguments(p.oid))
             Sort Method: quicksort  Memory: 43kB
             ->  Hash Join  (cost=1.14..107.61 rows=808 width=138) (actual time=42.495..54.854 rows=71 loops=1)
                   Hash Cond: (p.pronamespace = n.oid)
                   ->  Seq Scan on pg_proc p  (cost=0.00..89.30 rows=808 width=78) (actual time=0.052..53.465 rows=2402 loops=1)
                         Filter: pg_function_is_visible(oid)
                   ->  Hash  (cost=1.09..1.09 rows=4 width=68) (actual time=0.011..0.011 rows=4 loops=1)
                         Buckets: 1024  Batches: 1  Memory Usage: 1kB
                         ->  Seq Scan on pg_namespace n  (cost=0.00..1.09 rows=4 width=68) (actual time=0.005..0.007 rows=4 loops=1)
                               Filter: ((nspname <> 'pg_catalog'::name) AND (nspname <> 'information_schema'::name))
          

          Что бы это могло значить?
          Читать дальше →
        • Перевод. Я оставил свои системные шрифты в Сан Франциско

          Свет увидели и новая версия iOS 9, и OS X 10.11 El Capitan, и даже watchOS 2. И всех их объединяет новый шрифт — San Francisco. И как молодого веб разработчика, меня заинтересовала возможность использовать данный шрифт для веб сайтов. Так родился этот перевод статьи «I Left My System Fonts In San Francisco».

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

          Что ж, скоро мы все будем сталкиваться с контентом, отображаемым в San Francisco, и нам понадобится как-то указать этот самый шрифт в нашем CSS.

          По традиции мы можем попробовать указать шрифт San Francisco явно, что-нибудь в этом стиле:

          body {
            font-family: "San Francisco", "Helvetica Neue", "Lucida Grande";
          }
          

          К сожалению, в свежеустановленной OS X 10.11 (El Capitan) нет этого шрифта.



          Но как это возможно, ведь это же системный шрифт?
          Узнать всё, что скрыто
        • Организация «чистого» завершения приложений на Go



            Здравствуйте, в данной заметке будет затронута тема организации «чистого» завершения для приложений, написанных на языке Go.
            Чистым выходом я называю наличие гарантий того, что в момент завершения процесса (по сигналу или по любым иным причинам кроме system failure), будут выполнены определённые процедуры и выход будет отложен до окончания их выполнения. Далее я приведу несколько типичных примеров, расскажу о стандартном подходе, а также продемонстрирую свой пакет для упрощённого применения этого подхода в ваших программах и сервисах.

            TL;DR: github.com/xlab/closer GoDoc
            Читать дальше →
          • Многопоточность в Rust

            • Перевод
            Rust начинался как проект, решающий две трудные проблемы:

            • Как обеспечить безопасность (работы с памятью) в системном программировании?
            • Как сделать многопоточное программирование безболезненным?

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

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

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

            С точки зрения многопоточности это означает, что вы можете пользоваться различными парадигмами (передача сообщений, разделяемое состояние, lock-free-структуры данных, чистое функциональное программирование), и Rust позволит избежать наиболее распространённых подводных камней.

            Вот какие особенности у многопоточного программирования в Rust:
            Читать дальше →
          • IBM PC своими руками — это очень просто

              image

              После того, как я воплотил свою давнишнюю мечту и все-таки (хотя и с опозданием почти на 30 лет) построил Радио 86РК, некоторое время мне казалось, что на этой части моей истории поставлена вполне достойная точка.

              Тем не менее, обнаружилось, что болезнь до конца не вылечена, и она вернулась еще более острым рецидивом. Наверное, сказались как неожиданно успешный опыт постройки 86РК, так и то, что у меня в ходе данного процесса образовалось довольно большое количество весьма притягательно выглядящих инструментов, приборов и деталей, которым очень хотелось найти применение.
              В конце концов ломка стала нестерпимой, и мне пришлось снова взяться за паяльник, а также вспомнить некоторые другие навыки из прошлого. Что из этого получилось, можно увидеть вместе с некоторым количеством картинок и очень (повторяю – ОЧЕНЬ) большим количеством букв (и даже не букв, а страниц) дальше…
              Читать дальше →