Очередное микродостижение :)

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

Все бесплатно и качественно, удобно что можно прокачивать даже speaking навык, хотя я эту фичу выключил для себя 🙂

И да, можно учиться через веб и мобилку. Жаль, что нет видео уроков…

https://www.duolingo.com/

Когда работодатель тебя ценит, даже если ты удаленщик

Приятное сообщение от приятного HR приятной IT-компании 🙂

Если нужно быстро сделать стартап или реанимировать существующий для веб и мобилки, рекомендую – https://www.flatstack.com/

Golang и WOPI: превью документов через Office Online

Введение

Возникла у нас в компании проблема с превью документов, использовали мы для превью на портале всем известную тулзу от гугла. Но с ней были проблемы, у пользователя не всегда рендерился документ(видимо лимиты по количеству вызовов) и когда он рендерился, то бывало, что внешне превьюсильно отлиалосьот оригинала. Поэтому было решено разработать превью документов на нашем кор. портале с использованием уже имеющегося у нас Office Online.

Теория

По счастливому стечению обстоятельств для работы с документами в Office Online используется неплохо задокументированный протокол – WOPI (http://wopi.readthedocs.io/).

Что нам нужно реализовать для организации предпросмотра:

1) Нужно получить необходимые для обращения к Office Online данные:

– файл discovery.xml

– ссылка на файл /wopi/<fileId> и ссылка на действие офис онлайн из файла discovery.xml

– токен и время его жизни в виде таймстемпа в миллисекундах

2) Нужно написать реализацию метода CheckFileInfo, который будет возращать информацию о файле

3) Нужно написать реализацию метода GetFile, который будет возращать содержимое файла

Практика

Лучше слов расскажет код, шутка, на самом деле мне пока немного лень писать то, как это было реализовано 🙂

Но надеюсь, что и этот код сможет оказаться полезным.

https://github.com/ildarusmanov/msofficepreview

TDD заметки: как быстро начать разрабатывать через тестирование

Введение

Сегодня хочу рассказать о некоторых своих размышлениях по поводу TDD в этой небольшой заметке.

Первое, что такое TDD? Wiki говорит нам следующее(https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5):

Разработка через тестирование (англ. test-driven development, TDD) — техника разработки программного обеспечения, которая основывается на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест, и под конец проводится рефакторинг нового кода к соответствующим стандартам. Кент Бек, считающийся изобретателем этой техники, утверждал в 2003 году, что разработка через тестирование поощряет простой дизайн и внушает уверенность (англ. inspires confidence).

