пятница, 31 июля 2015 г.

Комикс про работу программиста в потоке









Первый день использования Windows 10

Вместо предисловия

Microsoft провела большую пиар акцию связанную с бесплатным обновлением Windows 7 и Windows 8/8.1, которая должна была начаться 29 числа. Владельцы лицензионных версий получили возможность зарезервировать лицензионную версию, чтобы начать обновление как можно быстрее.

Установка обновления

Накатить обновление на сотни миллионов компьютеров в один день задача непростая. Но я верил в Microsoft, и предполагал, что замечательная утилита начнет скачивание дистрибутива заранее, скажем 20 числа. Скачает 95%, а самые важные 5% докачает в день релиза. Организовать это совсем не сложно. А защищаться от людей, которые решат из превью версий выдрать 5% и заставить это работать, на мой взгляд совсем не стоит. Но Microsoft похоже думает иначе.

Долгожданное обновление игнорировало меня до самого вечера. Лишь ближе к 23:00 система решила попробовать установить обновление, долго пыталась скачать дистрибутив и вывалилась с ошибкой.

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

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

Обновление

Но вернемся к установке обновления. Утром оказалось, что Windows Update привел себя в некоторое странное состояние. Windows 10 больше не пытается скачиваться, а выдает ошибку установки обновления 0x8024002.

Поплясав пару часов с бубном, удаляя папки Windows.BT и C:\Windows\SoftwareDistribution\Download и презапуская службу обновления мне удалось исправить ошибку. Windows все-таки перекачала обновления и предложила мне начать. Я был весь в предвкушении.
При обновлении показывают симпатичный Progress Bar (без Technical Preview, конечно)

Замечу, что я ожидал от процесса обновления некоторой интерактивности, а именно – хотел сделать чистую установку новой Windows. За 2-3 года использования Windows 8 мой системный диск зарос хламом и ненужным ПО, и хотелось начать с чистого листа.
К моему сожалению, Windows не спросила у меня ничего, просто обновилась оставив все программы. Мелочь, а неприятно. Обновление процесс не быстрый. Даже с моим SSD оно заняло минут 40. Пришлось вызывать сброс системы. Все-таки хорошо, что такую штуку приделали к Windows и больше не надо создавать загрузочный диск, чтобы переустановить систему. Пришлось подождать еще минут 30-40.

Впечатления. Негатив.

И вот перед нами новая Windows 10. Я начну с негативного опыта, чтобы под конец поста сгладить этот негатив.
Самое неприятное – большие проблемы с ClearType шрифтами. У Microsoft, есть ставшая уже традиционной проблема с четкостью шрифтов, на DPI отличном от стандартного. На FullHD элементы интерфейса и подписи для меня, как человека с близорукостью, выглядят мелковато. И я со времен Windows 7 выставлял настройку на 125%. В Windows 7 и затем Windows 8, эта проблема потихоньку исправлялась. Что ж буду и тут надеяться на обновления.
Microsoft очень хочет внедрить свой единый интерфейс и внешний вид на всех устройствах. Получается пока не очень. Первая проблема это компонент настройки громкости. Смотрите скриншот.


ЭЭЭ. Неужели Microsoft считает, что это нормально\красиво? Я – нет. Вы видите здесь где заголовок формы, а где управление громкостью? Я - нет.

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

Microsoft пытается нам предложить свои новые приложения для базовых функций. Таких как просмотр фото, видео и так далее. Да, эти приложения в целом лучше, чем тот же стандартный просмотр фотографий. Кому-то их вполне хватит. Мне лично – нет. Так какого ж я не могу их удалить из системы? Раздражает.

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

Кажется, что тут вполне поместиться второй ряд иконок. Но нет. Не поместится.
А так выглядит новый System Tray.

Иконки стали больше. Или растягивайте сам трей в 5 раз, или прячьте сами иконки, но второго ряда вам не видать. Это конечно мелочь, и вряд ли этим активно пользуется большинство потребителей, но все равно неприятно.

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

