Пользователь
Docker под Windows для разработки, разбор подводных камней
![image](https://habrastorage.org/webt/8_/rr/_w/8_rr_wp4ne3nccsa5uiktf_ty2y.png)
Она не претендует на роль исчерпывающей и по мере необходимости будет обновляться и дополняться.
За практическим руководством с нуля советую обратиться к этой публикации.
Содержание
- Предварительные настройки
- Выбор между Docker Toolbox on Windows или Docker for Windows
- Windows контейнеры и Linux контейнеры
- Особенности монтирования папок
- Монтирование с хост-машины или volume
- Особенности разметки диска GPT и MBR
- Docker Toobox to Windows
- Docker Swarm
- Проблемы с кодировкой
- Полезные ссылки
- Заключение
Антипаттерны тестирования ПО
Введение
Есть несколько статей об антипаттернах разработки ПО. Но большинство из них говорят о деталях на уровне кода и фокусируются на конкретной технологии или языке программирования.
В этой статье я хочу сделать шаг назад и перечислить высокоуровневые антипаттерны тестирования, общие для всех. Надеюсь, вы узнаете некоторые из них независимо от языка программирования.
Терминология
К сожалению, в тестировании пока не выработали общую терминологию. Если спросить сотню разработчиков, в чём разница между интеграционным, сквозным и компонентным тестом, то получите сто разных ответов. Для этой статьи ограничимся такой пирамидой тестов:
![](https://habrastorage.org/getpro/habr/post_images/b6d/7a8/3ed/b6d7a83ed09e1a8046529bebfe02836e.png)
Если не видели пирамиду тестов, настоятельно рекомендую ознакомиться с ней. Вот некоторые хорошие статьи для начала:
- «Забытый слой пирамиды автоматических тестов» (Майк Кон, 2009)
- «Пирамида тестов» (Мартин Фаулер, 2012)
- «Блог отдела тестирования Google» (Google, 2015)
- «Пирамида тестов на практике» (Хэм Фокке, 2018)
Пайка для начинающих
К делу. Сегодня речь пойдет о пайке. Знаю, что многих новичков, желающих поиграться с микроконтроллерами, это отпугивает. Но, во-первых, можно воспользоваться макетными платами, где просто втыкаешь детали в панель, без даже намека на пайку, как в конструкторе.
Правильный стул для ежедневной работы за компьютером
![Золотой Остап и его стул](https://habrastorage.org/storage2/ed1/551/18e/ed155118ee2ae800ea3338b171df0a34.jpg)
Однако, на чем же мы сидим перед столом?
Стул — не менее важная часть рабочего места любого человека, много времени работающего за компьютером в течение дня.
Все мы работаем с компьютером и порой не замечаем, на чем же мы сидим.
Оказывается наши санитарные правила и нормы
А какой стул правильный?
ДНК глазами программиста
Если ты – молоток, то во всём увидишь гвоздь
Это всего лишь размышления программиста о ДНК. Я не являюсь молекулярным генетиком.
Исходный код
Находится здесь. Это не шутка. Исходники можно просмотреть с использованием замечательного набора скриптов Perl под названием "Ensembl". Геном человека занимает приблизительно 3 гигабайта, которые можно сократить до 750 мегабайт, если отбросить шелуху. Немного печалит, что это всего лишь 2.8 браузеров Mozilla Firefox.
ДНК похожа скорее не на исходники на языке C, а на байт-код для виртуальной машины под названием «ядро клетки». Крайне сомнительно, что существуют исходники, которые можно скомпилировать в этот байт-код: то, что мы видим, – это всё, что у нас есть.
Выпуск#8: ITренировка — актуальные вопросы и задачи от ведущих компаний
![КДПВ](https://habrastorage.org/webt/cl/2e/q_/cl2eq_ampfrdlp7g4dsj4qsfbqe.png)
Что читать о нейросетях
Нейросети переживают второй Ренессанс. Сначала еще казалось, что сообщество, решив несколько прикладных задач, быстро переключится на другую модную тему. Сейчас очевидно, что спада интереса к нейросетям в ближайшем будущем не предвидится. Исследователи находят новые способы применения технологий, а следом появляются стартапы, использующие в продукте нейронные сети.
Стоит ли изучать нейросети не специалистам в области машинного обучения? Каждый для себя ответит на этот вопрос сам. Мы же посмотрим на ситуацию с другой стороны — что делать разработчикам (и всем остальным), которые хотят больше знать про методы распознавания образов, дискриминантный анализ, методы кластеризации и другие занимательные вещи, но не хотят расходовать на эту задачу лишние ресурсы.
Ставить перед собой амбициозную цель, с головой бросаться в онлайн-курсы — значит потратить много времени на изучение предмета, который, возможно, вам нужен лишь для общего развития. Есть один проверенный (ретроградный) способ, занимающий по полчаса в день. Книга — офлайновый источник информации. Книга не может похвастаться актуальностью, но за ограниченный период времени даст вам фундаментальное понимание технологии и способов ее возможной реализации под ваши задачи.
[DotNetBook] Реализация IDisposable: правильное использование
![](https://habrastorage.org/webt/vh/7j/tq/vh7jtqhzbne4h3rjhprca2pruhu.png)
Disposing (Disposable Design Principle)
Сейчас, наверное, практически любой программист, который разрабатывает на платформе .NET, скажет, что ничего проще этого паттерна нет. Что это известный из известнейших шаблонов, которые применяются на платформе. Однако даже в самой простой и известнейшей проблемной области всегда найдется второе дно, а за ним еще ряд скрытых кармашков, в которые вы никогда не заглядывали. Однако, как для тех, кто смотрит тему впервые, так и для всех прочих (просто для того, чтобы каждый из вас вспомнил основы (не пропускайте эти абзацы (я слежу!))) — опишем все от самого начала и до самого конца.
IDisposable
Если спросить, что такое IDisposable, вы наверняка ответите что это
public interface IDisposable
{
void Dispose();
}
Для чего же создан интерфейс? Ведь если у нас есть умный Garbage Collector, который за нас чистит всю память, делает так, чтобы мы вообще не задумывались о том, как чистить память, то становится не совсем понятно, зачем ее вообще чистить. Однако есть нюансы.
Примечание
Глава, опубликованная на Хабре не обновляется и возможно, уже несколько устарела. А потому, прошу обратиться за более свежим текстом к оригиналу:
CLR Book: GitHub, оглавление
CLR Book: GitHub, глава
Релиз 0.5.2 книги, PDF: GitHub Release
![](https://habrastorage.org/getpro/habr/post_images/97f/1d3/cf0/97f1d3cf0e2a6bf007066eb60a789c31.png)
Про ошибки и исключения
![](https://habrastorage.org/webt/7-/md/p6/7-mdp6qmdxejlo8zmeplrjc7zzo.jpeg)
В прошлый раз я разобрал два примера (раз, два), как можно перейти от императивной валидации входных значений к декларативной. Второй пример действительно «слишком много знает» про аспекты хранения и имеет подводные камни (раз, два). Альтернатива – разбить валидацию на 3 части:
- Модел байндинг: ожидали
int
, пришелstring
– возвращаем 400 - Валидация значений: поле email, должно быть в формате
your@mail.com
, а пришло123Petya
– возвращаем 422 - Валидация бизнес-правил: ожидали что корзина пользователя активна, а она в архиве. Возвращаем 422
К сожалению стандартный механизм байндинга ASP.NET MVC не различает ошибки несоответствия типа (получилиstring
вместоint
) и валидаци, поэтому если вы хотите различать 400 и 422 коды ответа, то придется это сделать самостоятельно. Но речь не об этом.
Как слой бизнес-логики может вернуть в контроллер сообщение об ошибке?
Самый распространенный по мнению Хабра способ (раз, два, три) – выбросить исключение. Таким образом между понятием «ошибка» и «исключение» ставится знак равно. Причем «ошибка» трактуется в широком смысле слова: это не только валидация, но и проверка прав доступа и бизнес-правил. Так ли это? Является ли любая ошибка «исключительной ситуацией»? Если вы когда-нибудь сталкивались с бухгалтерским или налоговым учетом, то наверняка знаете, что существует специальный термин «корректировка». Он означает, что в прошлом отчетном периоде были поданы неверные сведения и их необходимо исправить. То есть в сфере учета, без которой бизнес не может существовать в принципе, ошибки – объекты первого класса. Для них введены специальные термины. Можно ли назвать их исключительными ситуациями? Нет. Это нормальное поведение. Люди ошибаются. Программисты — просто чересчур оптимистичный народ. Мы просто никогда не снимаем розовых очков.
Алгоритмический подход к лечению бессонницы
![](https://habrastorage.org/webt/tz/7i/o1/tz7io1tbcu6pvsymbbe_uxcasd4.jpeg)
Я борюсь с бессонницей всю свою взрослую жизнь. Проблема впервые проявилась в колледже, и впоследствии сила недуга то росла то убывала, нередко, хоть и не всегда, коррелируя с уровнем стресса.
Обычно все начинается с активной работы ума вечером. Активность может быть связана с поиском решения непростой задачи на работе, или воспроизведением в голове живой беседы, произошедшей за ужином. Или я путешествую и потому пребываю в возбужденном состоянии. То есть это далеко не всегда напряженные мысли, скорее очень увлекательные. Я иду спать, но мой разум не успокаивается. Полчаса спустя я понимаю, что не сплю и начинаю думать, что мне пора бы уже уснуть, поскольку завтра много дел. И это только усугубляет ситуацию. Я начинаю становится недовольным собой и корить себя: «Что не так? Завтра буду ходить недовольный. Мне очень надо попробовать уснуть». И так повторяется до изнеможения. Часами на пролет я лежу без сна.
Следующий день, как и следовало ожидать, действительно проходит ужасно, и под вечер мое сознание наполняется негативными мыслями о своей способности отходить ко сну. Далее сценарий повторяется вновь. При худшем раскладе я остаюсь совсем без сна на протяжении пяти-шести ночей в месяц. Ну а одна-две ночи в месяц вообще стали обычным делом. Разумеется как пики бессонницы, так и ее спады весьма деструктивно сказываются на качестве жизни и эффективности труда.
Как правильно внести свою лепту в Open Source проект: простые подсказки
Такие проекты как Bootstrap, Angular.js, Elasticsearch, Symfony Framework, Swift и многие другие привлекают новых разработчиков, их сообщество растёт. Всё это даёт огромный рост проектам, а самим разработчикам интересно поучаствовать в разработке чего-то, чем пользуется весь мир.
Я, как и многие другие программисты, не устоял и также время от времени участвую в разработке Open Source проектов, в основном на PHP. Но когда я начинал, я столкнулся с проблемой — я не знал, как правильно организовать процесс «контрибьютинга», с чего начать, как сделать так, чтобы мой Pull Request рассмотрели и т.д.
Всем начинающим «контрибьютерам», которые столкнулись с похожим проблемами, добро пожаловать под кат.
![](https://habrastorage.org/files/e52/8f0/8cd/e528f08cd83a4585a6f092776f535678.jpg)
Простые догмы при работе с цветом в интерфейсах
![image](https://habrastorage.org/getpro/habr/post_images/4c7/88d/1fe/4c788d1fed0ad71310cad782819b1b0e.png)
Привет, username!
Хотел написать большую статью про биологию восприятия цвета, но решил для начала ограничиться простыми правилами для начинающего/продолжающего дизайнера интерфейсов. К сожалению, грамотная работа с цветом присутствует даже не во всех продуктах крупных компаний, поэтому данный текст имеет цель не только обучить новичков, но и напомнить более опытным дизайнерам обо всех тонкостях этого вопроса. Вопрос дальтонизма в статье не освещается.
Переезд в Японию
![image](https://habrastorage.org/webt/0z/jw/zx/0zjwzx624tkujknzuwwsrp4gpdw.jpeg)
Поиск работы
В моем случае LinkedIn оказался единственным инструментом, с помощью которого я мог добраться хотя бы до интервью. В тот момент, когда я вернулся к поискам (начало 2015-го), на сайте уже было достаточно много IT-вакансий в Токио без требований к знанию японского. Как выяснилось позже — это был новый тренд по привлечению специалистов из-за границы.
Я нашёл вакансию, которая мне была интересна, перешел по ссылке, заполнил анкету, записал видео-интервью и на какое-то время забыл обо всём этом, т.к. не расчитывал, что мне кто-то ответит. Но мне ответили.
Собеседование
Пригласили на собеседование по скайпу. Всего их было 4 или 5 и только одно из них техническое. На остальных же мне казалось, что интервьюер именно я. Мне рассказывали о компании, проектах, работе, а я задавал вопросы. В итоге за время этих интервью (которые заняли около 2-х месяцев) я познакомился с кем-то из HR, своим будущим менеджером, почти всеми членами команды и с менеджером L2 (один из executive). Т.е. ещё даже не зная наймут ли меня, я уже знал всех тех, с кем мне предстоит работать. Мне это показалось чем-то невероятным.
Сборка мусора и время жизни объектов
Другими словами, возможно ли в следующем случае увидеть «Finalizing instance.» до «Finished doing something.»?
internal class GcIsWeird
{
~GcIsWeird()
{
Console.WriteLine("Finalizing instance.");
}
public int data = 42;
public void DoSomething()
{
Console.WriteLine("Doing something. The answer is ... " + data);
// Some other code...
Console.WriteLine("Finished doing something.");
}
}
Фильтр Маджвика
Предисловие от переводчика
Здесь представлен один из новейших методов расчёта ориентации в пространстве по показаниям датчиков акселерометра, гироскопа и компаса — фильтр Маджвика, который, по словам автора, даёт результат лучший, чем применение фильтра на основе метода Калмана в результатах и производительности. Автор — Себастьян Маджвик (его интернет-магазин). Метод описан в статье на английском. Данная работа защищена в Университете г. Бристоля Перевода я не нашёл. Переводчик из меня так себе, особенно таких сложных текстов. Но нам же интересно, что за метод?
Кое-где буду от себя добавлять — там текст выделен курсивом. Мною найдено более 10 опечаток в оригинальном тексте. Вообще было довольно трудно, поэтому помощь приветствуется — пишите в комментариях, где перефразировать нужно, в общем, где что не так.
![](https://habrastorage.org/files/9b3/9c7/2b1/9b39c72b1ea3471fb3745ee96eed1327.png)
Что делать, если не получается выучить второй язык
А вы помните, как вы выучили русский? Ведь процесс освоения языков един. Может, не стоит сбрасывать со счетов свое владение русским? Давайте разберемся вместе.
![](https://habrastorage.org/webt/lw/d9/qd/lwd9qdj93zjureqqrgqgbjghlwq.gif)
Нужно выучить английский. Как рассчитать время для занятий?
Правила английского, которые нарушают ваши иностранные коллеги
![](https://habrastorage.org/webt/uj/ho/tn/ujhotnhfbutgdayj4ssmq5tp4uu.jpeg)
Если вы общаетесь с коллегами на английском, вы наверняка не хотите ударить перед ними в грязь лицом и стараетесь говорить максимально правильно, по всем правилам грамматики, фонетики и еще какой-нибудь -тики. А что, если бы мы сказали вам, что можно спокойно нарушать эти самые правила и оставаться пОнятыми? В этой статье мы постараемся описать случаи, когда можно допускать ошибки и почему это можно делать.
Двойное отрицание
Вы же помните, что в предложении на английском достаточно одного отрицания? А потом вдруг слушаем песню Rolling Stones и слышим “I can’t get no satisfaction”. Все дело в том, что это песня, тут можно, скажите вы. И это верно. Но еще стоит упомянуть, что двойное отрицание делает фразу эмоциональнее. Поэтому такие фразы и стали популярны. Но это неформальный способ, так что не увлекайтесь с двойными отрицаниями.
За пять дней я прошел собеседования в пяти компаниях Силиконовой долины и получил пять предложений о работе
![](https://habrastorage.org/webt/ny/pn/ic/nypniczubimrsqp7vbir2irgu3k.png)
Как все началось
Я отработал в Groupon почти три года. Это моя первая работа, там были и прекрасные люди, и отличные проекты. Мы делали всякие интересные штуки, вводили перемены внутри компании, публиковали материалы и все в таком духе. Но со временем я стал ощущать, что темп моего самообразования стал затухать (попросту говоря, замедляться), мне не хватало пищи для ума. К тому же, как и всякого разработчика ПО из Чикаго, меня тянуло в Область залива Сан-Франциско — ведь там столько известных компаний.
Жизнь коротка, а профессиональная жизнь еще короче. Обговорив все с женой и заручившись ее полной поддержкой, я решил сделать решительный шаг и в первый раз в жизни поменять работу.
Information
- Rating
- 3,732-nd
- Location
- Россия
- Registered
- Activity