• Getters и Setters в Dart и Flutter

    • Tutorial

    Getters и Setters в Dart и Flutter.


    Как и во многих других языках getters\setters это методы которые дают доступ на чтение\запись свойств объекта.


    В статье рассмотрим простые примеры и запустим их на выполнение в dartpad.


    Читать дальше →
  • Как и зачем работать медленнее? Метод Сергея Королёва



      Будущий «отец» советской космонавтики Сергей Королёв — по центру. Страсть к авиации у него зародилась в юности, когда он записался в планерный кружок. На его долю ещё выпадут тяжёлые испытания, но юношеский запал у него останется на всю жизнь.

      «Можно сделать быстро, но плохо, а можно — медленно, но хорошо. Через некоторое время все забудут, что было быстро, но будут помнить, что было плохо. И наоборот.»
      Сергей Королёв, конструктор

      К этим словам можно было бы больше ничего не добавлять. Но после прочтения этой цитаты могут остаться вопросы, и у нас тут, в конце концов, не сборник «цитат успешных людей», поэтому я всё же осмелюсь продолжить. Ведь кто из нас не стоял когда-то перед дилеммой между принесением немедленных результатов и обеспечением высокого качества работы? Что ж, Сергей Королёв, одна из ключевых фигур в истории освоения человеком космоса, мог бы многое вам поведать.

      Читать дальше →
    • TDD ошибочно?

      DISCLAIMER: вы попались на clickbait. Очевидно, что TDD нельзя назвать ошибочным, но… Всегда есть какое-то но.

      Содержание


      Читать дальше →
    • Active Record против Data Mapper-а для сохранения данных

      Эти 2 шаблона проектирования описаны в книге Мартина Фаулера «Шаблоны корпоративных приложений» и представляют собой способы работы с сохранением данных в объектно-ориентированном программировании.

      Пример шаблона Active Record


      class Foo
      {
          protected $db;
          public $id;
          public $bar;
           
          public function __construct(PDO $db)
          {
              $this->db = $db;
          }
       
          public function do_something()
          {
              $this->bar .= uniqid();
          }
       
          public function save()
          {
              if ($this->id) {
                  $sql = "UPDATE foo SET bar = :bar WHERE id = :id";
                  $statement = $this->db->prepare($sql);
                  $statement->bindParam("bar", $this->bar);
                  $statement->bindParam("id", $this->id);
                  $statement->execute();
              }
              else {
                  $sql = "INSERT INTO foo (bar) VALUES (:bar)";
                  $statement = $this->db->prepare($sql);
                  $statement->bindParam("bar", $this->bar);
                  $statement->execute();
                  $this->id = $this->db->lastInsertId();
              }
          }
      }
       
      //Insert
      $foo = new Foo($db);
      $foo->bar = 'baz';
      $foo->save();
      

      В этом упрощенном примере, дескриптор базы данных вводится в конструкторе Foo (Использование инъекции зависимостей здесь позволяет тестировать объект без использования реальной базы данных), и Foo использует его, чтобы сохранять свои данные. Do_something — просто метод-заглушка, заменяющий бизнес логику.
      Читать дальше →
    • Переписать базу сообщений ВКонтакте с нуля и выжить

        Наши пользователи пишут друг другу сообщения, не зная усталости.

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

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

        Для нас этот момент наступил полтора года назад. Как мы к этому пришли и что получилось в итоге — рассказываем по порядку.
        Читать дальше →
      • Если вы решили перейти с PHP на Python, то к чему следует подготовиться

          Думали ли вы когда-нибудь о том, что однажды слишком быстро втянулись в веб-программирование на PHP? И вот уже прошло много лет, у вас хороший опыт, и вы не думаете ни о каких других способах „делать“ веб, кроме как на PHP. Может быть, у вас возникают сомнения в правильности выбора, однако непонятно, как найти способ быстро его проверить. А хочется примеров, хочется знать, как изменятся конкретные аспекты деятельности.

          Сегодня я попробую ответить на вопрос: «А что если вместо PHP писать на Python?».

          Сам я долгое время задавался этим вопросом. Я писал на PHP 11 лет и даже являюсь сертифицированным специалистом. Я научился его «готовить» так, чтобы он работал в точности, как мне надо. И когда я в очередной раз читал на Хабре перевод статьи о том, как всё в PHP плохо, я просто недоумевал. Однако подвернулся случай пересесть на Ruby, а потом и на Python. На последнем я и остановился, и теперь попробую рассказать вам PHP-шникам, как нам питонистам живётся.


          Python с точки зрения PHP-программиста...
        • Самотестируемая система с оповещениями на Laravel + Bitbucket + HipChat

          В этой статье я расскажу, как можно оперативно настроить автоматическое стягивание нового кода на тестовый сервер вашего laravel-приложения, автозапуск тестов и оповещение о результате в соответствующий корпоративный чат. А также отлавливание новых ошибок в laravel.log
          Читать дальше →
          • +11
          • 7.4k
          • 9
        • Применяем на практике знания, полученные на курсе An Introduction to Interactive Programming in Python (coursera.org)

          По мотивам этого поста.
          В прошедшем 2012 году я, как и миллионы других пользователей открыл для себя бесплатное онлайн обучение. Всё началось с прекрасного стартапа Codecademy. Замечательные курсы про JavaScript, jQuery, Python, Ruby и другие занимали всё свободное время. Побочным эффектом стала практика чтения на английском. К середине года доступные уроки закончились и я стал интересоваться другими площадками, где можно продолжить самообучение. Как раз в то время на Хабре участились статьи про Coursera и я решил попробовать.
          Первым курсом который привлек внимание был An Introduction to Interactive Programming in Python от Rice University. Недолго думая, я вступил в стройные ряды онлайн студентов.
          Читать дальше →
          • +18
          • 10.5k
          • 4
        • Пишем список дел на Python 3 для Android через QPython3 и SL4A

          • Tutorial


          Движок QPython (и QPython 3) для Android – вещь по-прежнему плохо изученная, и особенно что касается его встроенной библиотеки Scripting Layer For Android (SL4A), она же androidhelper. Эту библиотеку написали несколько сотрудников Google по принципу 20% свободного времени, снабдили ее спартанской документацией, которую почти невозможно найти, и отправили в свободное плавание. Я искал информацию об SL4A по крупицам, но со временем нашел практически все, что мне нужно.

          Читать дальше →
          • +16
          • 28.6k
          • 7
        • Секрет быстрого программирования: не задумывайтесь

          • Translation

          Программировать быстро — это легко! Так считает инженер-программист компании Google, который все публикации в своем блоге подписывает лаконичным «Макс». Макс также работает главным архитектором, комьюнити-менеджером и релиз-менеджером в Bugzilla Project. Мы в Alconost впечатлились и перевели его советы о том, можно ли как научиться программировать с космической скоростью.

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

          Они, конечно, правы в том, что в условиях сжатых сроков разработчики, как правило, будут писать сложный код. Впрочем, дедлайны не должны приводить к сложности. Вместо фразы «Этот дедлайн помешал мне написать простой код» можно произнести равноценную: «Я недостаточно быстро программирую, чтобы писать просто». То есть чем быстрее вы как программист — тем меньше влияния на качество вашего кода имеют дедлайны.

          Теперь давайте разберемся, как, собственно, стать быстрее? Может, это врожденное магическое умение? Надо ли быть «умнее» других, чтобы быть быстрым?

          Нет, это вообще не магия и не врожденный дар. На самом деле существует всего одно простое правило, считаясь с которым, со временем вы полностью решите проблему:
          Читать дальше →
        • Не путайте разработку ПО и программирование

          • Translation

          Каждый разработчик ПО умеет программировать, но не каждый программист может разрабатывать ПО



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

          Возможно, кому-то больше нравится говорить не «разработчик», а инженер-программист, ведь инженер — это звучит гордо! Или нет? К счастью, эта статья не о терминах. Если мой термин вам не нравится — подставьте свой: «автор ПО», «мастер ПО»… и даже «творец приложений»!

          Говоря «разработчик ПО», я имею в виду человека, для которого написание качественного ПО — профессия. Человека, который использует в своей работе научные подходы и статистику и считает свое занятие чем-то большим, чем просто зарабатывание денег.

          Чтобы стать разработчиком, уметь программировать недостаточно.

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

          Мне нравится такая аналогия: каждый может ради собственного развлечения петь в ду́ше, но вы же не ставите треки с записями этого пения на вечеринке — вы обращаетесь к произведениям профессиональных музыкантов.

          Хотите еще аналогий? Пожалуйста:

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

          Главная задача этого текста — донести, что создание простых программ серьезно отличается от разработки ПО.

          Переведено в Alconost
          Читать дальше →
        • Vim спустя 15 лет

          • Translation


          Мои предыдущие посты об использовании Vim (1, 2) читатели приняли хорошо, и пришло время обновления. В Vim 8 появилось много очень нужной функциональности, а новые сайты сообществ вроде VimAwesome облегчили поиск и выбор плагинов. В последнее время я много работаю с Vim и организовал рабочий процесс исходя из максимальной эффективности, вот снимок моей текущей работы.


          Вкратце:


          • FZF и FZF.vim — для поиска файлов.
          • ack.vim и ag — для поиска файлов.
          • Vim + tmux — ключ к победе.
          • Благодаря асинхронности ALE — это новый Syntastic.
          • …И многое другое. Об этом ниже.
          Читать дальше →
        • Мутационное тестирование

            Юнит тесты помогают нам удостовериться, что код работает так, как мы этого хотим. Одной из метрик тестов является процент покрытия строк кода (Line Code Coverage).


            Но насколько корректен данный показатель? Имеет ли он практический смысл и можем ли мы ему доверять? Ведь если мы удалим все assert строки из тестов, или просто заменим их на assertSame(1, 1), то по-прежнему будем иметь 100% Code Coverage, при этом тесты ровным счетом не будут тестировать ничего.


            Насколько вы уверены в своих тестах? Покрывают ли они все ветки выполнения ваших функций? Тестируют ли они вообще хоть что-нибудь?


            Ответ на этот вопрос даёт мутационное тестирование.

            Читать дальше →
          • Непрерывная интеграция/внедрение приложения Symfony с помощью docker-compose и GitLab CI

            • Tutorial

            В статье я поделюсь своим опытом автоматизации всего процесса разработки приложения Symfony с нуля от настройки инфраструктуры до деплоя в production. От development- и до production-окружения для запуска приложения будет использоваться docker-compose, а все процедуры непрерывной интеграции/внедрения будут запускаться через GitLab CI/CD Pipelines в docker-контейнерах.


            Подразумевается, что вы знакомы с docker и docker-compose. Если нет или вы не знаете как его установить, я подготовил инструкцию по подготовке локального окружения разработчика. Фактически, для работы над приложением потребуется только Docker, VirtualBox и, опционально, Yarn.

            Читать дальше →
          • Как фрилансеру открыть фирму в Латвии и какие преимущества это дает

            • Tutorial

            1. Введение


            Всем привет, меня зовут Владислав, я из России, и я фрилансер-программист. Сейчас на Хабре очень популярная тема — юридические и налоговые вопросы при работе с Upwork, как получать и декларировать плату от зарубежных заказчиков, и так далее.



            Я тоже довольно долго изучал эти вопросы. Российское законодательство по этим вопросам сильно зарегулировано, и все эти законы и правила причиняют массу проблем фрилансерам, работающим на зарубежный рынок. В итоге я принял решение перевести свой «бизнес» в другую юрисдикцию. Изучив все возможные варианты, я выбрал такой путь — зарегистрировать фирму ООО в Латвии, и принимать платежи от заказчиков на эту фирму. То есть просто переместить свой бизнес из России в Латвию.

            Я уже год работаю в таком формате, я сталкивался с разными проблемами и оценил плюсы и минусы. В итоге я решил, что в сумме я выиграл от такого решения. В комментариях к статьям о фрилансе я периодически читаю вопросы типа «как работать на заказчиков из США», «Как платить налоги на платежи с Upwork-а», и поэтому я решил поделится своим опытом, тем более что подобных статей я еще нигде не видел.
            Читать дальше →
          • Используем IoC-контейнер Laravel на полную мощность

            • Translation

            Laravel имеет мощный IoC-контейнер, но, к сожалению, официальная документация Laravel не описывает все его возможности. Я решил изучить его и задокументировать для собственного использования.


            Примеры в данной статье основаны на Laravel 5.4.26, другие версии могут отличаться.


            Введение в Dependency Injection


            Я не буду объяснять, что такое DI и IoC в этой статье — если вы не знакомы с этими принципами, вы можете прочитать статью "What is Dependency Injection?" от Fabien Potencier (создателя фреймворка Symfony).

            Читать дальше →
          • Два в одном: как пользоваться Vim и Nano?

            Upd. 9.7.2017: обновлён раздел про vim. Спасибо вимерам за ценные дополнения.

            Вступительное слово


            Зачем нужна ещё одна, 1001я публикация на эту тему? Статей про vim и nano написано огромное количество, но как правило они касаются только одного из редакторов, либо представляют из себя общий обзор. Чтобы в одной были сжато описаны оба редактора, но при этом без углубления в дебри приведены все основные клавиши управления для полноценной работы, я не не нашёл. Поэтому, почитав найденные материалы, я начал их конспектировать, так и родилась эта статья.


            Любой текстовый редактор можно освоить «методом тыка». Но только не vim.
            Чем nano лучше vim?
            Из nano можно выйти без reset'а! (с) Интернет


            Изначально я не планировал писать об обоих редакторах, а хотел сделать краткую справку только по nano, но в процессе сбора информации накопились данные и по vim тоже. Тут я обнаружил, что Vim не так уж и страшен, если знать команды и концепцию его использования.

            Читать дальше →
          • Опыт перехода с Sublime на Vim



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

            Я достаточно долгое время использовал sublime (около 4 лет) в качестве основной среды разработки, но в последнее время кое-что изменилось: я освоил слепой 9-ти пальцевый метод печати. В тот момент я начал понимать людей, которым неудобно тянуться к мышке или стрелочкам. Убирать пальцы с «домашних» позиций стало неестественно и непродуктивно. Тогда я включил vintage. Проблема, вроде бы, стала неактуальна, но чего-то не хватало. Не помню, что заставило меня пересесть за vim, но мне всегда нравилось, как в нем выделяются фигурные скобки (MatchParen) и как выглядит курсор :). Vim я пробовал и до этого, когда правил конфиги на сервере, правда, вся «магия» ограничивалась переходом в режим вставки и успешным сохранением/выходом из редактора.
            Читать дальше →
          • Собеседуй меня полностью. Или как избавиться от холодных рук на собеседовании

            • Tutorial
            image

            Последний раз вы были на собеседовании больше года назад? Вы не совсем уверены в том, как себя поведете на собеседовании в компании, в которую ну уж очень хотите попасть? Вы испытываете непонятный мандраж в метро по пути на первую встречу с кадровиком и забываете спросить какая же все-таки у вас будет зарплата на руки после испытательного срока? Если хоть на один из этих вопросов вы ответили да, тогда думаю эта статья будет вам интересна. Я не будут учить вас, как вести себя на интервью, как держать руки, куда смотреть и как отвечать на вопросы. Я могу подсказать как обрести уверенность и избавиться от страха.
            Читать дальше →