Впечатления. Позитив.

Со времен Windows 7 Microsoft стала активно поглядывать в сторону конкурентов и приделывать к своей ОС лучшие идеи. Идея с окном поиска\запуска на мой взгляд, как раз из таких. В Windows 7 уже был подобный вариант, в Windows 8 фактически пропал (переключение на другой режим стола отвлекает и откровенно мешает). В Windows 10 идея реализована по новому, с дополнением – поиском в интернете и поиском по настройкам. В интернете этой штукой я в жизни не буду искать, а вот быстрый поиск по настройкам штука очень полезная. В своем Linux Mint я ей постоянно пользуюсь.

Пуск вернулся на свое законное место. В целом, хочу признаться, что я уже отвык от него. Значки часто используемых программ давно переехали на рабочий стол и запуск из меню Пуск вряд ли мне пригодится. Но для многих людей, которые до сих пор успешно используют Windows 10 это большой плюс. Это одна из причин, по которой я не стал ставить Windows 8 родителям.
Даже выключать компьютер из меню Пуск пока непривычно. Но я думаю, что через пару недель перестроюсь обратно и проблем не будет никаких.

Редизайн интерфейса мне в целом понравился. Обидно, что у Microsoft до сих пор туго с хорошими темами для рабочего стола. В Linux с ними куда веселее. Перерисованные иконки выглядят неплохо, все в одном стиле. Плюс иконки выглядят очень четко, похоже их перерисовали в высоком разрешении с перспективой на 4К мониторы. Логичный шаг.

Хоть с обновлением все прошло не идеально, но в целом весьма приемлемо. С обновлением Ubuntu на моей машине всегда было на порядок больше критичных проблем. Сама идея обновления ПО без заморочек с флешками и DVD дисками меня очень радует.


К сожалению, остальные новые плюшки оценить не удалось. Но больше всего хочется попробовать разрекламированную Cortana. Посмотреть, был ли уже добавлен русский язык и как она отреагирует на мой английский с жутким акцентом =)

Итого

В целом, я считаю обновление успешным. Новый функционал очень приятный. Ставить или не ставить? Я считаю – надо ставить. Человек ко всему привыкает и чем быстрее привыкнешь, тем лучше. К счастью, весь софт который я использую полностью совместим с новой ОС и проблем никаких не возникло. Правда по форумам встречаются люди, у которых возникли аппаратные проблемы. Надеюсь, что это единичные случаи, которые Microsoft исправит в первую очередь.

Маленькие полезности для Git

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

Posh-git

Posh-git это набор фантастических скриптов для работы с git в PowerShell. Многие программисты в Windows используют графический интерфейс для Git, например, TortoiseGit. А с появлением поддержки Git в Visual Studio использовать Git стало еще проще.

Я же привык пользоваться консольным клиентом git. Наверняка сказываются многие часы работы с git в linux. Раз уж я заговорил о консоли, не могу не отметить отличную работу, которую проделала Microsoft при разработке своего Powershell. Совместимость с командами linux терминала - это просто гениальная идея. Надеюсь, что в будущих версиях прикрутят работу через pipe и grep.

Вернемся к posh-git. Если вы используете Chocolatey (см. прерыдущий пост), то для установки надо просто выполнить
    cinst -y poshgit

После установки просто перезапустите PowerShell и заходите в папку с вашим репозиторием.

Posh-git показывает нам имя ветки, в которой мы находимся, а также количество новых файлов. Если мы решим добавить один файл в коммит, то увидим следующее:
А после того как сделаем сам коммит:
Как видите, цвет ветки изменился, так как мы удалились от состояния ветки на нашем remote.

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

В общем, категорически рекомендую всем, кто работает с Git. Кстати, для linux тоже есть подобная штука.

Где поиграться с git

