Pull to refresh
12
0.1
Глеб @Gotcha7770

User

Send message

Коллеги, вы меня огорчаете

Reading time12 min
Views191K
В июле и августе 2020 года я, с подачи Григория Петрова, проводил для компании Evrone технические интервью на позицию Senior Golang Backend developer. И, видимо, буду вынужден продолжать проводить, о чём ниже.

Задача формулировалась как «найти человека, который сможет задать и поддерживать высокий уровень профессионализма в применении языка Go». То есть, сформулирована она была по-человечески, перевод на канцелярит — мой. Под эту задачу я сформировал новый опросник вместо того, которым пользовался несколько лет — старый был с жестким закосом под DevOps. Методику, которой я пользуюсь для создания опросников и количественной оценки соответствия кандидатов, я излагал в своем докладе «Техническое интервью как инженерная задача» на конференции Saint TeamLead 2019.

И вот что я хочу сказать вам, коллеги: вы меня огорчаете.


Читать дальше →

Dropclock

Reading time1 min
Views6.1K
Как справедливо заметил Гераклит „В одну реку дважды не войти“, но наблюдать как в эту реку бросают утекающее время (простите за каламбур) можно многократно! Примером тому скринсейвер для рабочего стола DropClock, оговорюсь сразу штука не бесплатная, но от того не менее впечатляющая!
Работа японской студии SCR, работ у них пока всего две, но! старт взят хороший.

Скачать триал Win, Mac.
Читать дальше →

Когда использовать Parallel.ForEach, а когда PLINQ

Reading time13 min
Views77K

Введение


Обычно, при оптимизации программы для многоядерных компьютеров первым шагом является выяснение возможности разделения алгоритма на части, выполняющиеся параллельно. Если для решения задачи необходимо параллельно обрабатывать отдельные элементы из большого набора данных, то первыми кандидатами станут новые возможности параллельности в .NET Framework 4: Parallel.ForEach и Parallel LINQ (PLINQ)

Parallel.ForEach


Класс Parallel содержит метод ForEach, представляющий собой многопоточную версию обычного цикла foreach в C#. Подобно обычному foreach, Parallel.ForEach выполняет итерации над перечислимыми данными (enumerable), но с использованием множества потоков. Одна из более часто используемых перегрузок Parallel.ForEach выглядит следующим образом:

public static ParallelLoopResult ForEach<TSource>(
			 IEnumerable<TSource> source,
			 Action<TSource> body)

Ienumerable указывает на последовательность, по которой нужно выполнить итерации, а Action body задает делегат, вызываемый для каждого элемента. Полный список перегрузок Parallel.ForEach можно найти здесь.

PLINQ


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

Выполнение независимых операций


Читать дальше →

Стивен Вольфрам: кажется, мы близки к пониманию фундаментальной теории физики, и она прекрасна

Reading time70 min
Views387K
В продолжение моего поста про вычислимую Вселенную я хочу представить вам свой перевод статьи Стивена Вольфрама, созданной в рамках его проекта The Wolfram Physics Project.


Неожиданное открытие


За прошедшие несколько веков произошел настоящий прорыв в наших знаниях о принципах работы окружающего нас мира. Но несмотря на это, у нас все еще нет фундаментальной теории физики, и мы все так же не имеем ответа на вопрос о том, как именно работает наша Вселенная. Я занимаюсь этой темой уже порядка 50-и лет, но только в последние несколько месяцев все кусочки пазла наконец-то начали складываться вместе. И получающаяся картина оказалась гораздо прекрасней, чем все, что я только мог себе представить.
Читать дальше →

Вы и ваша работа *

Reading time40 min
Views819K
Длинный материал. Время чтения – около 40 минут.

image

Доктор Ричард Хэмминг, профессор морской школы Монтерея в штате Калифорния и отставной учёный Bell Labs, прочёл 7 марта 1986 года очень интересную и стимулирующую лекцию «Вы и ваши исследования» переполненной аудитории примерно из 200 сотрудников и гостей Bellcore на семинаре в серии коллоквиумов в Bell Communications Research. Эта лекция описывает наблюдения Хэмминга в части вопроса «Почему так мало учёных делают значительный вклад в науку и так многие оказываются в долгосрочной перспективе забыты?». В течение своей более чем сорокалетней карьеры, тридцать лет которой прошли в Bell Laboratories, он сделал ряд прямых наблюдений, задавал учёным очень острые вопросы о том, что, как, откуда, почему они делали и что они делали, изучал жизни великих учёных и великие достижения, и вёл интроспекцию и изучал теории креативности. Эта лекция о том, что он узнал о свойствах отдельных учёных, их способностях, чертах, привычках работы, мироощущении и философии.
Читать дальше →

