Новости информационных технологий - 18395

«Не звони нам. Мы позвоним тебе сами.» — принцип Голливуда

Внедрение зависимости (Dependency Injection — DI) означает передачу (внедрение) одной или более зависимости какому-либо объекту (клиенту, компоненту) таким образом, что после внедрения эта зависимость становится частью состояния объекта. Это немного напоминает паттерн проектирования Стратегия, с той лишь разницей, что стратегия задаётся лишь однажды — в конструкторе. DI позволяет создавать более слабо-связанную архитектуру приложения, которая лучше поддаётся поддержке и тестированию.

Итак, ещё раз плюсы:

  • Уменьшает связность компонент (отделяет бизнес-логику от создания объекта)
  • Позволяет писать более поддерживаемый код (в одни и те же объекты мы легко можем внедрять разные зависимости)
  • Позволяет писать более тестируемый код (мы можем легче использовать стабы и моки)
Без внедрения зависимости С внедрением зависимости
class example {                         
public:  
    example()                           
        : logic_(new logic{})           
        , logger_(                      
            logger_factory::create()    
          )                             
    { }  
         
    int run() const;                    
         
private: 
    shared_ptr<ilogic> logic_;          
    shared_ptr<ilogger> logger_;        
};                             

 class example {
 public:
     example(shared_ptr<ilogic> logic
           , shared_ptr<ilogger> logger)
       : logic_(logic), logger_(logger)
     { }

     int run() const;

 private:
     shared_ptr<ilogic> logic_;
     shared_ptr<ilogger> logger_;
 };

Читать полностью »

Городские легенды о медленных вызовах виртуальных функций - 1Традиционно компиляторы реализуют вызовы виртуальных функций через двойную косвенную адресацию — если класс содержит хотя бы одну виртуальную функцию, то в начале каждого объекта этого класса хранится адрес таблицы виртуальных функций. Если компилятор не знает конкретный тип объекта, на который указывает указатель, то для вызова виртуальной функции нужно сначала взять указатель на объект, прочитать адрес начала таблицы, затем по номеру метода прочитать адрес, где хранится реализация функции, затем вызвать функцию.

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

В тексте выше ключевое слово «если». Что, если компилятор знает, какую функцию на самом деле надо вызывать?
Читать полностью »

От редактора Smashing Magazine:

На прошлой неделе Microsoft сделала самое значимое объявление для веба с тех пор, как в 1995 году запустила Internet Explorer: новый браузер под кодовым названием “Project Spartan”. Что это означает для нас, как разработчиков и дизайнеров? Какой движок рендеринга будет использовать Spartan и как он будет влиять на нашу работу? Мы поговорили с Джейкобом Росси, старшим инженером в команде веб-платформы Microsoft о новом браузере, используемом движке рендеринга и о том, заменит ли он в последствии Internet Explorer. Эта статья, написанная Джейкобом, является результатом нашего обсуждения и проливает свет на некоторые аспекты браузера, которые могут быть вам полезны.

Подробности о новом движке рендеринга Microsoft для «Project Spartan» - 1
Project Spartan, новый браузер от Microsoft, официально объявленный на прошлой неделе.

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

Эта статья рассказывает внутреннюю историю движка рендеринга Spartan: как он появился и как 20-летняя история платформы Internet Explorer (Trident) помогла нам определиться с подходом к его проектированию.
Читать полностью »

Рекорд по минимальной реализации компьютерных шахмат с 1983 года принадлежал программе 1K ZX Chess. На компьютере Sinclair ZX81 она занимала 672 байта памяти. При этом программа вмещала почти все правила шахматной игры, а также бота для игры против человека.

Компьютерные шахматы в 487 байтах - 1
Первое описание игры в журнале Your Computer Magazine за февраль 1983 года

Спустя 32 года этот рекорд побит. Группа Red Sector Inc. реализовала полностью играбельную версию шахмат BootChess всего в 487 байтах!
Читать полностью »

Компания Apple отчиталась за первый квартал 2015 финансового года, который для производителя завершился 27 декабря 2014 года.

Несомненно, именно благодаря новым смартфонам компания получила рекордную выручку — 74,6 млрд долларов. Для сравнения, годом ранее выручка Apple составляла 57,6 млрд долларов. Чистая прибыль достигла 18 млрд долларов, тогда как в прошлом году была равна 13,1 млрд долларов. Валовая чистая прибыль за год увеличилась с 37,9% до 39,9%. Международные продажи принесли 65% общего дохода.

Читать полностью »

В Японии прошёл аукцион Yahoo Auctions, в ходе которого неизвестный выложил 129 тыс. долл за приставку PlayStation 4 ограниченной серии.

Как известно, в декабре прошлого года японская компания Sony, отметившая 20-летний юбилей знаменитой серии игровых приставок PlayStation, выпустила ограниченную серию PS4 — последней версии консоли, получившей название Anniversary Edition. Тираж линейки, оформленной в стиле ретро, составил 12 тыс. 300 штук.

PS 4 ушла с молотка за 129 тысяч долларов

Читать полностью »

Очередной гвоздь в крышку гроба браузерного плагина Adobe Flash

YouTube включил HTML5 по умолчанию - 1

Поддержку тэга <video> на YouTube добавили ещё в 2010 году. На относительно полный переход на HTML5-видео ушло четыре с половиной года, но он наконец состоялся.

В блоге видеохостинга была размещена запись, рассказывающая о том, что теперь плеером по умолчанию для большинства пользователей будет HTML5-версия вместо плагина на Flash. Новый плеер включён по умолчанию пока не у всех, а только в Chrome, Internet Exporer 11, Safari 8 и в тестовых версиях Firefox.
Читать полностью »

Сейчас в России самый интересный с точки зрения бизнеса период — период кризиса. Кризис — слово греческое, которое означает «суд». Суд — это состязательность. Кто сумеет оптимизировать формулу продаж в своем магазине, тот и выиграет. Количество продаж зависит от трех показателей:

Оптимизатор в Oracle может применять различные способы трансформации запросов для улучшения их производительности. Одним из таких способов является join elimination. В официальной документации Oracle Database SQL Tuning Guide об этом способе сказано достаточно мало, в отличие от других.
Приглашаю читателей под кат, чтобы поговорить об этом способе поподробнее.
Читать полностью »

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

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

А началось все в далеком 2007 году, когда я решил сделать свой первый тренинг. Из этой активности, кстати, тогда родилась книга “Секреты управления программистами” (выложена бесплатно вот в этом пакете книг, требует регистрации), но сейчас не об этом. Вернее, не совсем об этом.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js