• Эволюция понимания ООП

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

    Читать дальше →
  • ООП в картинках

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


      Читать дальше →
    • Набор отверток администратора 1С

        image alt text


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


        Будут как простые инструменты создания новых пользователей и мониторинга "все ли вышли из базы", так и более изощренные интерфейсы проверки целостности базы и ее перемещения.

        Читать дальше →
      • Изучаем структуры MBR и GPT

          Для работы с жестким диском его для начала необходимо как-то разметить, чтобы операционная система могла понять в какие области диска можно записывать информацию. Поскольку жесткие диски имеют большой объем, их пространство обычно разбивают на несколько частей — разделов диска. Каждому такому разделу может быть присвоена своя буква логического диска (для систем семейства Windows) и работать с ним можно, как будто это независимый диск в системе.

          Способов разбиения дисков на разделы на сегодняшний день существует два. Первый способ — использовать MBR. Этот способ применялся еще чуть ли не с появления жестких дисков и работает с любыми операционными системами. Второй способ — использовать новую систему разметки — GPT. Этот способ поддерживается только современными операционными системами, поскольку он еще относительно молод.
          Читать дальше →
        • За что Android-разработчики ненавидят Google



            Если посмотреть на мир Android, с первого взгляда кажется, что между разработчиками приложений и Google царят мир-дружба-жвачка. Компания поддержала любовь разработчиков к Kotlin, сообщество в целом одобряет нововведения платформы, а на официальную IDE не обрушивается такая критика, как в iOS-мире — чего ещё желать-то?

            Но это только часть картины. В последние месяцы всё чаще обсуждались ситуации, из-за которых часть Android-разработчиков жёстко критикует компанию. Дело доходило до массового призыва «давайте давить на Google через Евросоюз и медиа, раз по-хорошему там не понимают». В чём дело и что это за ситуации, которые страшно злят одних разработчиков, но остаются незаметными для других?
            Читать дальше →
          • Генерируем красивую Google-таблицу из своей программы (используя Google Sheets API v4)

            • Tutorial

            Постановка задачи


            Пусть нам нужно создать программой на языке Python вот такую таблицу:

            image

            Особенности этой таблицы:

            • задана ширина столбцов;
            • верхняя ячейка является объединением A1:E1;
            • в некоторых ячейках настроены: формат отображения, размер шрифта, жирность, выравнивание текста и цвет фона;
            • значения в последнем столбике вычислены формулой (например, в E4 написано =D4-C4);
            • нарисована граница под ячейками A3:E3;
            • присутствует Пикачу (но это останется как домашнее задание для энтузиастов).

            Интересно? Тогда добро пожаловать под кат.
            Читать дальше →
          • Почему я пишу свои алгоритмы в 95% случаев, и буду и дальше разрабатывать кодовые велосипеды

            Это ответ на публикацию «А нужно ли знать программисту алгоритмы?».

            Так почему я пишу свои алгоритмы в 95% случаев и буду их и дальше писать?

            Дабы быть кратким, сразу приведу конкретику в моем случае (весьма экзотическом), но отмечу что есть немало случаев-аналогов. Если в вашей практике нет случая-аналога — поздравляю, вам не нужно заморачиваться велосипедами. Возьмите с полки пирож... Возьмите готовый код, это реально отличный вариант для RAD, да и просто для потоковой разработки, где время — деньги, а специальные требования отсутствуют.

            Я разработчик экспериментальной системы управления крылатым беспилотником.
            Читать дальше →
          • Kotlin для Android: Теперь официально

              Вчера на конференции Google I/O 2017 команда Android объявила об официальной поддержке языка Kotlin для разработки Android-приложений. Это огромный шаг вперед для Kotlin, и отличная новость для всего сообщества Android-разработчиков.

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

              Плагин для поддержки Kotlin теперь входит в поставку Android Studio 3.0, так что разработчикам не нужно ставить дополнительные плагины или беспокоиться о совместимости. JetBrains и Google также берут на себя обязательство поддерживать разработку на Kotlin и в будущем, по мере развития Android-платформы.

              При этом другие платформы, которые поддерживают Kotlin (Kotlin/JVM для разработки серверных и десктопных приложений, Kotlin/JS для браузера и Kotlin/Nativе для нативной разработки) остаются не менее важными для JetBrains. Наше видение заключается в том, чтобы создать единый инструмент, позволяющий разрабатывать все компоненты современного приложения на одном и том же языке, независимо от того, на какой платформе эти компоненты запускаются. Это включает в себя и full-stack веб-приложения, и мобильные клиенты под Android и iOS, и встраиваемые платформы IoT, и другое.
              Читать дальше →
            • Паттерны для новичков: MVC vs MVP vs MVVM

                Добрый день, уважаемые коллеги. В этой статье я бы хотел рассказать о своем аналитическом понимании различий паттернов MVC, MVP и MVVM. Написать эту статью меня побудило желание разобраться в современных подходах при разработке крупного программного обеспечения и соответствующих архитектурных особенностях. На текущем этапе своей карьерной лестницы я не являюсь непосредственным разработчиком, поэтому статья может содержать ошибки, неточности и недопонимание. Заинтригованы, как аналитики видят, что делают программисты и архитекторы? Тогда добро пожаловать под кат.
                Читать дальше →
              • Эксперименты с malloc

                  image

                  Как известно, в современных архитектурах x86(_64) и ARM виртуальная память процесса линейна и непрерывна, ибо, к счастью, прошли времена char near* и int huge*. Виртуальная память поделена на страницы, типичный размер которых 4 KiB, и по умолчанию они не отображены на физическую память (mapping), так что работать с ними не получится. Чтобы посмотреть текущие отображённые интервалы адресов у процесса, в Linux смотрим /proc/<pid>/maps, в OS X vmmap <pid>. У каждого интервала адресов есть три вида защиты: от исполнения, от записи и от чтения. Как видно, самый первый интервал, начинающийся с load address (соответствующий сегменту .text у ELF в Linux, __TEXT у Mach-O в OS X), доступен на чтение и исполнение — очень логично. Ещё можно увидеть, что стек по сути ничем не отличается от других интервалов, и можно быстро вычислить его размер, вычтя из конечного адреса начальный. Отображение страниц выполняется с помощью mmap/munmap, а защита меняется с помощью mprotect. Ещё существуют brk/sbrk, deprecated древние пережитки прошлого, которые изменяют размер одного-единственного интервала «данных» и в современных системах эмулируются mmap’ом.

                  Все POSIX-реализации malloc так или иначе упираются в перечисленные выше функции. По сравнению с наивным выделением и освобождением страниц, округляя необходимый размер в большую сторону, malloc имеет много преимуществ:

                  • оптимально управляет уже выделенной памятью;
                  • значительно уменьшает количество обращений к ядру (ведь mmap / sbrk — это syscall);
                  • вообще абстрагирует программиста от виртуальной памяти, так что многие пользуются malloc’ом, вообще не подозревая о существовании страниц, таблиц трансляции и т. п.

                  Довольно теории! Будем щупать malloc на практике. Проведём три эксперимента. Работа будет возможна на POSIX-совместимых операционках, в частности была проверена работа на Linux и на OS X.
                  Читать дальше →
                • Несколько подробностей об std::string

                    Недавно заинтересовался реализацией std::string в libstdc++. Не в связи с принятием нового стандарта, а чтобы разобраться. Благо требования к строковму типу почти не изменились.

                    Основным средством для анализа кода несомненно является метод пристального вглядывания, но чтобы сузить область вглядывывания и сделать процедуру более захватывающей можно реализовать для строки идиому «трассер» подсмотренную в «C++ Templates: The Complete Guide». Трассировка позволяет выявлять подозрительные интересные операции над строками.

                    Как известно, std::string это псевдоним для
                    std::basic_string<char>
                    и нам ничего не мешает определить
                    std::basic_string<X>
                    . В X можно определить несколько статических счетчиков и итерировать их в конструкторе, деструкторе и остальных методах. Выполняя разные операции над такой строкой можно будет проследить эффективность применяемых алгоритмов в терминах количества операций.
                    Кроме того, в g++ для
                    std::string a(«entrails»); 
                    выражение
                    std::cout << reinterpret_cast<char*>(*((void**)(&a))); 

                    выведет содержимое строки. Т.е. std::string — является, по сути, указателем на char.
                    Вобщем, эти и другие шокирующие поднобности под катом.
                    Читать дальше →
                  • Масштабный сбой фискальных регистраторов парализовал торговлю в ряде магазинов РФ

                      Сегодня у ряда магазинов в РФ затруднена или прекращена торговля из-за массового сбоя фискальных регистраторов «Штрих-М-01Ф». О сбоях сообщают как мелкие магазины и АЗС, так и крупные сети, как сеть «Магнолия» в Москве, DNS, заправки «Лукойл», «Газпром нефть» и другие.

                      Фискальные регистраторы — это единая система учёта чеков в точках продаж для контроля налогообложения. Продажи любых товаров без фискальных чеков запрещены.

                      Читать дальше →
                    • Теория категорий для программистов: предисловие

                      • Translation
                      Вот уже некоторое время я обдумываю идею написать книгу о теории категорий для программистов. Не компьютерных теоретиков, программистов — скорее инженеров, чем ученых. Я знаю, что это звучит безумно, и я сам достаточно напуган. Я знаю, что есть огромная разница между наукой и техникой, потому, что я работал по обе стороны баррикад. Но у меня всегда был очень сильный порыв объяснить вещи. Я восхищаюсь Ричардрм Фейнманом, который был мастером простых объяснений. Я знаю, я не Фейнман, но я буду стараться изо всех сил. Я начинаю с публикации этого предисловия, которое должно мотивировать читателя изучить теорию категорий, и надеюсь на начало дискуссии и обратную связь.

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

                      Введение


                      Эта статья дает представление о работе внешних компонент в системе «1С: Предприятие».
                      Будет показан процесс разработки внешней компоненты для системы «1С: Предприятие» версии 8.2, работающей под управлением ОС семейства Windows с файловым вариантом работы. Такой вариант работы используется в большинстве решений, предназначенных для предприятий малого бизнеса. ВК будет реализована на языке программирования C++.
                      Читать дальше →
                      • +11
                      • 119k
                      • 4
                    • Оптимизация запросов. Основы EXPLAIN в PostgreSQL (часть 3)


                        Подолжаю публиковать авторскую переработку Understanding EXPLAIN от Guillaume Lelarge.
                        Ещё раз обращу внимание, что часть информации для краткости опущено, так что настоятельно рекомендую ознакомиться с оригиналом.
                        Предыдущие части:

                        Часть 1
                        Часть 2
                        Читать дальше →
                        • +21
                        • 46.8k
                        • 2
                      • Оптимизация запросов. Основы EXPLAIN в PostgreSQL


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

                          Привет, Хабр!
                          В этой статье мы расскажем, как построен процесс разработки платформы «1С:Предприятие», как мы работаем над обеспечением качества, и поделимся уроками, которые получили, создавая один из самых больших российских программных комплексов.

                          Читать дальше →
                        • Теория относительности в картинках

                          • Tutorial
                          В своей статье я хотел бы рассказать о теории относительности. Эта теория не требуется в представлении. С самого своего создания она была окутана ореолом тайны, поскольку полностью подрывает наши привычные представления о пространстве и времени. Все мы в школе учили формулы теории относительности, но мало кто действительно понимал их. И это не удивительно, ведь человеку, чтобы по-настоящему понять какую-то теорию во всей её красоте, полноте и непротиворечивости, не достаточно знать формулы. Нужно иметь какой-то визуальный ориентир, нужна динамика, чтобы было что-то, что можно повертеть в руках. Я решил восполнить этот пробел и написал небольшую программку, в которой можно «повертеть в руках» пространство-время. Мы, как настоящие исследователи, с помощью небольших экспериментов попытаемся выяснить основные свойства этой загадочной материи.
                          Под катом много картинок (и ни одной формулы).
                          Читать дальше →
                        • OAuth 2.0 простым и понятным языком

                            Логотип OAuth 2.0

                            На хабре уже писали про OAuth 1.0, но понятного объяснения того, что такое OAuth 2.0 не было. Ниже я расскажу, в чем отличия и преимущества OAuth 2.0 и, как его лучше использовать на сайтах, в мобильных и desktop-приложениях.

                            Что такое OAuth 2.0


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

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