GetHashCode() и философский камень, или краткий очерк о граблях

Reading time5 min
Views10K

Казалось бы, что тема словарей, хэш-таблиц и всяческих хэш-кодов расписана вдоль и поперек, а каждый второй разработчик, будучи разбужен от ранней вечерней дремы примерно в 01:28am, быстренько набросает на листочке алгоритм балансировки Hashtable, попутно доказав все свойства в big-O нотации.

Возможно, такая хорошая осведомленность о предмете нашей беседы, может сослужить и плохую службу, вселяя ложное чувство уверенности: "Это ж так просто! Что тут может пойти не так?"

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

Не переключайтесь

С нуля до автоматизации контейнеров за 7 минут

Reading time6 min
Views3.4K

В статье ранее (на португальском) я рассказал, как создать полнофункциональный бэкенд GraphQL, используя только образ Docker и файл конфигурации. Все это можно найти на сайте Azure. А сейчас давайте поговорим о том, как автоматизировать развертывания, созданные для нашего хостинга, и обновления нашей серверной части!


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


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


Вот почему мы будем использовать GitHub Actions


Читать дальше →

Трагедия общин в реальном мире или купонная лихорадка-2

Reading time6 min
Views110K
Вы знаете, что такое трагедия общин? Это термин из теории игр, ситуация, когда участники игры излишне потребляя какой-либо ресурс, вредят и себе и остальным. Но в то же время, одиночный участник, не потребляя ресурс, не получит выигрыша вообще, в то время как потребление ресурса практически не сократится — остальные потребители-то не поменяют свое поведение. Ничего не напоминает?

Конечно, недавний ажиотаж с купонами для Ebay.
Читать дальше →

JAMstack: Как создать свой блог используя Gatsby + Contentful + Netlify

Reading time7 min
Views39K


Вы уже слышали о новом подходе JAMstack? Возможность писать веб-приложения на любимом фреймворке, управлять контентом из админ панели, а на выходе получать полностью валидные HTML-страницы построенные согласно с самыми последними рекомендациями SEO, PWA и a11y.


Интересно? Тогда вот список рассматриваемых вопросов в этой статье:


  • Что это за новый стек и зачем он нужен?
  • Как запустить базовое приложение используя Gatsby?
  • Работа с Contentful и создание первой порции данных
  • Как связать Contentful и Gatsby используя GraphQL?
  • Настроить автоматический деплоймент используя Netlify
Читать дальше →

Я 20 лет наслаждаюсь разнообразием архитектур и хочу поделиться мыслями

Reading time8 min
Views23K


Сначала хотел написать комментарий к статье "Я десять лет страдал от ужасных архитектур в C#...", но понял две вещи:

  1. Слишком много мыслей, которыми хочется поделиться.
  2. Для такого объёма формат комментария неудобен ни для написания, ни для прочтения.
  3. Давно читаю Хабр, иногда комментирую, но ни разу не писал статей.
  4. Я не силён в нумерованных списках.

Disclaimer: я не критикую @pnovikov или его задумку в целом. Текст качественный (чувствуется опытный редактор), часть мыслей разделяю. Архитектур много, но это нормально (да, звучит как название корейского фильма). 

Однако давайте по порядку. Сначала моё мнение о том, что влияет на архитектуру, потом про спорные моменты в статье об «исправлении архитектур». Ещё расскажу о том, что у нас хорошо работает — может, пригодится кому-нибудь.
Читать дальше →

Введение в технику оптимизации циклов

Reading time4 min
Views58K
Большая часть времени исполнения программы приходится на циклы: это могут быть вычисления, прием и обработка информации и т.д. Правильное применение техник оптимизации циклов позволит увеличить скорость работы программы. Но прежде, чем приступать к оптимизациям необходимо выделить «узкие» места программы и попытаться найти причины падения быстродействия.
Читать дальше →

Открытый веб-интерфейс для .NET (OWIN)

Reading time6 min
Views15K
Привет, Хабр! ASP.NET Core поддерживает открытый веб-интерфейс для .NET (OWIN), а OWIN позволяет отвязывать веб-приложения от веб-серверов. Он определяет стандартный способ использования связующего ПО при обработке запросов и соответствующих ответов. Приложения ASP.NET Core и связующее ПО совместимы с приложениями, серверами и связующим ПО на базе OWIN. Подробнее об этой паре читайте под катом.


Читать дальше →

Принципы SOLID в картинках

Reading time4 min
Views502K


Если вы знакомы с объектно-ориентированным программированием, то наверняка слышали и о принципах SOLID. Эти пять правил разработки ПО задают траекторию, по которой нужно следовать, когда пишешь программы, чтобы их проще было масштабировать и поддерживать. Они получили известность благодаря программисту Роберту Мартину.

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

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

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