Когда в компанию приходят новые сотрудники незнакомые с git, то я всегда им предлагаю этот сайт. На мой взгляд у него есть ряд преимуществ, перед простым проделыванием тестовых заданий на знание git:
  • Отличные лабораторные работы
  • Можно сразу увидеть результат работы
  • Для работы нужен только браузер
  • На русском
Вы просто пишите нужные комманды в консоли и сразу видите ваш результат. Выглядит это так:

Alias

Alias - это просто сокращения для команд git. Штука в общем-то широко известная, оданко мало кто её настраивает. На мой взгляд создавать alias на команды типа commit это бессмысленно и беспощадно. Однако, добавить alias на git log просто необходимо.

Конечно, если вы используете различные GUI для git, то эти alias вам не нужны. Но если вы так же как и я предпочитаете работать в консоли, то они могут вам пригодиться.

Я советую вам настроить следующие:

ls = log -C --stat --decorate

Этот alias будет показывать имена веток, тагов и другую информацию рядом с хэшем коммита.

lsp = log -C --stat -p --decorate

Этот alias будет отображать нам изменения прямо в логе.

 lg = log --graph --all

 Этот alias будет отображать дерево коммитов с помощью псевдографики.


Приятные мелочи

Исправление опечаток. Тут даже пояснять ничего не надо. Просто выполните:
     $ git config --global help.autocorrect 1
И тогда $ git statu будет воспринят как git status. Мелочь, а приятно.

https://github.com/github/gitignore
Содержит 116 шаблонов для .gitinore для различных сред программирования и языков программирования.

Вот и всё на сегодня. Надеюсь будет кому-нибудь полезно.

четверг, 30 июля 2015 г.

Chocolatey

Небольшое предисловие

В конце 2014 года я готовил что-то вроде конференции одного выступающего для своих коллег в отделе разработки ПО. Для этой конференции я подготовил ряд выступлений с презентациями о различных интересных вещах, которые происходят в мире разработки ПО, о наших внутренних проблемах с проектами, а так же о различных хитростях работы Git.
Сегодня я решил поделиться этой информацией (конечно, без наших внутренних вещей) со всеми желающими. Поэтому следующие несколько постов будут основаны на моих выступлениях. И первая штука, которой я хотел бы поделиться это Chocolatey.

Что это вообще такое?

Все кто когда-либо использовали Linux-подобные системы, явно или не явно работали с пакетным менеджером в своем дистрибутиве. Debian и Ubuntu подобные дистрибутивы используют apt-get (лично я рекомендую aptitude), RHEL и OpenSuse используют yum. Если вы вообще не имеете представления, что это такое, то ознакомиться можно в wiki.
В двух словах это консольное приложение, которое позволяет автоматизировать процесс установки, обновления и удаления ПО.

Кратко для программистов =)

  • Как “apt-get”, только для Windows
  • Открытый исходный код https://github.com/chocolatey/choco
  • Абсолютно бесплатный
  • Не только менеджер, но и framework
  • NuGet для библиотек, Chocolatey для программ
  • Microsoft использует Choclatey в своем OneGet

Куча софта


Пример доступных приложени
Вам доступно куча разного ПО (2500+ пакетов). Причем радует то, что есть не только маленькие програмки, но и большие пакеты типа Visual Studio, а так же фреймворки для разработчиков, и даже сервера.

Не надо следить

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

Меньше проблем с установкой

Этот пункт почти ничего не значит для опытных пользователей ПК. Однако будет очень полезен для тех, кто не чувствует себя на 100% уверенно при работе с компьютером. Последнее время каждый второй инсталлятор, даже с официального сайта, захочет установить вам Яндекс.Бар, Яндекс.Браузер, Спутник от mail.ru, сменить домашнюю страницу и еще какую-нибудь гадость.
И так каждый раз...

