• Популярные ошибки в английском среди IT-специалистов. Часть 2: Произношение



      Моя статья «Популярные ошибки в английском среди IT-специалистов» собрала много комментариев с полезными дополнениями. И я решила выпустить вторую часть, теперь посвященную Произношению.
      Читать дальше →
    • 8 плюсов Flutter по сравнению с React Native

        Мобильная разработка все чаще опирается не на нативную разработку, а на использование фреймворков, помогающих создавать приложения сразу для нескольких платформ. Сегодня мне хочется сказать несколько слов о Flutter, который постепенно начинает отвоевывать рынок у React Native. Подробности — под катом.


        Читать дальше →
      • Главные причины медленной работы Angular-приложений

        • Translation
        Angular — это быстрый фреймворк. Он даёт разработчикам обширные возможности по улучшению производительности за счёт тонких настроек. Правда, программистам практически никогда не требуется делать что-то особенное для того, чтобы создавать чрезвычайно производительный код, работая над обычными приложениями.

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



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

        Этот материал посвящён разбору основных причин того, что Angular-приложения становятся медленными по мере роста их масштабов. При этом приведённые здесь советы можно будет применить при разработке крупных проектов на любом фреймворке, а не только на Angular.
        Читать дальше →
      • Имитируем сетевые проблемы в Linux

          Всем привет, меня зовут Саша, я руковожу тестированием бэкенда в FunCorp. У нас, как и у многих, реализована сервис-ориентированная архитектура. С одной стороны, это упрощает работу, т.к. каждый сервис проще тестировать по отдельности, но с другой — появляется необходимость тестировать взаимодействие сервисов между собой, которое часто происходит по сети.

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


          Читать дальше →
        • PHPUnit. «Как мне протестировать мой чёртов контроллер», или тестирование для сомневающихся

            Привет, Хабр.

            image

            Да, это очередной пост на тему тестирования. Казалось бы, что тут уже можно обсуждать? Все кому надо — пишут тесты, кому не надо — не пишут, все счастливы! Факт же в том, что большинство постов о юнит-тестировании имеют… как бы так никого не обидеть… идиотские примеры! Нет, ну правда! Сегодня я попытаюсь это исправить. Прошу под кат.
            Читать дальше →
          • Школа магии PHP

              Что такое магия в PHP? Обычно под этим подразумевают методы вроде _construct() или __get(). Магические методы в PHP — это лазейки, которые помогают разработчикам выполнять удивительные вещи. В сети полно инструкций по их использованию, с которыми вы наверняка знакомы. Но что если мы скажем, что вы даже не видели настоящую магию? Ведь, чем больше вам кажется, что вы знаете все, тем больше магии ускользает от вас.



              Давайте отбросим установленные рамки правил ООП и сделаем невозможное возможным в школе магии PHP. Главный и первый волшебный преподаватель школы — Александр Лисаченко (NightTiger). Он научит магическому мышлению и, возможно, вы полюбите магические методы, нестандартные способы доступа к свойствам, изменение контекстов, аспектно-ориентированное программирование и потоковые фильтры.

              Читать дальше →
            • Анонимные функции в PHP: сеанс чёрной магии с разоблачением



                Начать, наверное, следует с того, что анонимная функция(замыкание) в PHP — это не функция, а объект класса Closure. Собственно, на этом статью можно было бы и закончить, но если кому-то интересны подробности — добро пожаловать под кат.

                Читать дальше →
              • Зарубежные заказчики и легализация доходов программиста в РФ. Что надо делать и сколько это всё будет стоить?

                image


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


                Сразу пишу к чему пришёл в ходе изысканий:


                1. ИП на ПСН
                2. поступление оплаты за услуги по разработке ПО на счёт ИП в долларах США
                3. основание для оплаты инвойс, сумма которого не превышает 200 000 руб.
                4. инвойсы выставляются по-мере необходимости
                5. ККТ не используется

                То есть, спокойно работаю, в конце оговоренного периода формирую инвойс, в котором указываю согласованную с работодателем сумму не превышающую указанный порог, получаю деньги прямо на расчётный счёт, оплачиваю раз в год или в течение года патент и взносы в размере 54 000 рублей и больше не переживаю о том, что завтра злобные налоговики придут ко мне с повесткой и ужасными новостями (это была минутка юмора). В следующем году эта сумма подрастёт до 60 000 рублей за год.


                Почему так? Какие могут быть ещё варианты? Чем плохи для меня Upwork, PayPal и Payoneer? Попробую ответить под катом. Кому интересны все эти детали, читаем дальше :-)

                Читать дальше →
              • Как проводить Code Review по версии Google

                  Вопросы код-ревью меня интересуют очень давно. Много раз возникали те или иные проблемы то с качеством кода, то с климатом в коллективе. И действительно, code review — это если не единственное, то одно из самых главных мест для возникновения конфликтов в коллективе разработчиков.

                  И вот недавно при подготовке к очередному выпуску подкаста "Цинковый прод" я узнаю, что Google опубликовал свод правил по проведению Code Review, битком набитый ценными мыслями. Весь материал довольно объемный и не влезет в одну статью, поэтому я постараюсь выделить наиболее интересные (мне) мысли.


                  Итак, поехали

                  Читать дальше →
                • Время высокой точности: как работать с долями секунды в MySQL и PHP

                  • Tutorial


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


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


                  Я буду использовать термин «время высокой точности». В документации MySQL вы увидите термин “fractional seconds”, но его дословный перевод звучит странно, а другого устоявшегося перевода я не нашёл.

                  Читать дальше →
                • Как собеседовать работодателя?

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

                  Надо ли писать код на доске? Надо ли жонглировать бинарными деревьями и знать наизусть все сложности алгоритмов, или просто разговаривать про жизнь и проекты?

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

                  Читать дальше →
                • Взломщик удалил код из сотен Git-репозиториев. За восстановление он требует 0,1 биткоина



                    На днях стало известно о том, что сотни разработчиков пострадали от действий неизвестного взломщика. Злоумышленник каким-то образом получил доступ к репозиториям пользователей хостинг-сервисов Git (GitHub, Bitbucker, GitLab), удалил хранящийся там код и теперь требует деньги за восстановление данных.

                    Пока что способ, который применялся злоумышленником для взлома репозиториев остается неизвестным. Вместо удаленных данных злоумышленник оставляет сообщение с требованием выплаты выкупа в размере 0,1 биткоина ($570 по текущему курсу). В сообщении говорится о том, что код сохранен и находится на подконтрольном взломщику сервере. Данные пострадавших разработчиков будут окончательно удалены в том случае, если выкуп не будет получен в течение 10 дней.
                    Читать дальше →
                  • Применяем принцип KISS к самим принципам проектирования

                      (Update: заменил картинку на более нейтральную)


                      Коллега упомянул в беседе принцип "Convention over configuration", и я подумал, блин, наверно это что-то крутое, нужно изучить, почитать статьи, а то отстану от жизни.


                      Каково было моё удивление, что вcё обьяснение помещается в одной фразе "Используй дефолты, которые можно при желании переопределять".


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


                      В итоге я попытался сделать такую табличку. Можно сказать, своего рода русско-китайский разговорник:

                      Читать дальше →
                    • Полезные и не очень государственные услуги

                        Как похорошел интернет при… или какие полезные (и не очень) госуслуги можно получить онлайн.


                        Наркоман ли я? Бабушкин суд у подъезда думает, что да (на самом деле нет — я всегда с ними здоровался, а теперь и справка есть!). Был ли я зеком? Сведений не имеется, гласит другая справка. Проходил ли я диспансеризацию? Однозначно да, хотя я этого и не помню, но это не повод не заплатить 1400 рублей за такую «услугу» государству в адрес медучреждения. Какой размер моего ИПК? Государство говорит, что он у меня большой и с возрастом будет становиться только больше и лучше, но мы-то знаем (ц).



                        Американские хакеры решили повлиять на результаты выборов в России, но пока просто не могут зарегистрироваться на сайте Госуслуг.
                        (с) интернет

                        О статье


                        Под катом я расскажу с нотариально незаверенными скриншотами про полезные и не очень государственные услуги, полученные мной (либо не полученные вовсе). Опишу как они упрощают жизнь, либо наоборот её усложняют. Пост будет больше ироничным, т.к. большинство услуг всё же бесполезны, либо работают не так как надо, а те что работают — используются нечасто.
                        Читать дальше →
                      • Введение в PERFORMANCE_SCHEMA

                          Много камней было брошено в адрес MySQL, ввиду отсутствия возможности трассировки сессий и снятия stats pack отчетов, показывающих какие именно события нагружают базу данных. Начиная с версии 5.5 MySQL наконец-то озадачился необходимостью решения данной проблемы и выставил прототип, который в будущем, возможно, приведет к созданию аналогичных инструментов в MySQL. Сегодняшний мой рассказ будет о таком мощном (к сожалению пока только для разработчиков MySQL) инструменте как PERFORMANCE_SCHEMA. Итак выставляем performance_schema=ON в конфигурационном файле my.cnf, и приступаем к изучению её ограниченных, но уже крайне интересных возможностей.
                          У вас есть часок свободного времени? Тогда поехали ...
                        • Задачи с собеседований (front-end)

                            Так получилось, что за свою карьеру front-end разработчика, я побывала на многих собеседованиях. Тема прохождения интервью не теряет своей актуальности, а в комментариях, когда речь заходит о собеседованиях, начинают ломаться копья. Хочу тоже внести свой вклад и поделиться накопившейся коллекцией вопросов. Прошу.

                            image
                            Читать дальше →
                          • Релиз Yii 2.0.15 и расширений баз данных с исправленными уязвимостями

                              Сегодня мы выпускаем обновления Yii для нескольких последних версий 2.0.x и официальных расширений поддержки нереляционных баз данных для исправления найденных уязвимостей. Патчи исправляют проблему в методах слоя ActiveRecord: findOne() и findAll(), которые могут допустить SQL инъекцию, если входящие данные не подготовлены должным образом.


                              Мы рассматриваем это как уязвимость в Yii потому что документация для этих методов не содержала явного предупреждения о том, что в некоторых случаях передача нефильтрованых пользовательских данных может быть опасной. Мы благодарим Analitic1983 (Habr, GitHub) за обнаружение этой уязвимости.


                              Проблема относится в большей степени не к самому фреймворку, а к документации по использованию данных методов в приложении. Мы обновили документацию и дополнительно привели примеры кода, который может быть опасен. Однако, обновление документации не исправит приложения, в которых разработчики уже используют методы findOne() и findAll() небезопасно. Чтобы избежать наихудшего сценария – SQL инъекции, мы также изменили поведение этих методов и добавили принудительную фильтрацию входящих данных, которая ограничивает перечень возможных имён столбцов списком свойств модели ActiveRecord.


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

                              Читать дальше →
                            • Продвинутая работа с JSON в MySQL

                              • Translation

                              У MySQL нет возможности напрямую индексировать документы JSON, но есть альтернатива: генерируемые столбцы.


                              С момента введения поддержки типа данных JSON в MySQL 5.7.8 не хватает одной вещи: способности индексировать значения JSON. Для того, чтобы обойти это ограничение, можно использовать генерируемые столбцы. Эта возможность, представленная в MySQL 5.7.5, позволяет разработчикам создавать столбцы, содержащие информацию, полученную из других столбцов, предопределенных выражений или вычислений. Генерируя столбец из значений JSON, а затем индексируя его, можно практически индексировать поле с JSON.

                              Читать дальше →
                            • Рассказ о том, как я ворую номера кредиток и пароли у посетителей ваших сайтов

                              • Translation
                              Продолжение: Рассказ о том, как не дать мне украсть номера кредиток и пароли у посетителей ваших сайтов
                              Представляем вам перевод статьи человека, который несколько лет воровал имена пользователей, пароли и номера кредитных карт с различных сайтов.


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

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

                              В результате, скрепя сердце, я решил выложить всё начистоту и рассказать всему миру о том, как я в последние несколько лет воровал имена пользователей, пароли и номера кредитных карт с самых разных сайтов. Возможно, вы — администратор или разработчик одного из них.
                              Читать дальше →
                            • Как быстро спроектировать сайт с помощью CSS Grid

                              • Translation
                              image

                              Модуль CSS Grid — это фантастический инструмент для создания макетов веб-сайтов. Он позволяет вам экспериментировать с макетами быстрее, чем любой другой инструмент, которые я пробовал.

                              В этой статье я научу вас, как это сделать.

                              Во-первых, я объясню HTML и CSS, которые нам нужны для этой задачи, которую я разбил на четыре части. Как только вы с этим разберетесь, мы перейдем к экспериментам с макетами.

                              Если вы совершенно не знакомы с CSS Grid, вам может понадобиться просмотреть мою предыдущую статью Учим CSS Grid за 5 минут.
                              Читать дальше →