Кстати, рекомендую прочитать книгу о TDD самого Кента Бега(http://www.ozon.ru/context/detail/id/1501671/). О том для чего и когда использовать TDD я в этой заметке писать не буду, т.к. я думаю, что это достаточно очевидный момент и как правило вопрос возникает как к этому подходу разработки перейти и как его успешно внедрять.

Workflow

Ниже на рисунке представлен процесс разработки программы в стиле TDD.

tdd-flowchart
процесс разработки программы в стиле TDD

Начинается весь процесс всегда с написания тестов и далее двигаемся по стрелочке:

1. Написание теста, без написания логики программы, которую мы проверяем в тесте.

2. Запуск теста и проверка того, что тест красный, т.к. у нас нет реализации тестируемой части(если тесты зеленые – значит тесты ничего не проверяют и их нужно переписать)

3. Пишем код, который делает тесты зелеными(минимальный код, а точнее любой корректно  работающий код, который сделает тесты зелеными)

4. Запускаем тесты и проверяем, что они зеленые

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

Проблема первого теста

Исходя из собственной практики на первых этапах самое сложное это начать писать первый тест, до реализации тестируемого кода и здесь я вижу два приема:

1. Написать сначала интерфейс, затем переходить к тесту. Это позволит начать переход к TDD и при этом не слишком "тупить" над тем, что и как тестировать, т.к. часть кода вы уже будете писать до теста и в голове уже будет небольшое понимание того, что тестировать. Ну а как привыкните – начнете писать тесты сразу.

2. Это писать сначала самый короткий, т.е. минимальный и общий тест. Собственно это и есть праведный путь TDD. Таким образом дизайн программы будет строиться по циклу через тесты, с каждой итерацией вы будете добавлять тесты и код.

Проблема плохого дизайна

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

1. Писать проект заново, особенно если в пользу этого уже есть какие-нибудь и другие предпосылки.

2. Выделять из проекта отдельные компоненты и тестировать их. Этот вариант подходит для проектов с не слишком НЕудачным дизайном.

3. Использовать TDD только для новых изменений кода и со временем весь проект сможет перейти на TDD. Этот вариант на мой взгляд самый универсальный.

Заключение

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

 

 

Путешествие в королевство улыбок Тайланд

Вот и закончилось наше недельное путешествие (09.12.2017-16.12.2017) в Тайланд на остров Пхукет.

Начну с самолета, летели мы десять часов из Москвы,выходя из самолета сразу же ощутили весь тропический климат(+30 и высокая влажность), далее нас везли в автобусе до минивэна,попутно гид от туркомпании, мешал нам спокойно ехать своими рассказами(на мой взгляд совершенно бессмысленными). Но до отеля мы все же добрались и было раннее утро 🙂

После приезда в отель мы немного прогулялисьи пошли на тайский массаж  и как дошли до отеля легли спать…Когда мы проснулись – был еще день и мы снове отправились на прогулку, первое, что мы хотели сделать в Тайланде – это попробовать настоящую тайскую кухню. Continue reading Путешествие в королевство улыбок Тайланд

3.5 года спустя

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

Утро началось с того, что я начал сбрасывать вес(чтобы уместиться в весовую до 65кг), за 2 часая скинул более двух килограмм, но приехав на взвешивание узнал, что перевесил(65.560), в общем перекинули меня в весовую до 85кг и оштрафовали на 100 рублей. 🙂

Правда в итоге я участвовал в весе до 75кг 😀 В общем было весело, я опасался, что отсуствие спарингов за последние 3 года и нормальной тренировочной практики приведет меня к беззаговорочным поражением…но к моему великому удивлению я неплохо чувствовал себя в бою, правда кидал вес зря, можно было бы и лучший результат показать.

Нашел очень похожие фото с разницей в 5 лет

2012 год (Чемпионат Республики Татарстан)

h-26

2017 год (Открытый Чемпионат г.Казани)

mZC1rUqeO4c

 

Как проверить навыки кандидата на собеседовании?

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

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

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

А вот далее желательно попросить написть немного кода для демонстрации, чтобы показать на самом ли деле он это умеет делать и еще можно попросить выполнить тестовое задание(если не боитесь, что кандидат отвалится).

+Отличным показателем являются аккаунт на github, активность в блогах, форумах и т.д.

О том как лучше спрашивать, мне понравилась вот эта статья – http://prohr2.ru/%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE-%D0%B6%D0%B5%D0%BB%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B-%D0%B8-%D0%BA%D0%B0%D0%BA-%D1%81-%D0%BD%D0%B8%D0%BC%D0%B8/

 

 

 

Golang: пакеты

По поводу пакетов в голанге есть множество статей и ресурсов, например – https://thenewstack.io/understanding-golang-packages/. Но лично у меня в самом начале изучения этого языка прграммирования возникли две проблемы:

  1. Как использовать пакеты внутри совего приложения для разделения кода(что-то вроде namespace в других языках);
  2. Ошибка цикличного импорта пакетов.

Первый вопрос снимается легко, допустим у нас в проекте с названием project7(директория /go/src/project7) есть модели и контроллеры в соответствующих директориях(models и controllers), тогда мы можем их использовать в нашем главном файле main.go вот так:


То есть, по сути мы просто используем их как локальный неймспейс, все очень просто.

Проблема циклических импортов возникает, когда вы ипортируете пакет, который импортирует пакет из которого вы производите импорт.

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

Избежать этой проблемы легко – используйте интерфейсы.

Еще одна попытка создать свой блог

Посмотрим чем увенчается очередная попытка создания и ведения блога.

В общем возможно блоги это уже немодно, но блоги создаются для себя, он же дневник.

“Вот говорят, лиха беда начало, но, поверьте, самое трудное — это вовремя остановиться.”