• Мне было стыдно за свой интерпрайз-код настолько, что я сделал свой велосипед. За него стыдно меньше

      image


      Это продолжение текста про архитектуры интерпрайз-систем. Рассуждения это хорошо, но какой в них толк без практического применения. Я покажу свой фреймворк в деле.


      Всё началось с того, что я рассказывал про проблематику проектирования приложений на .NET и ныл про нелёгкую жизнь в кровавом интерпрайзе. Затем я описал решение, которое сам придумал и реализовал — Reinforced.Tecture. То была теория, концептуальные рассуждения, визионёрство и снова нытьё. На этот раз о том, что на дворе 2020 год, а HKT в C# так и не завезли.


      Сегодня я продемонстрирую свой подход в действии на примере простенького проекта и покажу профиты, которые он даёт: от сокращения количества кода до автоматизации тестирования и оригинального подхода к документации. Как советовал старина Торвальдс: "Болтовня ничего не стоит, покажите мне код".

      Читать дальше →
    • Пока в вузах преподают люди, которые боятся кода и ненавидят разработку — никакого фундамента и базы мы не получим



        Когда новички интересуются, с чего начать изучать программирование, им часто советуют именно вузы — там настоящий computer science, фундаментальные знания и вообще дорога в нормальную жизнь. Не то что надергать в интернете знаний и бежать программировать с умным видом, чтобы потом набивать шишки и позориться перед людьми с «настоящими знаниями».

        Я может и не собирался писать код для передовых проектов NASA, но мне хотелось чтобы вуз помог мне научиться вникать в проблемы, которые изо дня в день решают профессиональные программисты. Нужно ли говорить, какую связь с реальностью я увидел в своем вузе? Думаю, все-таки нужно.
        Читать дальше →
      • В IT растет цензура, а мы не замечаем — разрешают только улыбаться и молчать

          У меня есть две статьи-интервью вот с такими странными абзацами. За обоими кроются неприятные истории для меня и для людей, про которых я писал.

          Читать далее
        • Мне надоело, что индустрия зависит от прихоти создателей языков программирования. Сообществу нужно больше власти

            image


            Я программирую 16 лет, и перебрал за это время много технических стеков. Изучать языки весело, в начале они всегда как новенькие игрушки, пока месяце на третьем не появляются первые проблемы.


            В языках вечно не хватает чего-то простого — лямбда-функций, именованных объединений, кастомных примитивных типов. Я лезу в обсуждения на Stack Overflow, в Github и вижу, как разрабы жалуются — им не хватает того же, чего и мне. Но обсуждения почти всегда заканчиваются одинаково: нужная фича не появится, потому что главный дизайнер языка и члены его команды нужной ее не считают.


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


            Но сейчас я понимаю — это полная чушь.

            Читать дальше →
          • Я десять лет страдал от ужасных архитектур в C# приложениях — и вот нашел, как их исправить


              Я второй десяток лет участвую в разработке приложений для бизнеса на .NET и каждый раз вижу одни и те же проблемы — быдлокод и беспорядок. Месиво из сервисов, UoW, DTO-шек, классов-хелперов. В иных местах и прямой доступ в базу данных руками, логика в статических классах, километровые портянки конфигурации IoC.


              Когда я был молодым и резвым мидлом — я тоже так писал. Потом бил кулаком в стену с криками: "Хватит! В следующий раз сделаю по-другому". Следующий раз действительно начинался "по-другому" — с холодной головой и строгим подходом к архитектуре — а на выходе все равно получалась та же субстанция, лучше на пару миллиметров.


              Однако, эволюция — беспощадная штука: моя последняя система показалась мне более-менее близкой к идеалу. Сложность не сильно росла, скорость разработки не падала довольно долго, в систему худо-бедно въезжают новые сотрудники. Эти результаты я взял за основу, улучшил и теперь анонсирую вам свою новую разработку: Reinforced.Tecture.

              Читать дальше →
            • Парсите, а не валидируйте

              • Translation

              Еще в декабре мне попалась одна совершенно замечательная статья на английском, посвящённая использованию системы типов языка для более широкого класса задач, для повышения надежности приложений и простоты рефакторинга. К сожалению, в тот момент я был слишком занят написанием статей по ФП, которые крайне важно было написать, пока свежи воспоминания. Но теперь, когда с этой задачей я справился, наконец дошли руки перевести эту замечательную заметку. Оригинальный язык примеров — Хаскель, но я решил переписать их на раст, для более широкого охвата аудитории. Однако язык тут совершенно неважен, советы этой статьи я применяю в ежедневной разработке на вполне себе "приземлённых" C# и TypeScript, так что если вы просто стараетесь писать надёжный и поддерживаемый код, то, вне зависимости от языка, статья вам будет в тему.


              Благодарю за вычитку и помощь в переводе Hirrolot, funkill и andreevlex


              Читать дальше →
            • Тесты на статистическую значимость — это чудовищно ущербный инструмент

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

                Вот мне хочется, чтобы кнопка была зеленой, просто потому что мне так больше нравится. А дизайнер говорит — «неважно, АБ-тесты показали, что на кнопку поносного цвета кликают на 0,2% чаще». Господи, дружище, ты десять лет прокачивал свой вкус и опыт, чтобы что? Чтобы наш продукт напоминал птичью какашку? Но бизнес говорит — раз есть цифры, значит мы обмажем этим все.

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

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

                Читать дальше →
                • +17
                • 4.7k
                • 5
              • Если ты видишь статью, что язык Х быстрее, чем язык Y – можешь закрывать статью



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

                  Ну и уж точно — если разработчик — специалист в области перфоманса, он будет топить за все эти вещи, даже если они неверны.

                  Естественно, все это чушь, но не мне вам об этом говорить. Поэтому к нам в подкаст пришел Андрей Акиньшин — разработчик и математик, кандидат физико-математических наук, мейнтейнер BenchmarkDotNet и perfolizer, автор книги Pro .NET Benchmarking и просто очень, очень крутой инженер.
                  Читать дальше →
                • Я мечтал вырваться из Узбекистана и стать крутым разрабом. Больше не хочу — но разработка не отпускает



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

                    На меня никогда не давили с учебой. Говорили, отучись и иди работай, не важно кем, главное без дела не сиди. Я не сидел — я рубил в игры, прям дико, даже операцию на глаз пришлось делать. Начал зависать в прокуренных клубах, и одобрение пацанов поднял тем, что хорошо играл в варчик. Потом стал деградировать на районе. Среди друзей никогда не было ни одного разработчика — но это мне в них скорее нравится. Никаких клубов по интересам, даже рэпером никто не хотел стать — просто обычные ребята.
                    Читать дальше →
                  • Мучают ли Андрея Бреслава ошибки в дизайне Kotlin, которые уже нельзя исправить// Мы обречены #6



                      Андрей Бреслав почти не говорит про Kotlin в последнее время. Два раза я звал его на интервью, и оба раза он просил не обсуждать технические вопросы.

                      С одной стороны — мне досадно. Я понимаю, что их задавали все остальные — но я же не задавал. Я, наверное, последний чисто гуманитарный журналист в России, которому хочется рассказывать людям об инженерной стороне индустрии, а не только о поднятых миллионах успешных бизнесменов; и который не будет задавать вот это жалкое “ну объясни моим слушателям на пальцах, как это работает, чтобы они поняли”.

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

                      Первое интервью я взял у Бреслава год назад, но так его и не выпустил. На второе позвали в подкаст вместе с fillpackart. Он порефлексировал об успехах и ошибках в Kotlin, поборолся с нашими стереотипами о полиамории, выслушал жалобы на жизнь и приложил мощной лекцией с оправданием динамической типизации.
                      Читать дальше →
                    • Памятка по работе с Canvas API

                      • Tutorial


                      Доброго времени суток, друзья!

                      Данная статья представляет собой небольшую подборку примеров работы с Canvas API, к которой удобно обращаться при необходимости вспомнить изученный материал.

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

                      Для меня это также своего рода промежуточный итог в изучении холста.

                      Код разбит на отдельные блоки-песочницы, которые для удобства чтения помещены под «кат».

                      Парочка важных моментов.

                      Ширину и высоту холста лучше определять с помощью атрибутов:

                      <canvas width="300" height="300"></canvas>
                      

                      Если мы хотим, чтобы холстом была вся область просмотра, то делаем следующее:

                      const width = canvas.width = innerWidth
                      const height = canvas.height = innerHeight
                      

                      Холст и двумерный контекст рисования я обычно определяю следующим образом:

                      const canvas = document.querySelector('canvas')
                      // не путать с объектом jQuery
                      const $ = canvas.getContext('2d')
                      

                      Довольно слов.
                      Читать дальше →
                      • +20
                      • 7.7k
                      • 2
                    • Ты провалил на собесе один теоретический вопрос, и на тебе поставили крест. Это нормально? // Мы обречены #3



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

                        Снова браться за мелкие заказы с апворка Паша не стал и впервые задумался о релокации. Так он оказался в Минске — там он собирает команду, чтобы открыть локальный офис израильской компании.

                        Паша пришёл к нам на подкаст, обсудил с нами найм и индустрию и даже устроил что-то вроде показательного собеса (которое пошло не совсем хорошо).
                        Читать дальше →
                      • JavaScript в 3D: введение в Three.js

                        Привет, Хабр! Представляю Вашему вниманию перевод статьи «JavaScript in 3D: an Introduction to Three.js» автора Брета Кемерона (Bret Cameron).

                        Введение


                        Three.js это мощный инструмент. Он помогает использовать 3D дизайн в браузере с приемлемой производительностью. По началу Three.js может быть сложным, особенно если вы никогда не погружались в мир 3D программирования ранее.

                        У меня есть базовый опыт работы с игровым движком Unity и C#, но все равно многие концепции оказались новыми для меня. Я пришел к выводу, что сейчас совсем мало ресурсов для начинающих разработчиков, поэтому я и решил написать эту статью. В ней мы рассмотрим основные элементы Three.js сцены от полигональных сеток и материалов до геометрии, загрузчиков и много другого.
                        Читать дальше →
                      • Теория программирования: Вариантность

                        Здравствуйте, меня зовут Дмитрий Карловский и я… хочу поведать вам о фундаментальной особенности систем типов, которую зачастую или вообще не понимают или понимают не правильно через призму реализации конкретного языка, который ввиду эволюционного развития имеет много атавизмов. Поэтому, даже если вы думаете, что знаете, что такое "вариантность", постарайтесь взглянуть на проблематику свежим взглядом. Начнём мы с самых основ, так что даже новичок всё поймёт. А продолжим без воды, чтобы даже профи было полезно для структурирования своих знаний. Примеры кода будут на псевдоязыке похожем на TypeScript. Потом будут разобраны подходы уже нескольких реальных языков. А если же вы разрабатываете свой язык, то данная статья поможет вам не наступить на чужие грабли.


                        а вдруг там лис?

                        Читать дальше →
                      • ML.NET: впечатления от Model Builder и не только

                          Доброго времени суток и мое почтение, читатели Хабра!


                          Предыстория


                          У нас на работе принято обмениваться интересными находками в командах разработки. На очередной встрече, обсуждая будущее .NET и .NET 5 в частности, мы с коллегами заострили внимание на видении унифицированный платформы с этой картинки:
                          image
                          На ней показано, что платформа объединяет DESKTOP, WEB, CLOUD, MOBILE, GAMING, IoT и AI. Мне пришла в голову идея провести беседу в формате небольшого доклада + вопросов/ответов по каждой теме на следующих встречах. Ответственный за ту или иную тему предварительно готовится, вычитывает информацию об основных новшествах, пробует что-то реализовать с помощью выбранной технологии, а затем делится с нами своими мыслями и впечатлениями. В итоге все получают реальный отзыв об инструментарии из проверенного источника из первых уст — очень удобно, учитывая то, что самому попробовать и поштурмить все темы может быть не сподручно, банально руки не дойдут.


                          Поскольку я некоторое время активно интересуюсь машинным обучением в качестве хобби (и иногда использую для небизнесовых задачек в работе), мне досталась тема AI & ML.NET. В процессе подготовки я наткнулся на замечательные инструменты и материалы, к своему удивлению обнаружил, что про них очень мало информации на Хабре. Ранее в официальном блоге Microsoft писали про релиз ML.Net, и Model Builder в частности. Я бы хотел поделиться тем, как вышел на него и какие получил впечатления от работы с ним. Статья больше про Model Builder, чем про ML в .NET в целом; мы постараемся посмотреть на то, что предлагает MS среднему .NET-разработчику, но глазами подкованного в ML человека. Постараюсь при этом держать баланс между пересказыванием туториала, совсем уж разжевыванием для новичков и описанием деталей для ML-специалистов, которым почему-то потребовалось прийти в .NET.

                          Читать дальше →
                          • +16
                          • 6.8k
                          • 3
                        • Биорадиолокатор, картонный беспилотник и летающая сосиска — Никита Калиновский о хороших и плохих поисковых технологиях



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

                            Организаторы поставили колоссально сложную задачу — найти двух человек на территории в 314 км2 за 10 часов. Идеи были разные, но (спойлер) не справился никто. Одним из технических экспертов конкурса выступил Никита Калиновский. Я обсудил с ним участников, их решения, а также расспросил, какие еще идеи запомнились на протяжении всех этапов конкурса.

                            Если вы уже прочитали репортаж о финале, некоторые реплики встретятся вам и здесь. Это просто полное интервью с минимальным редактированием.
                            Читать дальше →
                          • «Моя мечта — видеть человека сквозь деревья» — основатель «Лиза Алерт» о современных технологиях поиска



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

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

                              Одним из экспертов конкурса был Григорий Сергеев, основатель поискового отряда «Лиза Алерт». Во время финала я расспросил его о решениях команд и применении технологий не в конкурсных условиях, а в реальных поисках.
                              Читать дальше →
                            • DeepFake своими руками [часть 1]

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

                                Меня данная технология заинтересовала недавно. Впервые о ней я узнал из доклада одного из спикеров на “AI Conference 2018”. Там демонстрировалось видео, в котором по аудиозаписи алгоритм сгенерировал видео с обращением Барака Обамы. Ссылка на подборку видео созданных с помощью этой технологии. Результаты меня сильно вдохновили, и мною было принято решение лучше разобраться с данной технологией, чтобы в будущем противодействовать ей. Для этого я решил написать DeepFake на языке C#. В итоге получил такой результат.

                                image

                                Приятного чтения!
                                Читать дальше →
                              • Как трое одноклассников стали партнерами Facebook — история Revealbot

                                  image

                                  Реклама может казаться неприятной, но это — денежное сердце ИТ-индустрии. Google, Facebook и другие гиганты живут именно за счет нее. Рекламироваться вынуждены даже блокировщики рекламы.

                                  Тысячи стартапов, появляющихся каждый год, зависят от рекламы. Акционеры Facebook, Google и других вкладывают сотни тысяч венчурных инвестиций в маленькие продукты, и даже если те не выстрелят — как минимум половину денег потратят на рекламу в тех же Facebook и Google, обеспечивая безостановочный оборот денег.

                                  И создать продукт, который станет новым успешным словом в рекламе — это как создать еще одну соцсеть в 2019. Тем удивительнее, что российский стартап Revealbot смог это сделать. CEO Михаил Трофимов, CTO Михаил Салосин и CCO Искандер Мусаев рассказали мне свою историю — как у них получилось.

                                  Revealbot получил на «Моём круге» среднюю оценку 4,9 от своих сотрудников, которые выше всего оценили комфортную рабочую атмосферу в команде, связь с топ-менеджментом и то, что компания делает мир лучше.
                                  Читать дальше →
                                  • +18
                                  • 4.7k
                                  • 2
                                • «Освоить F# не сложнее, чем Entity Framework или WPF»: интервью со Скоттом Влашиным



                                    Кого расспрашивать про F#, как не человека, посвятившего этому языку подробный сайт? Скотт Влашин создал ресурс «F# for Fun and Profit», знакомый многим хабравчанам: на Хабре переводили оттуда и серию статей «Функциональное мышление», и статью «Железнодорожно-ориентированное программирование».

                                    А в ноябре он выступит в Москве на нашей конференции DotNext с докладом «The power of composition». И в преддверии этого выступления мы расспросили его про F# и вообще функциональное программирование.
                                    Читать дальше →