• learnopengl. Урок 1.1 — OpenGL

    • Перевод
    • Tutorial
    Здравствуйте. Несколько недель назад я начинал серию переводов статей по изучению OpenGL. Но на 4 статье один хабровчанин заметил, что мои переводы могут нарушать лицензию, по которой распространяются учебные материалы, предоставленные в исходной статье. И действительно, мои переводы нарушали лицензию. Для разрешения этой проблемы я обратился к авторам того набора уроков, но так и не смог добиться нормального ответа. По этой причине я связался с автором другого, не менее (а возможно даже и более) крутого, набора уроков по OpenGL: Joey de Vries. И он дал полное разрешение на перевод его набора уроков. Его уроки гораздо более обширные, чем прошлый набор, поэтому эти переводы растянутся на долго. И я обещаю, будет интересно. Заинтересовавшихся прошу под кат.
    Читать дальше →
    • +39
    • 52,1k
    • 8
  • Интеграция PostgreSQL с MS SQL Server

      В предыдущей статье мой коллега Дмитрий Васильев описал настройку интеграции PostgreSQL с MySQL и описал, как более эффективно выполнять некоторые запросы.


      Интеграция PostgreSQL с MS SQL Server


      В этой статье я хотел бы описать настройку подключения PostgreSQL, работающего под управлением Linux, к MS SQL Server. А также, как импортировать все таблицы определенной схемы базы данных MS SQL Server в PostgreSQL без описания структуры каждой таблицы.

      Читать дальше →
      • +20
      • 8,3k
      • 8
    • Под капотом Redis: Хеш таблица (часть 1)

        Если вы знаете, почему после выполнения `hset mySey foo bar` мы потратим не менее 296 байт оперативной памяти, почему инженеры instagramm не используют строковые ключи, зачем всегда стоит менять hash-max-ziplist-entries/hash-max-ziplist-val и почему тип данных, лежащий в основе hash это и часть list, sorted set, set — не читайте. Для остальных я попробую об этом рассказать. Понимание устройства и работы хеш таблиц в Redis критически важно при написания систем, где важна экономия памяти.

        О чём эта статья — какие расходы несёт Redis на хранения самого ключа, что такое ziplist и dict, когда и для чего они используются, сколько занимают в памяти. Когда hash хранится в ziplist, когда в dicth и что нам это даёт. Какие советы из модных статей об оптимизации Redis не стоит воспринимать всерьёз и почему.
        Читать дальше →
        • +36
        • 21,6k
        • 2
      • Пишем почтовый адрес, как человеки

          Мне совершенно непонятна выгода от удобного интерфейса.

          Да, он красивый, с ним проще работать. Но как посчитать материальную пользу?

          Пять лет назад в аэропортах звучал синтезированный голос, объявляя прилёты и вылеты с разорванной интонацией после каждого слова. Иногда даже отличалась скорость речи для разных слов.

          И вот пару недель назад я заслушивался новыми объявлениями о вылетах. Было чувство, что их целиком записал профессиональный диктор, который всю жизнь учился на эту роль. Интерфейс стал лучше, он стал более натуральным.
          Стал ли я от этого больше летать? Вряд ли.
          Может, у меня появилось предпочтение между аэропортами? Не думаю, что это настолько важный момент.
          Тем не менее, зачем-то люди потратили время и деньги на приведение объявлений к естественному виду. И это очень круто!

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

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

          Все правила, описанные ниже, мы выработали сами. Большинство из них используем или скоро подключим на dadata.ru.
          Итак...
        • Виртуальный хостинг Django, модель N

            Существует множество способов разворачивания Django-приложений в *nix-среде. Не буду претендовать на оригинальность, просто поделюсь самым-самым-самым-самым своим.

            Вводные условия


            Предпосылки:
            • Один клиент (заказчик) — один юзер в системе на сервере.
            • Все проекты клиента — в одной файловой иерархии.
            • Virtualenv — это хорошо и must use.
            • Ftp — зло, используем современные средства (sftp).
            • Количество файлов для управления проектами должно быть сведено к минимуму.
            Используемый софт:
            • nginx
            • uwsgi
            • cron
            • virtualenv
            • openssh

            Читать дальше →
          • Как работает yield

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

            Вот исходный вопрос:
            Как используется ключевое слово yield в Python? Что оно делает?

            Например, я пытаюсь понять этот код (**):
            def _get_child_candidates(self, distance, min_dist, max_dist):
                if self._leftchild and distance - max_dist < self._median:
                    yield self._leftchild
                if self._rightchild and distance + max_dist >= self._median:
                    yield self._rightchild
            

            Вызывается он так:
            result, candidates = list(), [self]
            while candidates:
                node = candidates.pop()
                distance = node._get_dist(obj)
                if distance <= max_dist and distance >= min_dist:
                    result.extend(node._values)
                    candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
                    return result
            


            Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

            ** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

            Подробный и обстоятельный ответ
          • Django + Sphinx = django-sphinx (?)



              Когда мы подготавливали для Хабра свою последнюю статью о Django-батарейках, выяснилось, что про django-sphinx мы таки имеем что рассказать и наш рассказ тянет на отдельный пост. Собственно, вот он, как и обещали.

              На сегодняшний день, существует несколько хороших решений для организации поиска в Django. Несколько — это два: Haystack и django-sphinx. Haystack работает с бэкендами-движками solr, whoosh и хapian и, увы, не работает со Sphinx`ом по каким-то абстрактным лицензионным причинам. django-sphinx же, как можно догадаться, работает со Sphinx`ом и только. Haystack это качественный, хорошо документированный и активно развиваемый продукт и мы, вне всяких сомнений, использовали бы именно его, если бы он хоть в какой-нибудь форме поддерживал Sphinx. Но этого, увы, пока не произошло. А Sphinx — наше всё, благодаря его скорости, гибкости и, что очень важно в наших географических широтах, способности учитывать особенности русской морфологии, чего не скажешь о его ближайших конкурентах. «Большие, но по 5… или маленькие, но по 3?»

              Читать дальше →
            • Ещё 10 батареек для джанго


                Продолжаем делиться своим опытом использования полезных батареек для Django.
                Первая часть
                Ещё рекомендуем «Сумбурные заметки про python и django» и «Django проект PR Hero: что внутри и полученный опыт».

                Для Django написано огромное количество пакетов. Из них мы выбрали 10, которые использовали сами в своих последних проектах и которыми остались довольны. Все они есть на PyPI. Они продокументированы и покрыты тестами, где-то больше, где-то меньше. Исключение составляет django-sphinx, о котором отдельно.

                Читать дальше →
              • Оформление изображений на CSS3

                • Перевод
                При использовании свойств box-shadow или border-radius непосредственно на изображении, браузеры могут некорректно отображать заданные нами CSS стили, из-за чего внешний вид блока будет существенно отличаться от задуманного. Однако если использовать изображение в качестве фона, то этой проблемы можно запросто избежать. Из статьи вы узнаете, как с помощью jQuery сделать идеально закругленные углы у изображений, а так же какие еще способы оформления возможны с помощью таких свойств как box-shadow, border-radius и transition.
                Читать дальше →