Конечно, если вы внимательно смотрите, что вам предлагает инсталлятор таких проблем не возникнет. Хотя порой очень хочется на автомате ткнуть Next->Next->Next…. У самого так пару раз бывало, когда приходится удалять всякий хлам и устанавливать ПО заново. И вряд ли в ближайшем будущем что—то резко изменится в этом направлении.

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

Проще установить группу программ

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

С пакетным менеджером все становится очень просто – просто вбиваем одну команду (или проставляем галочки в GUI) и идем пить кофе.

Сборка Windows vs Chocolatey

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

Думаю тут все просто и наглядно. Если вам надо установить любимый набор ПО там, где с интернетом туго, то сборка вас выручит. Если с интернетом проблем нету, то ваш выбор Chocolatey.

Ninite vs Chocolatey

Про Ninite можно почитать на их сайте (https://ninite.com).
Если коротко, то Ninite упрощает установку некоторых программ на компьютер. Предназначена в первую очередь для установке привычного набора программ на свеже установленную операционную систему. Вы просто заходите, выбираете галочками, что хотите установить и получаете инсталлятор, который все сделает за вас. Просто. Удобно.
Список ПО доступного в Ninite

Основная разница с Chocolatey в 2-х на мой взгляд критичных вещах – количество программ доступных для установки и обновление. Набор софта в Ninite крайне небольшой, да и обновлять программы таким образом нормально не получится.

Неприятные мелочи

Есть у Chocolatey и ряд недостатков, про которые нельзя не упомянуть:
  1.  Отсутствие простого инсталлятора. Да, установка происходит в 1 команду. Но своей маме, я не могу просто сказать – “Открой консоль от имени администратора…”. Первый раз придется устанавливать самому.
  2.  GUI далек от совершенства. А большинство все-таки предпочтет графический интерфейс.
  3.   Пакеты поддерживаются сообществом, как и весь проект. К сожалению, пару раз попадал на падение их сервера с пакетами. Надеюсь, что ребята разовьются и смогут создать полноценный аналог linux-репозиториев, которые всегда online.

Как поставить

Запустить cmd.exe от имени Администратора и выполнить:

@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

И в завершении

Буквально вчера вышла новая Windows 10, которая содержит в себе OneGet. OneGet это пакетный менеджер от самого Microsoft, который использует внутри себя Chocolatey. Надеюсь, что Microsoft со своими ресурсами поможет решить те неприятные мелочи, про которые я написал выше. И будет всем нам счастье =)

Наши вопросы по БД и Web-технологиям

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

БД

  1. Типы БД. Иерархические, Объектно-реляционная, реляционная.
  2. Таблицы и View(Представление). Назначение.
  3. Хранимые процедуры, триггеры и курсоры. Назначение и примеры использования.
  4. Нормализация. Причины, 5 основных уровней нормализации, как нормализовать базу данных по третьей нормально форме.
  5. Первичный, внешний, составной и суррогатные ключи . Причины появления ключей, выбор полей для ключей, выбор типов данных для ключей (для каждого из типов ключей).
  6. Кластерные и не кластерные индексы и их назначение.
  7. Безопасность БД. Какие объекты и как необходимо защищать.
  8. SQL запросы к БД (INSERT, UPDATE, DELETE, SELECT). Использование JOIN, UNION, INTERSECT, CONCAT.
  9. noSQL БД. Особенности.

Web

  1. HTML. Назначение. Основы построение веб страниц.
  2. Как уменьшить время загрузки веб-страницы?
  3. Javascript. Назначение. Принцип работы.
  4. Классическая модель веб-страниц и AJAX. Преимущества и недостатки.
  5. CSS. Назначение. Селекторы. Наследование. Каскадирование. Приоритеты стилей CSS.
  6. jQuery. Назначение, возможности, простейший пример использования. JQuery UI.

На этом наши вопросы заканчиваются. Теперь главное не затягивать с публикацией ответов =)

Наши вопросы по криптографии