Ну, приступим.
Читать дальше →

Hyper-V для разработчиков под Windows 10

Reading time6 min
Views70K
Hyper-V более известен как технология виртуализации серверов; однако, начиная с Windows 8, он также доступен в клиентской операционной системе. В Windows 10 мы значительно улучшили работу, сделав Hyper-V отличным решением для разработчиков и ИТ-специалистов.
 
Microsoft Hyper-V, кодовое название Viridian, — это нативный (тип 1) гипервизор, который, в отличие от VMware Workstation, VirtualBox и других гипервизоров типа 2, работает непосредственно на оборудовании. Впервые он был выпущен в Windows Server 2008 и позволяет запускать виртуальные машины в системах x86-64.

Hyper-V позволяет разработчикам быстро разгонять виртуальные машины для разработки на Windows 10 с превосходной производительностью, но он также используется в нескольких других функциях разработки в качестве серверной технологии, например, в таких как эмулятор Android, подсистема Windows для Linux 2 (WSL2) или контейнеры Docker. В этой статье мы кратко рассмотрим, как Hyper-V в Windows 10 может помочь разработчикам.
Читать дальше →

Как перезапустить закон Мура программными методами. Ускорение софта в тысячи раз

Reading time8 min
Views56K
Профессор Никлаус Вирт был прав. Создатель языка Pascal, соавтор технологии структурного программирования, лауреат премии Тьюринга в 1995 году заметил:

«Замедление программ происходит куда быстрее, чем ускорение компьютеров»


С тех пор это высказывание считается законом Вирта. Он фактически нивелирует закон Мура, согласно которому количество транзисторов в процессорах удваивается примерно с 1965 года. Вот что пишет Вирт в статье «Призыв к стройному софту»:

«Около 25 лет назад интерактивный текстовый редактор умещался всего в 8000 байт, а компилятор в 32 килобайта, тогда как их современные потомки требуют мегабайтов. Стало ли всё это раздутое программное обеспечение быстрее? Нет, совсем наоборот. Если бы не в тысячу раз более быстрое железо, то современное программное обеспечение было бы совершенно непригодным».

С этим трудно не согласиться.
Читать дальше →

Небольшой обзор SIMD в .NET/C#

Reading time11 min
Views26K

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

Читать дальше →

Барьеры памяти и неблокирующая синхронизация в .NET

Reading time7 min
Views60K

Введение


В этой статье я хочу рассказать об использовании некоторых конструкций, применяющихся для осуществления неблокирующей синхронизации. Речь пойдёт о ключевом слове volatile, функциях VolatileRead, VolatileWrite и MemoryBarrier. Мы рассмотрим, какие проблемы вынуждают нас воспользоваться этими языковыми конструкциями и варианты их решения. При обсуждении барьеров памяти вкратце рассмотрим модель памяти .NET.
Читать дальше →

Закулисье. Как рождаются курсы?

Reading time10 min
Views6.8K

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


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


Как думаете, сколько ушло времени, сил и нервов, чтобы оно выглядело именно так?



Читать дальше →

F# меня испортил, или почему я больше не хочу писать на C#

Reading time13 min
Views66K

Раньше я очень любил C#


Это был мой основной язык программирования, и каждый раз, когда я сравнивал его с другими, я радовался тому, что в свое время случайно выбрал именно его. Python и Javascript сразу проигрывают динамической типизацией (если к джаваскрипту понятие типизации вообще имеет смысл применять), Java уступает дженериками, отстутствием ивентов, value-типов, вытекающей из этого карусели с разделением примитивов и объектов на два лагеря и зеркальными классами-обертками вроде Integer, отсутствием пропертей и так далее. Одним словом — C# клевый.


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


А потом я из любопытства попробовал F#.

Читать дальше →

Программный код и его метрики

Reading time19 min
Views135K
Измерения...
Одной из тем в программировании, к которым интерес периодически то появляется, то пропадает, является вопрос метрик кода программного обеспечения. В крупных программных средах время от времени появляются механизмы подсчета различных метрик. Волнообразный интерес к теме так выглядит потому, что до сих пор в метриках не придумано главного — что с ними делать. То есть даже если какой-то инструмент позволяет хорошо подсчитать некоторые метрики, то что с этим делать дальше зачастую непонятно. Конечно, метрики — это и контроль качества кода (не пишем большие и сложные функции), и «производительность» (в кавычках) программистов, и скорость развития проекта. Эта статья — обзор наиболее известных метрик кода программного обеспечения.
Читать дальше →

Information

Rating
Does not participate
Location
Санкт-Петербург и область, Россия
Registered
Activity