• 5 ошибок начинающего лида

      У каждого тимлида есть своё кладбище сотрудников управленческих ошибок. Каждый день публикуются новые статьи «5 ошибок начинающего разработчика», «7 примеров того, как не надо управлять процессами», «100 и 1 способ укладываться в сроки». И это круто!


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


      Читать дальше →
    • Привычка делать сейчас

      • Translation

      Привычка делать сейчас Нила Фиоре — это самоучитель о понимании и преодолении прокрастинации.


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


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

      Читать дальше →
    • N+7 полезных книг

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



        Думай медленно, решай быстро — Даниэль Канеман
        Это самое волшебное, что случалось за последние годы в плане гиковой литературы. Эта штука последовательно открывает когнитивные искажения и учит настраивать мышление. При этом увлекательно. Вообще, подход к тому, что мышление — это набор техник, которые можно тренировать и оттачивать, он, наверное, правильнее подхода «это шаманство». Канеман в отличие от следующей в списке книги, показывающей особенности реверсивного мышления, не даёт новых техник — но показывает, где и какие ошибки мы совершаем при обычных процессах. Такой серьёзный дебаг мозга.
        Читать дальше →
      • Entity Framework 6 with Full-Text Search via LINQ

          Хочу поделиться своим костылем в решении довольно банальной проблемы: как подружить полнотекстовый поиск MSSQL c Entity Framework. Тема очень узкоспециальная, но как мне кажется, актуальна на сегодняшний день. Интересующихся прошу под кат.

          Читать дальше →
          • +13
          • 3.5k
          • 5
        • Нормализация данных в распределенной БД, микросервисах и ERP

            Привет, Хабр!

            Эта маленькая заметка родилась в процессе обсуждения статьи «Распределенные монолиты...», а поскольку тема требует дальнейшего раздумья — я решил зафиксировать ее у себя в блоге. Автор статьи фактически описывает распределенную базу данных, доказывая, что единственнo правильной структурой хранения в ней является Журнал Событий. Аргументы приблизительно следующие:

            • Поскольку событие всегда локализовано в пространстве / времени, оно может хранить все данные в себе самом (иногда в виде ссылок на более ранние события), что делает событие сериализуемым, увеличивает локальность, уменьшает связность и т.д.
            • Событие, однажды случившись, больше не изменяется (любые уточнения оформляются другими событиями), что уменьшает репликационный трафик.
            • Формат хранения события можно более-ли-менее унифицировать, и отвязать от конкретной предметной области.
            • Журналы событий можно относительно безболезненно разделять / сливать, можно хранить разные типы событий на разных нодах, то есть по сути мы говорим о распределенной БД.
            • События упрорядочены по времени, и эта последовательность отражает также причинно-следственную связь (текущее событие не может ссылаться на более позднее).
            • При записи события не требуется транзакционно обновлять другие данные (на самом деле требуется, но в ограниченном числе случаев, например, баланс абонента в биллинговой системе должен быть мгновенно-актуальным, необходимо обновлять счетчики ссылок, и т.д.).
            • Отчетность может быть построена непосредственно по журналу событий, без необходимости преобразовывать данные в нормализованный вид.
            Читать дальше →
          • .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1

              Публикую на Хабр оригинал статьи, перевод которой размещен в блоге Codingsight.

              Необходимость делать что-то асинхронно, не дожидаясь результат здесь и сейчас, или разделять большую работу между несколькими выполняющими ее единицами была и до появления компьютеров. С их появлением такая необходимость стала очень ощутимой. Сейчас, в 2019, набирая эту статью на ноутбуке с 8 ядерным процессором Intel Core, на котором параллельно этому работает не одна сотня процессов, а потоков и того больше. Рядом, лежит уже немного потрепанный, купленный пару лет назад телефон, у него на борту 8 ядерный процессор. На тематических ресурсах полно статей и видео, где их авторы восхищаются флагманскими смартфонами этого года куда ставят 16ти-ядерные процессоры. MS Azure предоставляет менее чем за 20$/час виртуальную машину со 128 ядерным процессором и 2 TB RAM. К сожалению невозможно извлечь максимум и обуздать эту мощь не умея управлять взаимодействием потоков.
              Читать дальше →
              • +34
              • 12.4k
              • 5
            • Оптимизация программ под Garbage Collector

                Не так давно на Хабре появилась прекрасная статья Оптимизация сборки мусора в высоконагруженном .NET сервисе. Эта статья очень интересна тем, что авторы, вооружившись теорией сделали ранее невозможное: оптимизировали свое приложение, используя знания о работе GC. И если ранее мы не имели ни малейшего понятия, как этот самый GC работает, то теперь он нам представлен на блюдечке стараниями Конрада Кокоса в его книге Pro .NET Memory Management. Какие выводы почерпнул для себя я? Давайте составим список проблемных областей и подумаем, как их можно решить.


                На недавно прошедшем семинаре CLRium #5: Garbage Collector мы проговорили про GC весь день. Однако, один доклад я решил опубликовать с текстовой расшифровкой. Это доклад про выводы относительно оптимизации приложений.


                Читать дальше →
                • +40
                • 5.7k
                • 4
              • Быстрорастворимое проектирование

                  Люди учатся архитектуре по старым книжкам, которые писались для Java. Книжки хорошие, но дают решение задач того времени инструментами того времени. Время поменялось, C# уже больше похож на лайтовую Scala, чем Java, а новых хороших книжек мало.

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

                  Эта статья является расшифровкой моего доклада с конференции DotNext 2018 Moscow. Кроме текста, под катом есть видеозапись и ссылка на слайды.


                  Читать дальше →
                • Доступ к данным в многопользовательских приложениях

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

                    1. ограничение доступа к данным для пользователей не прошедших аутентификацию
                    2. ограничение доступа к данным для аутентифицированных, но не обладающих необходимыми привелегиями пользователей
                    3. предотвращение несанкционированного доступа с помощью прямых обращений к API
                    4. фильтрация данных в поисковых запросах и списковых элементах UI (таблицы, списки)
                    5. предотвращение изменения данных, принадлежащих одному пользователю другими пользователями

                    Сценарии 1-3 хорошо описаны и обычно решаются с помощью встроенных средств фреймворков, например role-based или claim-based авторизации. А вот ситуации, когда авторизованный пользователь может по прямому url получить доступ к данным «соседа» или совершить действие в его аккаунте случаются сплошь и рядом. Происходит это чаще всего из-за того что программист забывает добавить необходимую проверку. Можно понадеяться на код-ревью, а можно предотвратить такие ситуации применив глобальные правила фильтрации данных. О них и пойдет речь в статье.
                    Читать дальше →
                  • ASP.NET Core: Создание справочных страниц веб-API ASP.NET с помощью Swagger

                    • Translation
                    • Tutorial
                    При создании высоконагруженных приложений бывает сложно разобраться в различных API. Сформировать качественную документацию и справочные страницы в рамках веб-API посредством Swagger с интеграцией Swashbuckle .NET Core так же просто, как добавить пару пакетов NuGet и изменить Startup.cs.


                    Читать дальше →
                    • +22
                    • 19.1k
                    • 2
                  • Как стать Java разработчиком за 1,5 года

                      Меня зовут Сергей, мне 40 лет и сейчас я работаю Java разработчиком в немецкой компании. Мы занимаемся разработкой программного обеспечения для пивоварен оценки финансовых и кредитных рисков. Это моя первая работа в качестве разработчика. До этого я работал в сфере IT-поддержки и системной интеграции. Первого февраля 2019 г. закончился мой шестимесячный испытательный срок, и у меня на руках бессрочный контракт. Я хочу поделиться своим опытом, как можно самостоятельно выучить Java так, чтобы получить работу.



                      Это мой рабочий стол. Пить пиво в рабочее время у нас разрешено, мы же в Германии.


                      Моя первая статья: «IT-эмиграция с семьей. И особенности поиска работы в маленьком городе Германии, когда ты уже там»

                      Читать дальше →
                    • C# является языком низкого уровня?

                      • Translation
                      Я большой поклонник всего, что делает Фабьен Санглард, мне нравится его блог, и я прочитал обе его книги от корки до корки (о них рассказывали в недавнем подкасте Hansleminutes).

                      Недавно Фабьен написал отличный пост, где расшифровал крошечный рейтрейсер, деобфусцировав код и фантастически красиво объяснив математику. Я действительно рекомендую найти время, чтобы прочитать это!

                      Но это заставило меня задуматься, можно ли перенести этот код C++ на C#? Поскольку на основной работе мне в последнее время приходится довольно много писать на C++, я подумал, что могу попробовать.

                      Но что более важно, я хотел получить лучшее представление о том, является ли C# языком низкого уровня?
                      Читать дальше →
                    • Дзен Эрланга [и Эликсира — прим. переводчика]

                      • Translation

                      Введение от переводчика


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


                      Ещё от переводчика

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


                      Ссылки на понятия и комментарии от меня (переводчика) расположены в квадратных скобках [] и снабжены указателем "прим. переводчика".


                      Если вы найдёте какие-то части перевода недостаточно корректными, особенно в плане терминов, или столкнётесь с любыми другими ошибками — дайте мне, пожалуйста, знать, с удовольствием исправлю.


                      Отдельное спасибо Яну Гравшину за помощь в вычитке и редактуре текста.


                      Это свободная расшифровка (или долгий парафраз?) моей презентации на организованной Genetec конференции ConnectDev'16.


                      001


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

                      Читать дальше →
                      • +26
                      • 4.8k
                      • 9
                    • Распределенные системы. Паттерны проектирования. Обзор книги

                      • Translation
                      Здравствуйте, коллеги. Сегодня мы публикуем перевод очередного обзора с сайта Бена Нейдела — этот сайт наверняка заинтересует вас и в оригинале. На сей раз мы поговорим о книге "Распределенные системы. Паттерны проектирования", которая дополняет вышедшую у нас в начале этого года книгу "Осваиваем Kubernetes" и, в сущности, является аналогом GoF для проектирования распределенных систем.



                      Приятного чтения.
                      Читать дальше →
                      • +13
                      • 11.1k
                      • 7
                    • 7 Chrome-расширений для изучения английского



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

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



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

                          Причина очень проста. Звуки и звукообразование в разных языках отличается кардинально.
                          В японском языке отсутствует звук [l]. И на первых этапах изучения английского языка они заменяют его звуком [r]. Все потому, что в японском звук [r] ударный, а не вибрационный. Во время произношения язык прикасается к нёбу лишь на долю секунды, поэтому на выходе получается что-то среднее между знакомыми нам [р] и [л]. Именно поэтому сложно понять, что имеет в виду японец: «law» или «raw».

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

                          Нередко такие нюансы полностью меняют смысл предложения.
                          И вместо «I like this beach» («Мне нравится этот пляж») собеседник услышит «I like this bitch» («Мне нравится эта девушка с пониженной социальной ответственностью»).
                          В этой статье мы расскажем о 8 ошибках в произношении, которые часто встречаются у русскоговорящих, а также расскажем хитрости, которые помогут вам от них избавиться. Поехали.
                          Читать дальше →
                        • RabbitMQ против Kafka: два разных подхода к обмену сообщениями

                            В прошлых двух статьях мы рассказывали об IIoT — индустриальном интернете вещей — строили архитектуру, чтобы принимать данные от сенсоров, паяли сами сенсоры. Краеугольным камнем архитектур IIoT да и вообще любых архитектур работающих с BigData является потоковая обработка данных. В ее основе лежит концепция передачи сообщений и очередей. Стандартом работы с рассылкой сообщений сейчас стала Apache Kafka. Однако, для того, чтобы разобраться в ее преимуществах (и понять ее недостатки) было бы хорошо разобраться в основах работы систем очередей в целом, механизмах их работы, шаблонах использования и основной функциональности.



                            Мы нашли отличную серию статей, которая сравнивает функциональность Apache Kafka и другого (незаслуженно игнорируемого) гиганта среди систем очередей — RabbitMQ. Эту серию статей мы перевели, снабдили своими комментариями и дополнили. Хотя серия и написана в декабре 2017 года, мир систем обмена сообщениями (и особенно Apache Kafka) меняется так быстро, что уже к лету 2018-го года некоторые вещи изменились.

                            Читать дальше →
                          • Результаты нового исследования: пересадка костного мозга может замедлять старение



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

                              Как оказалось, после пересадки у пожилых животных улучшилась память и общие когнитивные способности. Сравнение проводилось по контрольной группе мышей, состоявшей из мышей аналогичного возраста, которые не подвергались никаким модификациям.
                              Читать дальше →
                              • +25
                              • 7.7k
                              • 8
                            • Domain-driven design: рецепт для прагматика


                                Почему к DDD обычно подходят не с той стороны? А с какой стороны надо? Какое отношение ко всему этому имеют жирафы и утконосы?

                                Специально для Хабра — текстовая расшифровка доклада «Domain-driven design: рецепт для прагматика». Доклад был сделан на .NET-конференции DotNext, но может пригодиться не только дотнетчикам, а всем интересующимся DDD (мы верим, вы осилите пару примеров кода на C#). Видеозапись доклада также прилагается.
                                Читать дальше →