Так как наша компания (http://ancud.ru/) занимается защитой информации, то хорошее знание криптографии никому не помешает.

Криптография

  1. Что такое симметричная и асимметричная криптография?
  2. Что такое хеш-функция? Какие хэш-функции вы знаете? Почему CRC32 не подходит? HMAC? KDF?
  3. Какие симметричные алгоритмы вы знаете? AES, 3DES, ГОСТ 28147-89, RC5, Blowfish?
  4. В чем отличие блочных шифров от поточных шифров? Сеть Фейстеля?
  5. Что такое режимы шифрования? ECB (простая замена), CBC, гаммирование, CFB (гаммирование c обратной связью).
  6. Какие асимметричные алгоритмы вы знаете? RSA, DSA, ГОСТ 34.10-2012?
  7. Причем тут односторонние функции? Дискретный логарифм и эллиптические кривые.
  8. Цифровая подпись (ЭЦП) и асимметричное шифрование.
  9. Инфраструктура открытых ключей (PKI). Зачем? Что содержит сертификат?
  10. Алгоритмы аутентификации. Как работают симметричные и асимметричные?
  11. Выработка сессионных ключей. Почему Диффи-Хелман – это не аутентификация? Что такое Forward Secrecy (прямая секретность)? Защита от MITM атак.
  12. Как часто надо менять ключи? А пароли? От чего это зависит?
  13. Чему равна криптостойкость пароля? А если его выбирает пользователь?
  14. Почему для криптографии важны случайные числа? Приведите пример атаки на ДСЧ.

Наши вопросы по программированию на языках C/C++

Следующий блок вопросов это самые важные вопросы для кандидата на позицию C/C++ программиста. Вопросы поделены на две категории - знание совсем новых плюсов не обязательно, но крайне рекомендуется. На мой взгляд если человек работает в какой-то области и не интересуется, что в ней происходит последние лет 5, то ничего хорошего в этом нет.

C/C++

  1. Зачем нужен stdafx.h? Что в него включать? Как это работает?
  2. Зачем нужен препроцессор, компилятор, ассемблер, linker?
  3. Что такое исключения? Как они работают?
  4. Для чего используется вызов throw без аргументов?
  5. Конструктор копирования, оператор присваивания. Когда они вызываются?
  6. Операторы преобразования static_cast, const_cast, reinterpret_cast, dynamic_cast, С-cast. Назначение и примеры использования.
  7. Друзья класса. Назначение и примеры применения.
  8. Что такое множественное наследование? Как оно работает и какие может создать проблемы?
  9. Виртуальные функции. Что такое vftable, vbtable и как это работает?
  10. Зачем нужен виртуальный деструктор?
  11. Какие конструкции С++ разрешается использовать в списке инициализации качестве инициализирующих выражений?
  12. Как запретить неявное преобразование типа, выполняемое конструктором инициализации?
  13. Как защитить объект от копирования?
  14. Что предпочтительней, наследование или инкапсуляция? В каких случаях и почему?
  15. Можно ли объявлять массив объектов? А массив классов?
  16. Паттеры проектирования – Singleton, Factory, Observer, Visitor. Остальные по желанию.
  17. Контейнеры в STL. Преимущества и недостатки.
  18. Итераторы и алгоритмы в STL.
  19. Специализация шаблонных классов и функций. Назначение и примеры применения. Частичная специализация шаблонных классов.
  20. Функторы.
  21. Аллокаторы и их применение.
  22. Лямбда-выражения.
  23. Умные указатели. Зачем нужны? Что такое владение?
  24. Многопоточность и примитивы синхронизации. Типы и устройство.
  25. Многопоточность и передача сообщений.
  26. Что такое IPC?

C++14

  1. Явное замещение виртуальных функций и финальность.
  2. Шаблоны с переменным числом аргументов.
  3. Статическая диагностика.
  4. constexpr-выражения.
  5. copy- и move-семантика.